DBA Data[Home] [Help]

PACKAGE BODY: APPS.ZX_API_PUB

Source


1 PACKAGE BODY zx_api_pub AS
2 /* $Header: zxifpubsrvcspubb.pls 120.337.12020000.5 2013/03/15 10:15:07 ssohal ship $ */
3 
4 /* ======================================================================*
5  | Global Data Types                                                     |
6  * ======================================================================*/
7 
8 G_PKG_NAME          CONSTANT VARCHAR2(30) := 'ZX_API_PUB';
9 G_MSG_UERROR        CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR;
10 G_MSG_ERROR         CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_ERROR;
11 G_MSG_SUCCESS       CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_SUCCESS;
12 G_MSG_HIGH          CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH;
13 G_MSG_MEDIUM        CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM;
14 G_MSG_LOW           CONSTANT NUMBER       := FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW;
15 G_LINES_PER_FETCH   CONSTANT NUMBER       := 1000;
16 
17 G_CURRENT_RUNTIME_LEVEL CONSTANT NUMBER       := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
18 G_LEVEL_UNEXPECTED      CONSTANT NUMBER       := FND_LOG.LEVEL_UNEXPECTED;
19 G_LEVEL_ERROR           CONSTANT NUMBER       := FND_LOG.LEVEL_ERROR;
20 G_LEVEL_EXCEPTION       CONSTANT NUMBER       := FND_LOG.LEVEL_EXCEPTION;
21 G_LEVEL_EVENT           CONSTANT NUMBER       := FND_LOG.LEVEL_EVENT;
22 G_LEVEL_PROCEDURE       CONSTANT NUMBER       := FND_LOG.LEVEL_PROCEDURE;
23 G_LEVEL_STATEMENT       CONSTANT NUMBER       := FND_LOG.LEVEL_STATEMENT;
24 G_MODULE_NAME           CONSTANT VARCHAR2(30) := 'ZX.PLSQL.ZX_API_PUB.';
25 
26 TYPE evnt_cls_rec_type is RECORD
27 ( event_class_code            VARCHAR2_30_tbl_type,
28   application_id              NUMBER_tbl_type,
29   entity_code                 VARCHAR2_30_tbl_type,
30   internal_organization_id    NUMBER_tbl_type,
31   precedence                  NUMBER_tbl_type
32 );
33 
34 l_evnt_cls evnt_cls_rec_type;
35 
36  /*Lock the rows for entire document*/
37  CURSOR lock_line_det_factors_for_doc(trx_rec IN event_class_rec_type) IS
38       SELECT *
39         FROM ZX_LINES_DET_FACTORS
40        WHERE application_id = trx_rec.application_id
41          AND entity_code    = trx_rec.entity_code
42          AND event_class_code = trx_rec.event_class_code
43        AND trx_id = trx_rec.trx_id
44       FOR UPDATE NOWAIT;
45 
46 
47 /***********************
48   PRIVATE PROCEDURES
49 ************************/
50 /* =======================================================================*
51  | Overloaded FUNCTION  determine_effective_date :  LEASE MANAGEMENT      |
52  | Created since wasnt sure if the existing determine_effective_Date was  |
53  | being used by products. Although cookbook doesnt mention it, didnt want|
54  | take a chance since its too will create chaos should there be invalids |
55  | now after xbuiild1                                                     |
56  * =======================================================================*/
57 
58  FUNCTION determine_effective_date
59  ( p_transaction_date      IN  DATE,
60    p_related_doc_date      IN  DATE,
61    p_adjusted_doc_date     IN  DATE,
62    p_provnl_tax_det_date   IN  DATE
63  ) RETURN DATE IS
64 
65  BEGIN
66    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
67       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||'determine_effective_date.BEGIN','ZX_API_PUB: DETERMINE_EFFECTIVE_DATE()+');
68    END IF;
69 
70    IF p_related_doc_date IS NOT NULL THEN
71      return(p_related_doc_date);
72    ELSIF p_provnl_tax_det_date IS NOT NULL THEN
73       return(p_provnl_tax_det_date);
74    ELSIF p_adjusted_doc_date IS NOT NULL THEN
75       return(p_adjusted_doc_date);
76    ELSIF p_transaction_date IS NOT NULL THEN
77       return(p_transaction_date);
78    ELSE
79       return(SYSDATE);
80    END IF;
81 
82     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
83       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||'determine_effective_date.END','ZX_API_PUB: DETERMINE_EFFECTIVE_DATE()-');
84     END IF;
85 
86  END determine_effective_date;
87 
88 -- Added following procedure as a fix for Bug 5159017
89 
90 /* =============================================================*
91  | PROCEDURE    Update total_inc_tax_amt if present            |
92  * ============================================================*/
93 
94  PROCEDURE update_total_inc_tax_amt (
95  p_event_class_rec    IN  event_class_rec_type ,
96  x_return_status      OUT NOCOPY VARCHAR2
97  )IS
98    l_trx_line_tbl          ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl%TYPE;
99    l_count                 BINARY_INTEGER := 0;
100    l_api_name              CONSTANT VARCHAR2(30) := 'update_total_inc_tax_amt';
101   BEGIN
102      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
103        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: update_total_inc_tax_amt(+)');
104      END IF;
105 
106      x_return_status := FND_API.G_RET_STS_SUCCESS;
107 
108     IF p_event_class_rec.prod_family_grp_code = 'P2P' THEN
109 
110        FOR i IN nvl(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.application_id.FIRST,0) .. nvl(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.application_id.LAST,-99)
111 
112        LOOP
113 
114           IF (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_amt_included_flag(i) = 'Y')
115            AND (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.total_inc_tax_amt(i) IS NOT NULL) THEN
116              l_count := l_count + 1;
117              l_trx_line_tbl.trx_line_id(l_count) := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(i);
118              l_trx_line_tbl.trx_level_type(l_count) := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(i);
119              l_trx_line_tbl.total_inc_tax_amt(l_count) := ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.total_inc_tax_amt(i);
120           END IF;
121 
122        END LOOP;
123 
124        IF l_count > 0 THEN
125 
126          FORALL j IN 1 .. l_count
127 
128              UPDATE zx_lines_det_factors
129              SET total_inc_tax_amt = l_trx_line_tbl.total_inc_tax_amt(j)
130              WHERE application_id = p_event_class_rec.application_id
131              AND   entity_code = p_event_class_rec.entity_code
132              AND   event_class_code = p_event_class_rec.event_class_code
133              AND   trx_id = p_event_class_rec.trx_id
134              AND   trx_line_id = l_trx_line_tbl.trx_line_id(j)
135              AND   trx_level_type = l_trx_line_tbl.trx_level_type(j);
136 
137         END IF;
138 
139     END IF;
140 
141     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
142       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',
143         'ZX_API_PUB: update_total_inc_tax_amt(-)'||' RETURN_STATUS = ' || x_return_status);
144     END IF;
145 
146 EXCEPTION
147   WHEN OTHERS THEN
148     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
149     IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
150        FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
151     END IF;
152 
153  END update_total_inc_tax_amt;
154 
155 /* =============================================================*
156  | PROCEDURE    set_ptnr_srvc_subscr_flag                       |
157  | Sets zx_global_structures_pkg.g_ptnr_srvc_subscr_flag. This  |
158  | will improve the performance of non-partner implementations  |
159  * ============================================================*/
160 
161  PROCEDURE set_ptnr_srvc_subscr_flag (
162  p_event_class_rec    IN  event_class_rec_type ,
163  x_return_status      OUT NOCOPY VARCHAR2
164  )IS
168         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'(+)');
165    l_api_name              CONSTANT VARCHAR2(30) := 'set_ptnr_srvc_subscr_flag';
166   BEGIN
167      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
169      END IF;
170 
171      x_return_status := FND_API.G_RET_STS_SUCCESS;
172 
173      BEGIN
174         SELECT 'Y'
175           INTO zx_global_structures_pkg.g_ptnr_srvc_subscr_flag
176           FROM zx_srvc_subscriptions zss
177          WHERE zss.enabled_flag = 'Y'
178            AND zss.prod_family_grp_code = nvl(p_event_class_rec.prod_family_grp_code, zss.prod_family_grp_code)
179            AND exists (select zru.regime_usage_id
180                          from zx_regimes_usages zru
181                         where zru.regime_usage_id = zss.regime_usage_id
182                           and zru.first_pty_org_id = nvl(p_event_class_rec.first_pty_org_id, zru.first_pty_org_id))
183            AND rownum       = 1;
184      EXCEPTION WHEN OTHERS THEN
185         zx_global_structures_pkg.g_ptnr_srvc_subscr_flag := 'N';
186      END;
187 
188      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
189         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
190                   'Setting zx_global_structures_pkg.g_ptnr_srvc_subscr_flag to : '|| zx_global_structures_pkg.g_ptnr_srvc_subscr_flag);
191      END IF;
192 
193      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
194         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME || ': ' || l_api_name||'(-)');
195      END IF;
196 
197  END set_ptnr_srvc_subscr_flag;
198 
199 
200 /* =============================================================*
201  | PROCEDURE    Perform Partner repository synchronization      |
202  * ============================================================*/
203 
204  PROCEDURE ptnr_sync_calc_tax (
205  p_event_class_rec    IN  event_class_rec_type ,
206  x_return_status      OUT NOCOPY VARCHAR2
207  )IS
208    l_sync_needed           BOOLEAN;
209    l_return_status         VARCHAR2(1);
210    l_event_class_rec       event_class_rec_type;
211    l_sync_with_prvdr_flag  ZX_LINES.sync_with_prvdr_flag%type; -- Bug 5131206
212    l_api_name              CONSTANT VARCHAR2(30) := 'ptnr_sync_calc_tax';
213   BEGIN
214      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
215         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'(+)');
216      END IF;
217 
218      x_return_status := FND_API.G_RET_STS_SUCCESS;
219 
220     /*Partner Synchronization process*/
221      IF p_event_class_rec.record_flag = 'Y' AND
222         p_event_class_rec.record_for_partners_flag = 'Y' AND
223         nvl(p_event_class_rec.quote_flag,'N') = 'N' THEN               -- Bug 5131206
224         FOR l_regime_index IN nvl(ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.FIRST,0)..nvl(ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.LAST,-99)
225         LOOP
226 /* Bug 5131206 */
227            IF ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.EXISTS(l_regime_index) AND
228               ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(l_regime_index).tax_provider_id IS NOT NULL THEN
229               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
230                  FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
231                   'Regime: '|| ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(l_regime_index).tax_regime_code||
232                   ', Partner: '|| ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(l_regime_index).tax_provider_id);
233               END IF;
234               BEGIN
235                  SELECT sync_with_prvdr_flag
236                    INTO l_sync_with_prvdr_flag
237                    FROM zx_detail_tax_lines_gt
238                   WHERE application_id       = p_event_class_rec.application_id
239                     AND entity_code          = p_event_class_rec.entity_code
240                     AND event_class_code     = p_event_class_rec.event_class_code
241                     AND trx_id               = p_event_class_rec.trx_id
242                     AND tax_provider_id      = ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(l_regime_index).tax_provider_id
243                     AND sync_with_prvdr_flag = 'Y'
244                     AND rownum               = 1;
245               EXCEPTION
246                  WHEN OTHERS THEN
247                     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
248                          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
249                          'Others: l_sync_with_prvdr_flag = '|| l_sync_with_prvdr_flag);
250                     END IF;
251                     l_sync_with_prvdr_flag := 'N';
252               END;
253               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
254                  FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
255                  'l_sync_with_prvdr_flag = '|| l_sync_with_prvdr_flag);
256               END IF;
257               IF l_sync_with_prvdr_flag = 'Y' THEN
258                  l_sync_needed := TRUE;
259                  ZX_TPI_SERVICES_PKG.call_partner_service(ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(l_regime_index).tax_regime_code,
260                                                           ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(l_regime_index).tax_provider_id,
261                                                           'SYNCHRONIZE_FOR_TAX',
262                                                           p_event_class_rec,
263                                                           l_return_status
264                                        );
265 
266                  IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
267                     x_return_status := l_return_status ;
268                     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
269                       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TPI_SERVICES_PKG.call_partner_service returned errors');
270                     END IF;
271                     RETURN;
272                  END IF;
273 
274                  --Calling Post processing for synchronization with partner
275                  ZX_TPI_SERVICES_PKG.ptnr_post_proc_sync_tax(ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(l_regime_index).tax_regime_code,
276                                                              ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(l_regime_index).tax_provider_id,
277                                                              p_event_class_rec,
278                                                              l_return_status
279                                                    );
280                  IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
281                     x_return_status := l_return_status ;
282                     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
283                       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||' :ZX_TPI_SERVICES_PKG.ptnr_post_proc_sync_tax returned errors');
284                     END IF;
285                     RETURN;
286                  END IF;
287 
288               END IF; --sync_with_prvdr_flag
289            END IF;    -- tax_provider_id is not null
290         END LOOP;
291       END IF;
292 
293       /* RE-INITIALISE SYNCHRONIZATION FLAG in ZX_LINES TO 'N' */
294       IF l_sync_needed THEN
295         --Call zx_lines table handler for updating the sync_with_prvdr_flag to N
296 
297         ZX_SRVC_TYP_PKG.zx_lines_table_handler(p_event_class_rec  => l_event_class_rec,
298                                                p_event            => 'UPDATE',
299                                                p_tax_regime_code  => null,
300                                                p_provider_id      => null,
301                                                x_return_status    => l_return_status
302                                                );
303 
304         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
305            x_return_status := l_return_status;
306            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
307              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||' ZX_SRVC_TYPS.PKG.zx_lines_table_handler returned errors');
308            END IF;
309            RETURN;
310          END IF;
311       END IF; --l_sync_needed
312 
313       IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
314          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME || ': ' || l_api_name||'(-)');
315       END IF;
316  END ptnr_sync_calc_tax;
317 
318 
319 /* =============================================================*
320  | PROCEDURE    Perform Partner repository bulk synchronization |
321  * ============================================================*/
322 
323  PROCEDURE ptnr_bulk_sync_calc_tax (
324  p_event_class_rec    IN  event_class_rec_type ,
325  x_return_status      OUT NOCOPY VARCHAR2
326  )IS
327    l_return_status         VARCHAR2(1);
328    l_event_class_rec       event_class_rec_type;
329    l_api_name              CONSTANT VARCHAR2(30) := 'ptnr_bulk_sync_calc_tax';
330  BEGIN
331     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
332        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'(+)');
333     END IF;
334 
335     x_return_status := FND_API.G_RET_STS_SUCCESS;
336 
337     FOR l_trx_id_index IN nvl(ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl.FIRST,0) .. nvl(ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl.LAST,-99)
338        LOOP
339 
340           l_event_class_rec.application_id   := ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).application_id;
341           l_event_class_rec.event_class_code := ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).event_class_code;
342           l_event_class_rec.trx_id           := ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).trx_id;
343           l_event_class_rec.entity_code      := ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).entity_code;
344           l_event_class_rec.event_class_mapping_id := ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).event_class_mapping_id;
345           l_event_class_rec.event_type_code  := ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).event_type_code;
346           l_event_class_rec.record_flag      := ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).record_flag;
347           l_event_class_rec.quote_flag       := ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).quote_flag;
348           l_event_class_rec.record_for_partners_flag := ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).record_for_partners_flag;
349           l_event_class_rec.prod_family_grp_code := ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).prod_family_grp_code;
350 
351           ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl := ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).tax_regime_tbl;
352 
353    /*--------------------------------------------+
354     |   Call to zx_security.set_security_context |
355     +--------------------------------------------*/
356           ZX_SECURITY.set_security_context(ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).legal_entity_id,
357                                      ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).internal_organization_id,
358                                      ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_trx_id_index).effective_date,
359                                      l_return_status
360                                      );
361 
362     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
363       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
364              'application_id: '||to_char(l_event_class_rec.application_id)||
365              ', entity_code: '||l_event_class_rec.entity_code||
366              ', event_class_code: '||l_event_class_rec.event_class_code||
367              ', event_type_code: '||l_event_class_rec.event_type_code||
368              ', trx_id: '||to_char(l_event_class_rec.trx_id)||
369              ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
370              ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
371              ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
372              ', trx_date: '||to_char(l_event_class_rec.trx_date)||
373              ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
374              ', provnl_tax_determination_date: '||to_char(l_event_class_rec.provnl_tax_determination_date)||
375              ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
376              ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
377              ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
378              ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
379              ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
380              ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
381              ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
382              ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
383              ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
384              ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
385              ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
386              ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id)||
387              ', quote_flag: '||l_event_class_rec.quote_flag ||
388              ', establishment_id: '||to_char(l_event_class_rec.establishment_id)||
389              ', icx_session_id: '||to_char(l_event_class_rec.icx_session_id));
390     END IF;
391 
392           ptnr_sync_calc_tax ( p_event_class_rec   => l_event_class_rec ,
393                                x_return_status     => l_return_status
394                              );
395           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
396                 IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
397                    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TRL_PUB_PKG.manage_taxlines returned errors');
398                 END IF;
399                 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
400                   RAISE FND_API.G_EXC_ERROR;
401                 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
402                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
403                 END IF;
404           END IF;
405 
406        END LOOP;
407     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
408        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END',G_PKG_NAME || ': ' || l_api_name||'(-)');
409     END IF;
410  END ptnr_bulk_sync_calc_tax;
411 
412 
413 PROCEDURE calculate_tax_pvt
414  ( p_transaction_header_rec IN            transaction_header_rec_type,
415    p_api_name               IN            VARCHAR2,
416    p_event_id               IN            NUMBER,
417    p_index                  IN            NUMBER,
418    p_api_version            IN            NUMBER,
419    p_init_msg_list          IN            VARCHAR2,
420    p_commit                 IN            VARCHAR2,
421    p_validation_level       IN            NUMBER,
422    x_return_status          IN OUT NOCOPY VARCHAR2,
423    x_msg_count              IN OUT NOCOPY NUMBER,
424    x_msg_data               IN OUT NOCOPY VARCHAR2
425  ) IS
426    l_sync_needed           BOOLEAN;
427    l_return_status         VARCHAR2(30);
428    l_event_class_rec       event_class_rec_type;
429    l_record_tax_lines      VARCHAR2(1);
430    l_error_buffer          VARCHAR2(1000);
431 
432   BEGIN
433      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
434        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||p_api_name||'.BEGIN','ZX_API_PUB: calculate_tax_pvt()+');
435      END IF;
436    /*------------------------------------------------------+
437     |   Copy to Event Class Record                         |
438     +------------------------------------------------------*/
439     l_event_class_rec.EVENT_ID                     :=  p_event_id;
440     l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  p_transaction_header_rec.INTERNAL_ORGANIZATION_ID(p_index);
441     l_event_class_rec.APPLICATION_ID               :=  p_transaction_header_rec.APPLICATION_ID(p_index);
442     l_event_class_rec.ENTITY_CODE                  :=  p_transaction_header_rec.ENTITY_CODE(p_index);
443     l_event_class_rec.EVENT_CLASS_CODE             :=  p_transaction_header_rec.EVENT_CLASS_CODE(p_index);
444     l_event_class_rec.ICX_SESSION_ID               :=  p_transaction_header_rec.ICX_SESSION_ID(p_index);
445     l_event_class_rec.QUOTE_FLAG       :=  nvl(p_transaction_header_rec.QUOTE_FLAG(p_index),'N');
446 
447 /*
448     l_event_class_rec.LEGAL_ENTITY_ID              :=  p_transaction_header_rec.LEGAL_ENTITY_ID(p_index);
449     l_event_class_rec.LEDGER_ID                    :=  p_transaction_header_rec.LEDGER_ID(p_index);
450     l_event_class_rec.EVENT_TYPE_CODE              :=  p_transaction_header_rec.EVENT_TYPE_CODE(p_index);
451     l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  p_transaction_header_rec.CTRL_TOTAL_HDR_TX_AMT(p_index);
452     l_event_class_rec.TRX_ID                       :=  p_transaction_header_rec.TRX_ID(p_index);
453     l_event_class_rec.TRX_DATE                     :=  p_transaction_header_rec.TRX_DATE(p_index);
454     l_event_class_rec.REL_DOC_DATE                 :=  p_transaction_header_rec.REL_DOC_DATE(p_index);
455     l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  p_transaction_header_rec.PROVNL_TAX_DETERMINATION_DATE(p_index);
456     l_event_class_rec.TRX_CURRENCY_CODE            :=  p_transaction_header_rec.TRX_CURRENCY_CODE(p_index);
457     l_event_class_rec.PRECISION                    :=  p_transaction_header_rec.PRECISION(p_index);
458     l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  p_transaction_header_rec.CURRENCY_CONVERSION_TYPE(p_index);
459     l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  p_transaction_header_rec.CURRENCY_CONVERSION_RATE(p_index);
460     l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  p_transaction_header_rec.CURRENCY_CONVERSION_DATE(p_index);
461     l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  p_transaction_header_rec.ROUNDING_SHIP_TO_PARTY_ID(p_index);
462     l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  p_transaction_header_rec.ROUNDING_SHIP_FROM_PARTY_ID(p_index);
463     l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  p_transaction_header_rec.ROUNDING_BILL_TO_PARTY_ID(p_index);
464     l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  p_transaction_header_rec.ROUNDING_BILL_FROM_PARTY_ID(p_index);
465     l_event_class_rec.RNDG_SHIP_TO_PARTY_SITE_ID   :=  p_transaction_header_rec.RNDG_SHIP_TO_PARTY_SITE_ID(p_index);
466     l_event_class_rec.RNDG_SHIP_FROM_PARTY_SITE_ID :=  p_transaction_header_rec.RNDG_SHIP_FROM_PARTY_SITE_ID(p_index);
467     l_event_class_rec.RNDG_BILL_TO_PARTY_SITE_ID   :=  p_transaction_header_rec.RNDG_BILL_TO_PARTY_SITE_ID(p_index);
468     l_event_class_rec.RNDG_BILL_FROM_PARTY_SITE_ID :=  p_transaction_header_rec.RNDG_BILL_FROM_PARTY_SITE_ID(p_index);
469     l_event_class_rec.ESTABLISHMENT_ID             :=  p_transaction_header_rec.ESTABLISHMENT_ID(p_index);
470 
471 */
472 
473     IF l_event_class_rec.QUOTE_FLAG = 'Y' and
474        l_event_class_rec.ICX_SESSION_ID is not null THEN
475         ZX_SECURITY.G_ICX_SESSION_ID := l_event_class_rec.ICX_SESSION_ID;
476       --dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
477         ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
478 
479     END IF;
480 
481     -- Bug 4948674: Following Delete will not work when there are different dbms sessions used for the same user
485     --If the user calls calculate_tax twice using same db session for the same icx session, then we will have
482     -- session when call originates from a FWK UI. Moved the following Delete logic to the end of this API for O2C
483     -- products and to the end of determine_recovery API for P2P products.
484 
486     -- un-deleted data in the Det Factors table for the previousc all. So, we need to clean it up first before
487     -- starting to process the input lines of the new call.We should at first always attempt to remove any rows
488     --sitting in Det Factors table for that icx session
489 /*    IF  l_event_class_rec.ICX_SESSION_ID is not null THEN
490        DELETE from zx_lines_det_factors
491          WHERE application_id   = l_event_class_rec.application_id and
492                entity_code      = l_event_class_rec.entity_code and
493                event_class_code = l_event_class_rec.event_class_code and
494                trx_id           = l_event_class_rec.trx_id;
495     END IF;
496 */
497 
498     /*-------------------------------------------------------+
499      |Lock the tax lines table to prevent another             |
500      |user from updating same line via the forms/UIs while    |
501      |calculation is in progress                              |
502      +------------------------------------------------------*/
503 /*
504 
505     IF l_event_class_rec.tax_event_type_code ='UPDATE' THEN
506 
507       ZX_TRL_DETAIL_OVERRIDE_PKG.lock_dtl_tax_lines_for_doc(p_application_id      => l_event_class_rec.application_id,
508                                                             p_entity_code         => l_event_class_rec.entity_code,
509                                                             p_event_class_code    => l_event_class_rec.event_class_code,
510                                                             p_trx_id              => l_event_class_rec.trx_id,
511                                                             x_return_status       => l_return_status,
512                                                             x_error_buffer        => l_error_buffer
513                                                             );
514 
515       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
516         x_return_status := l_return_status;
517         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
518           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||p_api_name,
519                  ' RETURN_STATUS = ' || x_return_status);
520         END IF;
521         RETURN;
522       END IF;
523 
524       ZX_TRL_SUMMARY_OVERRIDE_PKG.lock_summ_tax_lines_for_doc(p_application_id      => l_event_class_rec.application_id,
525                                                               p_entity_code         => l_event_class_rec.entity_code,
526                                                               p_event_class_code    => l_event_class_rec.event_class_code,
527                                                               p_trx_id              => l_event_class_rec.trx_id,
528                                                               x_return_status       => l_return_status,
529                                                               x_error_buffer        => l_error_buffer
530                                                               );
531       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
532         x_return_status := l_return_status;
533         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
534           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||p_api_name,
535                  ' RETURN_STATUS = ' || x_return_status);
536         END IF;
537         RETURN;
538       END IF;
539 
540       ZX_TRL_DISTRIBUTIONS_PKG.lock_rec_nrec_dist_for_doc (p_application_id      => l_event_class_rec.application_id,
541                                                            p_entity_code         => l_event_class_rec.entity_code,
542                                                            p_event_class_code    => l_event_class_rec.event_class_code,
543                                                            p_trx_id              => l_event_class_rec.trx_id,
544                                                            x_return_status       => l_return_status,
545                                                            x_error_buffer        => l_error_buffer
546                                                            );
547       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
548         x_return_status := l_return_status;
549         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
550           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||p_api_name,
551                  ' RETURN_STATUS = ' || x_return_status);
552         END IF;
553         RETURN;
554       END IF;
555     END IF; --tax event type ='UPDATE'
556 */
557 
558 
559      /*------------------------------------------------------+
560       |   Validate and Initializate parameters for Calculate |
561       |   tax                                                |
562       +------------------------------------------------------*/
563 
564          ZX_GLOBAL_STRUCTURES_PKG.g_party_tax_prof_id_info_tbl.DELETE;
565     ZX_VALID_INIT_PARAMS_PKG.calculate_tax(p_event_class_rec => l_event_class_rec,
566                                            x_return_status   => l_return_status
567                                           );
568 
569     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
570        x_return_status := l_return_status ;
571        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
572          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||p_api_name,G_PKG_NAME||': '||p_api_name||':ZX_VALID_INIT_PARAMS_PKG.calculate_tax returned errors');
573        END IF;
574        RETURN;
575     END IF;
576 
577     /* ===============================================================================*
578     |Initialize the global structures/global temp tables owned by TDM at line level |
579     * =============================================================================*/
580     ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (l_event_class_rec ,
581                                              'HEADER',
582                                               l_return_status
583                                             );
584 
585     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
586        x_return_status := l_return_status;
587        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
588          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||p_api_name,G_PKG_NAME||': '||p_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.initialize returned errors');
589        END IF;
590        RETURN;
591     END IF;
592 
593 
594     /*----------------------------------------------------+
595      |Call to service type Calculate Tax                  |
596      +---------------------------------------------------*/
597       ZX_SRVC_TYP_PKG.calculate_tax(p_event_class_rec    => l_event_class_rec,
598                                     x_return_status      => l_return_status
599                                    );
600 
601         /*---------------------------------------------------------+
602          | Delete from the global structures for every loop on the |
603          | header document so that there are no hanging/redundant  |
604          | records sitting there                                   |
605          +--------------------------------------------------------*/
606          --Calling routine to delete the global structures
607          ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
608 
609          --Also delete the location caching global structures
610          --** execute the following code only when tax partners are used.
611          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.EVENT_CLASS_MAPPING_ID.DELETE;
612          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_ID.DELETE;
613          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_LINE_ID.DELETE;
614          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_LEVEL_TYPE.DELETE;
615          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_TYPE.DELETE;
616          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_TABLE_NAME.DELETE;
617          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_ID.DELETE;
618          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_TYPE.DELETE;
619          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_VALUE.DELETE;
620          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_ID.DELETE;
621          ZX_GLOBAL_STRUCTURES_PKG.LOCATION_HASH_TBL.DELETE;
622 
623       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
624         x_return_status := l_return_status ;
625         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
626           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||p_api_name,G_PKG_NAME||': '||p_api_name||':ZX_SRVC_TYP_PKG.calculate_tax returned errors');
627         END IF;
628         RETURN;
629       END IF;
630 
631          IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
632            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||p_api_name||'.END','ZX_API_PUB: '||'calculate_tax_pvt'||'()-');
633          END IF;
634   END calculate_tax_pvt;
635 
636 
637 PROCEDURE import_tax_pvt
638  ( p_evnt_cls               IN            evnt_cls_rec_type,
639    p_api_name               IN            VARCHAR2,
640    p_event_id               IN            NUMBER,
641    p_index                  IN            NUMBER,
642    p_api_version            IN            NUMBER,
643    p_init_msg_list          IN            VARCHAR2,
644    p_commit                 IN            VARCHAR2,
645    p_validation_level       IN            NUMBER,
646    x_return_status          IN OUT NOCOPY VARCHAR2,
647    x_msg_count              IN OUT NOCOPY NUMBER,
648    x_msg_data               IN OUT NOCOPY VARCHAR2
649   ) IS
650    l_sync_needed                 BOOLEAN;
651    l_return_status               VARCHAR2(30);
655    /*------------------------------------------------------+
652    l_event_class_rec             event_class_rec_type;
653 
654   BEGIN
656     |   Copy to Event Class Record                         |
657     +------------------------------------------------------*/
658      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
659        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||p_api_name||'.BEGIN','ZX_API_PUB: import_tax_pvt()+');
660      END IF;
661 
662     l_event_class_rec.EVENT_ID                     :=  p_event_id;
663     l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  p_evnt_cls.INTERNAL_ORGANIZATION_ID(p_index);
664     l_event_class_rec.APPLICATION_ID               :=  p_evnt_cls.APPLICATION_ID(p_index);
665     l_event_class_rec.ENTITY_CODE                  :=  p_evnt_cls.ENTITY_CODE(p_index);
666     l_event_class_rec.EVENT_CLASS_CODE             :=  p_evnt_cls.EVENT_CLASS_CODE(p_index);
667 
668 
669    /*------------------------------------------------------+
670     |   Validate Input Paramerters and Fetch Tax Options   |
671     +------------------------------------------------------*/
672 
673     ZX_VALID_INIT_PARAMS_PKG.import_document_with_tax(p_event_class_rec =>l_event_class_rec,
674                                                       x_return_status   =>l_return_status
675                                                       );
676 
677     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
678        x_return_status := l_return_status;
679        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
680          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||p_api_name,G_PKG_NAME||': '||p_api_name||':ZX_VALID_INIT_PARAMS_PKG.import_document_with_tax returned errors');
681        END IF;
682        RETURN;
683     END IF;
684 
685 
686      /*--------------------------------------------------+
687       |   Call Service Type Import Document with Tax     |
688       +--------------------------------------------------*/
689 
690       ZX_SRVC_TYP_PKG.import(p_event_class_rec  => l_event_class_rec,
691                              x_return_status    => l_return_status
692                             );
693 
694       /*---------------------------------------------------------+
695        | Delete from the global structures for every loop on the |
696        | header document so that there are no hanging/redundant  |
697        | records sitting there                                   |
698        +--------------------------------------------------------*/
699       --Calling routine to delete the global structures
700       ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
701 
702       --Also delete the location caching global structures
703       --** Execute this code only when partners are used
704       ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.EVENT_CLASS_MAPPING_ID.DELETE;
705       ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_ID.DELETE;
706       ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_LINE_ID.DELETE;
707       ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_LEVEL_TYPE.DELETE;
708       ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_TYPE.DELETE;
709       ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_TABLE_NAME.DELETE;
710       ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_ID.DELETE;
711       ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_TYPE.DELETE;
712       ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_VALUE.DELETE;
713       ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_ID.DELETE;
714       ZX_GLOBAL_STRUCTURES_PKG.LOCATION_HASH_TBL.DELETE;
715       ZX_GLOBAL_STRUCTURES_PKG.g_party_tax_prof_id_info_tbl.DELETE;
716 
717       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
718         x_return_status := l_return_status;
719         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
720           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||p_api_name,G_PKG_NAME||': '||p_api_name||':ZX_SRVC_TYP_PKG.import returned errors');
721         END IF;
722         RETURN;
723       END IF;
724 
725       IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
726         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||p_api_name||'.END','ZX_API_PUB: '||'import_tax_pvt'||'()-');
727       END IF;
728 
729 END import_tax_pvt;
730 
731 /* ======================================================================*
732  | PROCEDURE calculate_tax : Calculates and records tax info             |
733  | There exists a pl/sql version of same API for performance             |
734  | This API also supports processing for multiple event classes          |
735  | GTT involved : ZX_TRX_HEADERS_GT, ZX_TRANSACTION_LINES_GT             |
736  * ======================================================================*/
737 
738 PROCEDURE Calculate_tax
739   ( p_api_version           IN         NUMBER,
740     p_init_msg_list         IN         VARCHAR2,
741     p_commit                IN         VARCHAR2,
742     p_validation_level      IN         NUMBER,
743     x_return_status         OUT NOCOPY VARCHAR2,
744     x_msg_count             OUT NOCOPY NUMBER,
745     x_msg_data              OUT NOCOPY VARCHAR2
746   ) IS
747 
748   l_api_name          CONSTANT  VARCHAR2(30) := 'CALCULATE_TAX';
749   l_api_version       CONSTANT  NUMBER := 1.0;
750   l_return_status               VARCHAR2(30);
751   l_event_id                    NUMBER;
752   l_transaction_header_rec      transaction_header_rec_type;
753   l_context_info_rec            context_info_rec_type;
754   l_index                       BINARY_INTEGER;
755   l_precedence                  NUMBER_tbl_type;
756   l_init_msg_list               VARCHAR2(1);
757   l_record_tax_lines            VARCHAR2(1);
758   l_ptnr_index                       NUMBER;
759 
760 CURSOR common_header_info IS
761   SELECT
762          INTERNAL_ORGANIZATION_ID,
763          APPLICATION_ID,
767          ICX_SESSION_ID
764        --  ENTITY_CODE,
765        --  EVENT_CLASS_CODE,
766          QUOTE_FLAG,
768     FROM ZX_TRX_HEADERS_GT
769    WHERE rownum = 1;
770 
771 CURSOR event_classes IS
772   SELECT distinct
773          header.event_class_code,
774          header.application_id,
775          header.entity_code,
776          evntmap.processing_precedence
777    FROM ZX_EVNT_CLS_MAPPINGS evntmap,
778         ZX_TRX_HEADERS_GT header
779   WHERE header.application_id = evntmap.application_id
780     AND header.entity_code = evntmap.entity_code
781     AND header.event_class_code = evntmap.event_class_code
782   ORDER BY evntmap.processing_precedence;
783 
784 CURSOR c_headers is
785   SELECT APPLICATION_ID,
786          ENTITY_CODE,
787          EVENT_CLASS_CODE,
788          TRX_ID,
789          ICX_SESSION_ID,
790          EVENT_TYPE_CODE,
791          TAX_EVENT_TYPE_CODE,
792          DOC_EVENT_STATUS
793   FROM ZX_TRX_HEADERS_GT;
794 
795   l_application_id_tbl       NUMBER_tbl_type;
796   l_entity_code_tbl      VARCHAR2_30_tbl_type;
797   l_event_class_code_tbl  VARCHAR2_30_tbl_type;
798   l_trx_id_tbl    NUMBER_tbl_type;
799   l_icx_session_id_tbl  NUMBER_tbl_type;
800   l_event_type_code_tbl  VARCHAR2_30_tbl_type;
801   l_tax_event_type_code_tbl  VARCHAR2_30_tbl_type;
802   l_doc_event_status_tbl  VARCHAR2_30_tbl_type;
803   l_dummy_number  NUMBER;
804   l_start_time    DATE;
805   l_end_time      DATE;
806   l_total_time    VARCHAR2(15);
807 
808 BEGIN
809   l_start_time := SYSDATE ;
810   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
811     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: CALCULATE_TAX()+');
812   END IF;
813 
814   /*--------------------------------------------------+
815   |   Standard start of API savepoint                 |
816   +--------------------------------------------------*/
817   SAVEPOINT Calculate_tax_PVT;
818 
819   /*--------------------------------------------------+
820   |   Standard call to check for call compatibility   |
821   +--------------------------------------------------*/
822 
823   IF NOT FND_API.Compatible_API_Call(
824                                      l_api_version,
825                                      p_api_version,
826                                      l_api_name,
827                                      G_PKG_NAME
828                                      )  THEN
829     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
830   END IF;
831 
832 
833   /*--------------------------------------------------------------+
834   |   Initialize message list if p_init_msg_list is set to TRUE  |
835   +--------------------------------------------------------------*/
836   IF p_init_msg_list is null THEN
837     l_init_msg_list := FND_API.G_FALSE;
838   ELSE
839    l_init_msg_list := p_init_msg_list;
840   END IF;
841 
842   IF FND_API.to_Boolean(l_init_msg_list) THEN
843     FND_MSG_PUB.initialize;
844   END IF;
845 
846 
847   /*-----------------------------------------+
848   |   Initialize return status to SUCCESS   |
849   +-----------------------------------------*/
850 
851   x_return_status := FND_API.G_RET_STS_SUCCESS;
852 
853   /*-----------------------------------------+
854   |   Populate Global Variable              |
855   +-----------------------------------------*/
856 
857   G_PUB_SRVC := l_api_name;
858   G_PUB_CALLING_SRVC := l_api_name;
859   G_DATA_TRANSFER_MODE := 'TAB';
860   G_EXTERNAL_API_CALL  := 'N';
861 
862   IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
863     FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
864           'Data Transfer Mode: '||G_DATA_TRANSFER_MODE);
865   END IF;
866 
867   --Call TDS process to reset the session for previous calculate tax calls if any
868   ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (p_event_class_rec => NULL,
869                                            p_init_level      => 'SESSION',
870                                            x_return_status   => l_return_status
871                                           );
872 
873   set_ptnr_srvc_subscr_flag (p_event_class_rec => NULL,
874                              x_return_status   => l_return_status
875                             );
876   /*---------------------------------------------------------+
877    |  Initialize the trx line app regimes table for every doc|
878    +--------------------------------------------------------*/
879 
880   IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
881      ZX_GLOBAL_STRUCTURES_PKG.init_trx_line_app_regime_tbl;
882   END IF;
883 
884   ZX_GLOBAL_STRUCTURES_PKG.LOC_GEOGRAPHY_INFO_TBL.DELETE;
885   ZX_GLOBAL_STRUCTURES_PKG.g_registration_info_tbl.DELETE;
886   /*-----------------------------------------+
887   | Get the event id for the whole document |
888   +-----------------------------------------*/
889   --Bug 7650433
890   --select ZX_LINES_DET_FACTORS_S.nextval
891   --into l_event_id
892   --from dual;
893 
894   OPEN event_classes;
895     LOOP
896      FETCH event_classes BULK COLLECT INTO
897        l_evnt_cls.event_class_code,
898        l_evnt_cls.application_id,
899        l_evnt_cls.entity_code,
900        l_evnt_cls.precedence
901      LIMIT G_LINES_PER_FETCH;
902      EXIT WHEN event_classes%NOTFOUND;
903     END LOOP;
904   CLOSE event_classes;
905 
906   --Event classes such as SALES_TRANSACTION_TAX_QUOTE/PURCHASE_TRANSACTION_TAX_QUOTE
907   --are not seeded in zx_evnt_cls_mappings so cursor event classes will not
908   --return any rows for such event classes passed.
909   IF l_evnt_cls.event_class_code.LAST is null THEN
910     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
911        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
912           'Event class information does not exist - indicates SALES_TRANSACTION_TAX_QUOTE/PURCHASE_TRANSACTION_TAX_QUOTE');
913     END IF;
914 
915     select event_class_code,
916            application_id,
917            entity_code,
918            internal_organization_id
919       into l_evnt_cls.event_class_code(1),
920            l_evnt_cls.application_id(1),
921            l_evnt_cls.entity_code(1),
922            l_evnt_cls.internal_organization_id(1)
923       from ZX_TRX_HEADERS_GT
924       where rownum=1;
925   END IF;
926 
927   -- added for bug fix 5417887
928 
929 -- Assumption for multiple docs: application_id, event class and OU
930 -- will be same for all transactions in a call.
931 
932   OPEN common_header_info;
933   FETCH common_header_info BULK COLLECT INTO
934           l_transaction_header_rec.INTERNAL_ORGANIZATION_ID,
935           l_transaction_header_rec.APPLICATION_ID,
936        --   l_transaction_header_rec.ENTITY_CODE,
937        --   l_transaction_header_rec.EVENT_CLASS_CODE,
938           l_transaction_header_rec.QUOTE_FLAG,
939           l_transaction_header_rec.ICX_SESSION_ID;
940 
941   CLOSE common_header_info;
942 
943   FOR i IN 1..nvl(l_evnt_cls.event_class_code.LAST,0)
944   LOOP
945 
946     --Bug 7650433
947     select ZX_LINES_DET_FACTORS_S.nextval
948     into l_event_id
949     from dual;
950 
951     IF l_evnt_cls.event_class_code(i) = 'CREDIT_MEMO' THEN
952       ZX_GLOBAL_STRUCTURES_PKG.g_credit_memo_exists_flg := 'Y';
953     END IF;
954 
955     -- Bug 5704675- need to use index here to avoid entity_code
956     -- and event_class_code in l_transaction_header_rec always
957     -- using the entity_code and event_class_code from the 1st
958     -- record of l_evnt_cls
959     --
960     l_transaction_header_rec.ENTITY_CODE(1)      := l_evnt_cls.entity_code(i);
961     l_transaction_header_rec.EVENT_CLASS_CODE(1) := l_evnt_cls.event_class_code(i);
962 
963     --BEGIN
964     --    SAVEPOINT Calculate_Tax_Doc_Norel_PVT;
965           calculate_tax_pvt (l_transaction_header_rec,
966                              l_api_name,
967                              l_event_id,
968                              1,
969                              p_api_version,
970                              l_init_msg_list,
971                              p_commit,
972                              p_validation_level,
973                              l_return_status,
974                              x_msg_count,
975                              x_msg_data
976                             );
977 
978     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
979       RAISE FND_API.G_EXC_ERROR;
980     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
981       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
982     END IF;
983 
984     /*
985           EXCEPTION
986             WHEN FND_API.G_EXC_ERROR THEN
987              -- ROLLBACK TO Calculate_Tax_Doc_Norel_PVT;
988               x_return_status := FND_API.G_RET_STS_ERROR ;
989               --Call API to dump into zx_errors_gt
990               IF ( errors_tbl.application_id.LAST is NOT NULL) THEN
991                  DUMP_MSG;
992               END IF;
993               IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
994                 FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
995               END IF;
996         END;
997     */
998 
999 
1000     -- bug fix 5417887 begin 17-Aug-2006
1001     -- Following code for tail end services/TRL/ptnr sync code, is moved from calculte_tax_pvt
1002     -- and should be handled for each event_class_code. At present, all product integrations call etax
1003     -- for one event class at a time, hence we put these processed out of the event class loop.
1004     -- In the future, if there are cases that etax handle multiple event_class batch, we need to
1005     -- revisist the following code and change accordingly.
1006 
1007     -- For furture LTE features, there are could cases that related documents was imported together
1008     -- with original document. For this case, we need to make sure the tail end service for the original
1009     -- docs must be handled before the calculation process of the related docs.
1010 
1011     /*-----------------------------------------------------+
1012      |   Call to eTax service Dump Detail Tax Lines Into GT|
1013      +-----------------------------------------------------*/
1014 
1015     --IF nvl(l_event_class_rec.PROCESS_FOR_APPLICABILITY_FLAG,'Y') = 'Y' THEN
1016     ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(x_return_status => l_return_status);
1017 
1018 
1019     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1020       x_return_status := l_return_status;
1021       --DUMP_MSG;
1022       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1023         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt returned errors');
1024       END IF;
1025       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1026        RAISE FND_API.G_EXC_ERROR;
1027       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1028        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1029       END IF;
1030     END IF;
1031 
1032     /*--------------------------------------------------+
1033      |   Call to eTax Service Tax Lines Determination   |
1034      +--------------------------------------------------*/
1035     ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(p_event_class_rec => zx_global_structures_pkg.g_event_class_rec,
1036                                                          x_return_status   => l_return_status
1037                 );
1038 
1039     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1040       x_return_status := l_return_status ;
1041       --DUMP_MSG;
1042       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1043         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination returned errors');
1044       END IF;
1045       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1046         RAISE FND_API.G_EXC_ERROR;
1047       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1048         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1049       END IF;
1050     END IF;
1051 
1052     --  Replace the below call with a merge statement
1053 
1054     /*--------------------------------------------------+
1055      |   Call to Update Total Inclusive Tax Amount      |
1056      +--------------------------------------------------*/
1057 
1058     /* Replace the call to update_total_inc_tax_amt with the merge statement below
1059 
1060     update_total_inc_tax_amt(p_event_class_rec => zx_global_structures_pkg.g_event_class_rec,
1061                              x_return_status   => l_return_status
1062                        );
1063 
1064     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1065       x_return_status := l_return_status ;
1066       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1067         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||p_api_name,G_PKG_NAME||': '||p_api_name||':update_total_inc_tax_amt returned errors');
1068       END IF;
1069       RETURN;
1070     END IF;
1071     */
1072 
1073     IF zx_global_structures_pkg.g_event_class_rec.prod_family_grp_code = 'P2P' THEN
1074       MERGE INTO  ZX_LINES_DET_FACTORS     lines_dt
1075       USING (SELECT
1076                    application_id,
1077                    entity_code,
1078                    event_class_code,
1079                    trx_id,
1080                    trx_level_type,
1081                    trx_line_id,
1082                    sum(tax_amt)   incl_tax_amt
1083              FROM
1084                   zx_detail_tax_lines_gt TaxLines
1085              WHERE
1086                    tax_amt_included_flag = 'Y'
1087          --    AND mrc_tax_line_flag = 'N'
1088               AND cancel_flag <> 'Y'
1089          GROUP BY
1090                    application_id,
1091                    entity_code,
1092                    event_class_code,
1093                    trx_id,
1094                    trx_level_type,
1095                    trx_line_id
1096            ) Temp
1097        ON  (      lines_dt.tax_amt_included_flag = 'Y'
1098              --AND  lines_dt.total_inc_tax_amt is NULL
1099              AND  lines_dt.application_id   = temp.application_id
1100              AND  lines_dt.entity_code      = temp.entity_code
1101              AND  lines_dt.event_class_code = temp.event_class_code
1102              AND  lines_dt.trx_id           = temp.trx_id
1103              AND  Lines_dt.trx_level_type   = temp.trx_level_type
1104              AND  Lines_dt.trx_line_id      = temp.trx_line_id
1105             )
1106        WHEN MATCHED THEN
1107          UPDATE SET
1108                 total_inc_tax_amt   = incl_tax_amt;
1109 
1110     END IF;
1111 
1112 
1113     /*--------------------------------------------------+
1114      |   Call to eTax Service Manage Tax Lines          |
1115      +--------------------------------------------------*/
1116     --Rounding and Summarizing Tax Lines for Transaction
1117     /*Bug 3649502 - Check for record flag before calling TRR service*/
1118     /*Bug 4232918 - If record flag =Y and quote flag =Y then do not
1119       record in zx_lines */
1120     l_record_tax_lines := ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.record_flag;
1121     IF ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.record_flag = 'Y' and
1122        ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'Y' THEN
1123        l_record_tax_lines := 'N';
1124     END IF;
1125     IF l_record_tax_lines = 'Y' THEN
1126        ZX_TRL_PUB_PKG.manage_taxlines(p_event_class_rec  =>zx_global_structures_pkg.g_event_class_rec,
1127                                       x_return_status    =>l_return_status
1128                                      );
1129     END IF;
1130 
1131     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1132       x_return_status := l_return_status ;
1133       --DUMP_MSG;
1134       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1135         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TRL_PUB_PKG.manage_taxlines returned errors');
1136       END IF;
1137       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1138         RAISE FND_API.G_EXC_ERROR;
1139       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1140         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1141       END IF;
1142     END IF;
1143     --END IF; --process_applicability_flag is 'Y'
1144 
1145     /*******************************PARTNER CODE START****************************/
1146     -- check with Santosh for a compatible API
1147     IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
1148       ptnr_bulk_sync_calc_tax ( p_event_class_rec   => zx_global_structures_pkg.g_event_class_rec ,
1149                            x_return_status     => l_return_status
1150                          );
1151       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1152         x_return_status := l_return_status;
1153         --DUMP_MSG;
1154         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1155           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ptnr_bulk_sync_calc_tax returned errors');
1156         END IF;
1157         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1158           RAISE FND_API.G_EXC_ERROR;
1159         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1160           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1161         END IF;
1162       END IF;
1166     | Do not record lines based on following condition           |
1163     END IF;
1164 
1165     /*-----------------------------------------------------------+
1167     +-----------------------------------------------------------*/
1168     IF (ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.RECORD_FLAG = 'Y' and
1169         ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'Y' and
1170         ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.icx_session_id is null)
1171         OR
1172        (ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.RECORD_FLAG = 'N' and
1173         ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'Y' and
1174         ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.intgrtn_det_factors_ui_flag = 'N' and
1175         ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.icx_session_id is null)
1176         OR
1177         /*------------------------------------------------------------------------------+
1178          |  Bug 4948674: Handle delete for O2C products when icx_session_id is NOT NULL |
1179          +------------------------------------------------------------------------------*/
1180        (zx_global_structures_pkg.g_event_class_rec.ICX_SESSION_ID is not null AND
1181         zx_global_structures_pkg.g_event_class_rec.PROD_FAMILY_GRP_CODE = 'O2C')
1182     THEN
1183 
1184       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1185               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
1186                'Delete lines for transaction header which need not be recorded');
1187       END IF;
1188 
1189       BEGIN
1190 /*
1191         OPEN C_HEADERS;
1192         LOOP
1193            FETCH c_HEADERS BULK COLLECT INTO
1194                l_application_id_tbl,
1195                l_entity_code_tbl,
1196                l_event_class_code_tbl,
1197                l_trx_id_tbl,
1198                l_icx_session_id_tbl,
1199                l_event_type_code_tbl,
1200                l_tax_event_type_code_tbl,
1201                l_doc_event_status_tbl
1202            LIMIT G_LINES_PER_FETCH;
1203 
1204 
1205            FORALL i IN l_trx_id_tbl.FIRST .. l_trx_id_tbl.LAST
1206 */
1207         DELETE FROM zx_lines_det_factors
1208         WHERE  (APPLICATION_ID, ENTITY_CODE, EVENT_CLASS_CODE, TRX_ID) IN
1209            (SELECT /*+ cardinality (ZX_TRX_HEADERS_GT 1) */
1210                    APPLICATION_ID, ENTITY_CODE, EVENT_CLASS_CODE, TRX_ID
1211               FROM ZX_TRX_HEADERS_GT);
1212 
1213 /*
1214           exit when c_HEADERS%NOTFOUND;
1215         END LOOP;
1216 
1217           close c_HEADERS;
1218 */
1219       EXCEPTION
1220         WHEN OTHERS THEN
1221 
1222           IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1223                FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||': returned errors');
1224                FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name, SQLCODE||' ; '||SQLERRM);
1225           END IF;
1226 
1227           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1228           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
1229           FND_MSG_PUB.Add;
1230 
1231           IF  c_HEADERS%ISOPEN THEN
1232             close c_HEADERS;
1233           END IF;
1234       END;
1235     ELSE
1236 
1237       /*-----------------------------------------------------+
1238        |  Handle delete for mark tax lines deleted           |
1239        +-----------------------------------------------------*/
1240        --Remove all lines marked for delete by the mark_tax_lines_deleted API
1241       BEGIN
1242 /*
1243         OPEN C_HEADERS;
1244         LOOP
1245            FETCH c_HEADERS BULK COLLECT INTO
1246                l_application_id_tbl,
1247                l_entity_code_tbl,
1248                l_event_class_code_tbl,
1249                l_trx_id_tbl,
1250                l_icx_session_id_tbl,
1251                l_event_type_code_tbl,
1252                l_tax_event_type_code_tbl,
1253                l_doc_event_status_tbl
1254            LIMIT G_LINES_PER_FETCH;
1255 
1256            FORALL i IN l_trx_id_tbl.FIRST .. l_trx_id_tbl.LAST
1257 
1258                 DELETE from zx_lines_det_factors
1259                 WHERE APPLICATION_ID   = l_application_id_tbl(i)
1260                  AND ENTITY_CODE       = l_entity_code_tbl(i)
1261                  AND EVENT_CLASS_CODE  = l_event_class_code_tbl(i)
1262                  AND TRX_ID            = l_trx_id_tbl(i)
1263                  AND line_level_action ='DELETE';
1264 
1265 */
1266         DELETE  /*+ ORDERED USE_NL_WITH_INDEX (Z,ZX_LINES_DET_FACTORS_U1) */ FROM zx_lines_det_factors Z
1267         WHERE  (Z.APPLICATION_ID, Z.ENTITY_CODE, Z.EVENT_CLASS_CODE, Z.TRX_ID)
1268                IN (SELECT  /*+ unnest cardinality (ZX_TRX_HEADERS_GT 1) */
1269                    APPLICATION_ID, ENTITY_CODE, EVENT_CLASS_CODE, TRX_ID
1270                    FROM ZX_TRX_HEADERS_GT)
1271           AND  Z.line_level_action ='DELETE';
1272 
1273 
1274 /*
1275           exit when c_HEADERS%NOTFOUND;
1276         END LOOP;
1277 
1278         close c_HEADERS;
1279 */
1280       EXCEPTION
1281         WHEN OTHERS THEN
1282 
1283           IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1284                FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||': returned errors');
1285                FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name, SQLCODE||' ; '||SQLERRM);
1286           END IF;
1287 
1288           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1289           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
1290           FND_MSG_PUB.Add;
1291 
1292           IF  c_HEADERS%ISOPEN THEN
1293             close c_HEADERS;
1294           END IF;
1295       END;
1296 
1297     END IF;
1298 
1299 
1300     /*----------------------------------------------------------------+
1301     | Set the tax_reporting_flag to 'N' for documents called for quote|
1302     +----------------------------------------------------------------*/
1303 -- Bug Fix for 5155481 - Commented out the following update. Reporting flag is set during the
1304 -- insert itself based on the record_flag.
1305 
1306 /*    IF l_event_class_rec.QUOTE_FLAG = 'Y' THEN
1307         UPDATE zx_lines_det_factors
1308           SET tax_reporting_flag ='N'
1309           WHERE application_id       = l_event_class_rec.application_id
1310           AND entity_code      = l_event_class_rec.entity_code
1311           AND event_class_code = l_event_class_rec.event_class_code
1312           AND trx_id           = l_event_class_rec.trx_id;
1313       END IF;
1314 */
1315     -- bug fix 5417887 end
1316 
1317     -- bug#6594730
1318     -- need to flush ZX_DETAIL_TAX_LINES_GT before the procedure
1319     -- calculate_tax_pvt is called for the next event class
1320 
1321     IF l_record_tax_lines = 'Y' THEN
1322       DELETE FROM ZX_DETAIL_TAX_LINES_GT;
1323     END IF;
1324 
1325     -- bug 6824850
1326     ZX_GLOBAL_STRUCTURES_PKG.PTNR_TAX_REGIME_TBL.DELETE;
1327     ZX_GLOBAL_STRUCTURES_PKG.lte_trx_tbl.DELETE;
1328 
1329    END LOOP;  -- i IN 1..nvl(l_evnt_cls.event_class_code.LAST,0)
1330 
1331    /*---------------------------------------------------------+
1332    | Set the out parameter                                   |
1333    +--------------------------------------------------------*/
1334    BEGIN
1335      UPDATE ZX_TRX_HEADERS_GT headers
1336         SET doc_level_recalc_flag = (SELECT distinct(lines.threshold_indicator_flag)
1337                         FROM ZX_LINES_DET_FACTORS lines
1338                        WHERE lines.application_id = headers.application_id
1339                          AND lines.event_class_code = headers.event_class_code
1340                          AND lines.entity_code  = headers.entity_code
1341                          AND lines.trx_id = headers.trx_id
1342                          AND lines.threshold_indicator_flag = 'Y' -- Bug 5210984
1343                                      );
1344    EXCEPTION WHEN OTHERS THEN
1345       null;
1346    END;
1347 
1348 
1349    -- If there exists error messages in Error Table
1350    -- call DUMP_MSG to insert them into ZX_ERRORS_GT
1351    IF ZX_API_PUB.errors_tbl.trx_id.COUNT > 0 THEN
1352       DUMP_MSG;
1353    END IF;
1354 
1355    --Reset the icx_session_id at end of API
1356    ZX_SECURITY.G_ICX_SESSION_ID := null;
1357    ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
1358    --dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
1359 
1360 
1361    --Reset G_PUB_CALLING_SRVC at end of API
1362    ZX_API_PUB.G_PUB_CALLING_SRVC := null;
1363 
1364    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1365       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: CALCULATE_TAX()-');
1366    END IF;
1367 
1368    l_end_time:=SYSDATE;
1369    l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
1370                    mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
1371                    mod(floor((l_end_time-l_start_time)*24*60*60),60);
1372 
1373    IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
1374      FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
1375      FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
1376      FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
1377      SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
1378      FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
1379      SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
1380      FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
1381    END IF;
1382 
1383    SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
1384    IF fnd_global.conc_request_id <> -1 AND l_dummy_number > 1 THEN
1385      FND_FILE.put_line(which => FND_FILE.LOG
1386                       ,buff  => 'Transfer_Mode: '||G_DATA_TRANSFER_MODE);
1387      FND_FILE.put_line(which => FND_FILE.LOG
1388                       ,buff  => 'ZX_API_PUB.Calculate.Statistics Start Time:'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
1389      FND_FILE.put_line(which => FND_FILE.LOG
1390                       ,buff  => 'ZX_API_PUB.Calculate.Statistics End   Time:'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
1391      FND_FILE.put_line(which => FND_FILE.LOG
1395                       ,buff  => 'ZX_API_PUB.Calculate.Statistics: Number of Records in  ZX_TRX_HEADERS_GT :'||l_dummy_number);
1392                       ,buff  => 'ZX_API_PUB.Calculate.Statistics Total Time:'||l_total_time);
1393      SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
1394      FND_FILE.put_line(which => FND_FILE.LOG
1396      SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
1397      FND_FILE.put_line(which => FND_FILE.LOG
1398                       ,buff  => 'ZX_API_PUB.Calculate.Statistics: Number of Records in  ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
1399    END IF;
1400 
1401    EXCEPTION
1402      WHEN FND_API.G_EXC_ERROR THEN
1403        ROLLBACK TO Calculate_tax_PVT;
1404        --Close all open cursors
1405        IF common_header_info%ISOPEN THEN CLOSE common_header_info; END IF;
1406        x_return_status := FND_API.G_RET_STS_ERROR;
1407        DUMP_MSG;
1408        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
1409          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
1410        END IF;
1411 
1412        l_end_time:=SYSDATE;
1413        l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
1414                        mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
1415                        mod(floor((l_end_time-l_start_time)*24*60*60),60);
1416        IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
1417          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
1418          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
1419          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
1420          SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
1421          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
1422          SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
1423          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
1424        END IF;
1425 
1426        SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
1427        IF fnd_global.conc_request_id <> -1 AND l_dummy_number > 1 THEN
1428          FND_FILE.put_line(which => FND_FILE.LOG
1429                           ,buff  => 'Exception FND_API.G_EXC_ERROR : Transfer_Mode: '||G_DATA_TRANSFER_MODE);
1430          FND_FILE.put_line(which => FND_FILE.LOG
1431                           ,buff  => 'ZX_API_PUB.Calculate.Statistics Start Time:'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
1432          FND_FILE.put_line(which => FND_FILE.LOG
1433                           ,buff  => 'ZX_API_PUB.Calculate.Statistics End   Time:'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
1434          FND_FILE.put_line(which => FND_FILE.LOG
1435                           ,buff  => 'ZX_API_PUB.Calculate.Statistics Total Time:'||l_total_time);
1436          SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
1437          FND_FILE.put_line(which => FND_FILE.LOG
1438                           ,buff  => 'ZX_API_PUB.Calculate.Statistics: Number of Records in  ZX_TRX_HEADERS_GT :'||l_dummy_number);
1439          SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
1440          FND_FILE.put_line(which => FND_FILE.LOG
1441                           ,buff  => 'ZX_API_PUB.Calculate.Statistics: Number of Records in  ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
1442        END IF;
1443 
1444      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1445        ROLLBACK TO Calculate_tax_PVT;
1446        --Close all open cursors
1447        IF common_header_info%ISOPEN THEN CLOSE common_header_info; END IF;
1448        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1449        DUMP_MSG;
1450        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
1451        FND_MSG_PUB.add;
1452        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
1453                                  p_count   => x_msg_count,
1454                                  p_data    => x_msg_data
1455                                 );
1456        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
1457           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
1458        END IF;
1459        l_end_time:=SYSDATE;
1460        l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
1461                        mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
1462                        mod(floor((l_end_time-l_start_time)*24*60*60),60);
1463        IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
1464          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
1465          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
1466          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
1467          SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
1468          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
1469          SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
1470          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
1471        END IF;
1472 
1473        SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
1474        IF fnd_global.conc_request_id <> -1 AND l_dummy_number > 1 THEN
1475          FND_FILE.put_line(which => FND_FILE.LOG
1476                           ,buff  => 'Exception FND_API.G_EXC_UNEXPECTED_ERROR : Transfer_Mode: '||G_DATA_TRANSFER_MODE);
1477          FND_FILE.put_line(which => FND_FILE.LOG
1478                           ,buff  => 'ZX_API_PUB.Calculate.Statistics Start Time:'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
1479          FND_FILE.put_line(which => FND_FILE.LOG
1480                           ,buff  => 'ZX_API_PUB.Calculate.Statistics End   Time:'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
1481          FND_FILE.put_line(which => FND_FILE.LOG
1482                           ,buff  => 'ZX_API_PUB.Calculate.Statistics Total Time:'||l_total_time);
1483          SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
1484          FND_FILE.put_line(which => FND_FILE.LOG
1485                           ,buff  => 'ZX_API_PUB.Calculate.Statistics: Number of Records in  ZX_TRX_HEADERS_GT :'||l_dummy_number);
1486          SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
1487          FND_FILE.put_line(which => FND_FILE.LOG
1488                           ,buff  => 'ZX_API_PUB.Calculate.Statistics: Number of Records in  ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
1489        END IF;
1490 
1491      WHEN OTHERS THEN
1492        ROLLBACK TO Calculate_tax_PVT;
1493        --Close all open cursors
1494        IF common_header_info%ISOPEN THEN CLOSE common_header_info; END IF;
1495        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1496        DUMP_MSG;
1497        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
1498        FND_MSG_PUB.add;
1499        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
1500                                 p_count    => x_msg_count,
1501                                 p_data     => x_msg_data
1502                                 );
1503        l_end_time:=SYSDATE;
1504        l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
1505                        mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
1506                        mod(floor((l_end_time-l_start_time)*24*60*60),60);
1507        IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
1508          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
1509          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
1510          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
1511          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
1512        END IF;
1513 
1514        SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
1515        IF fnd_global.conc_request_id <> -1 AND l_dummy_number > 1 THEN
1516          FND_FILE.put_line(which => FND_FILE.LOG
1517                           ,buff  => 'Exception OTHERS : Transfer_Mode: '||G_DATA_TRANSFER_MODE);
1518          FND_FILE.put_line(which => FND_FILE.LOG
1519                           ,buff  => 'ZX_API_PUB.Calculate.Statistics Start Time:'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
1520          FND_FILE.put_line(which => FND_FILE.LOG
1521                           ,buff  => 'ZX_API_PUB.Calculate.Statistics End   Time:'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
1522          FND_FILE.put_line(which => FND_FILE.LOG
1523                           ,buff  => 'ZX_API_PUB.Calculate.Statistics Total Time:'||l_total_time);
1524          SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
1525          FND_FILE.put_line(which => FND_FILE.LOG
1526                           ,buff  => 'ZX_API_PUB.Calculate.Statistics: Number of Records in  ZX_TRX_HEADERS_GT :'||l_dummy_number);
1527          SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
1528          FND_FILE.put_line(which => FND_FILE.LOG
1529                           ,buff  => 'ZX_API_PUB.Calculate.Statistics: Number of Records in  ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
1530        END IF;
1531 
1532 
1533 END calculate_tax; --gtt version
1534 
1535  /*======================================================================*
1536  | PROCEDURE calculate_tax : Calculates and records tax info             |
1537  | PL/sql tables: trx_line_dist_tbl   , transaction_rec                  |
1538  |                                                                       |
1539  | This API will be also called by products who uptake the               |
1540  | determining factors UI window by which the transaction lines are      |
1541  | already recorded into the eBTax repository , however the tax on them  |
1542  | is not calculated. They will pass p_data_transfer_mode as WIN         |
1543  * ======================================================================*/
1544 
1545 PROCEDURE calculate_tax
1546   ( p_api_version           IN         NUMBER,
1547     p_init_msg_list         IN         VARCHAR2,
1548     p_commit                IN         VARCHAR2,
1549     p_validation_level      IN         NUMBER,
1550     x_return_status         OUT NOCOPY VARCHAR2 ,
1551     x_msg_count             OUT NOCOPY NUMBER ,
1552     x_msg_data              OUT NOCOPY VARCHAR2,
1553     p_transaction_rec       IN         transaction_rec_type,
1554     p_quote_flag            IN         VARCHAR2,
1555     p_data_transfer_mode    IN         VARCHAR2,
1556     x_doc_level_recalc_flag OUT NOCOPY VARCHAR2
1557    )
1558     IS
1559 
1560   l_api_name          CONSTANT  VARCHAR2(30) := 'CALCULATE_TAX';
1561   l_api_version       CONSTANT  NUMBER := 1.0;
1562   l_return_status               VARCHAR2(30);
1563   l_event_class_rec             event_class_rec_type;
1564   l_init_msg_list               VARCHAR2(1);
1565   l_record_tax_lines            VARCHAR2(1);
1566   l_error_buffer                VARCHAR2(1000);
1567 
1568   l_ptnr_index                       NUMBER;
1569   l_start_time    DATE;
1570   l_end_time      DATE;
1571   l_total_time    VARCHAR2(15);
1572 BEGIN
1573   l_start_time := SYSDATE ;
1574   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1575     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: CALCULATE_TAX()+');
1576   END IF;
1577 
1578   /*--------------------------------------------------+
1579   |   Standard start of API savepoint                 |
1580   +--------------------------------------------------*/
1581   SAVEPOINT Calculate_tax_PVT;
1582 
1583   /*--------------------------------------------------+
1584   |   Standard call to check for call compatibility   |
1585   +--------------------------------------------------*/
1586 
1587   IF NOT FND_API.Compatible_API_Call(l_api_version,
1588                                      p_api_version,
1589                                      l_api_name,
1590                                      G_PKG_NAME
1591                                      )  THEN
1592     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1593   END IF;
1594 
1595   /*--------------------------------------------------------------+
1596   |   Initialize message list if p_init_msg_list is set to TRUE  |
1597   +--------------------------------------------------------------*/
1598   IF p_init_msg_list is null THEN
1599     l_init_msg_list := FND_API.G_FALSE;
1600   ELSE
1601     l_init_msg_list := p_init_msg_list;
1602   END IF;
1603 
1604   IF FND_API.to_Boolean(l_init_msg_list) THEN
1605     FND_MSG_PUB.initialize;
1606   END IF;
1607 
1608   /*-----------------------------------------+
1609   |   Initialize return status to SUCCESS   |
1610   +-----------------------------------------*/
1611 
1612   x_return_status := FND_API.G_RET_STS_SUCCESS;
1613 
1614   /*-----------------------------------------+
1615   |   Populate Global Variable              |
1616   +-----------------------------------------*/
1617 
1618   G_PUB_SRVC := l_api_name;
1619   G_PUB_CALLING_SRVC := l_api_name;
1620   G_DATA_TRANSFER_MODE := p_data_transfer_mode;
1621   G_EXTERNAL_API_CALL  := 'N';
1622 
1623 
1624   IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1625     FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
1626           'Data Transfer Mode: '||G_DATA_TRANSFER_MODE);
1627   END IF;
1628 
1629   --Call TDS process to reset the session for previous calculate tax calls if any
1630   ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (p_event_class_rec => NULL,
1631                                            p_init_level      => 'SESSION',
1632                                            x_return_status   => l_return_status
1633                                           );
1634   set_ptnr_srvc_subscr_flag (p_event_class_rec => NULL,
1635                              x_return_status   => l_return_status
1636                             );
1637 
1638   ZX_GLOBAL_STRUCTURES_PKG.LOC_GEOGRAPHY_INFO_TBL.DELETE;
1639   ZX_GLOBAL_STRUCTURES_PKG.g_registration_info_tbl.DELETE;
1640   /*------------------------------------------------------+
1641    |   Copy to Event Class Record                         |
1642    +------------------------------------------------------*/
1643 
1644   /*Fetch the event id for the document*/
1645   select ZX_LINES_DET_FACTORS_S.nextval
1646     into l_event_class_rec.event_id
1647     from dual;
1648 
1649   /*Populate the event class record structure*/
1650   IF G_DATA_TRANSFER_MODE = 'PLS' THEN
1651     l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.INTERNAL_ORGANIZATION_ID(1);
1652     l_event_class_rec.LEGAL_ENTITY_ID              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEGAL_ENTITY_ID(1);
1653     l_event_class_rec.LEDGER_ID                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEDGER_ID(1);
1654     l_event_class_rec.APPLICATION_ID               :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.APPLICATION_ID(1);
1655     l_event_class_rec.ENTITY_CODE                  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ENTITY_CODE(1);
1656     l_event_class_rec.EVENT_CLASS_CODE             :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_CLASS_CODE(1);
1657     l_event_class_rec.EVENT_TYPE_CODE              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_TYPE_CODE(1);
1658     l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CTRL_TOTAL_HDR_TX_AMT(1);
1659     l_event_class_rec.TRX_ID                       :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_ID(1);
1660     l_event_class_rec.TRX_DATE                     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_DATE(1);
1661     l_event_class_rec.REL_DOC_DATE                 :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RELATED_DOC_DATE(1);
1662     l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PROVNL_TAX_DETERMINATION_DATE(1);
1663     l_event_class_rec.TRX_CURRENCY_CODE            :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_CURRENCY_CODE(1);
1664     l_event_class_rec.PRECISION                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PRECISION(1);
1665     l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_TYPE(1);
1666     l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_RATE(1);
1667     l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_DATE(1);
1668     l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_TO_PARTY_ID(1);
1669     l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_FROM_PARTY_ID(1);
1670     l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_TO_PARTY_ID(1);
1671     l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_FROM_PARTY_ID(1);
1672     l_event_class_rec.RNDG_SHIP_TO_PARTY_SITE_ID   :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_SHIP_TO_PARTY_SITE_ID(1);
1673     l_event_class_rec.RNDG_SHIP_FROM_PARTY_SITE_ID :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_SHIP_FROM_PARTY_SITE_ID(1);
1674     l_event_class_rec.RNDG_BILL_TO_PARTY_SITE_ID   :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_BILL_TO_PARTY_SITE_ID(1);
1675     l_event_class_rec.RNDG_BILL_FROM_PARTY_SITE_ID :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_BILL_FROM_PARTY_SITE_ID(1);
1676     l_event_class_rec.QUOTE_FLAG                   :=  nvl(p_quote_flag,'N');
1677     l_event_class_rec.ICX_SESSION_ID               :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ICX_SESSION_ID(1);
1678   ELSIF G_DATA_TRANSFER_MODE ='WIN' THEN
1679     l_event_class_rec.internal_organization_id     :=  p_transaction_rec.internal_organization_id;
1680     l_event_class_rec.APPLICATION_ID               :=  p_transaction_rec.application_id;
1681     l_event_class_rec.ENTITY_CODE                  :=  p_transaction_rec.entity_code;
1682     l_event_class_rec.EVENT_CLASS_CODE             :=  p_transaction_rec.event_class_code;
1683     l_event_class_rec.EVENT_TYPE_CODE              :=  p_transaction_rec.event_type_code;
1684     l_event_class_rec.TRX_ID                       :=  p_transaction_rec.trx_id;
1685     l_event_class_rec.QUOTE_FLAG                   :=  p_quote_flag;
1686 
1687     BEGIN
1688       SELECT legal_entity_id,
1689            ledger_id,
1690            trx_date,
1691            related_doc_date,
1692            trx_currency_code,
1693            precision,
1694            currency_conversion_type,
1695            currency_conversion_rate,
1696            currency_conversion_date,
1697            Rdng_ship_to_pty_tx_prof_id,
1698            Rdng_ship_from_pty_tx_prof_id,
1699            Rdng_bill_to_pty_tx_prof_id,
1700            Rdng_bill_from_pty_tx_prof_id,
1701            Rdng_ship_to_pty_tx_p_st_id,
1702            Rdng_ship_from_pty_tx_p_st_id,
1703            Rdng_bill_to_pty_tx_p_st_id,
1704            Rdng_bill_from_pty_tx_p_st_id
1705       INTO l_event_class_rec.legal_entity_id,
1706            l_event_class_rec.ledger_id,
1707            l_event_class_rec.trx_date,
1708            l_event_class_rec.rel_doc_date,
1709            l_event_class_rec.trx_currency_code,
1710            l_event_class_rec.precision,
1711            l_event_class_rec.currency_conversion_type,
1712            l_event_class_rec.currency_conversion_rate,
1713            l_event_class_rec.currency_conversion_date,
1714            l_event_class_rec.RDNG_SHIP_TO_PTY_TX_PROF_ID,
1715            l_event_class_rec.RDNG_SHIP_FROM_PTY_TX_PROF_ID,
1716            l_event_class_rec.RDNG_BILL_TO_PTY_TX_PROF_ID,
1717            l_event_class_rec.RDNG_BILL_FROM_PTY_TX_PROF_ID,
1718            l_event_class_rec.RDNG_SHIP_TO_PTY_TX_P_ST_ID,
1719            l_event_class_rec.RDNG_SHIP_FROM_PTY_TX_P_ST_ID,
1720            l_event_class_rec.RDNG_BILL_TO_PTY_TX_P_ST_ID,
1721            l_event_class_rec.RDNG_BILL_FROM_PTY_TX_P_ST_ID
1722       FROM ZX_LINES_DET_FACTORS
1723      WHERE application_id   = p_transaction_rec.application_id
1724        AND entity_code      = p_transaction_rec.entity_code
1725        AND event_class_code = p_transaction_rec.event_class_code
1726        AND trx_id           = p_transaction_rec.trx_id
1727        AND rownum           = 1;
1728     EXCEPTION
1729       WHEN OTHERS THEN
1730         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
1731            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'Data is expected to be in eBTax Repository for this call');
1732         END IF;
1736   --Set a flag to indicate if currency information passed at header/line
1733         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1734     END;
1735   END IF;
1737   IF l_event_class_rec.trx_currency_code is not null AND
1738      l_event_class_rec.precision is not null THEN
1739      l_event_class_rec.header_level_currency_flag := 'Y';
1740   END IF;
1741 
1742   --Set the global variable if icx_session_id is not null
1743   IF l_event_class_rec.QUOTE_FLAG = 'Y' and
1744      l_event_class_rec.ICX_SESSION_ID is not null THEN
1745      ZX_SECURITY.G_ICX_SESSION_ID := l_event_class_rec.ICX_SESSION_ID;
1746      ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
1747      -- dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
1748   ELSE
1749      ZX_SECURITY.G_ICX_SESSION_ID := null;
1750      -- dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
1751      ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
1752   END IF;
1753 
1754   -- Bug 4948674: Following Delete will not work when there are different dbms sessions used for the same user
1755   -- session when call originates from a FWK UI. Moved the following Delete logic to the end of this API for O2C
1756   -- products and to the end of determine_recovery API for P2P products.
1757 
1758   --If the user calls calculate_tax twice using same db session for the same icx session, then we will have
1759   -- un-deleted data in the Det Factors table for the previousc all. So, we need to clean it up first before
1760   -- starting to process the input lines of the new call.We should at first always attempt to remove any rows
1761   --sitting in Det Factors table for that icx session
1762     /*   IF l_event_class_rec.ICX_SESSION_ID is not null THEN
1763           DELETE from zx_lines_det_factors
1764           WHERE application_id = l_event_class_rec.application_id and
1765                 entity_code    = l_event_class_rec.entity_code and
1766                 event_class_code = l_event_class_rec.event_class_code and
1767                 trx_id = l_event_class_rec.trx_id;
1768        END IF;
1769     */
1770 
1771   IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1772     FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
1773         'application_id: '||to_char(l_event_class_rec.application_id)||
1774         ', entity_code: '||l_event_class_rec.entity_code||
1775         ', event_class_code: '||l_event_class_rec.event_class_code||
1776         ', event_type_code: '||l_event_class_rec.event_type_code||
1777         ', trx_id: '||to_char(l_event_class_rec.trx_id)||
1778         ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
1779         ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
1780         ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
1781         ', trx_date: '||to_char(l_event_class_rec.trx_date)||
1782         ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
1783         ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
1784         ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
1785         ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
1786         ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
1787         ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
1788         ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
1789         ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
1790         ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
1791         ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
1792         ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
1793         ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
1794         ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id)||
1795         ', quote_flag: '||l_event_class_rec.quote_flag ||
1796         ', icx_session_id: '||to_char(l_event_class_rec.icx_session_id) );
1797   END IF;
1798 
1799   /*-------------------------------------------------------+
1800   |Lock the tax lines table to prevent another             |
1801   |user from updating same line via the forms/UIs while    |
1802   |calculation is in progress                              |
1803   +-------------------------------------------------------*/
1804   IF l_event_class_rec.tax_event_type_code ='UPDATE' THEN
1805     ZX_TRL_DETAIL_OVERRIDE_PKG.lock_dtl_tax_lines_for_doc(p_application_id      => l_event_class_rec.application_id,
1806                                                           p_entity_code         => l_event_class_rec.entity_code,
1807                                                           p_event_class_code    => l_event_class_rec.event_class_code,
1808                                                           p_trx_id              => l_event_class_rec.trx_id,
1809                                                           x_return_status       => l_return_status,
1810                                                           x_error_buffer        => l_error_buffer
1811                                                           );
1812 
1813     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1814        RAISE FND_API.G_EXC_ERROR;
1815     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1816        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1817     END IF;
1818 
1819     ZX_TRL_SUMMARY_OVERRIDE_PKG.lock_summ_tax_lines_for_doc(p_application_id      => l_event_class_rec.application_id,
1820                                                             p_entity_code         => l_event_class_rec.entity_code,
1821                                                             p_event_class_code    => l_event_class_rec.event_class_code,
1822                                                             p_trx_id              => l_event_class_rec.trx_id,
1823                                                             x_return_status       => l_return_status,
1824                                                             x_error_buffer        => l_error_buffer
1825                                                             );
1826     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1827        RAISE FND_API.G_EXC_ERROR;
1828     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1829        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1830     END IF;
1831 
1832     ZX_TRL_DISTRIBUTIONS_PKG.lock_rec_nrec_dist_for_doc (p_application_id      => l_event_class_rec.application_id,
1833                                                          p_entity_code         => l_event_class_rec.entity_code,
1834                                                          p_event_class_code    => l_event_class_rec.event_class_code,
1835                                                          p_trx_id              => l_event_class_rec.trx_id,
1836                                                          x_return_status       => l_return_status,
1837                                                          x_error_buffer        => l_error_buffer
1838                                                          );
1839     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1840        RAISE FND_API.G_EXC_ERROR;
1841     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1842        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1843     END IF;
1844   END IF; --tax event type is UPDATE
1845 
1846   IF l_event_class_rec.event_class_code = 'CREDIT_MEMO' THEN
1847     ZX_GLOBAL_STRUCTURES_PKG.g_credit_memo_exists_flg := 'Y';
1848   END IF;
1849 
1850   /*------------------------------------------------------+
1851   |   Validate and Initializate parameters for Calculate |
1852   |   tax                                                |
1853   +------------------------------------------------------*/
1854 
1855   ZX_VALID_INIT_PARAMS_PKG.calculate_tax(p_event_class_rec => l_event_class_rec,
1856                                          x_return_status   => l_return_status
1857                                         );
1858 
1859   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1860      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1861        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.calculate_tax returned errors');
1862      END IF;
1863      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1864        RAISE FND_API.G_EXC_ERROR;
1865      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1866        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1867      END IF;
1868   END IF;
1869 
1870   /* ===============================================================================*
1871   |Initialize the global structures/global temp tables owned by TDM at header level |
1872   * ===============================================================================*/
1873 
1874   ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (l_event_class_rec ,
1875                                             'HEADER',
1876                                             l_return_status
1877                                            );
1878 
1879   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1880     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1881       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.initialize returned errors');
1882     END IF;
1883     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1884       RAISE FND_API.G_EXC_ERROR;
1885     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1886       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1887     END IF;
1888   END IF;
1889 
1890 
1891   /*--------------------------------------------------+
1892    |   Call to service type Calculate Tax             |
1893    +--------------------------------------------------*/
1894    /* ----------------------------------------------------+
1895     | Bug 3922920 - Perfrom tail end processes regardless |
1896     | of process_for_applicability_flag                   |
1897     + ---------------------------------------------------*/
1898   --IF nvl(l_event_class_rec.PROCESS_FOR_APPLICABILITY_FLAG,'Y') = 'Y' THEN
1899 
1900   ZX_SRVC_TYP_PKG.calculate_tax(p_event_class_rec    => l_event_class_rec,
1901                                 x_return_status      => l_return_status
1902                                );
1903 
1904   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1905     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1906       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.calculate_tax  returned errors');
1907     END IF;
1908     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1909       RAISE FND_API.G_EXC_ERROR;
1910     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1911       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1912     END IF;
1913   END IF;
1914 
1915   -- populate the tax_regime_tbl cache structure for partner
1916   IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
1917     IF nvl(ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl.FIRST,0) = 0 THEN
1918       l_ptnr_index := NVL(ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl.LAST, 0) + 1;
1919       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).application_id
1920                 := l_event_class_rec.application_id;
1921       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).entity_code
1922                 := l_event_class_rec.entity_code;
1923       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).event_class_code
1924                 := l_event_class_rec.event_class_code;
1925       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).trx_id
1926                 := l_event_class_rec.trx_id;
1927       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).event_class_mapping_id
1928                 := l_event_class_rec.event_class_mapping_id;
1929       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).event_type_code
1930                 := l_event_class_rec.event_type_code;
1931       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).record_flag
1932                 := l_event_class_rec.record_flag;
1933       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).quote_flag
1934                 := l_event_class_rec.quote_flag;
1935       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).record_for_partners_flag
1936                 := l_event_class_rec.record_for_partners_flag;
1937       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).prod_family_grp_code
1938                 := l_event_class_rec.prod_family_grp_code;
1939       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).internal_organization_id
1940                  := l_event_class_rec.internal_organization_id;
1941       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).legal_entity_id
1942                  := l_event_class_rec.legal_entity_id;
1943       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).effective_date
1944                 := zx_security.g_effective_date;
1945       ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).tax_regime_tbl
1946                 := ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl;
1947     END IF;
1948   END IF;
1949 
1950   /*-----------------------------------------------------+
1951    |   Call to eTax service Dump Detail Tax Lines Into GT|
1952    +-----------------------------------------------------*/
1953   ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(x_return_status  => l_return_status);
1954 
1955 
1956   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1957     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1958       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt returned errors');
1959     END IF;
1960     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1961       RAISE FND_API.G_EXC_ERROR;
1962     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1963       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1964     END IF;
1965   END IF;
1966 
1967   /*--------------------------------------------------+
1968    |   Call to eTax Service Tax Lines Determination   |
1969    +--------------------------------------------------*/
1970   ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(p_event_class_rec => l_event_class_rec,
1971                                                       x_return_status   => l_return_status
1972                                                      );
1973 
1974   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1975     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1976       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination returned errors');
1977     END IF;
1981       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1978     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1979       RAISE FND_API.G_EXC_ERROR;
1980     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1982     END IF;
1983   END IF;
1984 
1985   /*--------------------------------------------------+
1986    |   Call to Update Total Inclusive Tax Amount      |
1987    +--------------------------------------------------*/
1988   /* Replace the call to update_total_inc_tax_amt with the merge statement below
1989   update_total_inc_tax_amt(p_event_class_rec => l_event_class_rec,
1990                            x_return_status   => l_return_status
1991                     );
1992 
1993   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1994     x_return_status := l_return_status ;
1995     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1996       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':update_total_inc_tax_amt returned errors');
1997     END IF;
1998        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1999          RAISE FND_API.G_EXC_ERROR;
2000        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2001          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2002        END IF;
2003   END IF;
2004   */
2005 
2006   IF zx_global_structures_pkg.g_event_class_rec.prod_family_grp_code = 'P2P' THEN
2007     MERGE INTO  ZX_LINES_DET_FACTORS     lines_dt
2008     USING (SELECT
2009                  application_id,
2010                  entity_code,
2011                  event_class_code,
2012                  trx_id,
2013                  trx_level_type,
2014                  trx_line_id,
2015                  sum(tax_amt)   incl_tax_amt
2016            FROM
2017                 zx_detail_tax_lines_gt TaxLines
2018            WHERE
2019                  tax_amt_included_flag = 'Y'
2020        --    AND mrc_tax_line_flag = 'N'
2021             AND cancel_flag <> 'Y'
2022        GROUP BY
2023                  application_id,
2024                  entity_code,
2025                  event_class_code,
2026                  trx_id,
2027                  trx_level_type,
2028                  trx_line_id
2029          ) Temp
2030      ON  (      lines_dt.tax_amt_included_flag = 'Y'
2031            --AND  lines_dt.total_inc_tax_amt is NULL
2032            AND  lines_dt.application_id   = temp.application_id
2033            AND  lines_dt.entity_code      = temp.entity_code
2034            AND  lines_dt.event_class_code = temp.event_class_code
2035            AND  lines_dt.trx_id           = temp.trx_id
2036            AND  Lines_dt.trx_level_type   = temp.trx_level_type
2037            AND  Lines_dt.trx_line_id      = temp.trx_line_id
2038           )
2039      WHEN MATCHED THEN
2040        UPDATE SET
2041               total_inc_tax_amt   = incl_tax_amt;
2042 
2043   END IF;
2044 
2045   /*--------------------------------------------------+
2046    |   Call to eTax Service Manage Tax Lines          |
2047    +--------------------------------------------------*/
2048 
2049   --Rounding and Summarizing Tax Lines for Transaction
2050   /*Bug 3649502 - Check for record flag before calling TRR service*/
2051   /*Bug 4232918 - If record flag =Y and quote flag =Y then do not
2052                   record in zx_lines */
2053   l_record_tax_lines := l_event_class_rec.record_flag;
2054   IF l_event_class_rec.record_flag = 'Y' and
2055      l_event_class_rec.quote_flag = 'Y' THEN
2056      l_record_tax_lines := 'N';
2057   END IF;
2058   IF l_record_tax_lines = 'Y' THEN
2059     ZX_TRL_PUB_PKG.manage_taxlines(p_event_class_rec  =>l_event_class_rec,
2060                                    x_return_status    =>l_return_status
2061                                   );
2062   END IF;
2063 
2064   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2065     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2066       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TRL_PUB_PKG.manage_taxlines returned errors');
2067     END IF;
2068     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2069       RAISE FND_API.G_EXC_ERROR;
2070     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2071       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2072     END IF;
2073   END IF;
2074         --  END IF; -- process_applicability_flag is N
2075 
2076   /*******************************PARTNER CODE START****************************/
2077   IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
2078 
2079     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2080        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
2081          'Calling partner routine to synchronize the tax'||
2082          ', ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.count = '||ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.count);
2083     END IF;
2084     ptnr_bulk_sync_calc_tax ( p_event_class_rec   => l_event_class_rec ,
2085                          x_return_status     => l_return_status
2086                        );
2087     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2088       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2089         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TRL_PUB_PKG.manage_taxlines returned errors');
2090       END IF;
2091       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2092         RAISE FND_API.G_EXC_ERROR;
2093       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2094         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2095       END IF;
2096     END IF;
2097   END IF;
2098   /*******************************PARTNER CODE END****************************/
2099   /*---------------------------------------------------------+
2100    | End Loop for Transaction Headers                        |
2101    +---------------------------------------------------------*/
2102 
2103   /*---------------------------------------------------------+
2104    | Set the out parameter                                   |
2105    +--------------------------------------------------------*/
2106   BEGIN
2107     SELECT threshold_indicator_flag
2108       INTO  x_doc_level_recalc_flag
2109       FROM  ZX_LINES_DET_FACTORS
2110       WHERE application_id           = l_event_class_rec.application_id
2111         AND event_class_code         = l_event_class_rec.event_class_code
2112         AND entity_code              = l_event_class_rec.entity_code
2113         AND trx_id                   = l_event_class_rec.trx_id
2114         AND threshold_indicator_flag = 'Y'                 -- Bug 5210984
2115         AND rownum                   = 1;
2116   EXCEPTION WHEN OTHERS THEN
2117     x_doc_level_recalc_flag := 'N'; --bug6062224
2118     --null;
2119   END;
2120 
2121   /*-------------------------------------------------------------+
2122    | Do not record lines based on following condition            |
2123    +------------------------------------------------------------*/
2124   IF (l_event_class_rec.RECORD_FLAG = 'Y' and
2125       l_event_class_rec.quote_flag = 'Y' and
2126       l_event_class_rec.icx_session_id is null) OR
2127      (l_event_class_rec.RECORD_FLAG = 'N' and
2128       l_event_class_rec.quote_flag = 'Y' and
2129       l_event_class_rec.intgrtn_det_factors_ui_flag = 'N' and
2130       l_event_class_rec.icx_session_id is null) THEN
2131     --Delete lines for transaction header which need not be recorded
2132     DELETE from zx_lines_det_factors
2133      WHERE application_id = l_event_class_rec.application_id
2134        AND entity_code    = l_event_class_rec.entity_code
2135        AND event_class_code = l_event_class_rec.event_class_code
2136        AND trx_id = l_event_class_rec.trx_id;
2137   END IF;
2138   /*----------------------------------------------------------------+
2139   | Set the tax_reporting_flag to 'N' for documents called for quote|
2140   +----------------------------------------------------------------*/
2141 -- Bug Fix for 5155481 - Commented out the following update. Reporting flag is set during the
2142 -- insert itself based on the record_flag.
2143 
2144 /*  IF l_event_class_rec.QUOTE_FLAG = 'Y' THEN
2145     UPDATE zx_lines_det_factors
2146        SET tax_reporting_flag ='N'
2147            WHERE application_id   = l_event_class_rec.application_id
2148        AND entity_code      = l_event_class_rec.entity_code
2149        AND event_class_code = l_event_class_rec.event_class_code
2150        AND trx_id           = l_event_class_rec.trx_id;
2151    END IF;
2152 
2153 */
2154 
2155    /*-----------------------------------------------------+
2156     |  Handle delete for mark tax lines deleted           |
2157     +-----------------------------------------------------*/
2158   DELETE FROM ZX_LINES_DET_FACTORS
2159    WHERE line_level_action ='DELETE'
2160        AND application_id   = l_event_class_rec.application_id
2161        AND entity_code      = l_event_class_rec.entity_code
2162        AND event_class_code = l_event_class_rec.event_class_code
2163        AND trx_id           = l_event_class_rec.trx_id;
2164 
2165   /*------------------------------------------------------------------------------+
2166    |  Bug 4948674: Handle delete for O2C products when icx_session_id is NOT NULL |
2167    +------------------------------------------------------------------------------*/
2168   IF  l_event_class_rec.ICX_SESSION_ID is not null AND
2169       l_event_class_rec.PROD_FAMILY_GRP_CODE = 'O2C' THEN
2170      DELETE from zx_lines_det_factors
2171        WHERE application_id   = l_event_class_rec.application_id and
2172              entity_code      = l_event_class_rec.entity_code and
2173              event_class_code = l_event_class_rec.event_class_code and
2174              trx_id           = l_event_class_rec.trx_id and
2175              icx_session_id   = l_event_class_rec.icx_session_id;
2176   END IF;
2177 
2178   /*---------------------------------------------------------+
2179    |  Initialize the trx line app regimes table for every doc|
2180    +--------------------------------------------------------*/
2181   IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
2182      ZX_GLOBAL_STRUCTURES_PKG.init_trx_line_app_regime_tbl;
2183   END IF;
2184 
2185   --Delete from the global structures so that there are no hanging/redundant
2186   --records sitting there
2187   ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
2188   ZX_GLOBAL_STRUCTURES_PKG.LOC_GEOGRAPHY_INFO_TBL.DELETE;
2189   ZX_GLOBAL_STRUCTURES_PKG.g_registration_info_tbl.DELETE;
2190   ZX_GLOBAL_STRUCTURES_PKG.g_party_tax_prof_id_info_tbl.DELETE;
2191 
2192   --Also delete the location caching global structures
2193   ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.EVENT_CLASS_MAPPING_ID.DELETE;
2194   ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_ID.DELETE;
2195   ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_LINE_ID.DELETE;
2196   ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_LEVEL_TYPE.DELETE;
2197   ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_TYPE.DELETE;
2198   ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_TABLE_NAME.DELETE;
2199   ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_ID.DELETE;
2200   ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_TYPE.DELETE;
2201   ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_VALUE.DELETE;
2202   ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_ID.DELETE;
2203   ZX_GLOBAL_STRUCTURES_PKG.LOCATION_HASH_TBL.DELETE;
2204 
2205   -- If there exists error messages in Error Table
2206   -- call DUMP_MSG to insert them into ZX_ERRORS_GT
2207   IF ZX_API_PUB.errors_tbl.trx_id.COUNT > 0 THEN
2208     DUMP_MSG;
2209   END IF;
2210 
2211   --Reset the icx_session_id at end of API
2212   ZX_SECURITY.G_ICX_SESSION_ID := null;
2213   ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
2214   -- dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
2215 
2216   --Reset the calling API info at end of API
2217   ZX_API_PUB.G_PUB_CALLING_SRVC := null;
2218 
2219   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2220     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: CALCULATE_TAX()-');
2221   END IF;
2222 
2223   l_end_time:=SYSDATE;
2224   l_total_time:= floor((l_end_time-l_start_time)*24)|| ':' ||
2225                  mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
2226                  mod(floor((l_end_time-l_start_time)*24*60*60),60);
2227 
2228   IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2229     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||' Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2230     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||' Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2231     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||' Statistics','Total Time :'|| l_total_time);
2232   END IF;
2233 
2234   IF fnd_global.conc_request_id <> -1 THEN
2235     FND_FILE.put_line(which => FND_FILE.LOG
2236                      ,buff  => 'Transfer_Mode: '||G_DATA_TRANSFER_MODE);
2237     FND_FILE.put_line(which => FND_FILE.LOG
2238                      ,buff  => 'ZX_API_PUB.CALCULATE.Statistics Start Time:'
2239                      ||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2240     FND_FILE.put_line(which => FND_FILE.LOG
2241                      ,buff  => 'ZX_API_PUB.CALCULATE.Statistics End   Time:'
2242                      ||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2243     FND_FILE.put_line(which => FND_FILE.LOG
2244                      ,buff  => 'ZX_API_PUB.CALCULATE.Statistics Total Time:'
2245                      ||l_total_time);
2246   END IF;
2247 
2248 
2249   EXCEPTION
2250     WHEN FND_API.G_EXC_ERROR THEN
2251       ROLLBACK TO Calculate_tax_PVT;
2252       x_return_status := FND_API.G_RET_STS_ERROR ;
2253       DUMP_MSG;
2254       /*---------------------------------------------------------+
2255        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2256        | in the message stack. If there is only one message in   |
2257        | the stack it retrieves this message                     |
2258        +---------------------------------------------------------*/
2259       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2260                                 p_count   => x_msg_count,
2261                                 p_data    => x_msg_data
2262                                 );
2263 
2264       IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
2265         FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
2266       END IF;
2267 
2268       l_end_time:=SYSDATE;
2269       l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
2270                       mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
2271                       mod(floor((l_end_time-l_start_time)*24*60*60),60);
2272       IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2273         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2274         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2275         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
2276       END IF;
2277 
2278       IF fnd_global.conc_request_id <> -1 THEN
2279         FND_FILE.put_line(which => FND_FILE.LOG
2283                          ||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2280                          ,buff  => 'ZX_API_PUB.CALCULATE.Exception FND_API.G_EXC_ERROR Transfer_Mode: '||G_DATA_TRANSFER_MODE);
2281         FND_FILE.put_line(which => FND_FILE.LOG
2282                          ,buff  => 'ZX_API_PUB.CALCULATE.Statistics Start Time:'
2284         FND_FILE.put_line(which => FND_FILE.LOG
2285                          ,buff  => 'ZX_API_PUB.CALCULATE.Statistics End   Time:'
2286                          ||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2287         FND_FILE.put_line(which => FND_FILE.LOG
2288                          ,buff  => 'ZX_API_PUB.CALCULATE.Statistics Total Time:'
2289                          ||l_total_time);
2290       END IF;
2291 
2292     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2293       ROLLBACK TO Calculate_tax_PVT;
2294       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2295       DUMP_MSG;
2296       FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
2297       FND_MSG_PUB.Add;
2298       /*---------------------------------------------------------+
2299        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2300        | in the message stack. If there is only one message in   |
2301        | the stack it retrieves this message                     |
2302        +---------------------------------------------------------*/
2303       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2304                                 p_count   => x_msg_count,
2305                                 p_data    => x_msg_data
2306                                 );
2307       IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
2308          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
2309       END IF;
2310 
2311       l_end_time:=SYSDATE;
2312       l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
2313                       mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
2314                       mod(floor((l_end_time-l_start_time)*24*60*60),60);
2315       IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2316         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2317         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2318         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
2319       END IF;
2320 
2321       IF fnd_global.conc_request_id <> -1 THEN
2322         FND_FILE.put_line(which => FND_FILE.LOG
2323                          ,buff  => 'ZX_API_PUB.CALCULATE.Exception FND_API.G_EXC_UNEXPECTED_ERROR Transfer_Mode: '||G_DATA_TRANSFER_MODE);
2324         FND_FILE.put_line(which => FND_FILE.LOG
2325                          ,buff  => 'ZX_API_PUB.CALCULATE.Statistics Start Time:'
2326                          ||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2327         FND_FILE.put_line(which => FND_FILE.LOG
2328                          ,buff  => 'ZX_API_PUB.CALCULATE.Statistics End   Time:'
2329                          ||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2330         FND_FILE.put_line(which => FND_FILE.LOG
2331                          ,buff  => 'ZX_API_PUB.CALCULATE.Statistics Total Time:'
2332                          ||l_total_time);
2333       END IF;
2334 
2335     WHEN OTHERS THEN
2336       ROLLBACK TO Calculate_tax_PVT;
2337       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2338       FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
2339       FND_MSG_PUB.Add;
2340       /*---------------------------------------------------------+
2341        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2342        | in the message stack. If there is only one message in   |
2343        | the stack it retrieves this message                     |
2344        +---------------------------------------------------------*/
2345       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2346                                 p_count   => x_msg_count,
2347                                 p_data    => x_msg_data
2348                                 );
2349 
2350       l_end_time:=SYSDATE;
2351       l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
2352                       mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
2353                       mod(floor((l_end_time-l_start_time)*24*60*60),60);
2354       IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2355          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
2356          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2357          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2358          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
2359       END IF;
2360 
2361       IF fnd_global.conc_request_id <> -1 THEN
2362         FND_FILE.put_line(which => FND_FILE.LOG
2363                          ,buff  => 'ZX_API_PUB.CALCULATE.Exception OTHERS Transfer_Mode: '||G_DATA_TRANSFER_MODE);
2364         FND_FILE.put_line(which => FND_FILE.LOG
2365                          ,buff  => 'ZX_API_PUB.CALCULATE.Statistics Start Time:'
2366                          ||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2367         FND_FILE.put_line(which => FND_FILE.LOG
2368                          ,buff  => 'ZX_API_PUB.CALCULATE.Statistics End   Time:'
2369                          ||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2370         FND_FILE.put_line(which => FND_FILE.LOG
2371                          ,buff  => 'ZX_API_PUB.CALCULATE.Statistics Total Time:'
2372                          ||l_total_time);
2373       END IF;
2374 
2375 
2376 END calculate_tax; --pl/sql version
2377 
2378 /* ======================================================================*
2382  |                ZX_IMPORT_TAX_LINES_GT and ZX_TRX_TAX_LINK_GT          |
2379  | PROCEDURE import_document_with_tax : Imports document with tax        |
2380  | This API also supports processing for multiple event classes          |
2381  | GTT involved : ZX_TRX_HEADERS_GT, ZX_TRANSACTION_LINES_GT ,           |
2383  * ======================================================================*/
2384 PROCEDURE Import_document_with_tax
2385   ( p_api_version           IN         NUMBER,
2386     p_init_msg_list         IN         VARCHAR2,
2387     p_commit                IN         VARCHAR2,
2388     p_validation_level      IN         NUMBER,
2389     x_return_status         OUT NOCOPY VARCHAR2 ,
2390     x_msg_count             OUT NOCOPY NUMBER ,
2391     x_msg_data              OUT NOCOPY VARCHAR2
2392   ) IS
2393    l_api_name          CONSTANT  VARCHAR2(30) := 'IMPORT_DOCUMENT_WITH_TAX';
2394    l_api_version       CONSTANT  NUMBER := 1.0;
2395    l_return_status               VARCHAR2(30);
2396    l_context_info_rec            context_info_rec_type;
2397    l_transaction_header_rec      transaction_header_rec_type;
2398    l_event_id                    NUMBER;
2399    l_precedence                  NUMBER_tbl_type;
2400    l_index                       BINARY_INTEGER;
2401    l_init_msg_list               VARCHAR2(1);
2402    l_record_tax_lines            VARCHAR2(1);
2403 
2404   CURSOR event_classes IS
2405     SELECT distinct
2406            header.event_class_code,
2407            header.application_id,
2408            header.entity_code,
2409            header.internal_organization_id,
2410            evntmap.processing_precedence
2411       FROM ZX_EVNT_CLS_MAPPINGS evntmap,
2412            ZX_TRX_HEADERS_GT header
2413      WHERE header.application_id = evntmap.application_id
2414        AND header.entity_code = evntmap.entity_code
2415        AND header.event_class_code = evntmap.event_class_code
2416      ORDER BY evntmap.processing_precedence;
2417 
2418   /*Get all the tax lines passed in import process for external tax provider */
2419   CURSOR detail_tax_lines_csr IS
2420     SELECT distinct
2421            r.tax_regime_id,
2422            t.tax_regime_code,
2423            t.tax_provider_id,
2424            r.effective_from,
2425            r.effective_to
2426       FROM ZX_IMPORT_TAX_LINES_GT t, zx_regimes_b r
2427      WHERE t.tax_provider_id is not null
2428        AND r.tax_regime_code = t.tax_regime_code
2429        AND r.effective_to is null;
2430 
2431   dtl_tax_lines  detail_tax_lines_csr%ROWTYPE;
2432   l_ptnr_index        NUMBER;
2433   l_dummy_number  NUMBER;
2434   l_start_time    DATE;
2435   l_end_time      DATE;
2436   l_total_time    VARCHAR2(15);
2437 
2438 BEGIN
2439   l_start_time := SYSDATE ;
2440 
2441   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2442     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
2443   END IF;
2444 
2445   /*--------------------------------------------------+
2446    |   Standard start of API savepoint                |
2447    +--------------------------------------------------*/
2448   SAVEPOINT import_document_PVT;
2449 
2450   /*--------------------------------------------------+
2451    |   Standard call to check for call compatibility  |
2452    +--------------------------------------------------*/
2453   IF NOT FND_API.Compatible_API_Call(l_api_version,
2454                                       p_api_version,
2455                                       l_api_name,
2456                                       G_PKG_NAME
2457                                       ) THEN
2458     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2459   END IF;
2460 
2461    /*--------------------------------------------------------------+
2462     |   Initialize message list if p_init_msg_list is set to TRUE  |
2463     +--------------------------------------------------------------*/
2464   IF p_init_msg_list is null THEN
2465     l_init_msg_list := FND_API.G_FALSE;
2466   ELSE
2467     l_init_msg_list := p_init_msg_list;
2468   END IF;
2469 
2470   IF FND_API.to_Boolean(l_init_msg_list) THEN
2471     FND_MSG_PUB.initialize;
2472   END IF;
2473 
2474 
2475   /*-----------------------------------------+
2476    |   Initialize return status to SUCCESS   |
2477    +-----------------------------------------*/
2478   x_return_status := FND_API.G_RET_STS_SUCCESS;
2479 
2480 
2481   /*-----------------------------------------+
2482    |   Populate Global Variable              |
2483    +-----------------------------------------*/
2484   G_PUB_SRVC := l_api_name;
2485   G_DATA_TRANSFER_MODE := 'TAB';
2486   G_EXTERNAL_API_CALL  := 'N';
2487 
2488   /*-----------------------------------------+
2489   | Get the event id for the whole document |
2490   +-----------------------------------------*/
2491   --Bug 7650433
2492   --select ZX_LINES_DET_FACTORS_S.nextval
2493   --into l_event_id
2494   --from dual;
2495 
2496   OPEN event_classes;
2497     LOOP
2498      FETCH event_classes BULK COLLECT INTO
2499        l_evnt_cls.event_class_code,
2500        l_evnt_cls.application_id,
2501        l_evnt_cls.entity_code,
2502        l_evnt_cls.internal_organization_id,
2503        l_evnt_cls.precedence
2504      LIMIT G_LINES_PER_FETCH;
2505      EXIT WHEN event_classes%NOTFOUND;
2506     END LOOP;
2507   CLOSE event_classes;
2508 
2509   --Event classes such as SALES_TRANSACTION_TAX_QUOTE/PURCHASE_TRANSACTION_TAX_QUOTE
2510   --are not seeded in zx_evnt_cls_mappings so cursor event classes will not
2511   --return any rows for such event classes passed.
2512   IF l_evnt_cls.event_class_code.LAST is null THEN
2513     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2514        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
2515           'Event class information does not exist - indicates SALES_TRANSACTION_TAX_QUOTE/PURCHASE_TRANSACTION_TAX_QUOTE');
2516     END IF;
2517 
2518     select event_class_code,
2519            application_id,
2520            entity_code,
2521            internal_organization_id
2522       into l_evnt_cls.event_class_code(1),
2523            l_evnt_cls.application_id(1),
2524            l_evnt_cls.entity_code(1),
2525            l_evnt_cls.internal_organization_id(1)
2526       from ZX_TRX_HEADERS_GT
2527       where rownum=1;
2528   END IF;
2529 
2530 
2531   -- added init for bug fix 5417887
2532   /* ===============================================================================*
2533   |Initialize the global structures/global temp tables owned by TDM at header level |
2534    * =============================================================================*/
2535   ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (p_event_class_rec => NULL,
2536                                            p_init_level      => 'SESSION',
2537                                            x_return_status   => l_return_status
2538                                           );
2539 
2540   set_ptnr_srvc_subscr_flag (p_event_class_rec => NULL,
2541                              x_return_status   => l_return_status
2542                             );
2543 
2544   /*---------------------------------------------------------+
2545   |  Initialize the trx line app regimes table for every doc|
2546   +--------------------------------------------------------*/
2547 
2548   IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
2549 
2550     -- Partner code, Point 2 (add a logic to conditionall execute this loop only
2551     -- when partner is installed
2552     -- IF p_event_class_rec.record_flag = 'Y' AND
2553     --   p_event_class_rec.record_for_partners_flag = 'Y' THEN
2554     /*Dump into tax regime table only after existence check */
2555 
2556     FOR dtl_tax_lines in detail_tax_lines_csr LOOP
2557       IF NOT ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.EXISTS(dtl_tax_lines.tax_regime_id) THEN
2558          ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(dtl_tax_lines.tax_regime_id).tax_regime_id :=  dtl_tax_lines.tax_regime_id;
2559          ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(dtl_tax_lines.tax_regime_id).tax_regime_code:=  dtl_tax_lines.tax_regime_code;
2560          ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(dtl_tax_lines.tax_regime_id).tax_provider_id :=  dtl_tax_lines.tax_provider_id;
2561          /* Bug 5557565 */
2562          ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(dtl_tax_lines.tax_regime_id).effective_from := dtl_tax_lines.effective_from;
2563          ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(dtl_tax_lines.tax_regime_id).effective_to := dtl_tax_lines.effective_to;
2564          ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(dtl_tax_lines.tax_regime_id).partner_processing_flag :=  'C';
2565       END IF;
2566     END LOOP;
2567     --END IF;
2568 
2569     ZX_GLOBAL_STRUCTURES_PKG.init_trx_line_app_regime_tbl;
2570   END IF;
2571 
2572   ZX_GLOBAL_STRUCTURES_PKG.LOC_GEOGRAPHY_INFO_TBL.DELETE;
2573   ZX_GLOBAL_STRUCTURES_PKG.g_registration_info_tbl.DELETE;
2574   ZX_GLOBAL_STRUCTURES_PKG.tax_calc_flag_tbl.DELETE;
2575   /*-----------------------------------------+
2576    |   Loop for each transaction header      |
2577    +-----------------------------------------*/
2578   FOR i IN 1..nvl(l_evnt_cls.event_class_code.LAST,0)
2579     LOOP
2580     --Bug 7650433
2581     select ZX_LINES_DET_FACTORS_S.nextval
2582      into l_event_id
2583     from dual;
2584     -- added for bug fix 5417887
2585     IF l_evnt_cls.event_class_code(i) = 'CREDIT_MEMO' THEN
2586       ZX_GLOBAL_STRUCTURES_PKG.g_credit_memo_exists_flg := 'Y';
2587     END IF;
2588 
2589     BEGIN
2590       --SAVEPOINT Import_Doc_Rel_PVT;
2591       import_tax_pvt (l_evnt_cls,
2592                       l_api_name,
2593                       l_event_id,
2594                       i,
2595                       p_api_version,
2596                       l_init_msg_list,
2597                       p_commit,
2598                       p_validation_level,
2599                       l_return_status,
2600                       x_msg_count,
2601                       x_msg_data
2602                      );
2603 
2604       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2605         RAISE FND_API.G_EXC_ERROR;
2606       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2607         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2608       END IF;
2609 
2610     EXCEPTION
2611       WHEN FND_API.G_EXC_ERROR THEN
2612         --ROLLBACK TO Import_Doc_Rel_PVT;
2613 
2614         --Call API to dump into zx_errors_gt
2615         IF ( errors_tbl.application_id.LAST is NOT NULL) THEN
2616           DUMP_MSG;
2617         END IF;
2618         BEGIN
2619           SELECT 1 INTO l_dummy_number FROM ZX_ERRORS_GT WHERE ROWNUM = 1;
2623 
2620         EXCEPTION WHEN OTHERS THEN
2621           l_dummy_number := null;
2622         END;
2624         IF l_dummy_number = 1 THEN
2625           x_return_status := FND_API.G_RET_STS_SUCCESS;
2626         ELSE
2627           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2628           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2629         END IF;
2630 
2631         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
2632           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'Import Tax Pvt returned expected error');
2633         END IF;
2634       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2635         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2636     END;
2637 
2638 
2639     -- bug fix 5417887 begin 17-Aug-2006
2640     -- Following code for tail end services/TRL/ptnr sync code, is moved from calculte_tax_pvt
2641     -- and should be handled for each event_class_code. At present, all product integrations call etax
2642     -- for one event class at a time, hence we put these processed out of the event class loop.
2643     -- In the future, if there are cases that etax handle multiple event_class batch, we need to
2644     -- revisist the following code and change accordingly.
2645 
2646     -- For furture LTE features, there are could cases that related documents was imported together
2647     -- with original document. For this case, we need to make sure the tail end service for the original
2648     -- docs must be handled before the calculation process of the related docs.
2649 
2650     /*-----------------------------------------------------+
2651      |   Call to eTax service Dump Detail Tax Lines Into GT|
2652      +-----------------------------------------------------*/
2653     ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(x_return_status  => l_return_status );
2654 
2655     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2656        x_return_status := l_return_status ;
2657        --DUMP_MSG;
2658        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2659          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt returned errors');
2660        END IF;
2661        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2662     END IF;
2663 
2664     /*--------------------------------------------------+
2665      |   Call to eTax Service Tax Lines Determination   |
2666      +--------------------------------------------------*/
2667     ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(
2668                          p_event_class_rec => zx_global_structures_pkg.g_event_class_rec,
2669                          x_return_status   => l_return_status
2670                                                        );
2671 
2672     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2673        x_return_status := l_return_status;
2674        --DUMP_MSG;
2675        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2676          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination returned errors');
2677        END IF;
2678        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2679     END IF;
2680 
2681     /*--------------------------------------------------+
2682      |   Call to eTax Service Manage Tax Lines          |
2683      +--------------------------------------------------*/
2684      /*Bug 3649502 - Check for record flag before calling TRR service*/
2685     --IF zx_global_structures_pkg.g_event_class_rec.record_flag = 'Y' THEN
2686     l_record_tax_lines := ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.record_flag;
2687     IF ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.record_flag = 'Y' and
2688        ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'Y' THEN
2689        l_record_tax_lines := 'N';
2690     END IF;
2691     IF l_record_tax_lines = 'Y' THEN
2692        ZX_TRL_PUB_PKG.manage_taxlines(p_event_class_rec  =>zx_global_structures_pkg.g_event_class_rec,
2693                                       x_return_status    =>l_return_status
2694                                      );
2695     END IF;
2696 
2697     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2698        x_return_status := l_return_status;
2699        --DUMP_MSG;
2700        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2701          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TRL_PUB_PKG.manage_taxlines returned errors');
2702        END IF;
2703        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2704     END IF;
2705 
2706     -- bug#6389189
2707     -- need to flush ZX_DETAIL_TAX_LINES_GT before the procedure
2708     -- import_tax_pvt is called for the next event class
2709 
2710     -- Bug fix 7506576 Included additional condition flag quote_flag when
2711     -- deleting records from GT TABLES
2712 
2713     --IF zx_global_structures_pkg.g_event_class_rec.record_flag = 'Y'  AND ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'N'
2714     -- Reimplemented the fix done in bug#7506576
2715     IF l_record_tax_lines = 'Y' THEN
2716       DELETE FROM ZX_DETAIL_TAX_LINES_GT;
2717     END IF;
2718 
2719 
2720     /*******************************PARTNER CODE START****************************/
2721     IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
2722       ptnr_bulk_sync_calc_tax ( p_event_class_rec   => zx_global_structures_pkg.g_event_class_rec ,
2723                                 x_return_status     => l_return_status
2724                               );
2725       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2726         x_return_status := l_return_status;
2727         --DUMP_MSG;
2728         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2729              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ptnr_bulk_sync_calc_tax returned errors');
2730         END IF;
2734            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2731         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2732            RAISE FND_API.G_EXC_ERROR;
2733          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2735          END IF;
2736       END IF;
2737     END IF;
2738     /*******************************PARTNER CODE END****************************/
2739 
2740     -- bug fix 6824850
2741     ZX_GLOBAL_STRUCTURES_PKG.PTNR_TAX_REGIME_TBL.DELETE;
2742     ZX_GLOBAL_STRUCTURES_PKG.lte_trx_tbl.DELETE;
2743 
2744   -- bug fix 5417887 end 17-Aug-2006
2745   END LOOP;--event_classes cursor
2746 
2747   -- If there exists error messages in Error Table
2748   -- call DUMP_MSG to insert them into ZX_ERRORS_GT
2749   IF ZX_API_PUB.errors_tbl.trx_id.COUNT > 0 THEN
2750      DUMP_MSG;
2751   END IF;
2752 
2753   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2754      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
2755   END IF;
2756 
2757   l_end_time:=SYSDATE;
2758   l_total_time:=floor((l_end_time-l_start_time)*24)|| ':' ||
2759                 mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
2760                 mod(floor((l_end_time-l_start_time)*24*60*60),60);
2761 
2762   IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2763     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2764     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2765     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
2766     SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
2767     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
2768     SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
2769     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
2770     SELECT COUNT(*) INTO l_dummy_number FROM ZX_IMPORT_TAX_LINES_GT;
2771     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_IMPORT_TAX_LINES_GT :'||l_dummy_number);
2772     SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_TAX_LINK_GT;
2773     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_TAX_LINK_GT :'||l_dummy_number);
2774   END IF;
2775 
2776   SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
2777   IF fnd_global.conc_request_id <> -1 AND l_dummy_number > 1 THEN
2778     FND_FILE.put_line(which => FND_FILE.LOG
2779                      ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics Start Time:' ||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2780     FND_FILE.put_line(which => FND_FILE.LOG
2781                      ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics End   Time:' ||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2782     FND_FILE.put_line(which => FND_FILE.LOG
2783                      ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics Total Time:' ||l_total_time);
2784     SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
2785     FND_FILE.put_line(which => FND_FILE.LOG
2786                      ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
2787     SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
2788     FND_FILE.put_line(which => FND_FILE.LOG
2789                      ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
2790     SELECT COUNT(*) INTO l_dummy_number FROM ZX_IMPORT_TAX_LINES_GT;
2791     FND_FILE.put_line(which => FND_FILE.Log
2792                      ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_IMPORT_TAX_LINES_GT :'||l_dummy_number);
2793     SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_TAX_LINK_GT;
2794     FND_FILE.put_line(which => FND_FILE.LOG
2795                      ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_TRX_TAX_LINK_GT :'||l_dummy_number);
2796   END IF;
2797 
2798 
2799 
2800   EXCEPTION
2801     WHEN FND_API.G_EXC_ERROR THEN
2802       ROLLBACK TO Import_Document_PVT;
2803       --Close all open cursors
2804       x_return_status := FND_API.G_RET_STS_ERROR;
2805       DUMP_MSG;
2806       IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
2807         FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
2808       END IF;
2809 
2810       l_end_time:=SYSDATE;
2811       l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
2812                       mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
2813                       mod(floor((l_end_time-l_start_time)*24*60*60),60);
2814       IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2815         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2816         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2817         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
2818         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
2819         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
2820         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
2821         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
2822         SELECT COUNT(*) INTO l_dummy_number FROM ZX_IMPORT_TAX_LINES_GT;
2826       END IF;
2823         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_IMPORT_TAX_LINES_GT :'||l_dummy_number);
2824         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_TAX_LINK_GT;
2825         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_TAX_LINK_GT :'||l_dummy_number);
2827 
2828       SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
2829       IF fnd_global.conc_request_id <> -1 AND l_dummy_number > 1 THEN
2830         FND_FILE.put_line(which => FND_FILE.LOG
2831                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Exception  FND_API.G_EXC_ERROR');
2832         FND_FILE.put_line(which => FND_FILE.LOG
2833                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics Start Time:' ||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2834         FND_FILE.put_line(which => FND_FILE.LOG
2835                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics End   Time:' ||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2836         FND_FILE.put_line(which => FND_FILE.LOG
2837                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics Total Time:' ||l_total_time);
2838         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
2839         FND_FILE.put_line(which => FND_FILE.LOG
2840                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
2841         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
2842         FND_FILE.put_line(which => FND_FILE.LOG
2843                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
2844         SELECT COUNT(*) INTO l_dummy_number FROM ZX_IMPORT_TAX_LINES_GT;
2845         FND_FILE.put_line(which => FND_FILE.Log
2846                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_IMPORT_TAX_LINES_GT :'||l_dummy_number);
2847         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_TAX_LINK_GT;
2848         FND_FILE.put_line(which => FND_FILE.LOG
2849                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_TRX_TAX_LINK_GT :'||l_dummy_number);
2850       END IF;
2851 
2852 
2853     WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2854       ROLLBACK TO Import_Document_PVT;
2855       --Close all open cursors
2856       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2857       DUMP_MSG;
2858       FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
2859       FND_MSG_PUB.Add;
2860      /*---------------------------------------------------------+
2861       | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2862       | in the message stack. If there is only one message in   |
2863       | the stack it retrieves this message                     |
2864       +---------------------------------------------------------*/
2865       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2866                                 p_count   => x_msg_count,
2867                                 p_data    => x_msg_data
2868                                 );
2869       IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
2870         FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
2871       END IF;
2872 
2873       l_end_time:=SYSDATE;
2874       l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
2875                       mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
2876                       mod(floor((l_end_time-l_start_time)*24*60*60),60);
2877 
2878       IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2879         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2880         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2881         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
2882         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
2883         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
2884         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
2885         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
2886         SELECT COUNT(*) INTO l_dummy_number FROM ZX_IMPORT_TAX_LINES_GT;
2887         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_IMPORT_TAX_LINES_GT :'||l_dummy_number);
2888         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_TAX_LINK_GT;
2889         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_TAX_LINK_GT :'||l_dummy_number);
2890       END IF;
2891 
2892       SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
2893       IF fnd_global.conc_request_id <> -1 AND l_dummy_number > 1 THEN
2894         FND_FILE.put_line(which => FND_FILE.LOG
2895                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Exception  FND_API.G_EXC_UNEXPECTED_ERROR');
2896         FND_FILE.put_line(which => FND_FILE.LOG
2897                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics Start Time:' ||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2898         FND_FILE.put_line(which => FND_FILE.LOG
2899                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics End   Time:' ||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2900         FND_FILE.put_line(which => FND_FILE.LOG
2901                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics Total Time:' ||l_total_time);
2902         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
2903         FND_FILE.put_line(which => FND_FILE.LOG
2904                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
2905         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
2906         FND_FILE.put_line(which => FND_FILE.LOG
2907                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
2908         SELECT COUNT(*) INTO l_dummy_number FROM ZX_IMPORT_TAX_LINES_GT;
2909         FND_FILE.put_line(which => FND_FILE.Log
2910                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_IMPORT_TAX_LINES_GT :'||l_dummy_number);
2911         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_TAX_LINK_GT;
2912         FND_FILE.put_line(which => FND_FILE.LOG
2913                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_TRX_TAX_LINK_GT :'||l_dummy_number);
2914       END IF;
2915 
2916     WHEN OTHERS THEN
2917       ROLLBACK TO Import_Document_PVT;
2918       --Close all open cursors
2919       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2920       FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
2921       FND_MSG_PUB.Add;
2922      /*---------------------------------------------------------+
2923       | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2924       | in the message stack. If there is only one message in   |
2925       | the stack it retrieves this message                     |
2926       +---------------------------------------------------------*/
2927       FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2928                                 p_count   => x_msg_count,
2929                                 p_data    => x_msg_data
2930                                 );
2931 
2932       l_end_time:=SYSDATE;
2933       l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
2934                       mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
2935                       mod(floor((l_end_time-l_start_time)*24*60*60),60);
2936       IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2937         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
2938         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2939         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2940         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
2941         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
2942         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
2943         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
2944         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
2945         SELECT COUNT(*) INTO l_dummy_number FROM ZX_IMPORT_TAX_LINES_GT;
2946         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_IMPORT_TAX_LINES_GT :'||l_dummy_number);
2947         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_TAX_LINK_GT;
2948         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_TAX_LINK_GT :'||l_dummy_number);
2949       END IF;
2950 
2951       SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
2952       IF fnd_global.conc_request_id <> -1 AND l_dummy_number > 1 THEN
2953         FND_FILE.put_line(which => FND_FILE.LOG
2954                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Exception  OTHERS');
2955         FND_FILE.put_line(which => FND_FILE.LOG
2956                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics Start Time:' ||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
2957         FND_FILE.put_line(which => FND_FILE.LOG
2958                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics End   Time:' ||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
2959         FND_FILE.put_line(which => FND_FILE.LOG
2960                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics Total Time:' ||l_total_time);
2961         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
2962         FND_FILE.put_line(which => FND_FILE.LOG
2963                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
2964         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
2965         FND_FILE.put_line(which => FND_FILE.LOG
2966                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
2967         SELECT COUNT(*) INTO l_dummy_number FROM ZX_IMPORT_TAX_LINES_GT;
2968         FND_FILE.put_line(which => FND_FILE.Log
2969                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_IMPORT_TAX_LINES_GT :'||l_dummy_number);
2970         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_TAX_LINK_GT;
2971         FND_FILE.put_line(which => FND_FILE.LOG
2972                          ,buff  => 'ZX_API_PUB.import_document_with_tax.Statistics: Number of records in ZX_TRX_TAX_LINK_GT :'||l_dummy_number);
2973       END IF;
2974 
2975 END import_document_with_tax;
2976 
2977  /* ======================================================================*
2978  | PROCEDURE synchronize_tax_repository : Updates tax repository         |
2979  | There exists only pl/sql version for API                              |
2980  * ======================================================================*/
2981 
2982 PROCEDURE synchronize_tax_repository
2983   (p_api_version           IN         NUMBER,
2984    p_init_msg_list         IN         VARCHAR2,
2985    p_commit                IN         VARCHAR2,
2986    p_validation_level      IN         NUMBER,
2987    x_return_status         OUT NOCOPY VARCHAR2,
2988    x_msg_count             OUT NOCOPY NUMBER,
2989    x_msg_data              OUT NOCOPY VARCHAR2,
2990    p_sync_trx_rec          IN         sync_trx_rec_type,
2991    p_sync_trx_lines_tbl    IN         sync_trx_lines_tbl_type%type
2992    ) IS
2993   l_api_name          CONSTANT  VARCHAR2(30) := 'SYNCHRONIZE_TAX_REPOSITORY';
2994   l_api_version       CONSTANT  NUMBER := 1.0;
2995   l_return_status               VARCHAR2(30);
2996   l_index                       BINARY_INTEGER;
2997   l_event_id                    NUMBER;
2998   l_event_class_rec             event_class_rec_type;
2999   l_init_msg_list               VARCHAR2(1);
3000   l_upg_trx_info_rec            ZX_ON_FLY_TRX_UPGRADE_PKG.zx_upg_trx_info_rec_type;
3001   l_start_time    DATE;
3002   l_end_time      DATE;
3003   l_total_time    VARCHAR2(15);
3004 BEGIN
3005   l_start_time:=SYSDATE;
3006 
3007   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3008     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
3009   END IF;
3010 
3011 
3012   /*--------------------------------------------------+
3013    |   Standard start of API savepoint                |
3014    +--------------------------------------------------*/
3015   SAVEPOINT Synchronize_tax_PVT;
3016 
3017   /*--------------------------------------------------+
3018   |   Standard call to check for call compatibility  |
3019   +--------------------------------------------------*/
3020 
3021   IF NOT FND_API.Compatible_API_Call(l_api_version,
3022                                      p_api_version,
3023                                      l_api_name,
3024                                      G_PKG_NAME
3025                                     ) THEN
3026     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3027   END IF;
3028 
3029   /*--------------------------------------------------------------+
3030   |   Initialize message list if p_init_msg_list is set to TRUE  |
3031   +--------------------------------------------------------------*/
3032   IF p_init_msg_list is null THEN
3033     l_init_msg_list := FND_API.G_FALSE;
3034   ELSE
3035   l_init_msg_list := p_init_msg_list;
3036   END IF;
3037 
3038   IF FND_API.to_Boolean(l_init_msg_list) THEN
3039     FND_MSG_PUB.initialize;
3040   END IF;
3041 
3042   /*-----------------------------------------+
3043    |   Initialize return status to SUCCESS   |
3044    +-----------------------------------------*/
3045 
3046   x_return_status := FND_API.G_RET_STS_SUCCESS;
3047 
3048   /*-----------------------------------------+
3049    |   Populate Global Variable              |
3050    +-----------------------------------------*/
3051 
3052   G_PUB_SRVC := l_api_name;
3053   G_DATA_TRANSFER_MODE := 'PLS';
3054   G_EXTERNAL_API_CALL  := 'N';
3055 
3056   /*------------------------------------------+
3057    |Populate the event class record          |
3058    +-----------------------------------------*/
3059   l_event_class_rec.APPLICATION_ID              :=  p_sync_trx_rec.APPLICATION_ID;
3060   l_event_class_rec.ENTITY_CODE                 :=  p_sync_trx_rec.ENTITY_CODE;
3061   l_event_class_rec.EVENT_CLASS_CODE            :=  p_sync_trx_rec.EVENT_CLASS_CODE;
3062   l_event_class_rec.EVENT_TYPE_CODE             :=  p_sync_trx_rec.EVENT_TYPE_CODE;
3063   l_event_class_rec.TRX_ID                      :=  p_sync_trx_rec.TRX_ID;
3064   l_event_class_rec.record_flag                 := 'Y';
3065   l_event_class_rec.record_for_partners_flag    := 'Y';
3066 
3067   BEGIN
3068 
3069     SELECT prod_family_grp_code into l_event_class_rec.prod_family_grp_code
3070     FROM
3071     zx_evnt_cls_mappings
3072     WHERE
3073     application_id = p_sync_trx_rec.application_id
3074     AND entity_code = p_sync_trx_rec.entity_code
3075     AND event_class_code = p_sync_trx_rec.event_class_code;
3076 
3077   EXCEPTION
3078     WHEN OTHERS THEN
3079      --NULL;
3080      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3081        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Incorrect event_class_code passed: ' || p_sync_trx_rec.event_class_code);
3082      END IF;
3083      RETURN;
3084   END;
3085 
3086 
3087 
3088   BEGIN
3089 
3090     SELECT tax_event_type_code into l_event_class_rec.tax_event_type_code
3091     FROM
3092     ZX_EVNT_TYP_MAPPINGS
3093     WHERE
3094     application_id = p_sync_trx_rec.application_id
3095     AND entity_code = p_sync_trx_rec.entity_code
3096     AND event_class_code = p_sync_trx_rec.event_class_code
3097     AND event_type_code = p_sync_trx_rec.event_type_code;
3098 
3099   EXCEPTION
3100     WHEN OTHERS THEN
3101      --NULL;
3102      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3106   END;
3103        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Incorrect event_type_code passed: ' || p_sync_trx_rec.event_type_code);
3104      END IF;
3105      RETURN;
3107 
3108   BEGIN
3109 
3110     SELECT distinct internal_organization_id into
3111     l_event_class_rec.internal_organization_id
3112     FROM
3113     zx_lines_det_factors
3114     WHERE
3115     application_id = p_sync_trx_rec.application_id
3116     AND entity_code = p_sync_trx_rec.entity_code
3117     AND event_class_code = p_sync_trx_rec.event_class_code
3118     AND trx_id = p_sync_trx_rec.trx_id;
3119 
3120   EXCEPTION
3121     WHEN OTHERS THEN
3122      NULL;
3123   END;
3124 
3125   /*--------------------------------------------------+
3126    |   Update zx_lines_det_factors                    |
3127    +--------------------------------------------------*/
3128   /*Retrieve the sequence id since it has to be same for all updated rows*/
3129   select ZX_LINES_DET_FACTORS_S.nextval
3130     INTO l_event_class_rec.event_id
3131     FROM dual;
3132 
3133   IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3134      FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
3135           'application_id: '||to_char(p_sync_trx_rec.application_id)||
3136           ', entity_code: '||p_sync_trx_rec.entity_code||
3137           ', event_class_code: '||p_sync_trx_rec.event_class_code||
3138           ', event_type_code: '||p_sync_trx_rec.event_type_code||
3139           ', tax_event_type_code: '||l_event_class_rec.tax_event_type_code||
3140           ', trx_id: '||to_char(p_sync_trx_rec.trx_id)||
3141           ', trx_number: '||p_sync_trx_rec.trx_number||
3142           ', trx_description: '||p_sync_trx_rec.trx_description||
3143           ', trx_communicated_date: '||to_char(p_sync_trx_rec.trx_communicated_date)||
3144           ', batch_source_id: '||to_char(p_sync_trx_rec.batch_source_id)||
3145           ', batch_source_name: '||p_sync_trx_rec.batch_source_name||
3146           ', doc_seq_id: '||to_char(p_sync_trx_rec.doc_seq_id)||
3147           ', doc_seq_name: '||p_sync_trx_rec.doc_seq_name||
3148           ', doc_seq_name: '||p_sync_trx_rec.doc_seq_value||
3149           ', trx_due_date: '||to_char(p_sync_trx_rec.trx_due_date)||
3150           ', trx_type_description: '||to_char(p_sync_trx_rec.trx_type_description)||
3151           ', supplier_tax_invoice_number: '||p_sync_trx_rec.supplier_tax_invoice_number||
3152           ', supplier_exchange_rate: '||to_char(p_sync_trx_rec.supplier_exchange_rate)||
3153           ', supplier_tax_invoice_date: '||to_char(p_sync_trx_rec.supplier_tax_invoice_date)||
3154           ', tax_invoice_date: '||to_char(p_sync_trx_rec.tax_invoice_date)||
3155           ', tax_invoice_number: '||p_sync_trx_rec.tax_invoice_number||
3156           ', port_of_entry_code: '||p_sync_trx_rec.port_of_entry_code);
3157 
3158      FOR i IN 1..nvl(p_sync_trx_lines_tbl.APPLICATION_ID.LAST,-99)
3159      LOOP
3160         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
3161           'trx_line_id: '||to_char(p_sync_trx_lines_tbl.trx_line_id(i))||
3162           ', trx_level_type: '||p_sync_trx_lines_tbl.trx_level_type(i)||
3163           ', trx_waybill_number: '||p_sync_trx_lines_tbl.trx_waybill_number(i)||
3164           ', trx_line_description: '||p_sync_trx_lines_tbl.trx_line_description(i)||
3165           ', product_description: '||p_sync_trx_lines_tbl.product_description(i)||
3166           ', trx_line_gl_date: '||to_char(p_sync_trx_lines_tbl.trx_line_gl_date(i))||
3167           ', merchant_party_name: '||p_sync_trx_lines_tbl.merchant_party_name(i)||
3168           ', merchant_party_document_number: '||p_sync_trx_lines_tbl.merchant_party_document_number(i)||
3169           ', merchant_party_reference: '||p_sync_trx_lines_tbl.merchant_party_reference(i)||
3170           ', merchant_party_taxpayer_id: '||p_sync_trx_lines_tbl.merchant_party_taxpayer_id(i)||
3171           ', merchant_party_tax_reg_number: '||p_sync_trx_lines_tbl.merchant_party_tax_reg_number(i)||
3172           ', asset_number: '||to_char(p_sync_trx_lines_tbl.asset_number(i)));
3173      END LOOP;
3174   END IF;
3175 
3176   /* Fixed as part of 6826754 */
3177   UPDATE ZX_LINES
3178      SET TRX_NUMBER = p_sync_trx_rec.TRX_NUMBER
3179    WHERE APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
3180      AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
3181      AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
3182      AND TRX_ID                    = p_sync_trx_rec.TRX_ID;
3183 
3184      IF  (l_event_class_rec.prod_family_grp_code = 'P2P') THEN
3185        UPDATE ZX_LINES_SUMMARY
3186           SET TRX_NUMBER = p_sync_trx_rec.TRX_NUMBER
3187         WHERE APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
3188           AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
3189           AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
3190           AND TRX_ID                    = p_sync_trx_rec.TRX_ID;
3191 
3192        UPDATE ZX_REC_NREC_DIST
3193           SET TRX_NUMBER = p_sync_trx_rec.TRX_NUMBER
3194         WHERE APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
3195           AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
3196           AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
3197           AND TRX_ID                    = p_sync_trx_rec.TRX_ID;
3198      END IF;
3199 
3200   /* update the header level attributes*/
3201   UPDATE ZX_LINES_DET_FACTORS SET
3202         EVENT_ID                       = l_event_class_rec.event_id,
3203         --EVENT_TYPE_CODE              = p_sync_trx_rec.EVENT_TYPE_CODE, /*bug 3922983*/
3204         TRX_NUMBER                     = p_sync_trx_rec.TRX_NUMBER,
3205         TRX_DESCRIPTION                = p_sync_trx_rec.TRX_DESCRIPTION,
3206         TRX_COMMUNICATED_DATE          = p_sync_trx_rec.TRX_COMMUNICATED_DATE,
3207         BATCH_SOURCE_ID                = p_sync_trx_rec.BATCH_SOURCE_ID,
3208         BATCH_SOURCE_NAME              = p_sync_trx_rec.BATCH_SOURCE_NAME,
3209         DOC_SEQ_ID                     = p_sync_trx_rec.DOC_SEQ_ID,
3210         DOC_SEQ_NAME                   = p_sync_trx_rec.DOC_SEQ_NAME,
3211         DOC_SEQ_VALUE                  = p_sync_trx_rec.DOC_SEQ_VALUE,
3212         TRX_DUE_DATE                   = p_sync_trx_rec.TRX_DUE_DATE,
3213         TRX_TYPE_DESCRIPTION           = p_sync_trx_rec.TRX_TYPE_DESCRIPTION,
3214         SUPPLIER_TAX_INVOICE_NUMBER    = decode(p_sync_trx_rec.SUPPLIER_TAX_INVOICE_NUMBER,FND_API.G_MISS_CHAR,SUPPLIER_TAX_INVOICE_NUMBER,p_sync_trx_rec.SUPPLIER_TAX_INVOICE_NUMBER), --Bug 5910475
3215         SUPPLIER_TAX_INVOICE_DATE      = decode(p_sync_trx_rec.SUPPLIER_TAX_INVOICE_DATE,FND_API.G_MISS_DATE,SUPPLIER_TAX_INVOICE_DATE,p_sync_trx_rec.SUPPLIER_TAX_INVOICE_DATE),       --Bug 5910475
3216         SUPPLIER_EXCHANGE_RATE         = decode(p_sync_trx_rec.SUPPLIER_EXCHANGE_RATE,FND_API.G_MISS_NUM,SUPPLIER_EXCHANGE_RATE,p_sync_trx_rec.SUPPLIER_EXCHANGE_RATE),                 --Bug 5910475
3217         TAX_INVOICE_DATE               = decode(p_sync_trx_rec.TAX_INVOICE_DATE,FND_API.G_MISS_DATE,TAX_INVOICE_DATE,p_sync_trx_rec.TAX_INVOICE_DATE),                                  --Bug 5910475
3218         TAX_INVOICE_NUMBER             = decode(p_sync_trx_rec.TAX_INVOICE_NUMBER,FND_API.G_MISS_CHAR,TAX_INVOICE_NUMBER,p_sync_trx_rec.TAX_INVOICE_NUMBER),                            --Bug 5910475
3219         PORT_OF_ENTRY_CODE             = decode(p_sync_trx_rec.PORT_OF_ENTRY_CODE,FND_API.G_MISS_CHAR,PORT_OF_ENTRY_CODE,p_sync_trx_rec.PORT_OF_ENTRY_CODE) ,                           --Bug 5910475
3220         APPLICATION_DOC_STATUS         = decode(p_sync_trx_rec.APPLICATION_DOC_STATUS,FND_API.G_MISS_CHAR,APPLICATION_DOC_STATUS,p_sync_trx_rec.APPLICATION_DOC_STATUS)                 --Bug 5910475
3221       WHERE  APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
3222          AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
3223          AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
3224          AND TRX_ID                    = p_sync_trx_rec.TRX_ID;
3225 
3226   --Bugfix 4486946 -Call on the fly upgrade if the transaction if not found
3227   IF sql%notfound THEN
3228     l_upg_trx_info_rec.application_id   := l_event_class_rec.application_id;
3229     l_upg_trx_info_rec.entity_code      := l_event_class_rec.entity_code;
3230     l_upg_trx_info_rec.event_class_code := l_event_class_rec.event_class_code;
3231     l_upg_trx_info_rec.trx_id           := l_event_class_rec.trx_id;
3232     ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(p_upg_trx_info_rec   =>  l_upg_trx_info_rec,
3233                                                  x_return_status      =>  l_return_status
3234                                                 );
3235     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3236       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3237         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly returned errors');
3238       END IF;
3239       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3240         RAISE FND_API.G_EXC_ERROR;
3241       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3242         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3243       END IF;
3244     END IF;
3245     /* update the header level attributes*/
3246     UPDATE ZX_LINES_DET_FACTORS SET
3247         EVENT_ID                       = l_event_class_rec.event_id,
3248         --EVENT_TYPE_CODE              = p_sync_trx_rec.EVENT_TYPE_CODE, /*bug 3922983*/
3249         TRX_NUMBER                     = p_sync_trx_rec.TRX_NUMBER,
3250         TRX_DESCRIPTION                = p_sync_trx_rec.TRX_DESCRIPTION,
3251         TRX_COMMUNICATED_DATE          = p_sync_trx_rec.TRX_COMMUNICATED_DATE,
3252         BATCH_SOURCE_ID                = p_sync_trx_rec.BATCH_SOURCE_ID,
3253         BATCH_SOURCE_NAME              = p_sync_trx_rec.BATCH_SOURCE_NAME,
3254         DOC_SEQ_ID                     = p_sync_trx_rec.DOC_SEQ_ID,
3255         DOC_SEQ_NAME                   = p_sync_trx_rec.DOC_SEQ_NAME,
3256         DOC_SEQ_VALUE                  = p_sync_trx_rec.DOC_SEQ_VALUE,
3257         TRX_DUE_DATE                   = p_sync_trx_rec.TRX_DUE_DATE,
3258         TRX_TYPE_DESCRIPTION           = p_sync_trx_rec.TRX_TYPE_DESCRIPTION,
3259         SUPPLIER_TAX_INVOICE_NUMBER    = decode(p_sync_trx_rec.SUPPLIER_TAX_INVOICE_NUMBER,FND_API.G_MISS_CHAR,SUPPLIER_TAX_INVOICE_NUMBER,p_sync_trx_rec.SUPPLIER_TAX_INVOICE_NUMBER), --Bug 5910475
3260         SUPPLIER_TAX_INVOICE_DATE      = decode(p_sync_trx_rec.SUPPLIER_TAX_INVOICE_DATE,FND_API.G_MISS_DATE,SUPPLIER_TAX_INVOICE_DATE,p_sync_trx_rec.SUPPLIER_TAX_INVOICE_DATE),       --Bug 5910475
3261         SUPPLIER_EXCHANGE_RATE         = decode(p_sync_trx_rec.SUPPLIER_EXCHANGE_RATE,FND_API.G_MISS_NUM,SUPPLIER_EXCHANGE_RATE,p_sync_trx_rec.SUPPLIER_EXCHANGE_RATE),                 --Bug 5910475
3262         TAX_INVOICE_DATE               = decode(p_sync_trx_rec.TAX_INVOICE_DATE,FND_API.G_MISS_DATE,TAX_INVOICE_DATE,p_sync_trx_rec.TAX_INVOICE_DATE),                                  --Bug 5910475
3263         TAX_INVOICE_NUMBER             = decode(p_sync_trx_rec.TAX_INVOICE_NUMBER,FND_API.G_MISS_CHAR,TAX_INVOICE_NUMBER,p_sync_trx_rec.TAX_INVOICE_NUMBER),                            --Bug 5910475
3264         PORT_OF_ENTRY_CODE             = decode(p_sync_trx_rec.PORT_OF_ENTRY_CODE,FND_API.G_MISS_CHAR,PORT_OF_ENTRY_CODE,p_sync_trx_rec.PORT_OF_ENTRY_CODE) ,                           --Bug 5910475
3265         APPLICATION_DOC_STATUS         = decode(p_sync_trx_rec.APPLICATION_DOC_STATUS,FND_API.G_MISS_CHAR,APPLICATION_DOC_STATUS,p_sync_trx_rec.APPLICATION_DOC_STATUS)                 --Bug 5910475
3266        WHERE APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
3267          AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
3268          AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
3269          AND TRX_ID                    = p_sync_trx_rec.TRX_ID;
3270 
3271     /* Fixed as part of 6826754 */
3272     UPDATE ZX_LINES
3273        SET TRX_NUMBER = p_sync_trx_rec.TRX_NUMBER
3274      WHERE APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
3275        AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
3276        AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
3277        AND TRX_ID                    = p_sync_trx_rec.TRX_ID;
3278 
3279        IF  (l_event_class_rec.prod_family_grp_code = 'P2P') THEN
3280          UPDATE ZX_LINES_SUMMARY
3281             SET TRX_NUMBER = p_sync_trx_rec.TRX_NUMBER
3282           WHERE APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
3283             AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
3284             AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
3285             AND TRX_ID                    = p_sync_trx_rec.TRX_ID;
3286 
3287          UPDATE ZX_REC_NREC_DIST
3288             SET TRX_NUMBER = p_sync_trx_rec.TRX_NUMBER
3289           WHERE APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
3290             AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
3291             AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
3292             AND TRX_ID                    = p_sync_trx_rec.TRX_ID;
3293        END IF;
3294 
3295   END IF; --sql%notfound
3296   --Bugfix 4486946 - on-the-fly upgrade end
3297 
3298   /* update the line level attributes if passed*/
3299   IF  (p_sync_trx_lines_tbl.APPLICATION_ID.EXISTS(1)) THEN
3300     FORALL i IN 1..nvl(p_sync_trx_lines_tbl.APPLICATION_ID.LAST,-99)
3301       UPDATE ZX_LINES_DET_FACTORS SET
3302         TRX_LEVEL_TYPE                 = p_sync_trx_lines_tbl.TRX_LEVEL_TYPE(i),
3303         TRX_LINE_ID                    = p_sync_trx_lines_tbl.TRX_LINE_ID(i),
3304         TRX_WAYBILL_NUMBER             = p_sync_trx_lines_tbl.TRX_WAYBILL_NUMBER(i),
3305         TRX_LINE_DESCRIPTION           = p_sync_trx_lines_tbl.TRX_LINE_DESCRIPTION(i),
3306         PRODUCT_DESCRIPTION            = p_sync_trx_lines_tbl.PRODUCT_DESCRIPTION(i),
3307         TRX_LINE_GL_DATE               = p_sync_trx_lines_tbl.TRX_LINE_GL_DATE(i),
3308         MERCHANT_PARTY_NAME            = p_sync_trx_lines_tbl.MERCHANT_PARTY_NAME(i),
3309         MERCHANT_PARTY_DOCUMENT_NUMBER = p_sync_trx_lines_tbl.MERCHANT_PARTY_DOCUMENT_NUMBER(i),
3310         MERCHANT_PARTY_REFERENCE       = p_sync_trx_lines_tbl.MERCHANT_PARTY_REFERENCE(i),
3311         MERCHANT_PARTY_TAXPAYER_ID     = p_sync_trx_lines_tbl.MERCHANT_PARTY_TAXPAYER_ID(i),
3312         MERCHANT_PARTY_TAX_REG_NUMBER  = p_sync_trx_lines_tbl.MERCHANT_PARTY_TAX_REG_NUMBER(i),
3313         ASSET_NUMBER                   = p_sync_trx_lines_tbl.ASSET_NUMBER(i)
3314       WHERE APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
3315         AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
3316         AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
3317          AND TRX_ID                    = p_sync_trx_rec.TRX_ID
3318         AND TRX_LINE_ID               = p_sync_trx_lines_tbl.TRX_LINE_ID(i)
3319         AND TRX_LEVEL_TYPE            = p_sync_trx_lines_tbl.TRX_LEVEL_TYPE(i);
3320   END IF;
3321 
3322 
3323   /*********Partner code Start************************/
3324   ZX_SRVC_TYP_PKG.synchronize_tax(l_event_class_rec,
3325                                   l_return_status
3326                                   );
3327   IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3328     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3329       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.synchronize_tax returned errors');
3330     END IF;
3331     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3332       RAISE FND_API.G_EXC_ERROR;
3333     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3334       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3335     END IF;
3336   END IF;
3337 
3338   /********Partner Code End *************************/
3339 
3340   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3341     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()-');
3342   END IF;
3343 
3347                         mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
3344   IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3345         l_end_time:=SYSDATE;
3346         l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
3348                         mod(floor((l_end_time-l_start_time)*24*60*60),60);
3349       FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
3350       FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
3351       FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
3352   END IF;
3353 EXCEPTION
3354   WHEN FND_API.G_EXC_ERROR THEN
3355     ROLLBACK TO Synchronize_tax_PVT;
3356     x_return_status := FND_API.G_RET_STS_ERROR ;
3357     DUMP_MSG;
3358     /*---------------------------------------------------------+
3359      | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3360      | in the message stack. If there is only one message in   |
3361      | the stack it retrieves this message                     |
3362      +---------------------------------------------------------*/
3363     FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3364                               p_count   => x_msg_count,
3365                               p_data    => x_msg_data
3366                               );
3367     IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3368       FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3369     END IF;
3370     IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3371       l_end_time:=SYSDATE;
3372       l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
3373                       mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
3374                       mod(floor((l_end_time-l_start_time)*24*60*60),60);
3375     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
3376     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
3377     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
3378     END IF;
3379   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3380     ROLLBACK TO Synchronize_tax_PVT;
3381     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3382     DUMP_MSG;
3383     FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3384     FND_MSG_PUB.Add;
3385     /*---------------------------------------------------------+
3386      | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3387      | in the message stack. If there is only one message in   |
3388      | the stack it retrieves this message                     |
3389      +---------------------------------------------------------*/
3390     FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3391                               p_count   => x_msg_count,
3392                               p_data    => x_msg_data
3393                               );
3394     IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3395       FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3396     END IF;
3397     IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3398       l_end_time:=SYSDATE;
3399       l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
3400                       mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
3401                       mod(floor((l_end_time-l_start_time)*24*60*60),60);
3402     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
3403     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
3404     FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
3405     END IF;
3406 
3407   WHEN OTHERS THEN
3408      ROLLBACK TO Synchronize_tax_PVT;
3409      x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3410      FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3411      FND_MSG_PUB.Add;
3412     /*---------------------------------------------------------+
3413      | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3414      | in the message stack. If there is only one message in   |
3415      | the stack it retrieves this message                     |
3416      +---------------------------------------------------------*/
3417      FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3418                                p_count   => x_msg_count,
3419                                p_data    => x_msg_data
3420                                );
3421       IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3422           l_end_time:=SYSDATE;
3423           l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
3424                           mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
3425                           mod(floor((l_end_time-l_start_time)*24*60*60),60);
3426         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3427         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
3428         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
3429         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
3430       END IF;
3431 
3432 
3433 END synchronize_tax_repository;
3434 
3435 /* ======================================================================*
3436  | PROCEDURE override_tax : Overrides tax lines                          |
3437  | There exists only pl/sql version for this API                         |
3438  * ======================================================================*/
3439 
3440  PROCEDURE Override_tax
3441  ( p_api_version           IN         NUMBER,
3442    p_init_msg_list         IN         VARCHAR2,
3443    p_commit                IN         VARCHAR2,
3444    p_validation_level      IN         NUMBER,
3445    x_return_status         OUT NOCOPY VARCHAR2,
3446    x_msg_count             OUT NOCOPY NUMBER,
3447    x_msg_data              OUT NOCOPY VARCHAR2,
3448    p_transaction_rec       IN         transaction_rec_type,
3449    p_override_level        IN         VARCHAR2,
3450    p_event_id              IN         NUMBER
3451   ) IS
3452    l_api_name          CONSTANT  VARCHAR2(30) := 'OVERRIDE_TAX';
3453    l_api_version       CONSTANT  NUMBER := 1.0;
3454    l_return_status               VARCHAR2(30);
3455    l_init_msg_list               VARCHAR2(1);
3456    l_event_class_rec             event_class_rec_type;
3457    l_transaction_header_rec      transaction_header_rec_type;
3458    l_context_info_rec            context_info_rec_type;
3459    l_index                       BINARY_INTEGER;
3460    l_record_tax_lines            VARCHAR2(1);
3461 
3462   CURSOR  get_trx_date_csr
3463             (c_application_id     zx_lines_det_factors.application_id%TYPE,
3464              c_entity_code     zx_lines_det_factors.entity_code%TYPE,
3465              c_event_class_code     zx_lines_det_factors.event_class_code%TYPE,
3466              c_trx_id     zx_lines_det_factors.trx_id%TYPE,
3467              c_event_id     zx_lines_det_factors.event_id%TYPE
3468              ) IS
3469    SELECT trx_date,
3470           related_doc_date,
3471           provnl_tax_determination_date
3472      FROM zx_lines_det_factors
3473     WHERE application_id = c_application_id
3474       AND entity_code = c_entity_code
3475       AND event_class_code = c_event_class_code
3476       AND trx_id = c_trx_id
3477       AND event_id = c_event_id
3478       AND ROWNUM = 1;
3479 
3480    l_start_time    DATE;
3481    l_end_time      DATE;
3482    l_total_time    VARCHAR2(15);
3483 
3484  BEGIN
3485    l_start_time:= SYSDATE;
3486    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3487      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
3488    END IF;
3489 
3490 
3491    /*--------------------------------------------------+
3492     |   Standard start of API savepoint                |
3493     +--------------------------------------------------*/
3494     SAVEPOINT Override_Tax_PVT;
3495 
3496    /*--------------------------------------------------+
3497     |   Standard call to check for call compatibility  |
3498     +--------------------------------------------------*/
3499 
3500     IF NOT FND_API.Compatible_API_Call(l_api_version,
3501                                        p_api_version,
3502                                        l_api_name,
3503                                        G_PKG_NAME
3504                                        ) THEN
3505       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3506     END IF;
3507 
3508 
3509    /*--------------------------------------------------------------+
3510    |   Initialize message list if p_init_msg_list is set to TRUE  |
3511    +--------------------------------------------------------------*/
3512      IF p_init_msg_list is null THEN
3513        l_init_msg_list := FND_API.G_FALSE;
3514      ELSE
3515      l_init_msg_list := p_init_msg_list;
3516    END IF;
3517 
3518      IF FND_API.to_Boolean(l_init_msg_list) THEN
3519        FND_MSG_PUB.initialize;
3520      END IF;
3521 
3522    /*-----------------------------------------+
3523     |   Initialize return status to SUCCESS   |
3524     +-----------------------------------------*/
3525 
3526     x_return_status := FND_API.G_RET_STS_SUCCESS;
3527 
3528     /*-----------------------------------------+
3529     |   Populate Global Variable              |
3530     +-----------------------------------------*/
3531 
3532      G_PUB_SRVC := l_api_name;
3533      G_DATA_TRANSFER_MODE := 'PLS';
3534      G_EXTERNAL_API_CALL  := 'N';
3535 
3536      --Call TDS process to reset the session for previous override tax calls if any
3537      ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (p_event_class_rec => NULL,
3538                                               p_init_level      => 'SESSION',
3539                                               x_return_status   => l_return_status
3540                                              );
3541 
3542      set_ptnr_srvc_subscr_flag (p_event_class_rec => NULL,
3543                                 x_return_status   => l_return_status
3544                                );
3545 
3546         ZX_GLOBAL_STRUCTURES_PKG.LOC_GEOGRAPHY_INFO_TBL.DELETE;
3547         ZX_GLOBAL_STRUCTURES_PKG.g_registration_info_tbl.DELETE;
3548     /*------------------------------------------------------+
3549      |   Copy to Event Class Record                         |
3550      +------------------------------------------------------*/
3551      l_event_class_rec.event_id                    :=  p_event_id;
3552      l_event_class_rec.INTERNAL_ORGANIZATION_ID    :=  p_transaction_rec.INTERNAL_ORGANIZATION_ID;
3553      l_event_class_rec.APPLICATION_ID              :=  p_transaction_rec.APPLICATION_ID;
3554      l_event_class_rec.ENTITY_CODE                 :=  p_transaction_rec.ENTITY_CODE;
3555      l_event_class_rec.EVENT_CLASS_CODE            :=  p_transaction_rec.EVENT_CLASS_CODE;
3556      l_event_class_rec.EVENT_TYPE_CODE             :=  p_transaction_rec.EVENT_TYPE_CODE;
3557      l_event_class_rec.TRX_ID                      :=  p_transaction_rec.TRX_ID;
3558 
3559      -- bug 5684123
3560      --
3561      OPEN  get_trx_date_csr
3562             (l_event_class_rec.application_id,
3563              l_event_class_rec.entity_code,
3564              l_event_class_rec.event_class_code,
3565              l_event_class_rec.trx_id,
3566              l_event_class_rec.event_id);
3567      FETCH get_trx_date_csr INTO l_event_class_rec.trx_date,
3568                                  l_event_class_rec.rel_doc_date,
3569                                  l_event_class_rec.provnl_tax_determination_date;
3570      CLOSE get_trx_date_csr;
3571 
3572      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3573         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
3574              'application_id: '||to_char(l_event_class_rec.application_id)||
3575              ', entity_code: '||l_event_class_rec.entity_code||
3576              ', event_class_code: '||l_event_class_rec.event_class_code||
3577              ', event_type_code: '||l_event_class_rec.event_type_code||
3578              ', trx_id: '||to_char(l_event_class_rec.trx_id)||
3579              ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id) ||
3580              ', trx_date: '||to_char(l_event_class_rec.trx_date, 'MM-DD-YYYY'));
3581      END IF;
3582 
3583      IF l_event_class_rec.event_class_code = 'CREDIT_MEMO' THEN
3584        ZX_GLOBAL_STRUCTURES_PKG.g_credit_memo_exists_flg := 'Y';
3585      END IF;
3586 
3587      /*------------------------------------------------------+
3588       |   Validate and Initializate parameters for Override  |
3589       |   tax                                                |
3590       +------------------------------------------------------*/
3591      ZX_VALID_INIT_PARAMS_PKG.override_tax(x_return_status   => l_return_status ,
3592                                            p_override        => p_override_level,
3593                                            p_event_class_rec => l_event_class_rec,
3594                                            p_trx_rec         => p_transaction_rec
3595                                            );
3596 
3597      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3598        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3599          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.override_tax returned errors');
3600        END IF;
3601        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3602          RAISE FND_API.G_EXC_ERROR;
3603        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3604          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3605        END IF;
3606      END IF;
3607 
3608      /*===============================================================================*
3609       |Initialize the global structures/global temp tables owned by TDM at header level |
3610       *================================================================================*/
3611      ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (l_event_class_rec,
3612                                               'HEADER',
3613                                                l_return_status
3614                                              );
3615 
3616      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3617        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3618          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.initialize  returned errors');
3619        END IF;
3620        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3621          RAISE FND_API.G_EXC_ERROR;
3622        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3623          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3624        END IF;
3625      END IF;
3626 
3627      /*--------------------------------------------------+
3628       |   Call Service Type Override Summary or Override |
3629       |   Detail Tax Lines depending of the overriding   |
3630       |   level.                                         |
3631       +--------------------------------------------------*/
3632      ZX_SRVC_TYP_PKG.override_tax_lines(p_event_class_rec    => l_event_class_rec,
3633                                         p_override_level     => p_override_level,
3634                                         x_return_status      => l_return_status
3635                                         );
3636      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3637        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3638          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.initialize  returned errors');
3639        END IF;
3640        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3641          RAISE FND_API.G_EXC_ERROR;
3642        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3643          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3644        END IF;
3645      END IF;
3646 
3647      /*-----------------------------------------------------+
3648       |   Call to eTax service Dump Detail Tax Lines Into GT|
3649       +-----------------------------------------------------*/
3650      ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(x_return_status => l_return_status);
3651 
3652      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3653        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3654          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt returned errors');
3655        END IF;
3656        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3657          RAISE FND_API.G_EXC_ERROR;
3658        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3659          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3660        END IF;
3661      END IF;
3662 
3663      /*--------------------------------------------------+
3664       |   Call to eTax Service Tax Lines Determination   |
3665       +--------------------------------------------------*/
3666      ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(p_event_class_rec => l_event_class_rec,
3667                                                          x_return_status   => l_return_status
3668                                                          );
3669 
3670      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3671        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3672          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination returned errors');
3673        END IF;
3674        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3675          RAISE FND_API.G_EXC_ERROR;
3676        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3677          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3678        END IF;
3679      END IF;
3680 
3681      /*--------------------------------------------------+
3682       |   Call to eTax Service Manage Tax Lines          |
3683       +--------------------------------------------------*/
3684      --Rounding and Summarization of Tax Lines for Transaction
3685      /*Bug 3649502 - Check for record flag before calling TRR service*/
3686      --IF l_event_class_rec.record_flag = 'Y' THEN
3687 
3688      l_record_tax_lines := l_event_class_rec.record_flag;
3689      IF l_event_class_rec.record_flag = 'Y' and
3690         l_event_class_rec.quote_flag = 'Y' THEN
3691         l_record_tax_lines := 'N';
3692      END IF;
3693      IF l_record_tax_lines = 'Y' THEN
3694        ZX_TRL_PUB_PKG.manage_taxlines(p_event_class_rec  =>l_event_class_rec,
3695                                       x_return_status    =>l_return_status
3696                                       );
3697      END IF;
3698 
3699      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3700        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3701          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TRL_PUB_PKG.manage_taxlines returned errors');
3702        END IF;
3703        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3704          RAISE FND_API.G_EXC_ERROR;
3705        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3706          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3707        END IF;
3708      END IF;
3709 
3710      --Delete from the global structures so that there are no hanging/redundant
3711      --records sitting there
3712      ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
3713 
3714      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3715        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
3716      END IF;
3717 
3718 
3719     IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3720           l_end_time:=SYSDATE;
3721           l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
3722                           mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
3723                           mod(floor((l_end_time-l_start_time)*24*60*60),60);
3724         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
3728 
3725         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
3726         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
3727     END IF;
3729      EXCEPTION
3730       WHEN FND_API.G_EXC_ERROR THEN
3731         ROLLBACK TO Override_Tax_PVT;
3732         x_return_status := FND_API.G_RET_STS_ERROR ;
3733         DUMP_MSG;
3734         /*---------------------------------------------------------+
3735          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3736          | in the message stack. If there is only one message in   |
3737          | the stack it retrieves this message                     |
3738          +---------------------------------------------------------*/
3739         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3740                                   p_count   => x_msg_count,
3741                                   p_data    => x_msg_data
3742                                   );
3743         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3744           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3745         END IF;
3746 
3747         IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3748           l_end_time:=SYSDATE;
3749           l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
3750                           mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
3751                           mod(floor((l_end_time-l_start_time)*24*60*60),60);
3752           FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
3753           FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
3754           FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
3755         END IF;
3756 
3757       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3758         ROLLBACK TO Override_Tax_PVT;
3759         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3760         DUMP_MSG;
3761         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3762         FND_MSG_PUB.Add;
3763         /*---------------------------------------------------------+
3764          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3765          | in the message stack. If there is only one message in   |
3766          | the stack it retrieves this message                     |
3767          +---------------------------------------------------------*/
3768         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3769                                   p_count   => x_msg_count,
3770                                   p_data    => x_msg_data
3771                                   );
3772         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3773           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3774         END IF;
3775 
3776         IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3777               l_end_time:=SYSDATE;
3778               l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
3779                               mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
3780                               mod(floor((l_end_time-l_start_time)*24*60*60),60);
3781             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
3782             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
3783             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
3784         END IF;
3785 
3786       WHEN OTHERS THEN
3787          ROLLBACK TO Override_Tax_PVT;
3788          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3789          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3790          FND_MSG_PUB.Add;
3791         /*---------------------------------------------------------+
3792          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3793          | in the message stack. If there is only one message in   |
3794          | the stack it retrieves this message                     |
3795          +---------------------------------------------------------*/
3796          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3797                                    p_count   => x_msg_count,
3798                                    p_data    => x_msg_data
3799                                    );
3800 
3801          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3802            l_end_time:=SYSDATE;
3803            l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
3804                           mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
3805                           mod(floor((l_end_time-l_start_time)*24*60*60),60);
3806            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3807            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
3808            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
3809            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
3810          END IF;
3811 
3812   END override_tax;
3813 
3814 
3815 /* ======================================================================*
3816  | PROCEDURE global_document_update :                                    |
3817  * ======================================================================*/
3818 
3819  PROCEDURE Global_document_update
3820  ( p_api_version           IN  NUMBER,
3821    p_init_msg_list         IN  VARCHAR2,
3822    p_commit                IN  VARCHAR2 ,
3823    p_validation_level      IN  NUMBER,
3824    x_return_status         OUT NOCOPY VARCHAR2,
3825    x_msg_count             OUT NOCOPY NUMBER,
3826    x_msg_data              OUT NOCOPY VARCHAR2,
3827    p_transaction_rec       IN OUT NOCOPY transaction_rec_type
3828   ) IS
3829    l_api_name          CONSTANT  VARCHAR2(30) := 'GLOBAL_DOCUMENT_UPDATE';
3830    l_api_version       CONSTANT  NUMBER := 1.0;
3831    l_return_status               VARCHAR2(30);
3832    l_validation_status           ZX_API_PUB.validation_status_tbl_type;
3833    l_init_msg_list               VARCHAR2(1);
3834 
3835  BEGIN
3836    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3837      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
3838    END IF;
3839 
3840    /*--------------------------------------------------+
3841     |   Standard start of API savepoint                |
3842     +--------------------------------------------------*/
3843     SAVEPOINT global_document_update_PVT;
3844 
3845     /*--------------------------------------------------+
3846      |   Standard call to check for call compatibility  |
3847      +--------------------------------------------------*/
3848 
3849      IF NOT FND_API.Compatible_API_Call(l_api_version,
3850                                         p_api_version,
3851                                         l_api_name,
3852                                         G_PKG_NAME
3853                                         ) THEN
3854        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3855      END IF;
3856 
3857     /*--------------------------------------------------------------+
3858      |   Initialize message list if p_init_msg_list is set to TRUE  |
3859      +--------------------------------------------------------------*/
3860      IF p_init_msg_list is null THEN
3861        l_init_msg_list := FND_API.G_FALSE;
3862      ELSE
3863      l_init_msg_list := p_init_msg_list;
3864    END IF;
3865 
3866      IF FND_API.to_Boolean(l_init_msg_list) THEN
3867        FND_MSG_PUB.initialize;
3868      END IF;
3869 
3870      /*-----------------------------------------+
3871       |   Initialize return status to SUCCESS   |
3872       +-----------------------------------------*/
3873 
3874       x_return_status := FND_API.G_RET_STS_SUCCESS;
3875 
3876       /*-----------------------------------------+
3877       |   Populate Global Variable              |
3878       +-----------------------------------------*/
3879        G_PUB_SRVC := l_api_name;
3880        G_DATA_TRANSFER_MODE := 'PLS';
3881        G_EXTERNAL_API_CALL  := 'N';
3882 
3883       /*-----------------------------------------------+
3884        |   Calling Global Document Update with         |
3885        |   with validation status                      |
3886        +-----------------------------------------------*/
3887 
3888        ZX_API_PUB.global_document_update(p_api_version,
3889                                          l_init_msg_list,
3890                                          p_commit,
3891                                          p_validation_level,
3892                                          l_return_status,
3893                                          x_msg_count,
3894                                          x_msg_data,
3895                                          p_transaction_rec,
3896                                          l_validation_status
3897                                          );
3898 
3899        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3900          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3901            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_API_PUB.global_document_update returned errors');
3902          END IF;
3903          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3904            RAISE FND_API.G_EXC_ERROR;
3905          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3906            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3907          END IF;
3908        END IF;
3909 
3910        IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3911          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
3912        END IF;
3913 
3914        EXCEPTION
3915        WHEN FND_API.G_EXC_ERROR THEN
3916          ROLLBACK TO global_document_update_PVT;
3917          x_return_status := FND_API.G_RET_STS_ERROR ;
3918          DUMP_MSG;
3919         /*---------------------------------------------------------+
3920          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3921          | in the message stack. If there is only one message in   |
3922          | the stack it retrieves this message                     |
3923          +---------------------------------------------------------*/
3924          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3925                                    p_count   => x_msg_count,
3926                                    p_data    => x_msg_data
3927                                    );
3928          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3929            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3930          END IF;
3931 
3932        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3933          ROLLBACK TO global_document_update_PVT;
3934          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3935          DUMP_MSG;
3936          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3937          FND_MSG_PUB.Add;
3938         /*---------------------------------------------------------+
3939          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3940          | in the message stack. If there is only one message in   |
3941          | the stack it retrieves this message                     |
3942          +---------------------------------------------------------*/
3943          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3944                                    p_count   => x_msg_count,
3945                                    p_data    => x_msg_data
3946                                    );
3947          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3948            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3949          END IF;
3950 
3951         WHEN OTHERS THEN
3952            ROLLBACK TO global_document_update_PVT;
3953            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3954            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3955            FND_MSG_PUB.Add;
3956           /*---------------------------------------------------------+
3957            | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3958            | in the message stack. If there is only one message in   |
3959            | the stack it retrieves this message                     |
3960            +---------------------------------------------------------*/
3961            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3962                                      p_count   => x_msg_count,
3963                                      p_data    => x_msg_data
3964                                     );
3965 
3966            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3967              FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3968            END IF;
3969   END global_document_update;
3970 
3971 /* ======================================================================*
3972  | PROCEDURE global_document_update :                                    |
3973  * ======================================================================*/
3974 
3975  PROCEDURE global_document_update
3976  ( p_api_version           IN            NUMBER,
3977    p_init_msg_list         IN            VARCHAR2,
3978    p_commit                IN            VARCHAR2,
3979    p_validation_level      IN            NUMBER,
3980    x_return_status         OUT NOCOPY    VARCHAR2,
3981    x_msg_count             OUT NOCOPY    NUMBER,
3982    x_msg_data              OUT NOCOPY    VARCHAR2,
3983    p_transaction_rec       IN OUT NOCOPY transaction_rec_type,
3984    p_validation_status     IN            ZX_API_PUB.validation_status_tbl_type
3985   ) IS
3986    l_api_name          CONSTANT  VARCHAR2(30) := 'GLOBAL_DOCUMENT_UPDATE';
3987    l_api_version       CONSTANT  NUMBER := 1.0;
3988    l_event_class_rec             event_class_rec_type;
3989    l_return_status               VARCHAR2(30);
3990    l_context_info_rec            context_info_rec_type;
3991    l_init_msg_list               VARCHAR2(1);
3992    l_upg_trx_info_rec            ZX_ON_FLY_TRX_UPGRADE_PKG.zx_upg_trx_info_rec_type;
3993    l_lines_det_rec    zx_lines_det_factors%rowtype;
3994 
3995    -- Added for bug#16483600 JAI ZX Integration
3996    lb_jai_exists      BOOLEAN := FALSE;
3997 
3998  BEGIN
3999    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4000      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
4001    END IF;
4002 
4003    /*--------------------------------------------------+
4004     |   Standard start of API savepoint                |
4005     +--------------------------------------------------*/
4006     SAVEPOINT global_document_update_PVT;
4007 
4008    /*--------------------------------------------------+
4009     |   Standard call to check for call compatibility  |
4010     +--------------------------------------------------*/
4011     IF NOT FND_API.Compatible_API_Call( l_api_version,
4012                                         p_api_version,
4013                                         l_api_name,
4014                                         G_PKG_NAME
4015                                        ) THEN
4016        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4017     END IF;
4018 
4019     /*--------------------------------------------------------------+
4020      |   Initialize message list if p_init_msg_list is set to TRUE  |
4021      +--------------------------------------------------------------*/
4022      IF p_init_msg_list is null THEN
4023        l_init_msg_list := FND_API.G_FALSE;
4024      ELSE
4025      l_init_msg_list := p_init_msg_list;
4026    END IF;
4027 
4028      IF FND_API.to_Boolean(l_init_msg_list) THEN
4029        FND_MSG_PUB.initialize;
4030      END IF;
4031 
4032     /*-----------------------------------------+
4033      |   Initialize return status to SUCCESS   |
4034      +-----------------------------------------*/
4035      x_return_status := FND_API.G_RET_STS_SUCCESS;
4036 
4037      /*-----------------------------------------+
4038       |   Populate Global Variable              |
4039       +-----------------------------------------*/
4040       G_PUB_SRVC := l_api_name;
4041       G_DATA_TRANSFER_MODE := 'PLS';
4042       G_EXTERNAL_API_CALL  := 'N';
4043 
4044       /* -------------------------------------------------------+
4045        |  JAI tax processing                                    |
4046        + -------------------------------------------------------*/
4047       -- Start : Added for JAI Trigger Elimination : Bug#16483600 JAI ZX Integration
4048       -- JAI AR INVOICE Deletion and PO document cancelation
4049       lb_jai_exists := JAI_TAX_PROCESSING_PKG.CHECK_JAI_EXISTS_IN_ZX(
4050                            pn_set_of_books_id => ZX_GLOBAL_STRUCTURES_PKG.G_EVENT_CLASS_REC.ledger_id,
4051                            pn_application_id  => p_transaction_rec.APPLICATION_ID,
4052                            pv_entity_code     => p_transaction_rec.ENTITY_CODE,
4053                            pn_trx_id          => p_transaction_rec.TRX_ID
4054                         );
4055 
4056       IF lb_jai_exists = TRUE THEN
4057         --Call JAI tax processing.
4058         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4059            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':JAI processing start +');
4060         END IF;
4061 
4062         JAI_TAX_PROCESSING_PKG.CALCULATE_TAX(p_transaction_rec => p_transaction_rec
4063                                             ,p_event_class_rec => NULL
4064                                             ,p_line_level_action => NULL
4065                                             ,p_trx_line_id => NULL
4066                                             ,x_return_status   => l_return_status
4067                                             );
4068 
4069         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4070           x_return_status := l_return_status;
4071           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4072              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
4073              ' JAI_TAX_PROCESSING_PKG.CALCULATE_TAX  RETURN_STATUS = ' || x_return_status);
4074           END IF;
4075           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4076             RAISE FND_API.G_EXC_ERROR;
4077           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4078             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4079           END IF;
4080         END IF;
4081 
4082         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4083           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':JAI processing end -');
4084         END IF;
4085       END IF;
4086       -- End : Added for JAI Trigger Elimination
4087 
4088       /*------------------------------------------------------+
4089        |   Validate Input Paramerters and Fetch Tax Options   |
4090        +------------------------------------------------------*/
4091        ZX_VALID_INIT_PARAMS_PKG.global_document_update(x_return_status   => l_return_status,
4092                                                        p_event_class_rec => l_event_class_rec,
4093                                                        p_trx_rec         => p_transaction_rec
4094                                                       );
4095 
4096        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4097          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4098            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.global_document_update returned errors');
4099          END IF;
4100          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4101            RAISE FND_API.G_EXC_ERROR;
4102          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4103            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4104          END IF;
4105        END IF;
4106 
4107 
4108 
4109       /*------------------------------------------------+
4110        |  Update zx_lines_det_factors                   |
4111        +------------------------------------------------*/
4112        IF l_event_class_rec.tax_event_type_code IN ('DELETE','PURGE') THEN
4113           -- Bug 5200373: Incarporated missing hook to take snapshot of zx_lines_det_factors so that
4114           --              upgraded R11i partner softwares can handle the header level document delete
4115           --              sceanrio.
4116           zx_r11i_tax_partner_pkg.copy_trx_line_for_ptnr_bef_upd(NULL
4117                                        , l_event_class_rec
4118                                        , NULL
4119                                        , 'N'
4120                                        , NULL
4121                                        , NULL
4122                                        , l_return_status);
4123           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4124              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4125                 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':zx_r11i_tax_partner_pkg.copy_trx_line_for_ptnr_bef_upd returned errors');
4126              END IF;
4127              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4128                 RAISE FND_API.G_EXC_ERROR;
4129              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4130                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4131              END IF;
4132           END IF;
4133 
4134           -- Bug 5237826: Explicitly check if the resource is busy prior to making the delete. Resource can
4135           --              become busy if calling products fail to issue a COMMIT or ROLLBACK immediately
4136           --              after call to this API.
4137           BEGIN
4138             /*Lock trx line det factors for delete*/
4139              SELECT *
4140               INTO l_lines_det_rec
4141               FROM ZX_LINES_DET_FACTORS
4142              WHERE application_id   = p_transaction_rec.application_id
4143                AND entity_code      = p_transaction_rec.entity_code
4144                AND event_class_code = p_transaction_rec.event_class_code
4145                AND trx_id           = p_transaction_rec.trx_id
4146                AND rownum           = 1
4147              FOR UPDATE NOWAIT;
4148           EXCEPTION
4149             WHEN NO_DATA_FOUND THEN
4150               NULL;
4151             WHEN OTHERS THEN
4152                IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
4153                  FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
4154                END IF;
4155                IF (SQLCODE = 54) THEN
4156                   FND_MESSAGE.SET_NAME('ZX','ZX_RESOURCE_BUSY');
4157                   l_context_info_rec.APPLICATION_ID   := p_transaction_rec.APPLICATION_ID;
4158                   l_context_info_rec.ENTITY_CODE      := p_transaction_rec.ENTITY_CODE;
4159                   l_context_info_rec.EVENT_CLASS_CODE := p_transaction_rec.EVENT_CLASS_CODE;
4160                   l_context_info_rec.TRX_ID           := p_transaction_rec.TRX_ID;
4161                   ZX_API_PUB.add_msg( p_context_info_rec => l_context_info_rec );
4162                   RAISE FND_API.G_EXC_ERROR;
4163                ELSE
4164                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4165                END IF;
4166           END;
4167 
4168           DELETE from ZX_LINES_DET_FACTORS
4169            WHERE APPLICATION_ID  = p_transaction_rec.APPLICATION_ID
4170              AND ENTITY_CODE       = p_transaction_rec.ENTITY_CODE
4171              AND EVENT_CLASS_CODE  = p_transaction_rec.EVENT_CLASS_CODE
4172              AND TRX_ID            = p_transaction_rec.TRX_ID;
4173 
4174        ELSIF l_event_class_rec.tax_event_type_code NOT IN ('RELEASE_HOLD') THEN
4175           UPDATE ZX_LINES_DET_FACTORS
4176              SET EVENT_TYPE_CODE     = l_event_class_rec.event_type_code,
4177                  TAX_EVENT_TYPE_CODE = l_event_class_rec.tax_event_type_code,
4178                  DOC_EVENT_STATUS    = l_event_class_rec.doc_status_code
4179              WHERE APPLICATION_ID    = p_transaction_rec.APPLICATION_ID
4180                AND ENTITY_CODE       = p_transaction_rec.ENTITY_CODE
4181                AND EVENT_CLASS_CODE  = p_transaction_rec.EVENT_CLASS_CODE
4182                AND TRX_ID            = p_transaction_rec.TRX_ID;
4183 
4184           --Bugfix 4486946 -Call on the fly upgrade if the transaction if not found
4185           IF sql%notfound THEN
4186             l_upg_trx_info_rec.application_id   := l_event_class_rec.application_id;
4187             l_upg_trx_info_rec.entity_code      := l_event_class_rec.entity_code;
4188             l_upg_trx_info_rec.event_class_code := l_event_class_rec.event_class_code;
4189             l_upg_trx_info_rec.trx_id           := l_event_class_rec.trx_id;
4190             ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(p_upg_trx_info_rec   =>  l_upg_trx_info_rec,
4191                                                          x_return_status      =>  l_return_status
4192                                                         );
4196               END IF;
4193             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4194               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4195                 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly returned errors');
4197               IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4198                 RAISE FND_API.G_EXC_ERROR;
4199               ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4200                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4201               END IF;
4202             END IF;
4203             UPDATE ZX_LINES_DET_FACTORS
4204                SET EVENT_TYPE_CODE     = l_event_class_rec.event_type_code,
4205                    TAX_EVENT_TYPE_CODE = l_event_class_rec.tax_event_type_code,
4206                    DOC_EVENT_STATUS    = l_event_class_rec.doc_status_code
4207              WHERE APPLICATION_ID    = p_transaction_rec.APPLICATION_ID
4208                AND ENTITY_CODE       = p_transaction_rec.ENTITY_CODE
4209                AND EVENT_CLASS_CODE  = p_transaction_rec.EVENT_CLASS_CODE
4210                AND TRX_ID            = p_transaction_rec.TRX_ID;
4211           END IF; --sql%notfound
4212         END IF; --not in (RELEASE_HOLD)
4213         --Bugfix 4486946 - on-the-fly upgrade end
4214 
4215       /*--------------------------------------------------+
4216        |   Call to Service Type Document Level Changes    |
4217        +--------------------------------------------------*/
4218        --Bug 4463450: Do not carry out any reversals for tax lines and dists for
4219        --event classes not reportable for tax
4220        IF l_event_class_rec.tax_event_type_code = 'CANCEL' AND
4221           l_event_class_rec.tax_reporting_flag = 'N'  THEN
4222           null;
4223        ELSE
4224 
4225          ZX_SRVC_TYP_PKG.document_level_changes(x_return_status          => l_return_status,
4226                                                 p_event_class_rec        => l_event_class_rec,
4227                                                 p_tax_hold_released_code => p_validation_status
4228                                                );
4229 
4230          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4231            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4232              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.global_document_update returned errors');
4233            END IF;
4234            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4235              RAISE FND_API.G_EXC_ERROR;
4236            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4237              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4238            END IF;
4239          END IF;
4240        END IF;
4241 
4242 
4243        IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4244          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
4245        END IF;
4246 
4247        EXCEPTION
4248        WHEN FND_API.G_EXC_ERROR THEN
4249          ROLLBACK TO global_document_update_PVT;
4250          x_return_status := FND_API.G_RET_STS_ERROR ;
4251          DUMP_MSG;
4252          /*---------------------------------------------------------+
4253           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4254           | in the message stack. If there is only one message in   |
4255           | the stack it retrieves this message                     |
4256           +---------------------------------------------------------*/
4257           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4258                                     p_count   => x_msg_count,
4259                                     p_data    => x_msg_data
4260                                    );
4261          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4262            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4263          END IF;
4264 
4265         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4266           ROLLBACK TO global_document_update_PVT;
4267           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4268           DUMP_MSG;
4269           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4270           FND_MSG_PUB.Add;
4271          /*---------------------------------------------------------+
4272           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4273           | in the message stack. If there is only one message in   |
4274           | the stack it retrieves this message                     |
4275           +---------------------------------------------------------*/
4276           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4277                                     p_count   => x_msg_count,
4278                                     p_data    => x_msg_data
4279                                    );
4280 
4281           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4282             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4283           END IF;
4284 
4285         WHEN OTHERS THEN
4286            ROLLBACK TO global_document_update_PVT;
4287            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4288            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4289            FND_MSG_PUB.Add;
4290          /*---------------------------------------------------------+
4291           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4292           | in the message stack. If there is only one message in   |
4293           | the stack it retrieves this message                     |
4294           +---------------------------------------------------------*/
4295           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4296                                     p_count   => x_msg_count,
4297                                     p_data    => x_msg_data
4298                                    );
4302  END global_document_update;
4299            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
4300              FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
4301            END IF;
4303 
4304 
4305 /* ======================================================================*
4306  | PROCEDURE Mark_tax_lines_deleted :                                    |
4307  * ======================================================================*/
4308 
4309  PROCEDURE Mark_tax_lines_deleted
4310  ( p_api_version           IN            NUMBER,
4311    p_init_msg_list         IN            VARCHAR2,
4312    p_commit                IN            VARCHAR2,
4313    p_validation_level      IN            NUMBER,
4314    x_return_status         OUT NOCOPY    VARCHAR2 ,
4315    x_msg_count             OUT NOCOPY    NUMBER ,
4316    x_msg_data              OUT NOCOPY    VARCHAR2 ,
4317    p_transaction_line_rec  IN OUT NOCOPY transaction_line_rec_type
4318   ) IS
4319    l_api_name          CONSTANT  VARCHAR2(30) := 'MARK_TAX_LINES_DELETED';
4320    l_api_version       CONSTANT  NUMBER := 1.0;
4321    l_return_status               VARCHAR2(30);
4322    l_init_msg_list               VARCHAR2(1);
4323    l_event_type_code             VARCHAR2(30);
4324  BEGIN
4325    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4326      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
4327    END IF;
4328 
4329    /*--------------------------------------------------+
4330     |   Standard start of API savepoint                |
4331     +--------------------------------------------------*/
4332     SAVEPOINT mark_tax_lines_del_PVT;
4333 
4334     /*--------------------------------------------------+
4335      |   Standard call to check for call compatibility  |
4336      +--------------------------------------------------*/
4337      IF NOT FND_API.Compatible_API_Call(l_api_version,
4338                                         p_api_version,
4339                                         l_api_name,
4340                                         G_PKG_NAME
4341                                         ) THEN
4342         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4343       END IF;
4344 
4345      /*--------------------------------------------------------------+
4346       |   Initialize message list if p_init_msg_list is set to TRUE  |
4347       +--------------------------------------------------------------*/
4348       IF p_init_msg_list is null THEN
4349         l_init_msg_list := FND_API.G_FALSE;
4350       ELSE
4351       l_init_msg_list := p_init_msg_list;
4352     END IF;
4353 
4354       IF FND_API.to_Boolean(l_init_msg_list) THEN
4355         FND_MSG_PUB.initialize;
4356       END IF;
4357 
4358       /*-----------------------------------------+
4359        |   Initialize return status to SUCCESS   |
4360        +-----------------------------------------*/
4361        x_return_status := FND_API.G_RET_STS_SUCCESS;
4362 
4363 
4364        /*-----------------------------------------+
4365         |   Populate Global Variable              |
4366         +-----------------------------------------*/
4367         G_PUB_SRVC := l_api_name;
4368         G_DATA_TRANSFER_MODE := 'PLS';
4369         G_EXTERNAL_API_CALL  := 'N';
4370 
4371        /*------------------------------------------------------+
4372         |   Validate Input Paramerters and Fetch Tax Options   |
4373         +------------------------------------------------------*/
4374         ZX_VALID_INIT_PARAMS_PKG.mark_tax_lines_deleted( x_return_status        => l_return_status,
4375                                                          p_transaction_line_rec => p_transaction_line_rec
4376                                                        );
4377 
4378         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4379           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4380             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.mark_tax_lines_deleted returned errors');
4381           END IF;
4382           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4383             RAISE FND_API.G_EXC_ERROR;
4384           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4385             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4386           END IF;
4387         END IF;
4388 
4389         /*--------------------------------------------------+
4390          |   Call Service Type Mark Tax Lines Deleted       |
4391          +--------------------------------------------------*/
4392          ZX_SRVC_TYP_PKG.mark_tax_lines_deleted( p_trx_line_rec       => p_transaction_line_rec,
4393                                                  x_return_status      => l_return_status
4394                                                );
4395 
4396          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4397            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4398              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.mark_tax_lines_deleted returned errors');
4399            END IF;
4400            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4401              RAISE FND_API.G_EXC_ERROR;
4402            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4403              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4404            END IF;
4405          END IF;
4406         /*--------------------------------------------------+
4407          |   Update line level action to  Deleted           |
4408          +--------------------------------------------------*/
4409          IF p_transaction_line_rec.event_type_code is null THEN
4410            BEGIN
4411              SELECT event_type_code
4415                 AND entity_code         = p_transaction_line_rec.entity_code
4412                INTO l_event_type_code
4413                FROM ZX_EVNT_TYP_MAPPINGS
4414               WHERE application_id      = p_transaction_line_rec.application_id
4416                 AND event_class_code    = p_transaction_line_rec.event_class_code
4417                 AND tax_event_type_code = 'UPDATE';
4418            EXCEPTION
4419               WHEN NO_DATA_FOUND  THEN
4420                  IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4421                    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':Event information passed is incorrect');
4422                  END IF;
4423                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4424            END;
4425          END IF;
4426 
4427          BEGIN
4428            UPDATE ZX_LINES_DET_FACTORS
4429              SET LINE_LEVEL_ACTION   = 'DELETE',
4430                  EVENT_TYPE_CODE     = nvl(p_transaction_line_rec.event_type_code, l_event_type_code),
4431                  TAX_EVENT_TYPE_CODE = 'UPDATE'
4432            WHERE application_id   = p_transaction_line_rec.application_id
4433              AND entity_code      = p_transaction_line_rec.entity_code
4434              AND event_class_code = p_transaction_line_rec.event_class_code
4435              AND trx_id           = p_transaction_line_rec.trx_id
4436              AND trx_line_id      = p_transaction_line_rec.trx_line_id;
4437            EXCEPTION
4438               WHEN NO_DATA_FOUND  THEN
4439                  IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4440                    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':Event information passed is incorrect');
4441                  END IF;
4442                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4443            END;
4444 
4445 
4446        IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4447           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
4448        END IF;
4449 
4450     /* Bug 3704651 - No need to uptake error handling as it is a PLS API*/
4451        EXCEPTION
4452        WHEN FND_API.G_EXC_ERROR THEN
4453          ROLLBACK TO mark_tax_lines_del_PVT;
4454          x_return_status := FND_API.G_RET_STS_ERROR ;
4455          DUMP_MSG;
4456          /*---------------------------------------------------------+
4457           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4458           | in the message stack. If there is only one message in   |
4459           | the stack it retrieves this message                     |
4460           +---------------------------------------------------------*/
4461           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4462                                     p_count   => x_msg_count,
4463                                     p_data    => x_msg_data
4464                                     );
4465          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4466            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4467          END IF;
4468 
4469         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4470           ROLLBACK TO mark_tax_lines_del_PVT;
4471           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4472           DUMP_MSG;
4473           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4474           FND_MSG_PUB.Add;
4475          /*---------------------------------------------------------+
4476           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4477           | in the message stack. If there is only one message in   |
4478           | the stack it retrieves this message                     |
4479           +---------------------------------------------------------*/
4480           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4481                                     p_count   => x_msg_count,
4482                                     p_data    => x_msg_data
4483                                     );
4484 
4485           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4486             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4487           END IF;
4488 
4489         WHEN OTHERS THEN
4490            ROLLBACK TO mark_tax_lines_del_PVT;
4491            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4492            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4493            FND_MSG_PUB.Add;
4494           /*---------------------------------------------------------+
4495            | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4496            | in the message stack. If there is only one message in   |
4497            | the stack it retrieves this message                     |
4498            +---------------------------------------------------------*/
4499            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4500                                      p_count   => x_msg_count,
4501                                      p_data    => x_msg_data
4502                                      );
4503            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
4504              FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
4505            END IF;
4506 
4507  END mark_tax_lines_deleted;
4508 
4509 
4510 /* ======================================================================*
4511  | PROCEDURE reverse_document : Reverses the base document               |
4512  | GTT involved : ZX_REV_TRX_HEADERS_GT, ZX_REVERSE_TRX_LINES_GT         |
4513  | This API has been coded with the assumption that it will receive only |
4514  | only document in a call                                               |
4515  * ======================================================================*/
4516  PROCEDURE reverse_document
4517  ( p_api_version            IN         NUMBER,
4518    p_init_msg_list          IN         VARCHAR2,
4519    p_commit                 IN         VARCHAR2,
4520    p_validation_level       IN         NUMBER,
4521    x_return_status          OUT NOCOPY VARCHAR2 ,
4522    x_msg_count              OUT NOCOPY NUMBER ,
4523    x_msg_data               OUT NOCOPY VARCHAR2
4524   ) IS
4525    l_api_name          CONSTANT  VARCHAR2(30) := 'REVERSE_DOCUMENT';
4526    l_api_version       CONSTANT  NUMBER := 1.0;
4527    l_return_status               VARCHAR2(30);
4528    l_event_class_rec             event_class_rec_type;
4529    l_context_info_rec            context_info_rec_type;
4530    l_init_msg_list               VARCHAR2(1);
4531 
4532  BEGIN
4533    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4534      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
4535    END IF;
4536 
4537    /*--------------------------------------------------+
4538     |   Standard start of API savepoint                |
4539     +--------------------------------------------------*/
4540     SAVEPOINT reverse_document_PVT;
4541 
4542    /*--------------------------------------------------+
4543     |   Standard call to check for call compatibility  |
4544     +--------------------------------------------------*/
4545 
4546     IF NOT FND_API.Compatible_API_Call(l_api_version,
4547                                        p_api_version,
4548                                        l_api_name,
4549                                        G_PKG_NAME
4550                                        ) THEN
4551       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4552     END IF;
4553 
4554    /*--------------------------------------------------------------+
4555     |   Initialize message list if p_init_msg_list is set to TRUE  |
4556     +--------------------------------------------------------------*/
4557      IF p_init_msg_list is null THEN
4558        l_init_msg_list := FND_API.G_FALSE;
4559      ELSE
4560      l_init_msg_list := p_init_msg_list;
4561    END IF;
4562 
4563      IF FND_API.to_Boolean(l_init_msg_list) THEN
4564        FND_MSG_PUB.initialize;
4565      END IF;
4566 
4567    /*-----------------------------------------+
4568     |   Initialize return status to SUCCESS   |
4569     +-----------------------------------------*/
4570     x_return_status := FND_API.G_RET_STS_SUCCESS;
4571 
4572     /*-----------------------------------------+
4573      |   Populate Global Variable              |
4574      +-----------------------------------------*/
4575      G_PUB_SRVC := l_api_name;
4576      G_DATA_TRANSFER_MODE := 'TAB';
4577      G_EXTERNAL_API_CALL  := 'N';
4578 
4579      /*-----------------------------------------+
4580      | Get the event id for the whole document |
4581      +-----------------------------------------*/
4582      select ZX_LINES_DET_FACTORS_S.nextval
4583       into l_event_class_rec.event_id
4584       from dual;
4585 
4586      /*------------------------------------------------------+
4587      |   Validate Input Paramerters and Fetch Tax Options   |
4588      +------------------------------------------------------*/
4589      ZX_VALID_INIT_PARAMS_PKG.reverse_document(x_return_status   => l_return_status,
4590                                                p_event_class_rec => l_event_class_rec
4591                                               );
4592 
4593      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4594        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4595          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.reverse_document returned errors');
4596        END IF;
4597        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4598          RAISE FND_API.G_EXC_ERROR;
4599        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4600          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4601        END IF;
4602      END IF;
4603 
4604     /*-----------------------------------------+
4605      |   Bug 5662795                           |
4606      +-----------------------------------------*/
4607      set_ptnr_srvc_subscr_flag (p_event_class_rec => NULL,
4608                                 x_return_status   => l_return_status
4609                                );
4610 
4611     /*--------------------------------------------------+
4612      |   Call Service Reverse Type Document             |
4613      +--------------------------------------------------*/
4614      ZX_SRVC_TYP_PKG.reverse_document(p_event_class_rec => l_event_class_rec,
4615                                       x_return_status   => l_return_status
4616                                      );
4617 
4618      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4619        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4620          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.reverse_document returned errors');
4621        END IF;
4622        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4623          RAISE FND_API.G_EXC_ERROR;
4624        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4625          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4626        END IF;
4627      END IF;
4628 
4629      --Delete from the global structures so that there are no hanging/redundant
4630      --records sitting there
4631      ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
4632 
4633      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4634        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
4635      END IF;
4636 
4637     EXCEPTION
4638       WHEN FND_API.G_EXC_ERROR THEN
4639         ROLLBACK TO reverse_document_PVT;
4640         x_return_status := FND_API.G_RET_STS_ERROR ;
4641         --Call API to dump into zx_errors_gt if not already inserted.
4642         DUMP_MSG;
4643         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4644           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4645         END IF;
4646 
4647       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4648         ROLLBACK TO reverse_document_PVT;
4649         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4650         DUMP_MSG;
4651         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4652         FND_MSG_PUB.Add;
4653        /*---------------------------------------------------------+
4654         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4655         | in the message stack. If there is only one message in   |
4656         | the stack it retrieves this message                     |
4657         +---------------------------------------------------------*/
4658         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4659                                   p_count   => x_msg_count,
4660                                   p_data    => x_msg_data
4661                                   );
4662 
4663         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4664           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4665         END IF;
4666 
4667       WHEN OTHERS THEN
4668          ROLLBACK TO reverse_document_PVT;
4669          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4670          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4671          FND_MSG_PUB.Add;
4672        /*---------------------------------------------------------+
4673         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4674         | in the message stack. If there is only one message in   |
4675         | the stack it retrieves this message                     |
4676         +---------------------------------------------------------*/
4677         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4678                                   p_count   => x_msg_count,
4679                                   p_data    => x_msg_data
4680                                   );
4681 
4682          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
4683            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
4684          END IF;
4685  END reverse_document;
4686 
4687 
4688 /* ======================================================================*
4689  | PROCEDURE Reverse_distributions : Reverses the base distribution      |
4690  | GTT involved : ZX_REVERSE_DIST_GT                                     |
4691  * ======================================================================*/
4692  PROCEDURE reverse_distributions
4693  ( p_api_version            IN         NUMBER,
4694    p_init_msg_list          IN         VARCHAR2,
4695    p_commit                 IN         VARCHAR2,
4699    x_msg_data               OUT NOCOPY VARCHAR2
4696    p_validation_level       IN         NUMBER,
4697    x_return_status          OUT NOCOPY VARCHAR2 ,
4698    x_msg_count              OUT NOCOPY NUMBER ,
4700   ) IS
4701    l_api_name          CONSTANT  VARCHAR2(30) := 'REVERSE_DISTRIBUTIONS';
4702    l_api_version       CONSTANT  NUMBER := 1.0;
4703    l_return_status               VARCHAR2(30);
4704    l_context_info_rec            context_info_rec_type;
4705    l_init_msg_list               VARCHAR2(1);
4706 
4707  BEGIN
4708    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4709      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
4710    END IF;
4711 
4712   /*--------------------------------------------------+
4713    |   Standard start of API savepoint                |
4714    +--------------------------------------------------*/
4715    SAVEPOINT reverse_distributions_PVT;
4716 
4717   /*--------------------------------------------------+
4718    |   Standard call to check for call compatibility  |
4719    +--------------------------------------------------*/
4720    IF NOT FND_API.Compatible_API_Call( l_api_version,
4721                                        p_api_version,
4722                                        l_api_name,
4723                                        G_PKG_NAME
4724                                        ) THEN
4725       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4726     END IF;
4727 
4728    /*--------------------------------------------------------------+
4729     |   Initialize message list if p_init_msg_list is set to TRUE  |
4730     +--------------------------------------------------------------*/
4731      IF p_init_msg_list is null THEN
4732        l_init_msg_list := FND_API.G_FALSE;
4733      ELSE
4734      l_init_msg_list := p_init_msg_list;
4735    END IF;
4736 
4737      IF FND_API.to_Boolean(l_init_msg_list) THEN
4738        FND_MSG_PUB.initialize;
4739      END IF;
4740 
4741    /*-----------------------------------------+
4742     |   Initialize return status to SUCCESS   |
4743     +-----------------------------------------*/
4744     x_return_status := FND_API.G_RET_STS_SUCCESS;
4745 
4746 
4747    /*-----------------------------------------+
4748     |   Populate Global Variable              |
4749     +-----------------------------------------*/
4750     G_PUB_SRVC := l_api_name;
4751     G_DATA_TRANSFER_MODE := 'TAB';
4752     G_EXTERNAL_API_CALL  := 'N';
4753 
4754    /*------------------------------------------------------+
4755     |   Validate Input Paramerters and Fetch Tax Options   |
4756     +------------------------------------------------------*/
4757     IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4758       FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
4759         'Validating Reversing Document Distributions'
4760           );
4761     END IF;
4762 
4763     ZX_VALID_INIT_PARAMS_PKG.reverse_distributions(x_return_status  =>l_return_status);
4764 
4765     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4766       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4767         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.reverse_distributions returned errors');
4768       END IF;
4769       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4770         RAISE FND_API.G_EXC_ERROR;
4771       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4772         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4773       END IF;
4774     END IF;
4775 
4776     /*--------------------------------------------------+
4777      |   Call Service Reverse Distributions             |
4778      +--------------------------------------------------*/
4779      ZX_SRVC_TYP_PKG.reverse_distributions(x_return_status   => l_return_status );
4780 
4781      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4782        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4783          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.reverse_distributions returned errors');
4784        END IF;
4785        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4786          RAISE FND_API.G_EXC_ERROR;
4787        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4788          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4789        END IF;
4790      END IF;
4791 
4792      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4793        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
4794      END IF;
4795 
4796      EXCEPTION
4797        WHEN FND_API.G_EXC_ERROR THEN
4798          ROLLBACK TO reverse_distributions_PVT;
4799          x_return_status := FND_API.G_RET_STS_ERROR ;
4800          --Call API to dump into zx_errors_gt
4801          DUMP_MSG;
4802          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4803             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4804          END IF;
4805 
4806        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4807          ROLLBACK TO reverse_distributions_PVT;
4808          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4809          DUMP_MSG;
4810          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4811          FND_MSG_PUB.ADD;
4812         /*---------------------------------------------------------+
4813          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4814          | in the message stack. If there is only one message in   |
4815          | the stack it retrieves this message                     |
4816          +---------------------------------------------------------*/
4817          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4818                                    p_count   => x_msg_count,
4819                                    p_data    => x_msg_data
4820                                    );
4821          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4822            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4823          END IF;
4824 
4825        WHEN OTHERS THEN
4826           ROLLBACK TO reverse_distributions_PVT;
4827           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4828           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4829           FND_MSG_PUB.ADD;
4830         /*---------------------------------------------------------+
4831          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4832          | in the message stack. If there is only one message in   |
4833          | the stack it retrieves this message                     |
4834          +---------------------------------------------------------*/
4835          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4836                                    p_count   => x_msg_count,
4837                                    p_data    => x_msg_data
4838                                    );
4839           IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
4840             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
4841           END IF;
4842  END reverse_distributions;
4843 
4844 /* ================================================================================*
4845  | PROCEDURE Reverse_document_distribution: Reverses the base reversing event class|
4846  | GTT involved : ZX_REV_TRX_HEADERS_GT, ZX_REVERSE_TRX_LINES_GT                   |
4847  * ================================================================================*/
4848  PROCEDURE reverse_document_distribution
4849  ( p_api_version            IN  NUMBER,
4850    p_init_msg_list          IN  VARCHAR2,
4851    p_commit                 IN  VARCHAR2,
4852    p_validation_level       IN  NUMBER,
4853    x_return_status          OUT NOCOPY VARCHAR2 ,
4854    x_msg_count              OUT NOCOPY NUMBER ,
4855    x_msg_data               OUT NOCOPY VARCHAR2
4856   ) IS
4857    l_api_name          CONSTANT  VARCHAR2(30) := 'REVERSE_DOCUMENT_DISTRIBUTION';
4858    l_api_version       CONSTANT  NUMBER := 1.0;
4859    l_return_status               VARCHAR2(30);
4860    l_event_class_rec             event_class_rec_type;
4861    l_context_info_rec            context_info_rec_type;
4862    l_init_msg_list               VARCHAR2(1);
4863 
4864  BEGIN
4865    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4866      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
4867    END IF;
4868 
4869   /*--------------------------------------------------+
4870    |   Standard start of API savepoint                |
4871    +--------------------------------------------------*/
4872    SAVEPOINT reverse_doc_distribution_PVT;
4873 
4874   /*--------------------------------------------------+
4875    |   Standard call to check for call compatibility  |
4876    +--------------------------------------------------*/
4877    IF NOT FND_API.Compatible_API_Call( l_api_version,
4878                                        p_api_version,
4879                                        l_api_name,
4880                                        G_PKG_NAME
4881                                        ) THEN
4882       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4883     END IF;
4884 
4885   /*--------------------------------------------------------------+
4886    |   Initialize message list if p_init_msg_list is set to TRUE  |
4887    +--------------------------------------------------------------*/
4888    IF p_init_msg_list is null THEN
4889       l_init_msg_list := FND_API.G_FALSE;
4890    ELSE
4891       l_init_msg_list := p_init_msg_list;
4892    END IF;
4893 
4894    IF FND_API.to_Boolean(l_init_msg_list) THEN
4895      FND_MSG_PUB.initialize;
4896    END IF;
4897 
4898    /*-----------------------------------------+
4899    |   Initialize return status to SUCCESS   |
4900    +-----------------------------------------*/
4901    x_return_status := FND_API.G_RET_STS_SUCCESS;
4902 
4903   /*-----------------------------------------+
4904    |   Populate Global Variable              |
4905    +-----------------------------------------*/
4906    G_PUB_SRVC := l_api_name;
4907    G_DATA_TRANSFER_MODE := 'TAB';
4908    G_EXTERNAL_API_CALL  := 'N';
4909 
4910     /*-----------------------------------------+
4911     | Get the event id for the whole document |
4912     +-----------------------------------------*/
4913      select zx_lines_det_factors_s.nextval
4914       into l_event_class_rec.event_id
4915       from dual;
4916 
4917   /*------------------------------------------------------+
4918    |   Validate Input Paramerters and Fetch Tax Options   |
4919    +------------------------------------------------------*/
4920    ZX_VALID_INIT_PARAMS_PKG.reverse_document( x_return_status        => l_return_status ,
4921                                               p_event_class_rec      => l_event_class_rec
4922                                             );
4923 
4924    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4925      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4926        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.reverse_document returned errors');
4927      END IF;
4928      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4929        RAISE FND_API.G_EXC_ERROR;
4930      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4931        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4932      END IF;
4933    END IF;
4934 
4935     /*-----------------------------------------+
4936      |   Bug 5662795                           |
4937      +-----------------------------------------*/
4938      set_ptnr_srvc_subscr_flag (p_event_class_rec => NULL,
4939                                 x_return_status   => l_return_status
4940                                );
4941 
4942   /*--------------------------------------------------+
4943    |   Call Service Reverse Document                  |
4944    +--------------------------------------------------*/
4945    ZX_SRVC_TYP_PKG.reverse_document( p_event_class_rec => l_event_class_rec,
4946                                      x_return_status   => l_return_status
4947                                    );
4948 
4949    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4950      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4951        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.reverse_document returned errors');
4952      END IF;
4953      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4954        RAISE FND_API.G_EXC_ERROR;
4955      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4956        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4957      END IF;
4958    END IF;
4959 
4960   /*------------------------------------------------------+
4961    |   Validate Input Paramerters and Fetch Tax Options   |
4962    +------------------------------------------------------*/
4963    ZX_VALID_INIT_PARAMS_PKG.reverse_distributions(x_return_status  => l_return_status );
4964 
4965    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4966      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4967        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.reverse_distributions returned errors');
4968      END IF;
4969      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4970        RAISE FND_API.G_EXC_ERROR;
4971      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4972        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4973      END IF;
4974    END IF;
4975   /*--------------------------------------------------+
4976    |   Call Service Reverse Distributions             |
4977    +--------------------------------------------------*/
4978    ZX_SRVC_TYP_PKG.reverse_distributions(x_return_status => l_return_status );
4979 
4980    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4981      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4982        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.reverse_distributions returned errors');
4983      END IF;
4984      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4985        RAISE FND_API.G_EXC_ERROR;
4986      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4987        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4988      END IF;
4989    END IF;
4990 
4991    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4992      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
4993    END IF;
4994 
4995     EXCEPTION
4996       WHEN FND_API.G_EXC_ERROR THEN
4997         ROLLBACK TO reverse_doc_distribution_PVT;
4998         x_return_status := FND_API.G_RET_STS_ERROR ;
4999         --Call API to dump into zx_errors_gt if not already inserted.
5000         DUMP_MSG;
5001         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5002           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5003         END IF;
5004 
5005       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5006         ROLLBACK TO reverse_doc_distribution_PVT;
5007         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5008         DUMP_MSG;
5009         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5010         FND_MSG_PUB.ADD;
5011        /*---------------------------------------------------------+
5012         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5013         | in the message stack. If there is only one message in   |
5014         | the stack it retrieves this message                     |
5015         +---------------------------------------------------------*/
5016         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5017                                   p_count   => x_msg_count,
5018                                   p_data    => x_msg_data
5019                                   );
5020         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5021           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5022         END IF;
5023 
5024       WHEN OTHERS THEN
5025         ROLLBACK TO reverse_doc_distribution_PVT;
5026         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5027         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5028         FND_MSG_PUB.ADD;
5029        /*---------------------------------------------------------+
5030         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5031         | in the message stack. If there is only one message in   |
5032         | the stack it retrieves this message                     |
5033         +---------------------------------------------------------*/
5034         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5035                                   p_count   => x_msg_count,
5036                                   p_data    => x_msg_data
5037                                   );
5038         IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
5039           FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
5040         END IF;
5041 
5042  END reverse_document_distribution;
5043 
5044 /* =======================================================================*
5045  | PROCEDURE  determine_recovery : Calculate the distribution of tax amounts
5046  | into recoverable and/or non-recoverable tax amounts.                   |
5047  | This API also supports processing for multiple event classes           |
5048  | GTT involved : ZX_TRX_HEADERS_GT, ZX_ITM_DISTRIBUTIONS_GT              |
5049  * =======================================================================*/
5050 
5051  PROCEDURE Determine_recovery
5052   ( p_api_version           IN         NUMBER,
5053     p_init_msg_list         IN         VARCHAR2,
5054     p_commit                IN         VARCHAR2,
5055     p_validation_level      IN         NUMBER,
5056     x_return_status         OUT NOCOPY VARCHAR2 ,
5057     x_msg_count             OUT NOCOPY NUMBER ,
5058     x_msg_data              OUT NOCOPY VARCHAR2
5059   ) IS
5060    l_api_name          CONSTANT  VARCHAR2(30) := 'DETERMINE_RECOVERY';
5061    l_api_version       CONSTANT  NUMBER := 1.0;
5062    l_return_status               VARCHAR2(30);
5063    l_error_buffer                VARCHAR2(1000);
5064    l_context_info_rec            context_info_rec_type;
5065    l_event_class_rec             event_class_rec_type;
5066    l_transaction_header_rec      transaction_header_rec_type;
5067    l_index                       BINARY_INTEGER;
5068    l_precedence                  NUMBER_tbl_type;
5069    l_init_msg_list               VARCHAR2(1);
5070    l_event_id                    NUMBER;
5071    l_related_doc_date            DATE;
5072    l_adjusted_doc_date           DATE;
5073    l_trx_date                    DATE;
5074    l_prov_tax_det_date           DATE;
5075    l_effective_date              DATE;
5076    l_call_evnt_cls_options      VARCHAR2(1);
5077    l_record_dist_lines           VARCHAR2(1);
5078 
5079     CURSOR event_classes IS
5080      SELECT distinct
5081            header.event_class_code,
5082            header.application_id,
5083            header.entity_code,
5084            header.internal_organization_id,
5085            evntmap.processing_precedence
5086       FROM ZX_EVNT_CLS_MAPPINGS evntmap,
5087            ZX_TRX_HEADERS_GT header
5088      WHERE header.application_id = evntmap.application_id
5089        AND header.entity_code = evntmap.entity_code
5090        AND header.event_class_code = evntmap.event_class_code
5091    ORDER BY evntmap.processing_precedence;
5092 
5093    CURSOR headers (p_event_class_code VARCHAR2,
5094                    p_application_id   NUMBER,
5095                    p_entity_code      VARCHAR2 ) IS
5096      SELECT INTERNAL_ORGANIZATION_ID,
5097             APPLICATION_ID,
5098             LEGAL_ENTITY_ID,
5099             ENTITY_CODE,
5100             EVENT_TYPE_CODE,
5101             EVENT_CLASS_CODE,
5102             TRX_ID,
5103             QUOTE_FLAG,
5104             ICX_SESSION_ID
5105        FROM ZX_TRX_HEADERS_GT
5106       WHERE event_class_code = p_event_class_code
5107         AND application_id   = p_application_id
5108         AND entity_code      = p_entity_code
5109         AND (validation_check_flag is null OR
5110              validation_check_flag <> 'N');
5111 
5112    -- added for bug fix 5417887
5113     CURSOR c_headers is
5114     SELECT APPLICATION_ID, ENTITY_CODE, EVENT_CLASS_CODE, TRX_ID, ICX_SESSION_ID,
5115            EVENT_TYPE_CODE, TAX_EVENT_TYPE_CODE, DOC_EVENT_STATUS
5116     FROM ZX_TRX_HEADERS_GT;
5117 
5118     CURSOR check_trx_line_dist_qty
5119     IS
5120     SELECT  APPLICATION_ID,
5121             ENTITY_CODE,
5122             EVENT_CLASS_CODE,
5123             TRX_ID,
5124             TRX_LINE_ID,
5125             TRX_LEVEL_TYPE
5126     FROM
5127             ZX_ITM_DISTRIBUTIONS_GT
5128     WHERE application_id   = l_event_class_rec.application_id
5129       AND entity_code      = l_event_class_rec.entity_code
5130       AND event_class_code = l_event_class_rec.event_class_code
5131       AND nvl(tax_variance_calc_flag,l_event_class_rec.tax_variance_calc_flag) = 'Y'
5132       AND ref_doc_application_id is not null
5133       AND trx_line_dist_qty is null;
5134 
5135 -- Bug 5516630: Move unit price validation to determine_recovery
5136 
5140             ENTITY_CODE,
5137     CURSOR check_trx_line_dist_unit_price
5138     IS
5139     SELECT  APPLICATION_ID,
5141             EVENT_CLASS_CODE,
5142             TRX_ID,
5143             TRX_LINE_ID,
5144             TRX_LEVEL_TYPE
5145     FROM
5146             ZX_ITM_DISTRIBUTIONS_GT
5147     WHERE application_id   = l_event_class_rec.application_id
5148       AND entity_code      = l_event_class_rec.entity_code
5149       AND event_class_code = l_event_class_rec.event_class_code
5150       AND nvl(tax_variance_calc_flag,l_event_class_rec.tax_variance_calc_flag) = 'Y'
5151       AND ref_doc_application_id is not null
5152       AND unit_price is null;
5153 
5154    -- This cursor is used to update event info on lines det factors
5155    CURSOR  c_event_info(c_application_id number,
5156                         c_entity_code varchar2,
5157                         c_event_class_code varchar2)
5158    is
5159    SELECT l_event_id                event_id,
5160           hdr.event_type_code       event_type_code,
5161           zetm.tax_event_type_code  tax_event_type_code,
5162           zect.status_code          doc_event_status,
5163           hdr.application_id        application_id,
5164           hdr.entity_code           entity_code,
5165           hdr.event_class_code      event_class_code,
5166           hdr.trx_id                trx_id
5167      FROM zx_trx_headers_gt    hdr,
5168           zx_evnt_typ_mappings zetm,
5169           zx_evnt_cls_typs     zect
5170     WHERE zetm.event_class_code = hdr.event_class_code
5171       AND zetm.application_id   = hdr.application_id
5172       AND zetm.entity_code      = hdr.entity_code
5173       AND zetm.event_type_code  = hdr.event_type_code
5174       AND zect.tax_event_type_code  = zetm.tax_event_type_code
5175       AND zect.tax_event_class_code = zetm.tax_event_class_code
5176       AND zetm.enabled_flag = 'Y'
5177       AND hdr.application_id = c_application_id
5178       AND hdr.entity_code = c_entity_code
5179       AND hdr.event_class_code = c_event_class_code
5180       AND hdr.quote_flag <> 'Y';
5181 
5182     l_application_id_tbl       NUMBER_tbl_type;
5183     l_entity_code_tbl          VARCHAR2_30_tbl_type;
5184     l_event_class_code_tbl     VARCHAR2_30_tbl_type;
5185     l_trx_id_tbl               NUMBER_tbl_type;
5186     l_icx_session_id_tbl       NUMBER_tbl_type;
5187     l_event_id_tbl             NUMBER_tbl_type;
5188     l_event_type_code_tbl      VARCHAR2_30_tbl_type;
5189     l_tax_event_type_code_tbl  VARCHAR2_30_tbl_type;
5190     l_doc_event_status_tbl     VARCHAR2_30_tbl_type;
5191 
5192     l_dummy_number  NUMBER;
5193     l_start_time    DATE;
5194     l_end_time      DATE;
5195     l_total_time    VARCHAR2(15);
5196 
5197     -- Added for bug#16483600 JAI ZX Integration
5198     lb_jai_exists   BOOLEAN := FALSE;
5199 
5200  BEGIN
5201    l_start_time := SYSDATE ;
5202 
5203    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5204      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
5205    END IF;
5206 
5207    /*--------------------------------------------------+
5208    |   Standard start of API savepoint                |
5209    +--------------------------------------------------*/
5210    SAVEPOINT determine_recovery_PVT;
5211 
5212   /*--------------------------------------------------+
5213    |   Standard call to check for call compatibility  |
5214    +--------------------------------------------------*/
5215    IF NOT FND_API.Compatible_API_Call( l_api_version,
5216                                        p_api_version,
5217                                        l_api_name,
5218                                        G_PKG_NAME
5219                                        ) THEN
5220      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5221    END IF;
5222 
5223   /*--------------------------------------------------------------+
5224    |   Initialize message list if p_init_msg_list is set to TRUE  |
5225    +--------------------------------------------------------------*/
5226      IF p_init_msg_list is null THEN
5227        l_init_msg_list := FND_API.G_FALSE;
5228      ELSE
5229      l_init_msg_list := p_init_msg_list;
5230    END IF;
5231 
5232      IF FND_API.to_Boolean(l_init_msg_list) THEN
5233        FND_MSG_PUB.initialize;
5234      END IF;
5235 
5236   /*-----------------------------------------+
5237    |   Initialize return status to SUCCESS   |
5238    +-----------------------------------------*/
5239 
5240    x_return_status := FND_API.G_RET_STS_SUCCESS;
5241 
5242   /*-----------------------------------------+
5243    |   Populate Global Variable              |
5244    +-----------------------------------------*/
5245    G_PUB_SRVC := l_api_name;
5246    G_DATA_TRANSFER_MODE := 'TAB';
5247    G_EXTERNAL_API_CALL  := 'N';
5248 
5249    --Call TDS process to initialise distributions for previous calls to determine recovery
5250    --if any
5251    ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (p_event_class_rec => NULL,
5252                                             p_init_level      => 'TAX_DISTRIBUTION',
5253                                             x_return_status   => l_return_status
5254                                             );
5255 
5256     l_call_evnt_cls_options := 'Y';
5257 
5258     /*-----------------------------------------+
5259     | Get the event id for the whole document |
5260     +-----------------------------------------*/
5261      --Bug 7650433
5262      --select ZX_LINES_DET_FACTORS_S.nextval
5263      --into l_event_id
5264      --from dual;
5265 
5266   /*------------------------------------------------+
5267    |  Update zx_lines_det_factors                   |
5268    +------------------------------------------------*/
5269 
5270    --FOR c_rec in c_event_info loop
5271    --   IF c_rec.quote_flag <> 'Y' THEN     -- Bug 5646787
5272    --
5273    --      UPDATE ZX_LINES_DET_FACTORS  D
5274    --         SET  EVENT_ID = c_rec.EVENT_ID,
5275    --              EVENT_TYPE_CODE  = c_rec.EVENT_TYPE_CODE,
5276    --              TAX_EVENT_TYPE_CODE = c_rec.TAX_EVENT_TYPE_CODE,
5277    --              DOC_EVENT_STATUS = c_rec.DOC_EVENT_STATUS
5278    --      WHERE
5279    --        D.APPLICATION_ID = c_rec.application_id
5280    --        AND D.ENTITY_CODE = c_rec.ENTITY_CODE
5281    --        AND D.EVENT_CLASS_CODE = c_rec.EVENT_CLASS_CODE
5282    --        AND D.TRX_ID = c_rec.TRX_ID;
5283    --   END IF;
5284    --END LOOP;
5285 
5286    OPEN event_classes;
5287      LOOP
5288        FETCH event_classes BULK COLLECT INTO
5289           l_evnt_cls.event_class_code,
5290           l_evnt_cls.application_id,
5291           l_evnt_cls.entity_code,
5292           l_evnt_cls.internal_organization_id,
5293           l_evnt_cls.precedence
5294        LIMIT G_LINES_PER_FETCH;
5295      EXIT WHEN event_classes%NOTFOUND;
5296      END LOOP;
5297    CLOSE event_classes;
5298 
5299    --Event classes such as SALES_TRANSACTION_TAX_QUOTE/PURCHASE_TRANSACTION_TAX_QUOTE
5300    --are not seeded in zx_evnt_cls_mappings so cursor event classes will not
5301    --return any rows for such event classes passed. This flag to keep track of this
5302    IF l_evnt_cls.event_class_code.LAST is null THEN
5303      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5304         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
5305            'Event class information does not exist - indicates SALES_TRANSACTION_TAX_QUOTE/PURCHASE_TRANSACTION_TAX_QUOTE');
5306      END IF;
5307      SELECT event_class_code,
5308             application_id,
5309             internal_organization_id,
5310             entity_code
5311        INTO l_evnt_cls.event_class_code(1),
5312             l_evnt_cls.application_id(1),
5313             l_evnt_cls.internal_organization_id(1),
5314             l_evnt_cls.entity_code(1)
5315        FROM ZX_TRX_HEADERS_GT
5316        WHERE rownum=1;
5317    END IF;
5318 
5319    /*-----------------------------------------+
5320    |   Loop for each transaction header      |
5321    +-----------------------------------------*/
5322    FOR i IN 1..nvl(l_evnt_cls.event_class_code.LAST,0)
5323      LOOP
5324       --Bug 7650433
5325       select ZX_LINES_DET_FACTORS_S.nextval
5326       into l_event_id
5327       from dual;
5328 
5329       -- Changed code to bulk collection for Bug#14613482 --
5330       OPEN c_event_info(l_evnt_cls.application_id(i),
5331                         l_evnt_cls.entity_code(i),
5332                         l_evnt_cls.event_class_code(i));
5333       LOOP
5334         FETCH c_event_info BULK COLLECT INTO
5335             l_event_id_tbl,
5336             l_event_type_code_tbl,
5337             l_tax_event_type_code_tbl,
5338             l_doc_event_status_tbl,
5339             l_application_id_tbl,
5340             l_entity_code_tbl,
5341             l_event_class_code_tbl,
5342             l_trx_id_tbl
5343         LIMIT G_LINES_PER_FETCH;
5344 
5345         -- Added if-else condition for Bug#16341635 --
5346         IF l_evnt_cls.application_id(i) = 201 THEN
5347           FORALL i IN NVL(l_trx_id_tbl.FIRST,0)..NVL(l_trx_id_tbl.LAST,-99)
5348           UPDATE ZX_LINES_DET_FACTORS  D
5349              SET EVENT_ID            = l_event_id_tbl(i),
5350                  EVENT_TYPE_CODE     = l_event_type_code_tbl(i),
5351                  TAX_EVENT_TYPE_CODE = l_tax_event_type_code_tbl(i),
5352                  DOC_EVENT_STATUS    = l_doc_event_status_tbl(i)
5353            WHERE D.APPLICATION_ID    = l_application_id_tbl(i)
5354              AND D.ENTITY_CODE       = l_entity_code_tbl(i)
5355              AND D.EVENT_CLASS_CODE  = l_event_class_code_tbl(i)
5356              AND D.TRX_ID            = l_trx_id_tbl(i)
5357              AND D.TRX_LINE_ID IN
5358                      (SELECT TL.TRX_LINE_ID
5359                         FROM ZX_ITM_DISTRIBUTIONS_GT TL
5360                        WHERE TL.APPLICATION_ID = l_application_id_tbl(i)
5361                          AND TL.ENTITY_CODE = l_entity_code_tbl(i)
5362                          AND TL.EVENT_CLASS_CODE = l_event_class_code_tbl(i)
5363                          AND TL.TRX_ID = l_trx_id_tbl(i));
5364         ELSE
5365           FORALL i IN NVL(l_trx_id_tbl.FIRST,0)..NVL(l_trx_id_tbl.LAST,-99)
5366           UPDATE ZX_LINES_DET_FACTORS  D
5367              SET EVENT_ID            = l_event_id_tbl(i),
5368                  EVENT_TYPE_CODE     = l_event_type_code_tbl(i),
5369                  TAX_EVENT_TYPE_CODE = l_tax_event_type_code_tbl(i),
5370                  DOC_EVENT_STATUS    = l_doc_event_status_tbl(i)
5371            WHERE D.APPLICATION_ID    = l_application_id_tbl(i)
5372              AND D.ENTITY_CODE       = l_entity_code_tbl(i)
5373              AND D.EVENT_CLASS_CODE  = l_event_class_code_tbl(i)
5374              AND D.TRX_ID            = l_trx_id_tbl(i);
5375         END IF;
5376 
5377         EXIT WHEN c_event_info%NOTFOUND;
5378       END LOOP;
5379       CLOSE c_event_info;
5380 
5381       l_event_id_tbl.DELETE;
5382       l_event_type_code_tbl.DELETE;
5383       l_tax_event_type_code_tbl.DELETE;
5384       l_doc_event_status_tbl.DELETE;
5385       l_application_id_tbl.DELETE;
5386       l_entity_code_tbl.DELETE;
5387       l_event_class_code_tbl.DELETE;
5388       l_trx_id_tbl.DELETE;
5389 
5390       l_event_class_rec.event_id := l_event_id;
5391       l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  l_evnt_cls.INTERNAL_ORGANIZATION_ID(i);
5392       l_event_class_rec.APPLICATION_ID               :=  l_evnt_cls.APPLICATION_ID(i);
5393       l_event_class_rec.ENTITY_CODE                  :=  l_evnt_cls.ENTITY_CODE(i);
5394       l_event_class_rec.EVENT_CLASS_CODE             :=  l_evnt_cls.EVENT_CLASS_CODE(i);
5395 
5396        ZX_TRD_SERVICES_PUB_PKG.g_variance_calc_flag := 'N';
5397 
5398        /*------------------------------------------------------+
5399        |   Validate Input Paramerters and Fetch Tax Options   |
5400        +------------------------------------------------------*/
5401        ZX_VALID_INIT_PARAMS_PKG.determine_recovery(x_return_status   =>l_return_status,
5402                                                    p_event_class_rec =>l_event_class_rec
5403                                                   );
5404 
5405        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5406          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5407            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.determine_recovery returned errors');
5408          END IF;
5409          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5410            RAISE FND_API.G_EXC_ERROR;
5411          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5412            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5413          END IF;
5414        END IF;
5415 
5416        select  ICX_SESSION_ID,QUOTE_FLAG
5417        INTO l_event_class_rec.ICX_SESSION_ID,l_event_class_rec.QUOTE_FLAG
5418        FROM ZX_TRX_HEADERS_GT
5419        where rownum = 1;
5420 
5421        IF l_event_class_rec.QUOTE_FLAG = 'Y' and
5422          l_event_class_rec.ICX_SESSION_ID is not null THEN
5423          ZX_SECURITY.G_ICX_SESSION_ID := l_event_class_rec.ICX_SESSION_ID;
5424          ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
5425          -- dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
5426 
5427        ELSE
5428          ZX_SECURITY.G_ICX_SESSION_ID := null;
5429          ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
5430          --dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
5431 
5432       END IF;
5433 
5434       -- Check if trx line dist qty is passed when variance calc flag is 'Y'
5435 
5436            FOR invalid_rec IN check_trx_line_dist_qty
5437            LOOP
5438 
5439             --  x_return_status := FND_API.G_RET_STS_ERROR;
5440               FND_MESSAGE.SET_NAME('ZX','ZX_TRX_LINE_DIST_QTY_REQD');
5441               l_context_info_rec.APPLICATION_ID   := invalid_rec.APPLICATION_ID;
5442               l_context_info_rec.ENTITY_CODE      := invalid_rec.ENTITY_CODE;
5443               l_context_info_rec.EVENT_CLASS_CODE := invalid_rec.EVENT_CLASS_CODE;
5444               l_context_info_rec.TRX_ID           := invalid_rec.TRX_ID;
5445               ZX_API_PUB.add_msg( p_context_info_rec =>l_context_info_rec );
5446               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5447                 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Transaction line distribution quantity is required');
5448               END IF;
5449           END LOOP;
5450 
5451       -- Check if trx line dist unit price is passed when variance calc flag is 'Y'
5452 
5453            FOR invalid_rec IN check_trx_line_dist_unit_price
5454            LOOP
5455 
5456             --  x_return_status := FND_API.G_RET_STS_ERROR;
5457               FND_MESSAGE.SET_NAME('ZX','ZX_UNIT_PRICE_REQD');
5458               l_context_info_rec.APPLICATION_ID   := invalid_rec.APPLICATION_ID;
5459               l_context_info_rec.ENTITY_CODE      := invalid_rec.ENTITY_CODE;
5460               l_context_info_rec.EVENT_CLASS_CODE := invalid_rec.EVENT_CLASS_CODE;
5461               l_context_info_rec.TRX_ID           := invalid_rec.TRX_ID;
5462               ZX_API_PUB.add_msg( p_context_info_rec =>l_context_info_rec );
5463               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5464                 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Transaction line distribution unit price is required');
5465               END IF;
5466           END LOOP;
5467 
5468 
5469        OPEN headers(l_evnt_cls.event_class_code(i),
5470                     l_evnt_cls.application_id(i),
5471                     l_evnt_cls.entity_code(i)
5472                    );
5473        LOOP
5474          FETCH headers BULK COLLECT INTO
5475            l_transaction_header_rec.INTERNAL_ORGANIZATION_ID,
5476            l_transaction_header_rec.APPLICATION_ID,
5477            l_transaction_header_rec.LEGAL_ENTITY_ID,
5478            l_transaction_header_rec.ENTITY_CODE,
5479            l_transaction_header_rec.EVENT_TYPE_CODE,
5480            l_transaction_header_rec.EVENT_CLASS_CODE,
5481            l_transaction_header_rec.TRX_ID,
5482            l_transaction_header_rec.QUOTE_FLAG,
5483            l_transaction_header_rec.ICX_SESSION_ID
5484          LIMIT G_LINES_PER_FETCH;
5485 
5486          FOR l_index IN 1..nvl(l_transaction_header_rec.application_id.LAST,0)
5487          LOOP
5488            BEGIN
5489              SAVEPOINT Determine_Recovery_Hdr_PVT;
5490              --Copy to event class record
5491              l_event_class_rec.INTERNAL_ORGANIZATION_ID :=  l_transaction_header_rec.INTERNAL_ORGANIZATION_ID(l_index);
5492              l_event_class_rec.APPLICATION_ID           :=  l_transaction_header_rec.APPLICATION_ID(l_index);
5493              l_event_class_rec.LEGAL_ENTITY_ID          :=  l_transaction_header_rec.LEGAL_ENTITY_ID(l_index);
5494              l_event_class_rec.ENTITY_CODE              :=  l_transaction_header_rec.ENTITY_CODE(l_index);
5495              l_event_class_rec.EVENT_CLASS_CODE         :=  l_transaction_header_rec.EVENT_CLASS_CODE(l_index);
5496              l_event_class_rec.EVENT_TYPE_CODE          :=  l_transaction_header_rec.EVENT_TYPE_CODE(l_index);
5497              l_event_class_rec.TRX_ID                   :=  l_transaction_header_rec.TRX_ID(l_index);
5498              l_event_class_rec.ICX_SESSION_ID           :=  l_transaction_header_rec.ICX_SESSION_ID(l_index);
5499              l_event_class_rec.QUOTE_FLAG               :=  l_transaction_header_rec.QUOTE_FLAG(l_index);
5500 
5501 
5502               /* ----------------------------------------------------------------------+
5503               | Bug 3129063 - Setting the Security Context for Subscription           |
5504               + ----------------------------------------------------------------------*/
5505               ZX_VALID_INIT_PARAMS_PKG.get_tax_subscriber
5506                                 (l_event_class_rec,
5507                                  l_return_status);
5508 
5509              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5510                --DUMP_MSG;
5511                x_return_status := l_return_status;
5512                IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5513                 RAISE FND_API.G_EXC_ERROR;
5514                ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5515                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5516                END IF;
5517              END IF;
5518 
5519 
5520              /* ----------------------------------------------------------------------+
5521              |      Get Tax Event Type                                               |
5522              + ----------------------------------------------------------------------*/
5523              ZX_VALID_INIT_PARAMS_PKG.get_tax_event_type (l_return_status
5524                                 ,l_event_class_rec.event_class_code
5525                                 ,l_event_class_rec.application_id
5526                                 ,l_event_class_rec.entity_code
5527                                 ,l_event_class_rec.event_type_code
5528                                 ,l_event_class_rec.tax_event_class_code
5529                                 ,l_event_class_rec.tax_event_type_code
5530                                 ,l_event_class_rec.doc_status_code
5531                                );
5532 
5533             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5534               x_return_status := l_return_status;
5535               --DUMP_MSG;
5536               IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5537                 RAISE FND_API.G_EXC_ERROR;
5538               ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5539                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5540               END IF;
5541             END IF;
5542            -- Bug 6135079, SDSU - enforce_tax_from_ref_doc should be picked up from event class instead of event mappings
5543            -- This can be achieved by calling populate_event_class_options as we have done it in calculate_tax
5544 
5545           BEGIN
5546              BEGIN
5547                 SELECT first_pty_org_id ,
5548                        related_doc_date,
5549                         adjusted_doc_date,
5550                         trx_date,
5551                         provnl_tax_determination_date
5552                 INTO   l_event_class_rec.first_pty_org_id,
5553                        l_related_doc_date,
5554                        l_adjusted_doc_date,
5555                        l_trx_date,
5556                        l_prov_tax_det_date
5557                 FROM   ZX_LINES_DET_FACTORS
5558                 WHERE  application_id   = l_event_class_rec.application_id
5559                   AND  entity_code      = l_event_class_rec.entity_code
5560                   AND  event_class_code = l_event_class_rec.event_class_code
5561                   AND  trx_id           = l_event_class_rec.trx_id
5562                   AND  rownum           = 1;
5563             EXCEPTION
5564                when no_data_found then
5565                  l_call_evnt_cls_options := 'N';
5566             END;
5567 
5568             l_effective_date := determine_effective_date (l_trx_date,
5569                                                           l_related_doc_date,
5570                                                            l_adjusted_doc_date,
5571                                                           l_prov_tax_det_date
5572                                                           );
5573             EXCEPTION
5574        WHEN OTHERS THEN
5575          l_effective_date := SYSDATE;
5576        END;
5577       /* ----------------------------------------------------------------------+
5578             |      Populate Event Class Options                                     |
5579             + ----------------------------------------------------------------------*/
5580         IF l_call_evnt_cls_options = 'Y' THEN
5581             ZX_VALID_INIT_PARAMS_PKG.populate_event_class_options(l_return_status,
5582                               l_effective_date,
5583                               l_event_class_rec
5584                              );
5585         END IF;
5586 
5587             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5588              x_return_status := l_return_status;
5589              --DUMP_MSG;
5590              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5591                RAISE FND_API.G_EXC_ERROR;
5592              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5593                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5594              END IF;
5595             END IF;
5596 
5597             ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec := l_event_class_rec;
5598 
5599              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5600                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
5601                 'application_id: '||to_char(l_event_class_rec.application_id)||
5602                 ' entity_code: '||l_event_class_rec.entity_code||
5603                 ' event_class_code: '||l_event_class_rec.event_class_code||
5604                 ' event_type_code: '||l_event_class_rec.event_type_code||
5605                 ' trx_id: '||to_char(l_event_class_rec.trx_id)||
5606                 ' internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
5607                 ' quote_flag: '||to_char(l_event_class_rec.quote_flag)||
5608                 ' icx_session_id: '||to_char(l_event_class_rec.icx_session_id));
5609              END IF;
5610 
5611 
5612             /* ===============================================================================*
5613             |Initialize the global structures/global temp tables owned by TDM at header level |
5614             * =============================================================================*/
5615              ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (l_event_class_rec ,
5616                                                       'HEADER',
5617                                                       l_return_status
5618                                                      );
5619 
5620              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5621                x_return_status := l_return_status;
5622                IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5623                    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.initialize  returned errors');
5624                END IF;
5625                IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5626                  RAISE FND_API.G_EXC_ERROR;
5627                ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5628                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5629                END IF;
5630              END IF;
5631 
5632             /* -------------------------------------------------------+
5633              |  JAI AP prepay application                             |
5634              + -------------------------------------------------------*/
5635              -- Start : Added for JAI Trigger Elimination : Bug#16483600 JAI ZX Integration
5636              -- JAI AP prepay application
5637              lb_jai_exists := JAI_TAX_PROCESSING_PKG.CHECK_JAI_EXISTS_IN_ZX(
5638                                   pn_set_of_books_id => l_event_class_rec.ledger_id
5639                                  ,pn_application_id  => l_event_class_rec.application_id
5640                                  ,pv_entity_code     => l_event_class_rec.ENTITY_CODE
5641                                  ,pn_trx_id          => l_event_class_rec.TRX_ID
5642                               );
5643 
5644              IF lb_jai_exists = TRUE THEN
5645 
5646                IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5647                  FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':JAI processing start +');
5648                END IF;
5649 
5650                --Call JAI procedure for AP TDS prepayment application
5651                JAI_TAX_PROCESSING_PKG.DETERMINE_RECOVERY(x_return_status   => l_return_status
5652                                                         ,p_event_class_rec => l_event_class_rec
5653                );
5654                IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5655                  x_return_status := l_return_status;
5656                  IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5657                    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
5658                    'JAI_TAX_PROCESSING_PKG.DETERMINE_RECOVERY RETURN_STATUS = ' || x_return_status);
5659                  END IF;
5660                  IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5661                    RAISE FND_API.G_EXC_ERROR;
5662                  ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5663                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5664                  END IF;
5665                END IF;
5666 
5667                IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5668                  FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':JAI processing end -');
5669                END IF;
5670              END IF;
5671              -- End : Added for JAI Trigger Elimination
5672 
5673              ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl.DELETE;
5674 
5675              /*--------------------------------------------------+
5676              |   Call Service Type Determine Recovery           |
5677              +--------------------------------------------------*/
5678              ZX_SRVC_TYP_PKG.determine_recovery(p_event_class_rec    => l_event_class_rec,
5679                                                 x_return_status      => l_return_status
5680                                                );
5681 
5682              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5683                x_return_status := l_return_status;
5684                IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5685                    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.determine_recovery  returned errors');
5686                END IF;
5687                IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5688                  RAISE FND_API.G_EXC_ERROR;
5689                ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5690                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5691                END IF;
5692              END IF;
5693 
5694              EXCEPTION
5695                WHEN FND_API.G_EXC_ERROR THEN
5696                  ROLLBACK TO Determine_Recovery_Hdr_PVT;
5697                  x_return_status := FND_API.G_RET_STS_ERROR ;
5698                  --DUMP_MSG;
5699                  IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5700                    FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'Expected Error raised for Trx_id'||TO_CHAR(l_event_class_rec.trx_id));
5701                  END IF;
5702              END;
5703          END LOOP; --end loop for transaction headers
5704          EXIT WHEN headers%NOTFOUND;
5705         END LOOP;
5706       CLOSE headers;
5707 
5708 
5709       IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5710         FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'Return Status after Recovery Determination : '||x_return_status);
5711       END IF;
5712 
5713       -- Added for Bug#13732606 --
5714       IF x_return_status = FND_API.G_RET_STS_ERROR THEN
5715          RAISE FND_API.G_EXC_ERROR;
5716       ELSIF x_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5717          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5718       END IF;
5719 
5720        -- bug fix 3313938: add tax_variance_calc_flag check.
5721        --
5722        IF ZX_TRD_SERVICES_PUB_PKG.g_variance_calc_flag = 'Y' THEN
5723 
5724          ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors(
5725                   l_return_status,
5726                   l_error_buffer);
5727 
5728          IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
5729            x_return_status := l_return_status;
5730            IF (g_level_statement >= g_current_runtime_level ) THEN
5731              FND_LOG.STRING(g_level_statement,
5732                            G_MODULE_NAME||l_api_name,
5733                            'After calling calc_variance_factors ' ||
5734                            ' return_status = ' || x_return_status);
5735              FND_LOG.STRING(g_level_statement,
5736                            G_MODULE_NAME||l_api_name,
5737                            'ZX_API_PUB.DETERMINE_RECOVERY(-)');
5738            END IF;
5739           --DUMP_MSG;
5740           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5741            RAISE FND_API.G_EXC_ERROR;
5742           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5743            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5744           END IF;
5745          END IF;
5746        END IF;
5747 
5748 
5749     -- Bug fix 5417887 begin
5750 
5751    /*--------------------------------------------------+
5752     |   Call to eTax Service Manage Tax Distributions  |
5753     +--------------------------------------------------*/
5754    /*-----------------------------------------------------------------+
5755     | Bug 3649502 - Check for record flag before calling TRR service  |
5756     +----------------------------------------------------------------*/
5757     --IF zx_global_structures_pkg.g_event_class_rec.record_flag = 'Y' THEN
5758 
5759     l_record_dist_lines := ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.record_flag;
5760 
5761     IF zx_global_structures_pkg.g_event_class_rec.record_flag = 'Y' and
5762        ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'Y' THEN
5763        l_record_dist_lines := 'N';
5764     END IF;
5765 
5766     IF l_record_dist_lines = 'Y' THEN
5767       ZX_TRL_PUB_PKG.manage_taxdistributions(x_return_status    =>l_return_status,
5768                                              p_event_class_rec  =>zx_global_structures_pkg.g_event_class_rec
5769                                             );
5770     END IF;
5771 
5772     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5773       x_return_status := l_return_status;
5774       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5775           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TRL_PUB_PKG.manage_taxdistributions  returned errors');
5776       END IF;
5777       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5778         --DUMP_MSG;
5779         RAISE FND_API.G_EXC_ERROR;
5780       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5781         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5782       END IF;
5783     END IF;
5784 
5785     -- Bug fix 7506576 Included additional condition flag quote_flag when
5786     -- deleting records from GT TABLES
5787 
5788     --IF zx_global_structures_pkg.g_event_class_rec.record_flag = 'Y'  AND ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'N'
5789 
5790     --Reimplemented the fix done in bug#7506576
5791     IF l_record_dist_lines = 'Y' THEN
5792        DELETE FROM ZX_REC_NREC_DIST_GT;
5793     END IF;
5794 
5795  END LOOP;--event_classes cursor
5796 
5797     /*------------------------------------------------+
5798      |  Update zx_lines_det_factors                   |
5799      +------------------------------------------------*/
5800 
5801      IF zx_global_structures_pkg.g_event_class_rec.quote_flag <> 'Y'  OR
5802         zx_global_structures_pkg.g_event_class_rec.ICX_SESSION_ID is not null
5803      THEN
5804 
5805        -- ICX_SESSION_ID / QUOTE_FLAG should be same for all rows
5806       IF zx_global_structures_pkg.g_event_class_rec.ICX_SESSION_ID is not null THEN
5807 
5808        BEGIN
5809         OPEN C_HEADERS;
5810         LOOP
5811            FETCH c_HEADERS BULK COLLECT INTO
5812                l_application_id_tbl,
5813                l_entity_code_tbl,
5814                l_event_class_code_tbl,
5815                l_trx_id_tbl,
5816                l_icx_session_id_tbl,
5817                l_event_type_code_tbl,
5818                l_tax_event_type_code_tbl,
5819                l_doc_event_status_tbl
5820            LIMIT G_LINES_PER_FETCH;
5821 
5822 
5823               /*------------------------------------------------------------------------------+
5824                |  Bug 4948674: Handle delete for P2P products when icx_session_id is NOT NULL |
5825                +------------------------------------------------------------------------------*/
5826 
5827               FORALL i IN l_application_id_tbl.FIRST .. l_application_id_tbl.LAST
5828                 DELETE from zx_lines_det_factors
5829                 WHERE APPLICATION_ID   = l_application_id_tbl(i)
5830                  AND ENTITY_CODE       = l_entity_code_tbl(i)
5831                  AND EVENT_CLASS_CODE  = l_event_class_code_tbl(i)
5832                  AND TRX_ID            = l_trx_id_tbl(i)
5833                  AND ICX_SESSION_ID    = l_icx_session_id_tbl(i);
5834 
5835            exit when c_HEADERS%NOTFOUND;
5836         END LOOP;
5837 
5838         close c_HEADERS;
5839       EXCEPTION
5840          WHEN OTHERS THEN
5841 
5842            IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5843                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TRL_PUB_PKG.manage_taxdistributions  returned errors');
5844                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name, SQLCODE||' ; '||SQLERRM);
5845            END IF;
5846 
5847            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5848            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5849            FND_MSG_PUB.Add;
5850 
5851            IF  c_HEADERS%ISOPEN THEN
5852                  close c_HEADERS;
5853            END IF;
5854        END;
5855      END IF; -- icx_session_id
5856 
5857 
5858     END IF;
5859 
5860     -- Bug fix 5417887 end
5861 
5862     --Reset the icx_session_id at end of API
5863     ZX_SECURITY.G_ICX_SESSION_ID := null;
5864     ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
5865     -- dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
5866 
5867 
5868     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5869        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
5870     END IF;
5871 
5872     l_end_time:=SYSDATE;
5873     l_total_time:=floor((l_end_time-l_start_time)*24)|| ':' ||
5874                   mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
5875                   mod(floor((l_end_time-l_start_time)*24*60*60),60);
5876 
5877     IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
5878       FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
5879       FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
5880       FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
5881       SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
5882       FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
5883       SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
5884       FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
5885     END IF;
5886 
5887    SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
5888    IF fnd_global.conc_request_id <> -1 AND l_dummy_number > 1 THEN
5889       FND_FILE.put_line(which => FND_FILE.LOG
5890                        ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics Start Time:'
5891                        ||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
5892       FND_FILE.put_line(which => FND_FILE.LOG
5893                        ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics End   Time:'
5894                        ||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
5895       FND_FILE.put_line(which => FND_FILE.LOG
5896                        ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics Total Time:'
5897                        ||l_total_time);
5898       SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
5899       FND_FILE.put_line(which => FND_FILE.LOG
5900                        ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics: Number of Records in  ZX_TRX_HEADERS_GT :'||l_dummy_number);
5901       SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
5902       FND_FILE.put_line(which => FND_FILE.LOG
5903                        ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics: Number of Records in  ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
5904     END IF;
5905 
5906     EXCEPTION
5907        WHEN FND_API.G_EXC_ERROR THEN
5908          ROLLBACK TO Determine_Recovery_PVT;
5909          --Close all open cursors
5910          IF headers%ISOPEN THEN CLOSE headers; END IF;
5911          x_return_status := FND_API.G_RET_STS_ERROR;
5912          DUMP_MSG;
5913          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5914            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5915 
5916          END IF;
5917 
5918          l_end_time:=SYSDATE;
5919          l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
5920                          mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
5921                          mod(floor((l_end_time-l_start_time)*24*60*60),60);
5925           FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
5922         IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
5923           FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
5924           FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
5926           SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
5927           FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
5928           SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
5929           FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
5930         END IF;
5931 
5932         SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
5933         IF fnd_global.conc_request_id <> -1 AND l_dummy_number > 1 THEN
5934           FND_FILE.put_line(which => FND_FILE.LOG
5935                            ,buff  => 'ZX_API_PUB.Determine_recovery.Exception  FND_API.G_EXC_ERROR');
5936 
5937           FND_FILE.put_line(which => FND_FILE.LOG
5938                            ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics Start Time:'
5939                            ||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
5940           FND_FILE.put_line(which => FND_FILE.LOG
5941                            ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics End   Time:'
5942                            ||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
5943           FND_FILE.put_line(which => FND_FILE.LOG
5944                            ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics Total Time:'
5945                            ||l_total_time);
5946           SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
5947           FND_FILE.put_line(which => FND_FILE.LOG
5948                           ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics: Number of Records in  ZX_TRX_HEADERS_GT :'||l_dummy_number);
5949           SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
5950           FND_FILE.put_line(which => FND_FILE.LOG
5951                            ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics: Number of Records in  ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
5952         END IF;
5953 
5954 
5955        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5956          ROLLBACK TO Determine_Recovery_PVT;
5957          --Close all open cursors
5958          IF headers%ISOPEN THEN CLOSE headers; END IF;
5959          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5960          DUMP_MSG;
5961          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5962          FND_MSG_PUB.Add;
5963         /*---------------------------------------------------------+
5964          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5965          | in the message stack. If there is only one message in   |
5966          | the stack it retrieves this message                     |
5967          +---------------------------------------------------------*/
5968          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5969                                    p_count   => x_msg_count,
5970                                    p_data    => x_msg_data
5971                                    );
5972          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5973            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5974          END IF;
5975 
5976          l_end_time:=SYSDATE;
5977          l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
5978                          mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
5979                          mod(floor((l_end_time-l_start_time)*24*60*60),60);
5980          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
5981 
5982            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
5983            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
5984            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
5985            SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
5986            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
5987            SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
5988            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
5989          END IF;
5990 
5991          SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
5992          IF fnd_global.conc_request_id <> -1 AND l_dummy_number > 1 THEN
5993            FND_FILE.put_line(which => FND_FILE.LOG
5994                             ,buff  => 'ZX_API_PUB.Determine_recovery.Exception  FND_API.G_EXC_ERROR');
5995            FND_FILE.put_line(which => FND_FILE.LOG
5996                             ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics Start Time:'
5997                             ||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
5998            FND_FILE.put_line(which => FND_FILE.LOG
5999                             ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics End   Time:'
6000                             ||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
6001            FND_FILE.put_line(which => FND_FILE.LOG
6002                             ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics Total Time:'
6003                             ||l_total_time);
6004            SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
6005            FND_FILE.put_line(which => FND_FILE.LOG
6006                            ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics: Number of Records in  ZX_TRX_HEADERS_GT :'||l_dummy_number);
6010          END IF;
6007            SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
6008            FND_FILE.put_line(which => FND_FILE.LOG
6009                             ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics: Number of Records in  ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
6011 
6012 
6013        WHEN OTHERS THEN
6014          ROLLBACK TO Determine_Recovery_PVT;
6015          --Close all open cursors
6016          IF headers%ISOPEN THEN CLOSE headers; END IF;
6017          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6018          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6019          FND_MSG_PUB.Add;
6020          /*---------------------------------------------------------+
6021           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6022           | in the message stack. If there is only one message in   |
6023           | the stack it retrieves this message                     |
6024           +---------------------------------------------------------*/
6025          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6026                                    p_count   => x_msg_count,
6027                                    p_data    => x_msg_data
6028                                    );
6029          l_end_time:=SYSDATE;
6030          l_total_time := floor((l_end_time-l_start_time)*24)|| ':' ||
6031                          mod(floor((l_end_time-l_start_time)*24*60),60)|| ':' ||
6032                          mod(floor((l_end_time-l_start_time)*24*60*60),60);
6033          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6034            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6035            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Start Time :'||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
6036            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','End   Time :'||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
6037            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Total Time :'|| l_total_time);
6038            SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
6039            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRX_HEADERS_GT :'||l_dummy_number);
6040            SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
6041            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name||'.Statistics','Number of records in ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
6042          END IF;
6043 
6044          SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
6045          IF fnd_global.conc_request_id <> -1 AND l_dummy_number > 1 THEN
6046            FND_FILE.put_line(which => FND_FILE.LOG
6047                             ,buff  => 'ZX_API_PUB.Determine_recovery.Exception  OTHERS');
6048            FND_FILE.put_line(which => FND_FILE.LOG
6049                             ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics Start Time:'
6050                             ||to_char(l_start_time,'DD-MM-YYYY HH24:MI:SS'));
6051            FND_FILE.put_line(which => FND_FILE.LOG
6052                             ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics End   Time:'
6053                             ||to_char(l_end_time,'DD-MM-YYYY HH24:MI:SS'));
6054            FND_FILE.put_line(which => FND_FILE.LOG
6055                             ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics Total Time:'
6056                             ||l_total_time);
6057            SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRX_HEADERS_GT;
6058            FND_FILE.put_line(which => FND_FILE.LOG
6059                            ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics: Number of Records in  ZX_TRX_HEADERS_GT :'||l_dummy_number);
6060            SELECT COUNT(*) INTO l_dummy_number FROM ZX_TRANSACTION_LINES_GT;
6061            FND_FILE.put_line(which => FND_FILE.LOG
6062                             ,buff  => 'ZX_API_PUB.Determine_recovery.Statistics: Number of Records in  ZX_TRANSACTION_LINES_GT :'||l_dummy_number);
6063          END IF;
6064 
6065  END determine_recovery;
6066 
6067 /* =======================================================================*
6068  | PROCEDURE  override_recovery :Overrides the tax recovery rate code     |
6069  * =======================================================================*/
6070 
6071  PROCEDURE Override_recovery
6072  ( p_api_version           IN            NUMBER,
6073    p_init_msg_list         IN            VARCHAR2,
6074    p_commit                IN            VARCHAR2,
6075    p_validation_level      IN            NUMBER,
6076    x_return_status         OUT    NOCOPY VARCHAR2 ,
6077    x_msg_count             OUT    NOCOPY NUMBER ,
6078    x_msg_data              OUT    NOCOPY VARCHAR2,
6079    p_transaction_rec       IN OUT NOCOPY transaction_rec_type
6080  ) IS
6081    l_api_name          CONSTANT  VARCHAR2(30) := 'OVERRIDE_RECOVERY';
6082    l_api_version       CONSTANT  NUMBER := 1.0;
6083    l_return_status               VARCHAR2(30);
6084    l_event_class_rec             event_class_rec_type;
6085    l_trans_rec                   transaction_rec_type;
6086    l_init_msg_list               VARCHAR2(1);
6087    l_record_dist_lines           VARCHAR2(1);
6088 
6089  BEGIN
6090    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6091      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
6092    END IF;
6093 
6094    /*--------------------------------------------------+
6095    |   Standard start of API savepoint                |
6096    +--------------------------------------------------*/
6097    SAVEPOINT override_recovery_PVT;
6098 
6099   /*--------------------------------------------------+
6100    |   Standard call to check for call compatibility  |
6101    +--------------------------------------------------*/
6102    IF NOT FND_API.Compatible_API_Call( l_api_version,
6103                                        p_api_version,
6107      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6104                                        l_api_name,
6105                                        G_PKG_NAME
6106                                       ) THEN
6108    END IF;
6109 
6110   /*--------------------------------------------------------------+
6111    |   Initialize message list if p_init_msg_list is set to TRUE  |
6112    +--------------------------------------------------------------*/
6113      IF p_init_msg_list is null THEN
6114        l_init_msg_list := FND_API.G_FALSE;
6115      ELSE
6116      l_init_msg_list := p_init_msg_list;
6117      END IF;
6118 
6119      IF FND_API.to_Boolean(l_init_msg_list) THEN
6120        FND_MSG_PUB.initialize;
6121      END IF;
6122 
6123   /*-----------------------------------------+
6124    |   Initialize return status to SUCCESS   |
6125    +-----------------------------------------*/
6126    x_return_status := FND_API.G_RET_STS_SUCCESS;
6127 
6128   /*-----------------------------------------+
6129    |   Populate Global Variable              |
6130    +-----------------------------------------*/
6131    G_PUB_SRVC := l_api_name;
6132    G_DATA_TRANSFER_MODE := 'PLS';
6133    G_EXTERNAL_API_CALL  := 'N';
6134 
6135    --Call TDS process to initialise distributions for previous calls to determine recovery
6136    --if any
6137    ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (p_event_class_rec => NULL,
6138                                             p_init_level      => 'TAX_DISTRIBUTION',
6139                                             x_return_status   => l_return_status
6140                                             );
6141   /*------------------------------------------------------+
6142    |   Validate Input Paramerters and Fetch Tax Options   |
6143    +------------------------------------------------------*/
6144    ZX_VALID_INIT_PARAMS_PKG.override_recovery(x_return_status   => l_return_status,
6145                                               p_event_class_rec => l_event_class_rec,
6146                                               p_trx_rec         => p_transaction_rec
6147                                              );
6148 
6149    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6150      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6151        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.override_recovery returned errors');
6152      END IF;
6153      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6154        RAISE FND_API.G_EXC_ERROR;
6155      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6156        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6157      END IF;
6158    END IF;
6159 
6160   /*--------------------------------------------------+
6161    |   Call Service Type Override Recovery            |
6162    +--------------------------------------------------*/
6163    ZX_SRVC_TYP_PKG.override_recovery(p_event_class_rec    => l_event_class_rec,
6164                                      x_return_status      => l_return_status
6165                                     );
6166 
6167    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6168      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6169        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.override_recovery returned errors');
6170      END IF;
6171      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6172        RAISE FND_API.G_EXC_ERROR;
6173      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6174        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6175      END IF;
6176    END IF;
6177 
6178   /*--------------------------------------------------+
6179    |   Call to eTax Service Manage Tax Distributions  |
6180    +--------------------------------------------------*/
6181    --IF l_event_class_rec.record_flag = 'Y' THEN
6182 
6183    l_record_dist_lines := l_event_class_rec.record_flag;
6184 
6185    IF l_event_class_rec.record_flag = 'Y' and
6186       l_event_class_rec.quote_flag = 'Y' THEN
6187       l_record_dist_lines := 'N';
6188    END IF;
6189    IF l_record_dist_lines = 'Y' THEN
6190      ZX_TRL_PUB_PKG.manage_taxdistributions(x_return_status    => l_return_status,
6191                                             p_event_class_rec  => l_event_class_rec
6192                                            );
6193    END IF;
6194 
6195    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6196      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6197        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TRL_PUB_PKG.manage_taxdistributions returned errors');
6198      END IF;
6199      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6200        RAISE FND_API.G_EXC_ERROR;
6201      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6202        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6203      END IF;
6204    END IF;
6205 
6206    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6207       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
6208    END IF;
6209 
6210     /* Bug 3704651 - No need to uptake error handling as it is a PLS API*/
6211     EXCEPTION
6212        WHEN FND_API.G_EXC_ERROR THEN
6213          ROLLBACK TO override_recovery_PVT;
6214          x_return_status := FND_API.G_RET_STS_ERROR ;
6215          DUMP_MSG;
6216         /*---------------------------------------------------------+
6217          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6218          | in the message stack. If there is only one message in   |
6219          | the stack it retrieves this message                     |
6220          +---------------------------------------------------------*/
6221          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6222                                    p_count   => x_msg_count,
6223                                    p_data    => x_msg_data
6224                                    );
6225          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6226            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6227          END IF;
6228 
6229        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6230          ROLLBACK TO override_recovery_PVT;
6231          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6232          DUMP_MSG;
6233          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6234          FND_MSG_PUB.Add;
6235         /*---------------------------------------------------------+
6236          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6237          | in the message stack. If there is only one message in   |
6238          | the stack it retrieves this message                     |
6239          +---------------------------------------------------------*/
6240          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6241                                    p_count   => x_msg_count,
6242                                    p_data    => x_msg_data
6243                                    );
6244          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6245            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6246          END IF;
6247 
6248        WHEN OTHERS THEN
6249          /*-------------------------------------------------------+
6250           |  Handle application errors that result from trapable  |
6251           |  error conditions. The error messages have already    |
6252           |  been put on the error stack.                         |
6253           +-------------------------------------------------------*/
6254           ROLLBACK TO override_recovery_PVT;
6255           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6256           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6257           FND_MSG_PUB.Add;
6258         /*---------------------------------------------------------+
6259          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6260          | in the message stack. If there is only one message in   |
6261          | the stack it retrieves this message                     |
6262          +---------------------------------------------------------*/
6263           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6264                                     p_count   => x_msg_count,
6265                                     p_data    => x_msg_data
6266                                     );
6267           IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6268             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6269           END IF;
6270  END override_recovery;
6271 
6272 
6273  /* =======================================================================*
6274  | PROCEDURE  freeze_tax_distributions :                                  |
6275  * =======================================================================*/
6276 
6277  PROCEDURE freeze_tax_distributions
6278  ( p_api_version           IN            NUMBER,
6279    p_init_msg_list         IN            VARCHAR2,
6280    p_commit                IN            VARCHAR2,
6281    p_validation_level      IN            NUMBER,
6282    x_return_status         OUT NOCOPY    VARCHAR2 ,
6283    x_msg_count             OUT NOCOPY    NUMBER ,
6284    x_msg_data              OUT NOCOPY    VARCHAR2,
6285    p_transaction_rec       IN OUT NOCOPY transaction_rec_type
6286  ) IS
6287    l_api_name          CONSTANT  VARCHAR2(30) := 'FREEZE_TAX_DISTRIBUTIONS';
6288    l_api_version       CONSTANT  NUMBER := 1.0;
6289    l_return_status               VARCHAR2(30);
6290    l_event_class_rec             event_class_rec_type;
6291    l_init_msg_list               VARCHAR2(1);
6292 
6293 CURSOR get_event_class_info
6294 IS
6295 SELECT dist.application_id,
6296        dist.entity_code,
6297        dist.event_class_code,
6298        evnttyp.event_type_code,
6299        dist.tax_event_class_code,
6300        'UPDATE' tax_event_type_code,
6301        'UPDATED' doc_status_code,
6302        evntcls.summarization_flag,
6303        evntcls.retain_summ_tax_line_id_flag
6304  FROM zx_rec_nrec_dist dist,
6305       zx_evnt_cls_mappings evntcls,
6306       zx_evnt_typ_mappings evnttyp,
6307       zx_tax_dist_id_gt distgt
6308  WHERE dist.application_id = evntcls.application_id
6309    AND dist.entity_code = evntcls.entity_code
6310    AND dist.event_class_code = evntcls.event_class_code
6311    AND evnttyp.application_id = evntcls.application_id
6312    AND evnttyp.entity_code = evntcls.entity_code
6313    AND evnttyp.event_class_code = evntcls.event_class_code
6314    AND evnttyp.tax_event_type_code = 'UPDATE'
6315    AND dist.REC_NREC_TAX_DIST_ID = distgt.tax_dist_id;
6316 
6317 
6318  BEGIN
6319 
6323 
6320    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6321      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
6322    END IF;
6324   /*--------------------------------------------------+
6325    |   Standard start of API savepoint                |
6326    +--------------------------------------------------*/
6327    SAVEPOINT FREEZE_TAX_DISTRIBUTIONS_PVT;
6328 
6329   /*--------------------------------------------------+
6330    |   Standard call to check for call compatibility  |
6331    +--------------------------------------------------*/
6332    IF NOT FND_API.Compatible_API_Call( l_api_version,
6333                                        p_api_version,
6334                                        l_api_name,
6335                                        G_PKG_NAME
6336                                       ) THEN
6337       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6338     END IF;
6339 
6340   /*--------------------------------------------------------------+
6341    |   Initialize message list if p_init_msg_list is set to TRUE  |
6342    +--------------------------------------------------------------*/
6343    IF p_init_msg_list is null THEN
6344        l_init_msg_list := FND_API.G_FALSE;
6345    ELSE
6346        l_init_msg_list := p_init_msg_list;
6347    END IF;
6348 
6349    IF FND_API.to_Boolean(l_init_msg_list) THEN
6350      FND_MSG_PUB.initialize;
6351    END IF;
6352 
6353   /*-----------------------------------------+
6354    |   Initialize return status to SUCCESS   |
6355    +-----------------------------------------*/
6356    x_return_status := FND_API.G_RET_STS_SUCCESS;
6357 
6358   /*-----------------------------------------+
6359    |   Populate Global Variable              |
6360    +-----------------------------------------*/
6361    G_PUB_SRVC := l_api_name;
6362    G_DATA_TRANSFER_MODE := 'PLS';
6363    G_EXTERNAL_API_CALL  := 'N';
6364 
6365   /*-----------------------------------------------------+
6366    |   Validate Input Parameters and Fetch Tax Options   |
6367    +-----------------------------------------------------*/
6368 -- Bug 5580045 - Commented out the call to valid intit package so that necessary
6369 -- information can be retrieved for BULK processing
6370 /*
6371    ZX_VALID_INIT_PARAMS_PKG.freeze_distribution_lines(x_return_status   => l_return_status,
6372                                                       p_event_class_rec => l_event_class_rec,
6373                                                       p_trx_rec         => p_transaction_rec
6374                                                      );
6375 
6376    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6377      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6378        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.freeze_distribution_lines returned errors');
6379      END IF;
6380      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6381        RAISE FND_API.G_EXC_ERROR;
6382      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6383        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6384      END IF;
6385    END IF;
6386 */
6387 
6388 -- Get Event Class Info.
6389 
6390      OPEN get_event_class_info;
6391      FETCH get_event_class_info INTO
6392              l_event_class_rec.APPLICATION_ID,
6393              l_event_class_rec.ENTITY_CODE,
6394              l_event_class_rec.EVENT_CLASS_CODE,
6395              l_event_class_rec.EVENT_TYPE_CODE,
6396              l_event_class_rec.TAX_EVENT_CLASS_CODE,
6397              l_event_class_rec.TAX_EVENT_TYPE_CODE,
6398              l_event_class_rec.DOC_STATUS_CODE,
6399              l_event_class_rec.summarization_flag,
6400              l_event_class_rec.retain_summ_tax_line_id_flag;
6401 
6402      IF get_event_class_info%notfound THEN
6403 
6404       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
6405 
6406           FND_LOG.STRING(G_LEVEL_STATEMENT,
6407                         G_MODULE_NAME || l_api_name, G_PKG_NAME||':'||l_api_name
6408                         ||': Event Class Info not retreived');
6409       END IF;
6410 
6411      END IF;
6412 
6413      CLOSE get_event_class_info;
6414 
6415 -- Begin Bug fix 5552750: Stamp event_id for only trx lines for which
6416 --                        tax distributions are being frozen
6417 
6418    /*-----------------------------------------+
6419     | Get the event id for the whole document |
6420     +-----------------------------------------*/
6421     select ZX_LINES_DET_FACTORS_S.nextval
6422     into l_event_class_rec.event_id
6423     from dual;
6424 
6425   /*------------------------------------------------+
6426    |  Update zx_lines_det_factors                   |
6427    +------------------------------------------------*/
6428 
6429    UPDATE ZX_LINES_DET_FACTORS
6430      SET EVENT_TYPE_CODE     = l_event_class_rec.event_type_code,
6431          TAX_EVENT_TYPE_CODE = l_event_class_rec.tax_event_type_code,
6432          EVENT_ID            = l_event_class_rec.event_id,
6433          DOC_EVENT_STATUS    = l_event_class_rec.doc_status_code
6434    WHERE APPLICATION_ID    = p_transaction_rec.APPLICATION_ID
6435      AND ENTITY_CODE       = p_transaction_rec.ENTITY_CODE
6436      AND EVENT_CLASS_CODE  = p_transaction_rec.EVENT_CLASS_CODE
6437 --     AND TRX_ID            = p_transaction_rec.TRX_ID
6438      AND (TRX_ID,TRX_LINE_ID,TRX_LEVEL_TYPE) IN (Select dist.trx_id, dist.trx_line_id,
6439                              dist.trx_level_type from zx_rec_nrec_dist dist,
6440                              zx_tax_dist_id_gt zxgt
6441                             where dist.rec_nrec_tax_dist_id = zxgt.tax_dist_id);
6442 
6443 -- End Bug fix 5552750
6444 
6445   /*--------------------------------------------------+
6446    |   Call Service Type Freeze Distribution Lines    |
6447    +--------------------------------------------------*/
6448    ZX_SRVC_TYP_PKG.freeze_distribution_lines(x_return_status   => l_return_status,
6449                                              p_event_class_rec => l_event_class_rec
6450                                             );
6451 
6452    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6453      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6454        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.freeze_distribution_lines returned errors');
6455      END IF;
6456      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6457        RAISE FND_API.G_EXC_ERROR;
6458      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6459        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6460      END IF;
6461    END IF;
6462 
6463 
6464    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6465      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
6466    END IF;
6467 
6468    EXCEPTION
6469      WHEN FND_API.G_EXC_ERROR THEN
6470        ROLLBACK TO FREEZE_TAX_DISTRIBUTIONS_PVT;
6471        x_return_status := FND_API.G_RET_STS_ERROR ;
6472        DUMP_MSG;
6473       /*---------------------------------------------------------+
6474        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6475        | in the message stack. If there is only one message in   |
6476        | the stack it retrieves this message                     |
6477        +---------------------------------------------------------*/
6478        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6479                                  p_count   => x_msg_count,
6480                                  p_data    => x_msg_data
6481                                  );
6482 
6483        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6484           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6485        END IF;
6486 
6487      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6488        ROLLBACK TO FREEZE_TAX_DISTRIBUTIONS_PVT;
6489        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6490        DUMP_MSG;
6491        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6492        FND_MSG_PUB.Add;
6493       /*---------------------------------------------------------+
6494        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6495        | in the message stack. If there is only one message in   |
6496        | the stack it retrieves this message                     |
6497        +---------------------------------------------------------*/
6498        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6499                                  p_count   => x_msg_count,
6500                                  p_data    => x_msg_data
6501                                  );
6502        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6503          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6504        END IF;
6505 
6506      WHEN OTHERS THEN
6507        ROLLBACK TO FREEZE_TAX_DISTRIBUTIONS_PVT;
6508        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6509        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6510        FND_MSG_PUB.Add;
6511       /*---------------------------------------------------------+
6512        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6513        | in the message stack. If there is only one message in   |
6514        | the stack it retrieves this message                     |
6515        +---------------------------------------------------------*/
6516        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6517                                  p_count   => x_msg_count,
6518                                  p_data    => x_msg_data
6519                                 );
6520       IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6521         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6522       END IF;
6523  END freeze_tax_distributions;
6524 
6525 /* ======================================================================*
6526  | PROCEDURE get_tax_distribution_ccids : Products call this API if they |
6527  |                                        need to determine the code     |
6528  |                                        combination identifiers for    |
6529  |                                        tax liability and tax recovery/|
6530  |                                        nonrecovery accounts           |
6531  | There exists only the pl/sql version of the API                       |
6532  * ======================================================================*/
6533  PROCEDURE get_tax_distribution_ccids
6534  ( p_api_version             IN            NUMBER,
6535    p_init_msg_list           IN            VARCHAR2,
6536    p_commit                  IN            VARCHAR2,
6537    p_validation_level        IN            NUMBER,
6538    x_return_status           OUT NOCOPY    VARCHAR2 ,
6539    x_msg_count               OUT NOCOPY    NUMBER ,
6540    x_msg_data                OUT NOCOPY    VARCHAR2,
6541    p_dist_ccid_rec           IN OUT NOCOPY distccid_det_facts_rec_type
6542   ) IS
6543    l_api_name          CONSTANT  VARCHAR2(30) := 'GET_TAX_DISTRIBUTION_CCIDS';
6544    l_api_version       CONSTANT  NUMBER := 1.0;
6545    l_return_status               VARCHAR2(30);
6546    l_init_msg_list               VARCHAR2(1);
6547 
6548  BEGIN
6549    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6550      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
6551    END IF;
6552 
6553     /*--------------------------------------------------+
6554     |   Standard start of API savepoint                |
6555     +--------------------------------------------------*/
6556     SAVEPOINT Get_Tax_Distribution_ccids_PVT;
6557 
6558     /*-----------------------------------------+
6559      |   Initialize return status to SUCCESS   |
6560      +-----------------------------------------*/
6561 
6562     x_return_status := FND_API.G_RET_STS_SUCCESS;
6563 
6564     /*--------------------------------------------------+
6565      |   Standard call to check for call compatibility  |
6566      +--------------------------------------------------*/
6567      IF NOT FND_API.Compatible_API_Call( l_api_version,
6568                                          p_api_version,
6569                                          l_api_name,
6570                                          G_PKG_NAME
6571                                         ) THEN
6572        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6573       END IF;
6574 
6575     /*--------------------------------------------------------------+
6576      |   Initialize message list if p_init_msg_list is set to TRUE  |
6577      +--------------------------------------------------------------*/
6578      IF p_init_msg_list is null THEN
6579        l_init_msg_list := FND_API.G_FALSE;
6580      ELSE
6581        l_init_msg_list := p_init_msg_list;
6582      END IF;
6583 
6584      IF FND_API.to_Boolean(l_init_msg_list) THEN
6585        FND_MSG_PUB.initialize;
6586      END IF;
6587 
6588      /*-----------------------------------------+
6589       |   Populate Global Variable              |
6590       +-----------------------------------------*/
6591       G_PUB_SRVC := l_api_name;
6592       G_DATA_TRANSFER_MODE := 'PLS';
6593       G_EXTERNAL_API_CALL  := 'N';
6594 
6595       /*---------------------------------------------+
6596       |   Missing Gl Date                           |
6597       +---------------------------------------------*/
6598       IF p_dist_ccid_rec.gl_date is NULL THEN
6599         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6600           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6601           'GL date of tax distribution is required');
6602         END IF;
6603         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6604       END IF;
6605 
6606      /*---------------------------------------------+
6607       |   Missing Tax Rate Id                       |
6608       +---------------------------------------------*/
6609       IF p_dist_ccid_rec.tax_rate_id is NULL THEN
6610         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6611           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6612           'Tax rate ID of tax distribution is required');
6613         END IF;
6614         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6615       END IF;
6616 
6617      /*---------------------------------------------+
6618       |   Missing Rec Rate Id                       |
6619       +---------------------------------------------*/
6620       IF p_dist_ccid_rec.recoverable_flag = 'Y' and
6621          p_dist_ccid_rec.rec_rate_id is NULL THEN
6622         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6623           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6624           'Recovery rate ID of tax distribution is required');
6625         END IF;
6626         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6627       END IF;
6628 
6629      /*---------------------------------------------+
6630       |   Missing Self Assessed Flag                |
6631       +---------------------------------------------*/
6632 
6633       IF p_dist_ccid_rec.self_assessed_flag is NULL THEN
6634         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6635           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6636           'Self-assessed flag of tax distribution is required');
6637         END IF;
6638         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6639       END IF;
6640 
6641      /*---------------------------------------------+
6642       |   Missing Recoverable Flag                  |
6643       +---------------------------------------------*/
6644 
6645       IF p_dist_ccid_rec.recoverable_flag is NULL THEN
6646         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6647           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6648           'Recoverable flag of tax distribution is required');
6649         END IF;
6650         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6651       END IF;
6652 
6653      /*---------------------------------------------+
6654       |   Missing Tax Jurisdiction Id               |
6655       +---------------------------------------------*/
6656 
6657       /*IF p_dist_ccid_rec.tax_jurisdiction_id is NULL THEN
6658         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6659           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6660           'Tax jurisdiction ID of tax distribution is required');
6661         END IF;
6662         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6663       END IF;
6664       */
6665 
6666      /*---------------------------------------------+
6667       |   Missing Tax Regime Id                     |
6668       +---------------------------------------------*/
6669 
6670       IF p_dist_ccid_rec.tax_regime_id is NULL THEN
6671         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6672           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6673           'Tax regime ID of tax distribution is required');
6674         END IF;
6675         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6676       END IF;
6677 
6678      /*---------------------------------------------+
6679       |   Missing Tax Id                            |
6680       +---------------------------------------------*/
6681 
6682       IF p_dist_ccid_rec.tax_id is NULL THEN
6683         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6684           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6685           'Tax id of tax distribution is required');
6686         END IF;
6687         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6688       END IF;
6689 
6690      /*---------------------------------------------+
6691       |   Missing Tax Status Id                     |
6692       +---------------------------------------------*/
6693 
6694       IF p_dist_ccid_rec.tax_status_id is NULL THEN
6695         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6696           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6697           'Tax status ID of tax distribution is required');
6698         END IF;
6699         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6700       END IF;
6701 
6702      /*---------------------------------------------+
6703       |   Missing Org Id                            |
6704       +---------------------------------------------*/
6705 
6706       IF p_dist_ccid_rec.internal_organization_id is NULL THEN
6707         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6708           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6709           'Operating Unit is required');
6710         END IF;
6711         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6712       END IF;
6713 
6714      /*---------------------------------------------+
6715       |   Missing Revenue Expense CCID              |
6716       +---------------------------------------------*/
6717 
6718       IF p_dist_ccid_rec.revenue_expense_ccid is NULL THEN
6719         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6720           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6721           'Revenue account of tax distribution is required');
6722         END IF;
6723         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6724       END IF;
6725 
6726       /*-----------------------------------------+
6727        |   Get CCID                              |
6728        +-----------------------------------------*/
6729        ZX_TRD_SERVICES_PUB_PKG.get_ccid(p_gl_date              => p_dist_ccid_rec.gl_date,
6730                                         p_tax_rate_id          => p_dist_ccid_rec.tax_rate_id,
6731                                         p_rec_rate_id          => p_dist_ccid_rec.rec_rate_id,
6732                                         p_Self_Assessed_Flag   => p_dist_ccid_rec.self_assessed_flag,
6733                                         p_Recoverable_Flag     => p_dist_ccid_rec.recoverable_flag,
6734                                         p_tax_jurisdiction_id  => p_dist_ccid_rec.tax_jurisdiction_id,
6735                                         p_tax_regime_id        => p_dist_ccid_rec.tax_regime_id,
6736                                         p_tax_id               => p_dist_ccid_rec.tax_id,
6737                                         p_tax_status_id        => p_dist_ccid_rec.tax_status_id,
6738                                         p_org_id               => p_dist_ccid_rec.internal_organization_id,
6739                                         p_revenue_expense_ccid => p_dist_ccid_rec.revenue_expense_ccid,
6740                                         p_ledger_id            => p_dist_ccid_rec.ledger_id,
6741                 p_account_source_tax_rate_id  => p_dist_ccid_rec.account_source_tax_rate_id,
6742                 p_rec_nrec_tax_dist_id => p_dist_ccid_rec.rec_nrec_tax_dist_id,
6743                                         p_rec_nrec_ccid        => p_dist_ccid_rec.rec_nrec_ccid,
6744                                         p_tax_liab_ccid        => p_dist_ccid_rec.tax_liab_ccid,
6745                                         x_return_status        => l_return_status
6746                                         );
6747 
6748 
6749        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6750          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6751            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TRD_SERVICES_PUB_PKG.get_ccid returned errors');
6752          END IF;
6753          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6754            RAISE FND_API.G_EXC_ERROR;
6755          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6756            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6757          END IF;
6758        ELSE
6759          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6760            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6761              'Recovery/NonRecovery CCID : ' ||
6762               to_char(p_dist_ccid_rec.revenue_expense_ccid) ||
6763              'Tax liability CCID : ' ||
6764              to_char(p_dist_ccid_rec.tax_liab_ccid) ||
6765              'Revenue CCID : ' ||
6766              to_char(p_dist_ccid_rec.tax_liab_ccid)
6767              );
6768            END IF;
6769          END IF;
6770 
6771        IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6772          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
6773        END IF;
6774 
6775      /* Bug 3704651 - No need to uptake error handling as it is a PLS API*/
6776        EXCEPTION
6777        WHEN FND_API.G_EXC_ERROR THEN
6778          ROLLBACK TO Get_Tax_Distribution_Ccids_PVT;
6782          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6779          x_return_status := FND_API.G_RET_STS_ERROR ;
6780          DUMP_MSG;
6781         /*---------------------------------------------------------+
6783          | in the message stack. If there is only one message in   |
6784          | the stack it retrieves this message                     |
6785          +---------------------------------------------------------*/
6786          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6787                                    p_count   => x_msg_count,
6788                                    p_data    => x_msg_data
6789                                    );
6790 
6791          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6792            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6793          END IF;
6794 
6795        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6796          ROLLBACK TO Get_Tax_Distribution_Ccids_PVT;
6797          --Bug 8410923
6798          --Assigning the return status properly
6799          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6800          DUMP_MSG;
6801          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6802          FND_MSG_PUB.Add;
6803         /*---------------------------------------------------------+
6804          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6805          | in the message stack. If there is only one message in   |
6806          | the stack it retrieves this message                     |
6807          +---------------------------------------------------------*/
6808          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6809                                    p_count   => x_msg_count,
6810                                    p_data    => x_msg_data
6811                                    );
6812          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6813            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6814          END IF;
6815 
6816         WHEN OTHERS THEN
6817           ROLLBACK TO Get_Tax_Distribution_Ccids_PVT;
6818           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6819           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6820           FND_MSG_PUB.Add;
6821         /*---------------------------------------------------------+
6822          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6823          | in the message stack. If there is only one message in   |
6824          | the stack it retrieves this message                     |
6825          +---------------------------------------------------------*/
6826           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6827                                     p_count   => x_msg_count,
6828                                     p_data    => x_msg_data
6829                                    );
6830 
6831           IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6832             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6833           END IF;
6834 
6835  END get_tax_distribution_ccids;
6836 
6837 
6838 /* ===================================================================================*
6839  | PROCEDURE Update_tax_dist_gl_date : Updates gl date of a list of Tax Distributions |
6840  | GTT involved : ZX_TAX_DIST_ID_GT                                                   |
6841  * ====================================================================================*/
6842 
6843  PROCEDURE Update_Tax_dist_gl_date
6844  (  p_api_version           IN         NUMBER,
6845     p_init_msg_list         IN         VARCHAR2,
6846     p_commit                IN         VARCHAR2,
6847     p_validation_level      IN         NUMBER,
6848     x_return_status         OUT NOCOPY VARCHAR2,
6849     x_msg_count             OUT NOCOPY NUMBER,
6850     x_msg_data              OUT NOCOPY VARCHAR2,
6851     p_gl_date               IN         DATE
6852   ) IS
6853    l_api_name          CONSTANT  VARCHAR2(30) := 'UPDATE_TAX_DIST_GL_DATE';
6854    l_api_version       CONSTANT  NUMBER := 1.0;
6855    l_return_status               VARCHAR2(30);
6856    l_context_info_rec            context_info_rec_type;
6857    l_init_msg_list               VARCHAR2(1);
6858 
6859  BEGIN
6860     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6861        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
6862     END IF;
6863 
6864   /*--------------------------------------------------+
6865      |   Standard start of API savepoint                |
6866      +--------------------------------------------------*/
6867      SAVEPOINT Update_Tax_Dist_GL_Date_PVT;
6868 
6869     /*--------------------------------------------------+
6870      |   Standard call to check for call compatibility  |
6871      +--------------------------------------------------*/
6872      IF NOT FND_API.Compatible_API_Call( l_api_version,
6873                                          p_api_version,
6874                                          l_api_name,
6875                                          G_PKG_NAME
6876                                         ) THEN
6877        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6878       END IF;
6879 
6880     /*--------------------------------------------------------------+
6881      |   Initialize message list if p_init_msg_list is set to TRUE  |
6882      +--------------------------------------------------------------*/
6883      IF p_init_msg_list is null THEN
6884        l_init_msg_list := FND_API.G_FALSE;
6885      ELSE
6886        l_init_msg_list := p_init_msg_list;
6887      END IF;
6888 
6892 
6889      IF FND_API.to_Boolean(l_init_msg_list) THEN
6890        FND_MSG_PUB.initialize;
6891      END IF;
6893      /*-----------------------------------------+
6894       |   Initialize return status to SUCCESS   |
6895       +-----------------------------------------*/
6896 
6897       x_return_status := FND_API.G_RET_STS_SUCCESS;
6898 
6899      /*-----------------------------------------+
6900       |   Populate Global Variable              |
6901       +-----------------------------------------*/
6902 
6903       G_PUB_SRVC := l_api_name;
6904       G_DATA_TRANSFER_MODE := 'PLS';
6905       G_EXTERNAL_API_CALL  := 'N';
6906 
6907      /*--------------------------------+
6908       |   Update gl date               |
6909       +-------------------------------*/
6910       ZX_TRL_PUB_PKG.update_gl_date(p_gl_date =>p_gl_date,
6911                                     x_return_status =>l_return_status
6912                                     );
6913 
6914        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6915          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6916            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TRL_PUB_PKG.update_gl_date returned errors');
6917          END IF;
6918          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6919            RAISE FND_API.G_EXC_ERROR;
6920          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6921            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6922          END IF;
6923        END IF;
6924 
6925       IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6926         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()+');
6927       END IF;
6928 
6929       EXCEPTION
6930       WHEN FND_API.G_EXC_ERROR THEN
6931         ROLLBACK TO Update_Tax_Dist_Gl_Date_PVT;
6932         x_return_status := FND_API.G_RET_STS_ERROR ;
6933         DUMP_MSG;
6934         /*---------------------------------------------------------+
6935          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6936          | in the message stack. If there is only one message in   |
6937          | the stack it retrieves this message                     |
6938          +---------------------------------------------------------*/
6939         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6940                                   p_count   => x_msg_count,
6941                                   p_data    => x_msg_data
6942                                   );
6943         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6944           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6945         END IF;
6946 
6947        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6948          ROLLBACK TO Update_Tax_Dist_GL_Date_PVT;
6949          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6950          DUMP_MSG;
6951          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6952          FND_MSG_PUB.Add;
6953         /*---------------------------------------------------------+
6954          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6955          | in the message stack. If there is only one message in   |
6956          | the stack it retrieves this message                     |
6957          +---------------------------------------------------------*/
6958          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6959                                    p_count   => x_msg_count,
6960                                    p_data    => x_msg_data
6961                                    );
6962          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6963            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6964          END IF;
6965 
6966         WHEN OTHERS THEN
6967          ROLLBACK TO Update_tax_dist_gl_date_PVT;
6968          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6969          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6970          FND_MSG_PUB.Add;
6971         /*---------------------------------------------------------+
6972          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6973          | in the message stack. If there is only one message in   |
6974          | the stack it retrieves this message                     |
6975          +---------------------------------------------------------*/
6976          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6977                                    p_count   => x_msg_count,
6978                                    p_data    => x_msg_data
6979                                    );
6980          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6981            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6982          END IF;
6983 
6984  END update_tax_dist_gl_date;
6985 
6986  /* =====================================================================*
6987  | PROCEDURE Update_exchange_rate : Updates Exchange Rate                |
6988  +========================================================================*/
6989 
6990  PROCEDURE update_exchange_rate
6991   ( p_api_version           IN         NUMBER,
6992     p_init_msg_list         IN         VARCHAR2,
6993     p_commit                IN         VARCHAR2,
6994     p_validation_level      IN         NUMBER,
6995     x_return_status         OUT NOCOPY VARCHAR2,
6996     x_msg_count             OUT NOCOPY NUMBER,
6997     x_msg_data              OUT NOCOPY VARCHAR2,
6998     p_transaction_rec       IN         transaction_rec_type,
6999     p_curr_conv_rate        IN         NUMBER,
7000     p_curr_conv_date        IN         DATE,
7001     p_curr_conv_type        IN         VARCHAR2
7002    ) IS
7003    l_api_name          CONSTANT  VARCHAR2(30) := 'UPDATE_EXCHANGE_RATE';
7004    l_api_version       CONSTANT  NUMBER := 1.0;
7005    l_event_class_rec             event_class_rec_type;
7009 
7006    l_return_status               VARCHAR2(30);
7007    l_ledger_id                   NUMBER;
7008    l_init_msg_list               VARCHAR2(1);
7010  BEGIN
7011 
7012      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7013        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
7014      END IF;
7015 
7016      /*--------------------------------------------------+
7017       |   Standard start of API savepoint                |
7018       +--------------------------------------------------*/
7019       SAVEPOINT Update_Exchange_Rate_PVT;
7020 
7021      /*--------------------------------------------------+
7022       |   Standard call to check for call compatibility  |
7023       +--------------------------------------------------*/
7024      IF NOT FND_API.Compatible_API_Call( l_api_version,
7025                                          p_api_version,
7026                                          l_api_name,
7027                                          G_PKG_NAME
7028                                         ) THEN
7029         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7030       END IF;
7031 
7032      /*--------------------------------------------------------------+
7033       |   Initialize message list if p_init_msg_list is set to TRUE  |
7034       +--------------------------------------------------------------*/
7035       IF p_init_msg_list is null THEN
7036         l_init_msg_list := FND_API.G_FALSE;
7037       ELSE
7038   l_init_msg_list := p_init_msg_list;
7039       END IF;
7040 
7041       IF FND_API.to_Boolean(l_init_msg_list) THEN
7042         FND_MSG_PUB.initialize;
7043       END IF;
7044 
7045      /*-----------------------------------------+
7046       |   Initialize return status to SUCCESS   |
7047       +-----------------------------------------*/
7048 
7049       x_return_status := FND_API.G_RET_STS_SUCCESS;
7050 
7051       /*-----------------------------------------+
7052       |   Populate Global Variable              |
7053       +-----------------------------------------*/
7054 
7055       G_PUB_SRVC := l_api_name;
7056       G_DATA_TRANSFER_MODE := 'PLS';
7057       G_EXTERNAL_API_CALL  := 'N';
7058 
7059       /*---------------------------------------------+
7060        |   Missing Currency Conversion Rate          |
7061        +---------------------------------------------*/
7062        IF p_curr_conv_rate is NULL THEN
7063          FND_MESSAGE.SET_NAME('ZX','ZX_CURRENCY_CONVERSION_RATE_REQD');
7064          FND_MSG_PUB.Add;
7065          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7066             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
7067             'Currency conversion rate is passed as null');
7068          END IF;
7069          RAISE FND_API.G_EXC_ERROR;
7070        END IF;
7071 
7072       /*---------------------------------------------+
7073        |   Missing Currency Conversion Date          |
7074        +---------------------------------------------*/
7075        IF p_curr_conv_date is NULL THEN
7076          FND_MESSAGE.SET_NAME('ZX','ZX_CURRENCY_CONVERSION_DATE_REQD');
7077          FND_MSG_PUB.Add;
7078          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7079             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
7080             'Currency conversion date is passed as null');
7081          END IF;
7082          RAISE FND_API.G_EXC_ERROR;
7083        END IF;
7084 
7085        /*---------------------------------------------+
7086         |   Missing Currency Conversion Type          |
7087         +---------------------------------------------*/
7088         IF p_curr_conv_type is NULL THEN
7089           FND_MESSAGE.SET_NAME('ZX','ZX_CURRENCY_CONVERSION_TYPE_REQD');
7090           FND_MSG_PUB.Add;
7091          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7092             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
7093             'Currency conversion type is passed as null');
7094          END IF;
7095          RAISE FND_API.G_EXC_ERROR;
7096         END IF;
7097 
7098        /*-----------------------------------------+
7099         |   Call Check Trx Rec                    |
7100         +-----------------------------------------*/
7101         ZX_CHECK_REQUIRED_PARAMS_PKG.check_trx_rec(l_return_status,
7102                                                    p_transaction_rec
7103                                                   );
7104 
7105         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7106           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7107              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TRL_PUB_PKG.update_gl_date returned errors');
7108           END IF;
7109           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7110             RAISE FND_API.G_EXC_ERROR;
7111           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7112             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7113           END IF;
7114         END IF;
7115 
7116         l_event_class_rec.APPLICATION_ID              := p_transaction_rec.APPLICATION_ID;
7117         l_event_class_rec.ENTITY_CODE                 := p_transaction_rec.ENTITY_CODE;
7118         l_event_class_rec.EVENT_CLASS_CODE            := p_transaction_rec.EVENT_CLASS_CODE;
7119         l_event_class_rec.EVENT_TYPE_CODE             := p_transaction_rec.EVENT_TYPE_CODE;
7120         l_event_class_rec.TRX_ID                      := p_transaction_rec.TRX_ID;
7121         l_event_class_rec.record_flag                 := NULL;
7122         l_event_class_rec.record_for_partners_flag    := 'N';
7123 
7124         BEGIN
7125           SELECT prod_family_grp_code
7126             INTO l_event_class_rec.prod_family_grp_code
7127             FROM zx_evnt_cls_mappings
7128            WHERE application_id   = p_transaction_rec.application_id
7129              AND entity_code      = p_transaction_rec.entity_code
7130              AND event_class_code = p_transaction_rec.event_class_code;
7131         EXCEPTION
7132           WHEN OTHERS THEN
7133            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7134              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Incorrect event_class_code passed: ' || p_transaction_rec.event_class_code);
7135            END IF;
7136            RETURN;
7137         END;
7138 
7139         BEGIN
7140           SELECT tax_event_type_code
7141             INTO l_event_class_rec.tax_event_type_code
7142             FROM zx_evnt_typ_mappings
7143            WHERE application_id   = p_transaction_rec.application_id
7144              AND entity_code      = p_transaction_rec.entity_code
7145              AND event_class_code = p_transaction_rec.event_class_code
7146              AND event_type_code  = p_transaction_rec.event_type_code;
7147         EXCEPTION
7148           WHEN OTHERS THEN
7149            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7150              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Incorrect event_type_code passed: ' || p_transaction_rec.event_type_code);
7151            END IF;
7152            RETURN;
7153         END;
7154        /*-------------------------------------------------+
7155         |  Retrieve the ledger id to pass to TDS process  |
7156         +------------------------------------------------*/
7157         SELECT ledger_id
7158           INTO l_ledger_id
7159           FROM ZX_LINES_DET_FACTORS
7160          WHERE application_id   = p_transaction_rec.application_id
7161            AND entity_code      = p_transaction_rec.entity_code
7162            AND event_class_code = p_transaction_rec.event_class_code
7163            AND trx_id           = p_transaction_rec.trx_id
7164            AND rownum           = 1;
7165 
7166        /*-------------------------------------------------+
7167         |  Call TDS routine update_exchange_rate          |
7168         +------------------------------------------------*/
7169         ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate(p_event_class_rec          => l_event_class_rec,
7170                                                           p_ledger_id                => l_ledger_id,
7171                                                           p_currency_conversion_rate => p_curr_conv_rate,
7172                                                           p_currency_conversion_type => p_curr_conv_type,
7173                                                           p_currency_conversion_date => p_curr_conv_date,
7174                                                           x_return_status            => l_return_status
7175                                                          );
7176 
7177         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7178           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7179             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate returned errors');
7180           END IF;
7181           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7182             RAISE FND_API.G_EXC_ERROR;
7183           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7184             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7185           END IF;
7186         END IF;
7187        /*------------------------------------------------+
7188         |  Update zx_lines_det_factors for currency info  |
7189         +------------------------------------------------*/
7190          UPDATE ZX_LINES_DET_FACTORS SET
7191             CURRENCY_CONVERSION_DATE  = p_curr_conv_date,
7192             CURRENCY_CONVERSION_RATE  = p_curr_conv_rate,
7193             CURRENCY_CONVERSION_TYPE  = p_curr_conv_type
7194          WHERE  APPLICATION_ID    = p_transaction_rec.APPLICATION_ID
7195             AND ENTITY_CODE       = p_transaction_rec.ENTITY_CODE
7196             AND EVENT_CLASS_CODE  = p_transaction_rec.EVENT_CLASS_CODE
7197             AND TRX_ID            = p_transaction_rec.TRX_ID;
7198 
7199         IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7200           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()+');
7201         END IF;
7202 
7203        EXCEPTION
7204        WHEN FND_API.G_EXC_ERROR THEN
7205          ROLLBACK TO Update_Exchange_Rate_PVT;
7206          x_return_status := FND_API.G_RET_STS_ERROR ;
7207          DUMP_MSG;
7208         /*---------------------------------------------------------+
7209          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7210          | in the message stack. If there is only one message in   |
7211          | the stack it retrieves this message                     |
7212          +---------------------------------------------------------*/
7213          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7214                                    p_count   => x_msg_count,
7215                                    p_data    => x_msg_data
7216                                    );
7217 
7218          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7219             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,SQLERRM);
7220          END IF;
7221 
7222        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7223          ROLLBACK TO Update_Exchange_Rate_PVT;
7224          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7225          DUMP_MSG;
7226          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7227          FND_MSG_PUB.Add;
7228         /*---------------------------------------------------------+
7229          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7230          | in the message stack. If there is only one message in   |
7231          | the stack it retrieves this message                     |
7232          +---------------------------------------------------------*/
7233          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7234                                    p_count   => x_msg_count,
7235                                    p_data    => x_msg_data
7236                                    );
7237          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7238             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,SQLERRM);
7239          END IF;
7240 
7241         WHEN OTHERS THEN
7242            ROLLBACK TO Update_Exchange_Rate_PVT;
7243            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7244            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7245            FND_MSG_PUB.Add;
7246           /*---------------------------------------------------------+
7247            | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7248            | in the message stack. If there is only one message in   |
7249            | the stack it retrieves this message                     |
7250            +---------------------------------------------------------*/
7251            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7252                                      p_count   => x_msg_count,
7253                                      p_data    => x_msg_data
7254                                      );
7255 
7256            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
7257               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
7258            END IF;
7259 
7260  END Update_Exchange_Rate;
7261 
7262 /* =============================================================================*
7263  | PROCEDURE  Discard_tax_only_lines : Called when the whole document containing|
7264  |                                     tax only lines is cancelled              |
7265  * =============================================================================*/
7266  PROCEDURE discard_tax_only_lines
7267  ( p_api_version           IN         NUMBER,
7268    p_init_msg_list         IN         VARCHAR2,
7269    p_commit                IN         VARCHAR2,
7270    p_validation_level      IN         NUMBER,
7271    x_return_status         OUT NOCOPY VARCHAR2,
7272    x_msg_count             OUT NOCOPY NUMBER,
7273    x_msg_data              OUT NOCOPY VARCHAR2,
7274    p_transaction_rec       IN         transaction_rec_type
7275    ) IS
7276    l_api_name          CONSTANT  VARCHAR2(30) := 'DISCARD_TAX_ONLY_LINES';
7277    l_api_version       CONSTANT  NUMBER := 1.0;
7278    l_return_status               VARCHAR2(30);
7279    l_event_class_rec             event_class_rec_type;
7280    l_init_msg_list               VARCHAR2(1);
7281 
7282  CURSOR get_event_class_info IS
7283  SELECT summarization_flag,
7284         retain_summ_tax_line_id_flag
7285    FROM zx_evnt_cls_mappings
7286   WHERE application_id = p_transaction_rec.application_id
7287     AND entity_code = p_transaction_rec.entity_code
7288     AND event_class_code = p_transaction_rec.event_class_code;
7289 
7290  BEGIN
7291    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7292      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
7293    END IF;
7294 
7295 
7296    /*--------------------------------------------------+
7297     |   Standard start of API savepoint                |
7298     +--------------------------------------------------*/
7299     SAVEPOINT discard_tax_only_lines_PVT;
7300 
7301     /*--------------------------------------------------+
7302      |   Standard call to check for call compatibility  |
7303      +--------------------------------------------------*/
7304      IF NOT FND_API.Compatible_API_Call( l_api_version,
7305                                          p_api_version,
7306                                          l_api_name,
7307                                          G_PKG_NAME
7308                                          ) THEN
7309         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7310       END IF;
7311 
7312     /*--------------------------------------------------------------+
7313      |   Initialize message list if p_init_msg_list is set to TRUE  |
7314      +--------------------------------------------------------------*/
7315       IF p_init_msg_list is null THEN
7316         l_init_msg_list := FND_API.G_FALSE;
7317       ELSE
7318   l_init_msg_list := p_init_msg_list;
7319       END IF;
7320 
7321       IF FND_API.to_Boolean(l_init_msg_list) THEN
7322         FND_MSG_PUB.initialize;
7323       END IF;
7324 
7325       /*-----------------------------------------+
7326        |   Initialize return status to SUCCESS   |
7327        +-----------------------------------------*/
7328        x_return_status := FND_API.G_RET_STS_SUCCESS;
7329 
7330        /*-----------------------------------------+
7331         |   Populate Global Variable              |
7332         +-----------------------------------------*/
7333         G_PUB_SRVC := l_api_name;
7334         G_DATA_TRANSFER_MODE := 'PLS';
7335         G_EXTERNAL_API_CALL  := 'N';
7336 
7337        /*------------------------------------------------------+
7338         |   Validate Input Paramerters and Fetch Tax Options   |
7339         +------------------------------------------------------*/
7340         ZX_VALID_INIT_PARAMS_PKG.discard_tax_only_lines(x_return_status  => l_return_status ,
7341                                                         p_trx_rec        => p_transaction_rec
7342                                                        );
7343 
7344         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7345           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7346             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.discard_tax_only_lines returned errors');
7347           END IF;
7348           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7349             RAISE FND_API.G_EXC_ERROR;
7350           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7351             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7352           END IF;
7353         END IF;
7354 
7355         l_event_class_rec.application_id       := p_transaction_rec.application_id;
7356         l_event_class_rec.entity_code          := p_transaction_rec.entity_code;
7357         l_event_class_rec.event_class_code     := p_transaction_rec.event_class_code;
7358         l_event_class_rec.event_type_code      := p_transaction_rec.event_type_code;
7359         l_event_class_rec.trx_id               := p_transaction_rec.trx_id;
7360         l_event_class_rec.first_pty_org_id     := p_transaction_rec.first_pty_org_id;
7361         l_event_class_rec.tax_event_class_code := p_transaction_rec.tax_event_class_code;
7362         l_event_class_rec.tax_event_type_code  := p_transaction_rec.tax_event_type_code;
7363 
7364          -- Get Event Class Info.
7365 
7366         OPEN  get_event_class_info;
7367         FETCH get_event_class_info INTO
7368               l_event_class_rec.summarization_flag,
7369               l_event_class_rec.retain_summ_tax_line_id_flag;
7370 
7371         IF get_event_class_info%NOTFOUND THEN
7372 
7373          IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
7374 
7375              FND_LOG.STRING(G_LEVEL_STATEMENT,
7376                      G_MODULE_NAME || l_api_name,
7377                      G_PKG_NAME||':'||l_api_name||': Event Class Info not retreived');
7378          END IF;
7379 
7380         END IF;
7381 
7382         CLOSE get_event_class_info;
7383 
7384        /*--------------------------------------------------+
7385         |   Call to Service Type Discard Tax Only Lines    |
7386         +--------------------------------------------------*/
7387         IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7388            FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
7389              'Updating Tax Lines for Transaction: '||
7390              to_char(p_transaction_rec.trx_id)||
7391              ' of Application: '||
7392              to_char(p_transaction_rec.application_id)||
7393              ' and Event Class: '||
7394              p_transaction_rec.event_class_code
7395             );
7396         END IF;
7397 
7401 
7398         ZX_SRVC_TYP_PKG.discard_tax_only_lines(p_event_class_rec    => l_event_class_rec,
7399                                                x_return_status      => l_return_status
7400                                                );
7402         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7403           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7404             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.discard_tax_only_lines returned errors');
7405           END IF;
7406           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7407             RAISE FND_API.G_EXC_ERROR;
7408           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7409             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7410           END IF;
7411         END IF;
7412 
7413         IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7414            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
7415         END IF;
7416 
7417        EXCEPTION
7418          WHEN FND_API.G_EXC_ERROR THEN
7419            ROLLBACK TO discard_tax_only_lines_PVT;
7420            x_return_status := FND_API.G_RET_STS_ERROR ;
7421            DUMP_MSG;
7422           /*---------------------------------------------------------+
7423            | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7424            | in the message stack. If there is only one message in   |
7425            | the stack it retrieves this message                     |
7426            +---------------------------------------------------------*/
7427            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7428                                      p_count   => x_msg_count,
7429                                      p_data    => x_msg_data
7430                                      );
7431            IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7432              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
7433            END IF;
7434 
7435          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7436             ROLLBACK TO discard_tax_only_lines_PVT;
7437             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7438             DUMP_MSG;
7439             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7440             FND_MSG_PUB.Add;
7441            /*---------------------------------------------------------+
7442             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7443             | in the message stack. If there is only one message in   |
7444             | the stack it retrieves this message                     |
7445             +---------------------------------------------------------*/
7446             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7447                                       p_count   => x_msg_count,
7448                                       p_data    => x_msg_data
7449                                       );
7450             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7451               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
7452             END IF;
7453 
7454          WHEN OTHERS THEN
7455             ROLLBACK TO discard_tax_only_lines_PVT;
7456             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7457             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7458             FND_MSG_PUB.Add;
7459            /*---------------------------------------------------------+
7460             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7461             | in the message stack. If there is only one message in   |
7462             | the stack it retrieves this message                     |
7463             +---------------------------------------------------------*/
7464             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7465                                       p_count   => x_msg_count,
7466                                       p_data    => x_msg_data
7467                                       );
7468             IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
7469               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
7470             END IF;
7471  END discard_tax_only_lines;
7472 
7473 
7474 /* =======================================================================*
7475  | PROCEDURE  validate_document_for_tax :                                 |
7476  * =======================================================================*/
7477 
7478  PROCEDURE Validate_document_for_tax
7479  ( p_api_version           IN            NUMBER,
7480    p_init_msg_list         IN            VARCHAR2 ,
7481    p_commit                IN            VARCHAR2,
7482    p_validation_level      IN            NUMBER,
7483    x_return_status         OUT    NOCOPY VARCHAR2 ,
7484    x_msg_count             OUT    NOCOPY NUMBER ,
7485    x_msg_data              OUT    NOCOPY VARCHAR2,
7486    p_transaction_rec       IN OUT NOCOPY transaction_rec_type,
7487    x_validation_status     OUT    NOCOPY VARCHAR2,
7488    x_hold_codes_tbl        OUT    NOCOPY ZX_API_PUB.hold_codes_tbl_type
7489   ) IS
7490    l_api_name          CONSTANT  VARCHAR2(30) := 'VALIDATE_DOCUMENT_FOR_TAX';
7491    l_api_version       CONSTANT  NUMBER := 1.0;
7492    l_return_status               VARCHAR2(30);
7493    l_init_msg_list               VARCHAR2(1);
7494    l_event_class_rec             event_class_rec_type;
7495 
7496    -- Added for bug#16483600 JAI ZX Integration
7497    lb_jai_exists                 BOOLEAN := FALSE;
7498 
7499  BEGIN
7500    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7501       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
7502    END IF;
7503 
7504 
7505    /*--------------------------------------------------+
7506     |   Standard start of API savepoint                |
7507     +--------------------------------------------------*/
7508    SAVEPOINT Validate_Document_PVT;
7509 
7510     /*--------------------------------------------------+
7511      |   Standard call to check for call compatibility  |
7512      +--------------------------------------------------*/
7513     IF NOT FND_API.Compatible_API_Call(l_api_version,
7514                                         p_api_version,
7515                                         l_api_name,
7516                                         G_PKG_NAME
7517                                         ) THEN
7518         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7519     END IF;
7520 
7521     /*--------------------------------------------------------------+
7522      |   Initialize message list if p_init_msg_list is set to TRUE  |
7523      +--------------------------------------------------------------*/
7524      IF p_init_msg_list is null THEN
7525        l_init_msg_list := FND_API.G_FALSE;
7526      ELSE
7527         l_init_msg_list := p_init_msg_list;
7528      END IF;
7529 
7530      IF FND_API.to_Boolean(l_init_msg_list) THEN
7531        FND_MSG_PUB.initialize;
7532      END IF;
7533 
7534     /*-----------------------------------------+
7535      |   Initialize return status to SUCCESS   |
7536      +-----------------------------------------*/
7537 
7538      x_return_status := FND_API.G_RET_STS_SUCCESS;
7539 
7540     /*-----------------------------------------+
7541      |   Populate Global Variable              |
7542      +-----------------------------------------*/
7543      G_PUB_SRVC := l_api_name;
7544      G_DATA_TRANSFER_MODE := 'PLS';
7545      G_EXTERNAL_API_CALL  := 'N';
7546 
7547     /*------------------------------------------------------+
7548      |   Validate Input Paramerters and Fetch Tax Options   |
7549      +------------------------------------------------------*/
7550      ZX_VALID_INIT_PARAMS_PKG.validate_document_for_tax(x_return_status   => l_return_status,
7551                                                         p_event_class_rec => l_event_class_rec,
7552                                                         p_trx_rec         => p_transaction_rec
7553                                                        );
7554 
7555      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7556        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7557          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.validate_document_for_tax returned errors');
7558        END IF;
7559        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7560          RAISE FND_API.G_EXC_ERROR;
7561        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7562          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7563        END IF;
7564      END IF;
7565 
7566      /* -------------------------------------------------------+
7567      |  JAI tax processing for JAI AP Invoice Validation       |
7568      |  and JAI AR Invoice Completion                          |
7569      + -------------------------------------------------------*/
7570      -- Start : Added for JAI Trigger Elimination : Bug#16483600 JAI ZX Integration
7571      -- JAI AP INVOICE Validation/AR Completion
7572      lb_jai_exists := JAI_TAX_PROCESSING_PKG.CHECK_JAI_EXISTS_IN_ZX(pn_set_of_books_id => NULL,
7573                                                                     pn_application_id  => p_transaction_rec.APPLICATION_ID, --Added by Qinglei for manaual AR invoice completion
7574                                                                     pv_entity_code     => p_transaction_rec.ENTITY_CODE,
7578      IF lb_jai_exists = TRUE THEN
7575                                                                     pn_trx_id          => p_transaction_rec.TRX_ID --Added by Qinglei for manaual AR invoice completion
7576                                                                     );
7577 
7579 
7580        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7581          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':JAI processing start +');
7582        END IF;
7583 
7584        --Call JAI tax processing.
7585        JAI_TAX_PROCESSING_PKG.CALCULATE_TAX(p_transaction_rec => p_transaction_rec
7586                                            ,p_event_class_rec => l_event_class_rec
7587                                            ,p_line_level_action => NULL
7588                                            ,p_trx_line_id => NULL
7589                                            ,x_return_status   => l_return_status
7590                                            );
7591 
7592        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7593          x_return_status := l_return_status;
7594          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7595             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
7596             ' JAI_TAX_PROCESSING_PKG.CALCULATE_TAX  RETURN_STATUS = ' || x_return_status);
7597          END IF;
7598          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7599            RAISE FND_API.G_EXC_ERROR;
7600          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7601            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7602          END IF;
7603        END IF;
7604 
7605        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7606          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':JAI processing end -');
7607        END IF;
7608      END IF;
7609      -- End : Added for JAI Trigger Elimination
7610 
7611     /*--------------------------------------------------+
7612      |   Call Service Type Validate Document for Tax    |
7613      +--------------------------------------------------*/
7614      ZX_SRVC_TYP_PKG.validate_document_for_tax(p_trx_rec             => p_transaction_rec,
7615                                                p_event_class_rec     => l_event_class_rec,
7616                                                x_validation_status   => x_validation_status,
7617                                                x_hold_status_code    => x_hold_codes_tbl,
7618                                                x_return_status       => l_return_status
7619                                               );
7620 
7621      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7622        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7623          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.validate_document_for_tax returned errors');
7624        END IF;
7625        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7626          RAISE FND_API.G_EXC_ERROR;
7627        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7628          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7629        END IF;
7630      END IF;
7631 
7632     /*------------------------------------------------+
7633      |  Update zx_lines_det_factors                   |
7634      +------------------------------------------------*/
7635      UPDATE ZX_LINES_DET_FACTORS
7636        SET TAX_EVENT_TYPE_CODE = l_event_class_rec.tax_event_type_code,
7637            DOC_EVENT_STATUS    = l_event_class_rec.doc_status_code
7638      WHERE APPLICATION_ID  = p_transaction_rec.APPLICATION_ID
7639       AND ENTITY_CODE       = p_transaction_rec.ENTITY_CODE
7640       AND EVENT_CLASS_CODE  = p_transaction_rec.EVENT_CLASS_CODE
7641       AND TRX_ID            = p_transaction_rec.TRX_ID;
7642 
7643      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7644          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
7645      END IF;
7646 
7647      EXCEPTION
7648        WHEN FND_API.G_EXC_ERROR THEN
7649          ROLLBACK TO Validate_Document_PVT;
7650          x_return_status := FND_API.G_RET_STS_ERROR ;
7651          DUMP_MSG;
7652         /*---------------------------------------------------------+
7653          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7654          | in the message stack. If there is only one message in   |
7655          | the stack it retrieves this message                     |
7656          +---------------------------------------------------------*/
7657          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7658                                    p_count   => x_msg_count,
7659                                    p_data    => x_msg_data
7660                                    );
7661          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7662             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
7663          END IF;
7664 
7665         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7666           ROLLBACK TO Validate_Document_PVT;
7667           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7668           DUMP_MSG;
7669           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7670           FND_MSG_PUB.Add;
7671         /*---------------------------------------------------------+
7672          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7673          | in the message stack. If there is only one message in   |
7674          | the stack it retrieves this message                     |
7675          +---------------------------------------------------------*/
7676           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7677                                     p_count   => x_msg_count,
7678                                     p_data    => x_msg_data
7679                                     );
7680           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7681              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
7682           END IF;
7683 
7684 
7685         WHEN OTHERS THEN
7686            ROLLBACK TO Validate_Document_PVT;
7687            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7688            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7689            FND_MSG_PUB.Add;
7690           /*---------------------------------------------------------+
7691            | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7692            | in the message stack. If there is only one message in   |
7693            | the stack it retrieves this message                     |
7694            +---------------------------------------------------------*/
7695            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7696                                      p_count   => x_msg_count,
7697                                      p_data    => x_msg_data
7698                                     );
7699 
7700            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
7701               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
7702            END IF;
7703 
7704  END validate_document_for_tax;
7705 
7706 
7707 /* =======================================================================*
7708  | PROCEDURE  validate_document_for_tax for Receivables Autoinvoice       |
7709  |            and recurring invoice.                                      |
7710  |            Bug 5518807                                                 |
7711  * =======================================================================*/
7712 
7713  PROCEDURE Validate_document_for_tax
7714  ( p_api_version           IN            NUMBER,
7715    p_init_msg_list         IN            VARCHAR2 ,
7716    p_commit                IN            VARCHAR2,
7717    p_validation_level      IN            NUMBER,
7718    x_return_status         OUT    NOCOPY VARCHAR2 ,
7719    x_msg_count             OUT    NOCOPY NUMBER ,
7720    x_msg_data              OUT    NOCOPY VARCHAR2
7721   ) IS
7722     l_api_name          CONSTANT  VARCHAR2(30) := 'BULK_VALIDATE_DOCUMENT_FOR_TAX';
7723     l_api_version       CONSTANT  NUMBER := 1.0;
7724     l_return_status               VARCHAR2(30);
7725     l_init_msg_list               VARCHAR2(1);
7726 
7727     CURSOR c_headers is
7728        SELECT zthg.application_id
7729             , zthg.entity_code
7730             , zthg.event_class_code
7731             , zthg.trx_id
7732             , zetm.event_type_code  -- Bug 5598384
7733             , zect.tax_event_type_code
7734             , zect.status_code
7735          FROM ZX_TRX_HEADERS_GT zthg
7736             , ZX_EVNT_TYP_MAPPINGS zetm
7737             , ZX_EVNT_CLS_TYPS zect
7738         WHERE zthg.event_class_code     = zetm.event_class_code
7739           AND zthg.entity_code          = zetm.entity_code
7740           AND zthg.application_id       = zetm.application_id
7741           AND zetm.event_type_code      = DECODE(zetm.event_class_code,   -- Bug 5598384
7742                                           'INVOICE', 'INV_COMPLETE',
7743                                           'DEBIT_MEMO', 'DM_COMPLETE',
7744                                           'CREDIT_MEMO', 'CM_COMPLETE'
7745                                           )
7746           AND zect.tax_event_class_code = zetm.tax_event_class_code
7747           AND zect.tax_event_type_code  = zetm.tax_event_type_code
7748           AND (validation_check_flag is null OR
7749                validation_check_flag <> 'N');
7750 
7751     l_application_id_tbl       NUMBER_tbl_type;
7752     l_entity_code_tbl      VARCHAR2_30_tbl_type;
7753     l_event_class_code_tbl  VARCHAR2_30_tbl_type;
7754     l_trx_id_tbl    NUMBER_tbl_type;
7755     l_event_type_code_tbl  VARCHAR2_30_tbl_type;
7756     l_tax_event_type_code_tbl  VARCHAR2_30_tbl_type;
7757     l_doc_event_status_tbl  VARCHAR2_30_tbl_type;
7758 
7759 
7760  BEGIN
7761    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7762       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'(+)');
7763    END IF;
7764 
7765 
7766    /*--------------------------------------------------+
7767     |   Standard start of API savepoint                |
7768     +--------------------------------------------------*/
7769    SAVEPOINT Validate_Document_PVT;
7770 
7771     /*--------------------------------------------------+
7772      |   Standard call to check for call compatibility  |
7776                                         l_api_name,
7773      +--------------------------------------------------*/
7774     IF NOT FND_API.Compatible_API_Call(l_api_version,
7775                                         p_api_version,
7777                                         G_PKG_NAME
7778                                         ) THEN
7779         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7780     END IF;
7781 
7782     /*--------------------------------------------------------------+
7783      |   Initialize message list if p_init_msg_list is set to TRUE  |
7784      +--------------------------------------------------------------*/
7785      IF p_init_msg_list is null THEN
7786        l_init_msg_list := FND_API.G_FALSE;
7787      ELSE
7788         l_init_msg_list := p_init_msg_list;
7789      END IF;
7790 
7791      IF FND_API.to_Boolean(l_init_msg_list) THEN
7792        FND_MSG_PUB.initialize;
7793      END IF;
7794 
7795     /*-----------------------------------------+
7796      |   Initialize return status to SUCCESS   |
7797      +-----------------------------------------*/
7798 
7799      x_return_status := FND_API.G_RET_STS_SUCCESS;
7800 
7801     /*-----------------------------------------+
7802      |   Populate Global Variable              |
7803      +-----------------------------------------*/
7804      G_PUB_SRVC := l_api_name;
7805      G_DATA_TRANSFER_MODE := 'PLS';
7806      G_EXTERNAL_API_CALL  := 'N';
7807 
7808      BEGIN
7809         OPEN C_HEADERS;
7810         LOOP
7811            FETCH c_HEADERS BULK COLLECT INTO
7812                l_application_id_tbl,
7813                l_entity_code_tbl,
7814                l_event_class_code_tbl,
7815                l_trx_id_tbl,
7816                l_event_type_code_tbl,
7817                l_tax_event_type_code_tbl,
7818                l_doc_event_status_tbl
7819            LIMIT G_LINES_PER_FETCH;
7820 
7821 
7822            FORALL i IN l_application_id_tbl.FIRST .. l_application_id_tbl.LAST
7823               UPDATE ZX_LINES_DET_FACTORS
7824                  SET EVENT_TYPE_CODE     = l_event_type_code_tbl(i),
7825                      TAX_EVENT_TYPE_CODE = l_tax_event_type_code_tbl(i),
7826                      DOC_EVENT_STATUS    = l_doc_event_status_tbl(i)
7827                WHERE
7828                      APPLICATION_ID    = l_application_id_tbl(i)
7829                  AND ENTITY_CODE       = l_entity_code_tbl(i)
7830                  AND EVENT_CLASS_CODE  = l_event_class_code_tbl(i)
7831                  AND TRX_ID            = l_trx_id_tbl(i);
7832 
7833            exit when c_HEADERS%NOTFOUND;
7834         END LOOP;
7835 
7836         close c_HEADERS;
7837      END;
7838 
7839      EXCEPTION
7840        WHEN FND_API.G_EXC_ERROR THEN
7841          ROLLBACK TO Validate_Document_PVT;
7842          x_return_status := FND_API.G_RET_STS_ERROR ;
7843          DUMP_MSG;
7844         /*---------------------------------------------------------+
7845          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7846          | in the message stack. If there is only one message in   |
7847          | the stack it retrieves this message                     |
7848          +---------------------------------------------------------*/
7849          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7850                                    p_count   => x_msg_count,
7851                                    p_data    => x_msg_data
7852                                    );
7853          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7854             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
7855          END IF;
7856 
7857         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7858           ROLLBACK TO Validate_Document_PVT;
7859           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7860           DUMP_MSG;
7861           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7862           FND_MSG_PUB.Add;
7863         /*---------------------------------------------------------+
7864          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7865          | in the message stack. If there is only one message in   |
7866          | the stack it retrieves this message                     |
7867          +---------------------------------------------------------*/
7868           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7869                                     p_count   => x_msg_count,
7870                                     p_data    => x_msg_data
7871                                     );
7872           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7873              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
7874           END IF;
7875 
7876 
7877         WHEN OTHERS THEN
7878            ROLLBACK TO Validate_Document_PVT;
7879            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7880            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7881            FND_MSG_PUB.Add;
7882           /*---------------------------------------------------------+
7883            | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7884            | in the message stack. If there is only one message in   |
7885            | the stack it retrieves this message                     |
7886            +---------------------------------------------------------*/
7887            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7888                                      p_count   => x_msg_count,
7889                                      p_data    => x_msg_data
7890                                     );
7891 
7892            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
7893               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
7894            END IF;
7895 
7896  END validate_document_for_tax;
7897 
7898 
7899 /* ============================================================================*
7900  | PROCEDURE get_default_tax_line_attribs : default the tax status and tax rate|
7901  |                                       based on the tax regime and tax       |
7902  * ===========================================================================*/
7903  PROCEDURE get_default_tax_line_attribs
7904  ( p_api_version            IN         NUMBER,
7905    p_init_msg_list          IN         VARCHAR2,
7906    p_commit                 IN         VARCHAR2,
7907    p_validation_level       IN         NUMBER,
7908    x_return_status          OUT NOCOPY VARCHAR2,
7909    x_msg_count              OUT NOCOPY NUMBER,
7910    x_msg_data               OUT NOCOPY VARCHAR2,
7911    p_tax_regime_code      IN         VARCHAR2,
7912    p_tax               IN         VARCHAR2,
7913    p_effective_date      IN         DATE,
7914    x_tax_status_code      OUT  NOCOPY VARCHAR2,
7915    x_tax_rate_code          OUT NOCOPY VARCHAR2
7916  )  IS
7917    l_api_name          CONSTANT  VARCHAR2(30) := 'GET_DEFAULT_TAX_LINE_ATTRIBS';
7918    l_api_version       CONSTANT  NUMBER := 1.0;
7919    l_return_status               VARCHAR2(30);
7920    l_error_buffer                VARCHAR2(1000);
7921    l_tax_method                  VARCHAR2(30);
7922    l_init_msg_list               VARCHAR2(1);
7923 
7924  BEGIN
7925    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7926      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
7927    END IF;
7928 
7929 
7930   /*--------------------------------------------------+
7931    |   Standard start of API savepoint                |
7932    +--------------------------------------------------*/
7933    SAVEPOINT Get_Default_Tax_Line_Attrs_PVT;
7934 
7935    /*--------------------------------------------------+
7936     |   Standard call to check for call compatibility  |
7937     +--------------------------------------------------*/
7938     IF NOT FND_API.Compatible_API_Call(l_api_version,
7939                                        p_api_version,
7940                                        l_api_name,
7941                                        G_PKG_NAME
7942                                        ) THEN
7943        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7944      END IF;
7945 
7946     /*--------------------------------------------------------------+
7947      |   Initialize message list if p_init_msg_list is set to TRUE  |
7948      +--------------------------------------------------------------*/
7949      IF p_init_msg_list is null THEN
7950        l_init_msg_list := FND_API.G_FALSE;
7951      ELSE
7952        l_init_msg_list := p_init_msg_list;
7953      END IF;
7954 
7955      IF FND_API.to_Boolean(l_init_msg_list) THEN
7956        FND_MSG_PUB.initialize;
7957      END IF;
7958 
7959 
7960    /*-----------------------------------------+
7961     |   Initialize return status to SUCCESS   |
7962     +-----------------------------------------*/
7963     x_return_status := FND_API.G_RET_STS_SUCCESS;
7964 
7965    /*-----------------------------------------+
7966     |   Populate Global Variable              |
7967     +-----------------------------------------*/
7968     G_PUB_SRVC := l_api_name;
7969     G_DATA_TRANSFER_MODE := 'PLS';
7970     G_EXTERNAL_API_CALL  := 'N';
7971 
7972   /*-----------------------------------------+
7973    |   Get the tax status and tax rate       |
7974    +-----------------------------------------*/
7975      ZX_TCM_EXT_SERVICES_PUB.get_default_status_rates(p_tax_regime_code   => p_tax_regime_code,
7976                                                       p_tax               => p_tax,
7977                                                       p_date              => p_effective_date,
7978                                                       p_tax_status_code   => x_tax_status_code,
7979                                                       p_tax_rate_code     => x_tax_rate_code,
7980                                                       p_return_status     => l_return_status
7981                                                      );
7982 
7983      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7984        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7985          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TCM_EXT_SERVICES_PUB.get_default_status_rates returned errors');
7986        END IF;
7987        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7988          RAISE FND_API.G_EXC_ERROR;
7989        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7990          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7991        END IF;
7992      END IF;
7993 
7994 
7995    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7996      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()+');
7997    END IF;
7998 
7999    EXCEPTION
8000      WHEN FND_API.G_EXC_ERROR THEN
8001        ROLLBACK TO Get_Default_Tax_Line_Attrs_PVT;
8002        x_return_status := FND_API.G_RET_STS_ERROR ;
8003        DUMP_MSG;
8004       /*---------------------------------------------------------+
8005        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8006        | in the message stack. If there is only one message in   |
8007        | the stack it retrieves this message                     |
8008        +---------------------------------------------------------*/
8009        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8010                                  p_count   => x_msg_count,
8011                                  p_data    => x_msg_data
8012                                  );
8013        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8014           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
8015        END IF;
8016 
8017      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8018        ROLLBACK TO Get_Default_Tax_Line_Attrs_PVT;
8019        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8020        DUMP_MSG;
8021        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8022        FND_MSG_PUB.Add;
8023       /*---------------------------------------------------------+
8024        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8025        | in the message stack. If there is only one message in   |
8026        | the stack it retrieves this message                     |
8027        +---------------------------------------------------------*/
8028        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8029                                  p_count   => x_msg_count,
8030                                  p_data    => x_msg_data
8031                                  );
8032        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8033           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
8034        END IF;
8035 
8036      WHEN OTHERS THEN
8037        ROLLBACK TO Get_Default_Tax_Line_Attrs_PVT;
8038        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8039        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8040        FND_MSG_PUB.Add;
8041       /*---------------------------------------------------------+
8042        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8043        | in the message stack. If there is only one message in   |
8044        | the stack it retrieves this message                     |
8045        +---------------------------------------------------------*/
8046        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8047                                  p_count   => x_msg_count,
8048                                  p_data    => x_msg_data
8049                                  );
8050 
8051        IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
8052          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
8053        END IF;
8054 
8055  END get_default_tax_line_attribs;
8056 
8057 /* =================================================================================*
8058  | OVERLOADED version till XBUILD 2 so that AP processes do not get invalidated     |
8059  | NEED TO REMOVE THIS PROCEDURE ONCE AP CHANGES GO IN                                |
8060  |                                                                                  |
8061  | Procedure  get_default_tax_det_attribs : default the following product fiscal     |
8062  | classification based on the relevant default taxation country, application event  |
8063  | class, inventory organization and inventory item values:                          |
8064  |             *  trx_business_category                                        |
8065  |             *  primary_intended_use                                         |
8066  |             *  product_fisc_classification                                  |
8067  |             *  product_category                                             |
8068  * ================================================================================*/
8069 
8070 
8071  PROCEDURE get_default_tax_det_attribs
8072  ( p_api_version            IN         NUMBER,
8073    p_init_msg_list          IN         VARCHAR2,
8074    p_commit                 IN         VARCHAR2,
8075    p_validation_level       IN         NUMBER,
8076    x_return_status          OUT NOCOPY VARCHAR2 ,
8077    x_msg_count              OUT NOCOPY NUMBER ,
8078    x_msg_data               OUT NOCOPY VARCHAR2,
8079    p_application_id      IN         NUMBER,
8080    p_entity_code      IN         VARCHAR2,
8084    p_country_code      IN         VARCHAR2,
8081    p_event_class_code      IN         VARCHAR2,
8082    p_org_id              IN         NUMBER,
8083    p_item_id              IN         NUMBER,
8085    p_effective_date      IN         DATE,
8086    x_trx_biz_category      OUT  NOCOPY VARCHAR2,
8087    x_intended_use      OUT  NOCOPY VARCHAR2,
8088    x_prod_category      OUT  NOCOPY VARCHAR2,
8089    x_prod_fisc_class_code   OUT  NOCOPY VARCHAR2,
8090    x_product_type           OUT NOCOPY VARCHAR2
8091  )  IS
8092  BEGIN
8093    NULL;
8094  END get_default_tax_det_attribs;
8095 
8096 
8097 /* =================================================================================*
8098  | Procedure  get_default_tax_det_attribs : default the following product fiscal    |
8099  | classification based on the relevant default taxation country, application event |
8100  | class, inventory organization and inventory item values:                         |
8101  |             *  trx_business_category                                       |
8102  |             *  primary_intended_use                                        |
8103  |             *  product_fisc_classification                                 |
8104  |             *  product_category                                            |
8105  * ================================================================================*/
8106 
8107 
8108  PROCEDURE get_default_tax_det_attribs
8109  ( p_api_version            IN         NUMBER,
8110    p_init_msg_list          IN         VARCHAR2,
8111    p_commit                 IN         VARCHAR2,
8112    p_validation_level       IN         NUMBER,
8113    x_return_status          OUT NOCOPY VARCHAR2 ,
8114    x_msg_count              OUT NOCOPY NUMBER ,
8115    x_msg_data               OUT NOCOPY VARCHAR2,
8116    p_application_id      IN         NUMBER,
8117    p_entity_code      IN         VARCHAR2,
8118    p_event_class_code      IN         VARCHAR2,
8119    p_org_id              IN         NUMBER,
8120    p_item_id              IN         NUMBER,
8121    p_country_code      IN         VARCHAR2,
8122    p_effective_date      IN         DATE,
8123    p_source_event_class_code IN        VARCHAR2,
8124    x_trx_biz_category      OUT  NOCOPY VARCHAR2,
8125    x_intended_use      OUT  NOCOPY VARCHAR2,
8126    x_prod_category      OUT  NOCOPY VARCHAR2,
8127    x_prod_fisc_class_code   OUT  NOCOPY VARCHAR2,
8128    x_product_type           OUT NOCOPY VARCHAR2,
8129    p_inventory_org_id       IN NUMBER
8130  )  IS
8131    l_api_name          CONSTANT  VARCHAR2(30) := 'GET_DEFAULT_TAX_DET_ATTRIBS';
8132    l_api_version       CONSTANT  NUMBER := 1.0;
8133    l_return_status               VARCHAR2(30);
8134    l_error_buffer                VARCHAR2(1000);
8135    l_tax_method                  VARCHAR2(30);
8136    l_init_msg_list               VARCHAR2(1);
8137    l_internal_org_id             NUMBER;
8138    l_application_id              NUMBER;
8139    l_entity_code                 zx_evnt_cls_mappings.entity_code%TYPE;
8140    l_event_class_code            zx_evnt_cls_mappings.event_class_code%TYPE;
8141    l_zx_product_options_rec      ZX_GLOBAL_STRUCTURES_PKG.zx_product_options_rec_type;
8142 
8143   CURSOR c_trx_biz_cat_csr (c_application_id NUMBER,
8144                             c_entity_code zx_evnt_cls_mappings.entity_code%TYPE,
8145                             c_event_class_code zx_evnt_cls_mappings.event_class_code%TYPE) IS
8146   SELECT tax_event_class_code, intrcmp_tx_evnt_cls_code
8147   FROM   zx_evnt_cls_mappings
8148   WHERE  application_id = c_application_id
8149   AND    entity_code = c_entity_code
8150   AND    event_class_code = c_event_class_code;
8151 
8152   CURSOR c_intrcmp_code (c_application_id NUMBER,
8153                         c_entity_code zx_evnt_cls_mappings.entity_code%TYPE,
8154                         c_event_class_code zx_evnt_cls_mappings.event_class_code%TYPE) IS
8155   SELECT  DEF_INTRCMP_TRX_BIZ_CATEGORY
8156   FROM  ZX_EVNT_CLS_OPTIONS op, zx_party_tax_profile ptp
8157   WHERE  op.application_id = c_application_id
8158   AND    op.entity_code = c_entity_code
8159   AND    op.event_class_code = c_event_class_code
8160   AND    op.FIRST_PTY_ORG_ID = ptp.party_tax_profile_id
8161   AND    op.effective_from <= p_effective_date
8162   AND   (op.effective_to >= p_effective_date OR op.effective_to IS NULL)
8163   AND    ptp.party_id = p_org_id
8164   AND    ptp.party_type_code = 'OU';
8165 
8166  BEGIN
8167    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8168      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
8169    END IF;
8170 
8171   /*--------------------------------------------------+
8172    |   Standard start of API savepoint                |
8173    +--------------------------------------------------*/
8174    SAVEPOINT Get_Default_Tax_Det_Attrs_PVT;
8175 
8176    /*--------------------------------------------------+
8177     |   Standard call to check for call compatibility  |
8178     +--------------------------------------------------*/
8179     IF NOT FND_API.Compatible_API_Call(l_api_version,
8180                                        p_api_version,
8181                                        l_api_name,
8182                                        G_PKG_NAME
8183                                        ) THEN
8184        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8185      END IF;
8186 
8187    /*--------------------------------------------------------------+
8188     |   Initialize message list if p_init_msg_list is set to TRUE  |
8189     +--------------------------------------------------------------*/
8190     IF p_init_msg_list is null THEN
8191        l_init_msg_list := FND_API.G_FALSE;
8192     ELSE
8193        l_init_msg_list := p_init_msg_list;
8197        FND_MSG_PUB.initialize;
8194     END IF;
8195 
8196     IF FND_API.to_Boolean(l_init_msg_list) THEN
8198     END IF;
8199 
8200   /*-----------------------------------------+
8201    |   Initialize return status to SUCCESS   |
8202    +-----------------------------------------*/
8203    x_return_status := FND_API.G_RET_STS_SUCCESS;
8204 
8205 
8206   /*-----------------------------------------+
8207    |   Populate Global Variable              |
8208    +-----------------------------------------*/
8209    --Currently this procedure is being called from internal TDS services when defaulting the determining
8210    --attributes in case of calculate_tax, insert_line_det_factors,etc. So need to set the parameters only
8211    --if direct call to this API and not via other published APIs
8212    IF G_PUB_CALLING_SRVC is null THEN
8213      G_PUB_SRVC := l_api_name;
8214      G_DATA_TRANSFER_MODE := 'PLS';
8215      G_EXTERNAL_API_CALL  := 'N';
8216    --ELSE
8217    --   G_PUB_CALLING_SRVC := null;
8218    END IF;
8219 
8220   /*-----------------------------------------------------------------+
8221    |   Populate Global Event Class Rec If Not Populated              |
8222    +-----------------------------------------------------------------*/
8223 
8224    l_application_id := p_application_id; --bug# 6662504
8225 
8226    IF ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.application_id IS NULL THEN
8227 
8228      IF p_event_class_code = 'SALES_TRANSACTION_TAX_QUOTE' THEN
8229        l_application_id := 222;
8230        l_entity_code := 'TRANSACTIONS';
8231        l_event_class_code := 'INVOICE';
8232      ELSIF p_event_class_code = 'PURCHASE_TRANSACTION_TAX_QUOTE' THEN
8233        l_application_id := 200;
8234        l_entity_code := 'AP_INVOICES';
8235        l_event_class_code := 'STANDARD INVOICES';
8236      ELSE
8237        l_application_id := p_application_id;
8238        l_entity_code := p_entity_code;
8239        l_event_class_code := p_event_class_code;
8240      END IF;
8241 
8242 
8243      -- Fetch tax event class and intercompany tax event class
8244 
8245      OPEN c_trx_biz_cat_csr(l_application_id, l_entity_code, l_event_class_code);
8246      FETCH c_trx_biz_cat_csr INTO ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.tax_event_class_code,
8247                                   ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.intrcmp_tx_evnt_cls_code;
8248      CLOSE c_trx_biz_cat_csr;
8249 
8250      -- Fetch default transaction business category
8251 
8252      OPEN c_intrcmp_code(l_application_id, l_entity_code, l_event_class_code);
8253      FETCH c_intrcmp_code INTO ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.DEF_INTRCMP_TRX_BIZ_CATEGORY;
8254      CLOSE c_intrcmp_code;
8255 
8256    END IF;
8257 
8258 
8259     -- Fetch tax method
8260     -- Fix for bug 5102996: Fetch tax method from zx_product_options only if it is not found in the cache
8261 
8262     ZX_GLOBAL_STRUCTURES_PKG.get_product_options_info
8263                    (p_application_id      => l_application_id,
8264                     p_org_id              => p_org_id,
8265                     x_product_options_rec => l_zx_product_options_rec,
8266                     x_return_status       => x_return_status);
8267 
8268     IF x_return_status = FND_API.G_RET_STS_ERROR then
8269 
8270         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8271            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'Incorrect return status after calling '||
8272                           'ZX_GLOBAL_STRUCTURES_PKG.get_product_options_info');
8273         END IF;
8274         ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.tax_method_code := 'EBTAX';
8275 
8276     ELSE
8277         ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.tax_method_code := nvl(l_zx_product_options_rec.tax_method_code,'EBTAX'); --6841552
8278     END IF;
8279 
8280     l_tax_method := ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.tax_method_code;
8281 
8282 
8283    IF l_tax_method = 'EBTAX' THEN
8284 
8285     /*---------------------------------------------------------+
8286      |   Get the default value for trx business category        |
8287      +---------------------------------------------------------*/
8288      ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code(p_fiscal_type_code  =>  'TRX_BUSINESS_CATEGORY',
8289                                                       p_country_code      =>  p_country_code,
8290                                                       p_application_id    =>  p_application_id,
8291                                                       p_entity_code       =>  p_entity_code,
8292                                                       p_event_class_code  =>  p_event_class_code,
8293                                                       p_source_event_class_code  =>  p_source_event_class_code,
8294                                                       p_org_id            =>  p_org_id,
8295                                                       p_item_id           =>  p_item_id,
8296                                                       p_default_code      =>  x_trx_biz_category,
8297                                                       p_return_status     =>  l_return_status
8298                                                      );
8299       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8300         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8301           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code returned errors');
8302         END IF;
8303         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8304           RAISE FND_API.G_EXC_ERROR;
8305         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8306           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8307         END IF;
8308      ELSE
8309         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8310           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
8311           'Transaction Business Category:' || x_trx_biz_category);
8312         END IF;
8313      END IF;
8314 
8315     -- Bug 11891533, intended_use is not defaulted correctly. pass inventory_org_id instead of passing internal_organization_id
8316     /*---------------------------------------------------------+
8317      |   Get the default value for Intended use                 |
8318      +---------------------------------------------------------*/
8319      ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code(p_fiscal_type_code  =>  'INTENDED_USE',
8320                                                       p_country_code      =>  p_country_code,
8321                                                       p_application_id    =>  p_application_id,
8322                                                       p_entity_code       =>  p_entity_code,
8323                                                       p_event_class_code  =>  p_event_class_code,
8324                                                       p_source_event_class_code  =>  p_source_event_class_code,
8325                                                       p_org_id            =>  nvl(p_inventory_org_id,p_org_id),
8326                                                       p_item_id           =>  p_item_id,
8327                                                       p_default_code      =>  x_intended_use,
8328                                                       p_return_status     =>  l_return_status
8329                                                      );
8330 
8331       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8332         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8333           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code returned errors');
8334         END IF;
8335         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8336           RAISE FND_API.G_EXC_ERROR;
8337         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8338           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8339         END IF;
8340       ELSE
8341         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8342           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
8343           'Intended Use :' || x_intended_use);
8344         END IF;
8345       END IF;
8346 
8347       --Bug 6841552
8348       /*-----------------------------------------------------+
8349         |   Get the default value for product category        |
8350         +-----------------------------------------------------*/
8351         ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code(p_fiscal_type_code  =>  'PRODUCT_CATEGORY',
8352                                                          p_country_code      =>  p_country_code,
8353                                                          p_application_id    =>  p_application_id,
8354                                                          p_entity_code       =>  p_entity_code,
8355                                                          p_event_class_code  =>  p_event_class_code,
8356                                                          p_source_event_class_code  =>  p_source_event_class_code,
8357                                                          p_item_id           =>  p_item_id,
8358                                                          p_org_id            =>  p_org_id,
8359                                                          p_default_code      =>  x_prod_category ,
8360                                                          p_return_status     =>  l_return_status
8361                                                          );
8362         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8363           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8364             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code returned errors');
8365           END IF;
8366           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8367             RAISE FND_API.G_EXC_ERROR;
8368           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8369             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8370           END IF;
8371         ELSE
8372           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8373             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
8374             'Product Category :' || x_prod_category);
8375           END IF;
8376         END IF;
8377 
8378       IF p_item_id is not null THEN
8379        /*---------------------------------------------------------+
8380         |   Get the value for fiscal product classification        |
8381         +---------------------------------------------------------*/
8382   ZX_TCM_EXT_SERVICES_PUB.get_default_product_classif(p_country_code    =>  p_country_code,
8383                                                             p_item_id         =>  p_item_id,
8384                                                             p_org_id          =>  nvl(p_inventory_org_id,p_org_id),  -- 10394157
8385                                                             p_default_code    =>  x_prod_fisc_class_code,
8386                                                             p_return_status   =>  l_return_status
8387                                                             );
8388         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8389           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8390             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||': ZX_TCM_EXT_SERVICES_PUB.get_default_product_classif returned errors');
8391           END IF;
8392           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8393             RAISE FND_API.G_EXC_ERROR;
8394           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8395             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8396           END IF;
8397         ELSE
8398           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8399             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
8400             'Product Fiscal Classification :'|| x_prod_fisc_class_code);
8401           END IF;
8402         END IF;
8403 
8404        /*-----------------------------------------------------+
8405         |   Get the default value for product type            |
8406         +-----------------------------------------------------*/
8407         ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code(p_fiscal_type_code  =>  'PRODUCT_TYPE',
8408                                                          p_country_code      =>  p_country_code,
8409                                                          p_application_id    =>  p_application_id,
8410                                                          p_entity_code       =>  p_entity_code,
8411                                                          p_event_class_code  =>  p_event_class_code,
8412                                                          p_source_event_class_code  =>  p_source_event_class_code,
8413                                                          p_item_id           =>  p_item_id,
8414                                                          p_org_id            =>  nvl(p_inventory_org_id,p_org_id),
8415                                                          p_default_code      =>  x_product_type ,
8416                                                          p_return_status     =>  l_return_status
8417                                                          );
8418         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8419           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8420             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code returned errors');
8421           END IF;
8422           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8423             RAISE FND_API.G_EXC_ERROR;
8424           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8425             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8426           END IF;
8427         ELSE
8428           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8429             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
8430             'Product Type :' || x_product_type);
8431           END IF;
8432         END IF;
8433 
8434      ELSE --p_item_id is null
8435        x_product_type := null;
8436        x_prod_fisc_class_code := null;
8437 
8438        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8439          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
8440          'Product Type :' || x_product_type||
8441          ', Product Fiscal Classification :' || x_prod_fisc_class_code);
8442        END IF;
8443      END IF; --p_item_id is not null
8444    ELSIF l_tax_method = 'LTE' THEN
8445       JL_ZZ_TAX_VALIDATE_PKG.default_tax_attr(x_return_status => l_return_status);
8446 
8447       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8448         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8449           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code returned errors');
8450         END IF;
8451         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8452           RAISE FND_API.G_EXC_ERROR;
8453         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8454           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8455         END IF;
8456       END IF;
8457    END IF; --tax method condition
8458 
8462 
8459    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8460      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()+');
8461    END IF;
8463    EXCEPTION
8464      WHEN FND_API.G_EXC_ERROR THEN
8465        ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
8466        x_return_status := FND_API.G_RET_STS_ERROR ;
8467        DUMP_MSG;
8468       /*---------------------------------------------------------+
8469        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8470        | in the message stack. If there is only one message in   |
8471        | the stack it retrieves this message                     |
8472        +---------------------------------------------------------*/
8473        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8474                                  p_count   => x_msg_count,
8475                                  p_data    => x_msg_data
8476                                 );
8477        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8478          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,SQLERRM);
8479        END IF;
8480 
8481      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8482        ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
8483        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8484        DUMP_MSG;
8485        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8486        FND_MSG_PUB.Add;
8487       /*---------------------------------------------------------+
8488        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8489        | in the message stack. If there is only one message in   |
8490        | the stack it retrieves this message                     |
8491        +---------------------------------------------------------*/
8492        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8493                                  p_count   => x_msg_count,
8494                                  p_data    => x_msg_data
8495                                  );
8496 
8497        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8498          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,SQLERRM);
8499        END IF;
8500 
8501      WHEN OTHERS THEN
8502        ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
8503        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8504        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8505        FND_MSG_PUB.Add;
8506       /*---------------------------------------------------------+
8507        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8508        | in the message stack. If there is only one message in   |
8509        | the stack it retrieves this message                     |
8510        +---------------------------------------------------------*/
8511        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8512                                  p_count   => x_msg_count,
8513                                  p_data    => x_msg_data
8514                                  );
8515        IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
8516          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
8517        END IF;
8518  END get_default_tax_det_attribs;
8519 
8520 
8521 
8522 /* =================================================================================*
8523  | Overloaded Procedure  get_default_tax_det_attribs- for products that do not call |
8524  | ARP_TAX.get_default_tax_classification                                           |
8525  | Default the following product fiscal                                             |
8526  | classification based on the relevant default taxation country, application event |
8527  | class, inventory organization and inventory item values:                         |
8528  |             *  trx_business_category                                       |
8529  |             *  primary_intended_use                                        |
8530  |             *  product_fisc_classification                                 |
8531  |             *  product_category                                            |
8532  | Also default the tax classification code                                         |
8533  * ================================================================================*/
8534 
8535  PROCEDURE get_default_tax_det_attribs
8536  (
8537    p_api_version                   IN         NUMBER,
8538    p_init_msg_list                 IN         VARCHAR2,
8539    p_commit                        IN         VARCHAR2,
8540    p_validation_level              IN         NUMBER,
8541    x_return_status                 OUT NOCOPY VARCHAR2 ,
8542    x_msg_count                     OUT NOCOPY NUMBER ,
8543    x_msg_data                      OUT NOCOPY VARCHAR2,
8544    p_defaulting_rec_type           IN         det_fact_defaulting_rec_type,
8545    x_trx_biz_category             OUT NOCOPY VARCHAR2,
8546    x_intended_use             OUT NOCOPY VARCHAR2,
8547    x_prod_category             OUT NOCOPY VARCHAR2,
8548    x_prod_fisc_class_code          OUT NOCOPY VARCHAR2,
8549    x_product_type                  OUT NOCOPY VARCHAR2,
8550    x_tax_classification_code       OUT NOCOPY VARCHAR2
8551  )  IS
8552    l_api_name          CONSTANT  VARCHAR2(30) := 'GET_DEFAULT_TAX_DET_ATTRIBS';
8553    l_api_version       CONSTANT  NUMBER := 1.0;
8554    l_return_status               VARCHAR2(30);
8555    l_error_buffer                VARCHAR2(1000);
8556    l_init_msg_list               VARCHAR2(1);
8557    l_redef_tax_class_code_rec    def_tax_cls_code_info_rec_type;
8558 
8559 BEGIN
8560    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8561      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
8562    END IF;
8563 
8564   /*--------------------------------------------------+
8565    |   Standard start of API savepoint                |
8566    +--------------------------------------------------*/
8567    SAVEPOINT Get_Default_Tax_Det_Attrs_PVT;
8568 
8569    /*--------------------------------------------------+
8570     |   Standard call to check for call compatibility  |
8571     +--------------------------------------------------*/
8572     IF NOT FND_API.Compatible_API_Call(l_api_version,
8573                                        p_api_version,
8574                                        l_api_name,
8575                                        G_PKG_NAME
8576                                        ) THEN
8577        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8578      END IF;
8579 
8580    /*--------------------------------------------------------------+
8581     |   Initialize message list if p_init_msg_list is set to TRUE  |
8582     +--------------------------------------------------------------*/
8583     IF p_init_msg_list is null THEN
8584        l_init_msg_list := FND_API.G_FALSE;
8585     ELSE
8586        l_init_msg_list := p_init_msg_list;
8587     END IF;
8588 
8589     IF FND_API.to_Boolean(l_init_msg_list) THEN
8590        FND_MSG_PUB.initialize;
8591     END IF;
8592 
8593    /*-----------------------------------------+
8594     |   Initialize return status to SUCCESS   |
8595     +-----------------------------------------*/
8596     x_return_status := FND_API.G_RET_STS_SUCCESS;
8597 
8598    /*-----------------------------------------+
8599     |   Populate Global Variable              |
8600     +-----------------------------------------*/
8601     G_PUB_SRVC := l_api_name;
8602     G_DATA_TRANSFER_MODE := 'PLS';
8603     G_EXTERNAL_API_CALL  := 'N';
8604 
8605     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8606       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
8607       'application_id: ' || to_char(p_defaulting_rec_type.application_id)||
8608       ', entity_code: ' || p_defaulting_rec_type.entity_code||
8609       ', event_class_code: ' || p_defaulting_rec_type.event_class_code||
8610       ', org_id: ' || to_char(p_defaulting_rec_type.org_id)||
8611       ', item_id: ' || to_char(p_defaulting_rec_type.item_id)||
8612       ', country_code: ' || p_defaulting_rec_type.country_code||
8613       ', effective_date: ' || to_char(p_defaulting_rec_type.effective_date)||
8614       ', trx_id: ' || to_char(p_defaulting_rec_type.trx_id)||
8615       ', item_id: ' || to_char(p_defaulting_rec_type.item_id)||
8616       ', trx_date: ' || to_char(p_defaulting_rec_type.trx_date)||
8617       ', ledger_id: ' || to_char(p_defaulting_rec_type.ledger_id)||
8618       ', ship_from_party_id: ' || to_char(p_defaulting_rec_type.ship_from_party_id)||
8619       ', ship_to_party_id: ' || to_char(p_defaulting_rec_type.ship_to_party_id)||
8620       ', bill_to_party_id: ' || to_char(p_defaulting_rec_type.bill_to_party_id)||
8621       ', ship_from_pty_site_id: ' || to_char(p_defaulting_rec_type.ship_from_pty_site_id)||
8622       ', ship_to_location_id: ' || to_char(p_defaulting_rec_type.ship_to_location_id)||
8623       ', ship_to_acct_site_use_id: ' || to_char(p_defaulting_rec_type.ship_to_acct_site_use_id)||
8624       ', bill_to_acct_site_use_id: ' || to_char(p_defaulting_rec_type.bill_to_acct_site_use_id)||
8625       ', account_ccid: ' || to_char(p_defaulting_rec_type.account_ccid)||
8626       ', account_string: ' || p_defaulting_rec_type.account_string||
8627       ', ship_third_pty_acct_id: ' || to_char(p_defaulting_rec_type.ship_third_pty_acct_id)||
8628       ', bill_third_pty_acct_id: ' || to_char(p_defaulting_rec_type.bill_third_pty_acct_id)||
8629       ', ref_doc_application_id: ' || to_char(p_defaulting_rec_type.application_id)||
8630       ', ref_doc_entity_code: ' || p_defaulting_rec_type.ref_doc_entity_code||
8631       ', ref_doc_event_class_code: ' || p_defaulting_rec_type.ref_doc_event_class_code||
8632       ', ref_doc_trx_id: ' || to_char(p_defaulting_rec_type.ref_doc_trx_id)||
8633       ', ref_doc_line_id: ' || to_char(p_defaulting_rec_type.ref_doc_line_id)||
8634       ', ref_doc_trx_level_type: ' || p_defaulting_rec_type.ref_doc_trx_level_type||
8635       ', defaulting_attribute1: ' || p_defaulting_rec_type.defaulting_attribute1||
8636       ', defaulting_attribute2: ' || p_defaulting_rec_type.defaulting_attribute2||
8637       ', defaulting_attribute3: ' || p_defaulting_rec_type.defaulting_attribute3||
8638       ', defaulting_attribute4: ' || p_defaulting_rec_type.defaulting_attribute4||
8639       ', defaulting_attribute5: ' || p_defaulting_rec_type.defaulting_attribute5||
8640       ', defaulting_attribute6: ' || p_defaulting_rec_type.defaulting_attribute6||
8641       ', defaulting_attribute7: ' || p_defaulting_rec_type.defaulting_attribute7||
8642       ', defaulting_attribute8: ' || p_defaulting_rec_type.defaulting_attribute8||
8643       ', defaulting_attribute9: ' || p_defaulting_rec_type.defaulting_attribute9||
8644       ', defaulting_attribute10: ' || p_defaulting_rec_type.defaulting_attribute10||
8645       ', legal_entity_id: ' || to_char(p_defaulting_rec_type.legal_entity_id)||
8646       ', source_event_class_code: ' || to_char(p_defaulting_rec_type.source_event_class_code));
8647     END IF;
8648 
8649   /*------------------------------------------------------------------------------------------+
8650    |   Call original get_default_tax_line_attribs to get the values of fiscal classifications |
8651    +-----------------------------------------------------------------------------------------*/
8652    get_default_tax_det_attribs (p_api_version,
8653                                 l_init_msg_list,
8654                                 p_commit,
8655                                 p_validation_level,
8656                                 l_return_status,
8657                                 x_msg_count,
8658                                 x_msg_data,
8659                                 p_defaulting_rec_type.application_id,
8660                                 p_defaulting_rec_type.entity_code,
8661                                 p_defaulting_rec_type.event_class_code,
8662                                 p_defaulting_rec_type.org_id,
8663                                 p_defaulting_rec_type.item_id,
8664                                 p_defaulting_rec_type.country_code,
8665                                 p_defaulting_rec_type.effective_date,
8666                                 p_defaulting_rec_type.source_event_class_code,
8667                                 x_trx_biz_category,
8668                                 x_intended_use,
8669                                 x_prod_category,
8670                                 x_prod_fisc_class_code ,
8671                                 x_product_type
8672                                 ) ;
8673 
8674    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8675      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8676        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':get_default_tax_det_attribs returned errors');
8677      END IF;
8678      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8679        RAISE FND_API.G_EXC_ERROR;
8680      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8681        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8682      END IF;
8683    END IF;
8684 
8685   /*---------------------------------------------------------------------------------+
8686    |   Copy from input structure before calling API to default the tax classification|
8687    +--------------------------------------------------------------------------------*/
8688    l_redef_tax_class_code_rec.application_id                := p_defaulting_rec_type.application_id;
8689    l_redef_tax_class_code_rec.entity_code                   := p_defaulting_rec_type.entity_code;
8690    l_redef_tax_class_code_rec.event_class_code              := p_defaulting_rec_type.event_class_code;
8691    l_redef_tax_class_code_rec.internal_organization_id      := p_defaulting_rec_type.org_id;
8692    l_redef_tax_class_code_rec.trx_id                        := p_defaulting_rec_type.trx_id;
8693    l_redef_tax_class_code_rec.trx_line_id                   := p_defaulting_rec_type.trx_line_id;
8694    l_redef_tax_class_code_rec.trx_level_type                := p_defaulting_rec_type.trx_level_type;
8695    l_redef_tax_class_code_rec.ledger_id                     := p_defaulting_rec_type.ledger_id;
8696    l_redef_tax_class_code_rec.trx_date                      := p_defaulting_rec_type.trx_date;
8697    l_redef_tax_class_code_rec.ref_doc_application_id        := p_defaulting_rec_type.ref_doc_application_id;
8698    l_redef_tax_class_code_rec.ref_doc_event_class_code      := p_defaulting_rec_type.ref_doc_event_class_code;
8699    l_redef_tax_class_code_rec.ref_doc_entity_code           := p_defaulting_rec_type.ref_doc_entity_code;
8700    l_redef_tax_class_code_rec.ref_doc_trx_id                := p_defaulting_rec_type.ref_doc_trx_id;
8701    l_redef_tax_class_code_rec.ref_doc_line_id               := p_defaulting_rec_type.ref_doc_line_id;
8702    l_redef_tax_class_code_rec.ref_doc_trx_level_type        := p_defaulting_rec_type.ref_doc_trx_level_type;
8703    l_redef_tax_class_code_rec.account_ccid                  := p_defaulting_rec_type.account_ccid;
8704    l_redef_tax_class_code_rec.account_string                := p_defaulting_rec_type.account_string;
8705    l_redef_tax_class_code_rec.product_id                    := p_defaulting_rec_type.item_id;
8706    l_redef_tax_class_code_rec.product_org_id                := p_defaulting_rec_type.item_org_id;
8707    l_redef_tax_class_code_rec.receivables_trx_type_id       := p_defaulting_rec_type.application_id;
8708    l_redef_tax_class_code_rec.ship_third_pty_acct_id        := p_defaulting_rec_type.ship_third_pty_acct_id;
8709    l_redef_tax_class_code_rec.bill_third_pty_acct_id        := p_defaulting_rec_type.bill_third_pty_acct_id;
8710    l_redef_tax_class_code_rec.ship_to_cust_acct_site_use_id := p_defaulting_rec_type.ship_to_acct_site_use_id;
8711    l_redef_tax_class_code_rec.bill_to_cust_acct_site_use_id := p_defaulting_rec_type.bill_to_acct_site_use_id;
8712    l_redef_tax_class_code_rec.ship_to_location_id           := p_defaulting_rec_type.ship_to_location_id;
8713    l_redef_tax_class_code_rec.receivables_trx_type_id       := p_defaulting_rec_type.trx_type_id;
8714    l_redef_tax_class_code_rec.defaulting_attribute1         := p_defaulting_rec_type.defaulting_attribute1;
8715    l_redef_tax_class_code_rec.defaulting_attribute2         := p_defaulting_rec_type.defaulting_attribute2;
8716    l_redef_tax_class_code_rec.defaulting_attribute3         := p_defaulting_rec_type.defaulting_attribute3;
8717    l_redef_tax_class_code_rec.defaulting_attribute4         := p_defaulting_rec_type.defaulting_attribute4;
8718    l_redef_tax_class_code_rec.defaulting_attribute5         := p_defaulting_rec_type.defaulting_attribute5;
8719    l_redef_tax_class_code_rec.defaulting_attribute6         := p_defaulting_rec_type.defaulting_attribute6;
8720    l_redef_tax_class_code_rec.defaulting_attribute7         := p_defaulting_rec_type.defaulting_attribute7;
8721    l_redef_tax_class_code_rec.defaulting_attribute8         := p_defaulting_rec_type.defaulting_attribute8;
8725 
8722    l_redef_tax_class_code_rec.defaulting_attribute9         := p_defaulting_rec_type.defaulting_attribute9;
8723    l_redef_tax_class_code_rec.defaulting_attribute10        := p_defaulting_rec_type.defaulting_attribute10;
8724    l_redef_tax_class_code_rec.legal_entity_id               := p_defaulting_rec_type.legal_entity_id;
8726 
8727   /*-------------------------------------------------+
8728    |   Call TDM API to default the tax classification|
8729    +-------------------------------------------------*/
8730    IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8731      FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
8732      'Call TDM to default tax classfication'
8733       );
8734    END IF;
8735 
8736    ZX_TAX_DEFAULT_PKG.get_default_tax_classification (p_definfo        =>  l_redef_tax_class_code_rec,
8737                                                       p_return_status  =>  l_return_status,
8738                                                       p_error_buffer   =>  l_error_buffer
8739                                                       );
8740    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8741      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8742        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TAX_DEFAULT_PKG.get_default_tax_classification returned errors');
8743      END IF;
8744      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8745        RAISE FND_API.G_EXC_ERROR;
8746      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8747        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8748      END IF;
8749    ELSE
8750       x_tax_classification_code := l_redef_tax_class_code_rec.x_tax_classification_code;
8751       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8752         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
8753         'Tax Classification: ' || x_tax_classification_code
8754         );
8755       END IF;
8756    END IF;
8757 
8758    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8759      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()+');
8760    END IF;
8761 
8762    EXCEPTION
8763      WHEN FND_API.G_EXC_ERROR THEN
8764        ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
8765        x_return_status := FND_API.G_RET_STS_ERROR ;
8766        DUMP_MSG;
8767       /*---------------------------------------------------------+
8768        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8769        | in the message stack. If there is only one message in   |
8770        | the stack it retrieves this message                     |
8771        +---------------------------------------------------------*/
8772        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8773                                  p_count   => x_msg_count,
8774                                  p_data    => x_msg_data
8775                                  );
8776        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8777          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,SQLERRM);
8778        END IF;
8779 
8780      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8781        ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
8782        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8783        DUMP_MSG;
8784        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8785        FND_MSG_PUB.Add;
8786       /*---------------------------------------------------------+
8787        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8788        | in the message stack. If there is only one message in   |
8789        | the stack it retrieves this message                     |
8790        +---------------------------------------------------------*/
8791        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8792                                  p_count   => x_msg_count,
8793                                  p_data    => x_msg_data
8794                                  );
8795 
8796        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8797          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,SQLERRM);
8798        END IF;
8799 
8800      WHEN OTHERS THEN
8801        ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
8802        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8803        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8804        FND_MSG_PUB.Add;
8805       /*---------------------------------------------------------+
8806        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8807        | in the message stack. If there is only one message in   |
8808        | the stack it retrieves this message                     |
8809        +---------------------------------------------------------*/
8810        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8811                                  p_count   => x_msg_count,
8812                                  p_data    => x_msg_data
8813                                  );
8814        IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
8815          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
8816        END IF;
8817 
8818  END get_default_tax_det_attribs;
8819 
8820 /* =======================================================================*
8821  | PROCEDURE  set_tax_security_context :  Sets the security context based |
8822  |                                        on OU and LE of transaction     |
8823  * =======================================================================*/
8824  PROCEDURE set_tax_security_context
8825  ( p_api_version           IN  NUMBER,
8826    p_init_msg_list         IN  VARCHAR2,
8827    p_commit                IN  VARCHAR2,
8828    p_validation_level      IN  NUMBER,
8829    x_return_status         OUT NOCOPY VARCHAR2 ,
8830    x_msg_count             OUT NOCOPY NUMBER ,
8831    x_msg_data              OUT NOCOPY VARCHAR2,
8832    p_internal_org_id       IN  NUMBER,
8833    p_legal_entity_id       IN  NUMBER,
8834    p_transaction_date      IN  DATE,
8835    p_related_doc_date      IN  DATE,
8836    p_adjusted_doc_date     IN  DATE,
8837    x_effective_date        OUT NOCOPY DATE
8838   )IS
8839    l_api_name          CONSTANT  VARCHAR2(30) := 'SET_TAX_SECURITY_CONTEXT';
8840    l_api_version       CONSTANT  NUMBER := 1.0;
8841    l_return_status               VARCHAR2(30);
8842    l_init_msg_list               VARCHAR2(1);
8843 
8844    l_effective_date              DATE;
8845 
8846  BEGIN
8847    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8848      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
8849    END IF;
8850 
8851   /*--------------------------------------------------+
8852    |   Standard start of API savepoint                |
8853    +--------------------------------------------------*/
8854    SAVEPOINT Set_Tax_Security_Context_PVT;
8855 
8856    /*--------------------------------------------------+
8857     |   Standard call to check for call compatibility  |
8858     +--------------------------------------------------*/
8859     IF NOT FND_API.Compatible_API_Call(l_api_version,
8860                                        p_api_version,
8861                                        l_api_name,
8862                                        G_PKG_NAME
8863                                        ) THEN
8864        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8865      END IF;
8866 
8867    /*--------------------------------------------------------------+
8868     |   Initialize message list if p_init_msg_list is set to TRUE  |
8869     +--------------------------------------------------------------*/
8870     IF p_init_msg_list is null THEN
8871        l_init_msg_list := FND_API.G_FALSE;
8872     ELSE
8873      l_init_msg_list := p_init_msg_list;
8874     END IF;
8875 
8876     IF FND_API.to_Boolean(l_init_msg_list) THEN
8877        FND_MSG_PUB.initialize;
8878     END IF;
8879 
8880    /*-----------------------------------------+
8881     |   Initialize return status to SUCCESS   |
8882     +-----------------------------------------*/
8883     x_return_status := FND_API.G_RET_STS_SUCCESS;
8884 
8885 
8886    /*--------------------------------------------+
8887     |   Call to zx_security.set_security_context |
8888     +--------------------------------------------*/
8889 
8890     x_effective_date := determine_effective_date(p_transaction_date,
8891                                                  p_related_doc_date,
8892                                                  p_adjusted_doc_date);
8893     l_effective_date := x_effective_date;
8894 
8895     ZX_SECURITY.set_security_context(p_legal_entity_id,
8896                                      p_internal_org_id,
8897                                      l_effective_date,
8898                                      l_return_status
8899                                      );
8900 
8901      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8902        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8903          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SECURITY.set_security_context returned errors');
8904        END IF;
8905        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8906          RAISE FND_API.G_EXC_ERROR;
8907        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8908          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8909        END IF;
8910      END IF;
8911 
8912     /*---------------------------------------------------------+
8913      | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8914      | in the message stack. If there is only one message in   |
8915      | the stack it retrieves this message                     |
8916      +---------------------------------------------------------*/
8917      FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8918                                p_count   => x_msg_count,
8919                                p_data    => x_msg_data
8920                                );
8921 
8922      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8923        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
8924      END IF;
8925 
8926      EXCEPTION
8927       WHEN FND_API.G_EXC_ERROR THEN
8928         ROLLBACK TO Set_Tax_Security_Context_PVT;
8929         x_return_status := FND_API.G_RET_STS_ERROR ;
8930         DUMP_MSG;
8931        /*---------------------------------------------------------+
8932         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8933         | in the message stack. If there is only one message in   |
8934         | the stack it retrieves this message                     |
8935         +---------------------------------------------------------*/
8936         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8937                                   p_count   => x_msg_count,
8938                                   p_data    => x_msg_data
8939                                   );
8940 
8941         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8942           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
8943         END IF;
8944 
8945       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8946         ROLLBACK TO Set_Tax_Security_Context_PVT;
8947         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8948         DUMP_MSG;
8949         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8950         FND_MSG_PUB.Add;
8951        /*---------------------------------------------------------+
8952         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8953         | in the message stack. If there is only one message in   |
8954         | the stack it retrieves this message                     |
8955         +---------------------------------------------------------*/
8956         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8957                                   p_count   => x_msg_count,
8958                                   p_data    => x_msg_data
8959                                   );
8960 
8961         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8962           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
8963         END IF;
8964 
8965       WHEN OTHERS THEN
8966          ROLLBACK TO set_tax_security_context_PVT;
8967          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8968          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8969          FND_MSG_PUB.Add;
8970         /*---------------------------------------------------------+
8971          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8972          | in the message stack. If there is only one message in   |
8973          | the stack it retrieves this message                     |
8974          +---------------------------------------------------------*/
8975          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8976                                    p_count   => x_msg_count,
8977                                    p_data    => x_msg_data
8978                                    );
8979          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
8980            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
8981          END IF;
8982   END set_tax_security_context;
8983 
8984 
8985 
8986 /* =======================================================================*
8987  | Overloaded PROCEDURE  set_tax_security_context: for Lease Management   |
8988  | Also includes setting the date based on provnl_tax_determination_date  |
8989  * =======================================================================*/
8990  PROCEDURE set_tax_security_context
8991  ( p_api_version           IN         NUMBER,
8992    p_init_msg_list         IN         VARCHAR2,
8993    p_commit                IN         VARCHAR2,
8994    p_validation_level      IN         NUMBER,
8995    x_return_status         OUT NOCOPY VARCHAR2 ,
8996    x_msg_count             OUT NOCOPY NUMBER ,
8997    x_msg_data              OUT NOCOPY VARCHAR2,
8998    p_internal_org_id       IN         NUMBER,
8999    p_legal_entity_id       IN         NUMBER,
9000    p_transaction_date      IN         DATE,
9001    p_related_doc_date      IN         DATE,
9002    p_adjusted_doc_date     IN         DATE,
9003    p_provnl_tax_det_date   IN         DATE,
9004    x_effective_date        OUT NOCOPY DATE
9005   )IS
9006    l_api_name          CONSTANT  VARCHAR2(30) := 'SET_TAX_SECURITY_CONTEXT';
9007    l_api_version       CONSTANT  NUMBER := 1.0;
9008    l_return_status               VARCHAR2(30);
9009    l_init_msg_list               VARCHAR2(1);
9010 
9011  BEGIN
9012    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9013      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
9014    END IF;
9015 
9016   /*--------------------------------------------------+
9017    |   Standard start of API savepoint                |
9018    +--------------------------------------------------*/
9019    SAVEPOINT Set_Tax_Security_Context_PVT;
9020 
9021    /*--------------------------------------------------+
9022     |   Standard call to check for call compatibility  |
9023     +--------------------------------------------------*/
9024     IF NOT FND_API.Compatible_API_Call(l_api_version,
9025                                        p_api_version,
9026                                        l_api_name,
9027                                        G_PKG_NAME
9028                                        ) THEN
9029        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9030      END IF;
9031 
9032    /*--------------------------------------------------------------+
9033     |   Initialize message list if p_init_msg_list is set to TRUE  |
9034     +--------------------------------------------------------------*/
9035     IF p_init_msg_list is null THEN
9036        l_init_msg_list := FND_API.G_FALSE;
9037     ELSE
9038        l_init_msg_list := p_init_msg_list;
9039     END IF;
9040 
9041     IF FND_API.to_Boolean(l_init_msg_list) THEN
9042        FND_MSG_PUB.initialize;
9043     END IF;
9044 
9045    /*-----------------------------------------+
9046     |   Initialize return status to SUCCESS   |
9047     +-----------------------------------------*/
9048     x_return_status := FND_API.G_RET_STS_SUCCESS;
9049 
9050 
9051    /*--------------------------------------------+
9052     |   Call to zx_security.set_security_context |
9053     +--------------------------------------------*/
9054      ZX_SECURITY.set_security_context(p_legal_entity_id,
9055                                       p_internal_org_id,
9056                                       determine_effective_date(p_transaction_date,
9057                                                                p_related_doc_date,
9058                                                                p_adjusted_doc_date,
9059                                                                p_provnl_tax_det_date),
9060                                       l_return_status
9061                                       );
9062 
9063      x_effective_date := ZX_SECURITY.G_EFFECTIVE_DATE;
9064 
9065      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9066        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9067          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SECURITY.set_security_context returned errors');
9068        END IF;
9069        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9070          RAISE FND_API.G_EXC_ERROR;
9071        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9072          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9073        END IF;
9074      END IF;
9075 
9076     /*---------------------------------------------------------+
9077      | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
9078      | in the message stack. If there is only one message in   |
9079      | the stack it retrieves this message                     |
9080      +---------------------------------------------------------*/
9081      FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
9082                                p_count   => x_msg_count,
9083                                p_data    => x_msg_data
9084                                );
9085 
9086      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9087        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
9088      END IF;
9089 
9090      EXCEPTION
9091       WHEN FND_API.G_EXC_ERROR THEN
9092         ROLLBACK TO Set_Tax_Security_Context_PVT;
9093         x_return_status := FND_API.G_RET_STS_ERROR ;
9094         DUMP_MSG;
9095        /*---------------------------------------------------------+
9096         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
9097         | in the message stack. If there is only one message in   |
9098         | the stack it retrieves this message                     |
9099         +---------------------------------------------------------*/
9100         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
9101                                   p_count   => x_msg_count,
9102                                   p_data    => x_msg_data
9103                                   );
9104 
9105         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
9106           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
9107         END IF;
9108 
9109       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9110         ROLLBACK TO Set_Tax_Security_Context_PVT;
9111         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9112         DUMP_MSG;
9113         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
9114         FND_MSG_PUB.Add;
9115        /*---------------------------------------------------------+
9116         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
9117         | in the message stack. If there is only one message in   |
9118         | the stack it retrieves this message                     |
9119         +---------------------------------------------------------*/
9120         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
9121                                   p_count   => x_msg_count,
9122                                   p_data    => x_msg_data
9123                                   );
9124 
9125         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
9126           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
9127         END IF;
9128 
9129       WHEN OTHERS THEN
9130          ROLLBACK TO set_tax_security_context_PVT;
9131          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9132          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
9133          FND_MSG_PUB.Add;
9134         /*---------------------------------------------------------+
9135          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
9136          | in the message stack. If there is only one message in   |
9137          | the stack it retrieves this message                     |
9138          +---------------------------------------------------------*/
9139          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
9140                                    p_count   => x_msg_count,
9141                                    p_data    => x_msg_data
9142                                    );
9143          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
9144            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
9145          END IF;
9146   END set_tax_security_context;
9147 
9148 
9149 
9150  /* =======================================================================*
9151  | PROCEDURE  validate_and_default_tax_attr :                              |
9152  | This api supports multiple document processing                          |
9153  * =======================================================================*/
9154  PROCEDURE validate_and_default_tax_attr
9155  (
9156   p_api_version           IN         NUMBER,
9157   p_init_msg_list         IN         VARCHAR2,
9158   p_commit                IN         VARCHAR2,
9159   p_validation_level      IN         NUMBER,
9160   x_return_status         OUT NOCOPY VARCHAR2 ,
9161   x_msg_count             OUT NOCOPY NUMBER ,
9162   x_msg_data              OUT NOCOPY VARCHAR2
9163   ) IS
9164   l_api_name          CONSTANT  VARCHAR2(30) := 'VALIDATE_AND_DEFAULT_TAX_ATTR';
9165   l_api_version       CONSTANT  NUMBER := 1.0;
9166   l_tax_method                  VARCHAR2(30);
9167   l_app_id                      NUMBER;
9168   l_return_status               VARCHAR2(30);
9169   l_context_info_rec            context_info_rec_type;
9170   l_init_msg_list               VARCHAR2(1);
9171   l_internal_organization_id    NUMBER;
9172   l_zx_product_options_rec      ZX_GLOBAL_STRUCTURES_PKG.zx_product_options_rec_type;
9173 
9174  BEGIN
9175   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9176      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
9177    END IF;
9178 
9179   /*--------------------------------------------------+
9180    |   Standard start of API savepoint                |
9181    +--------------------------------------------------*/
9182    SAVEPOINT Validate_And_Default_Tax_Attr;
9183 
9184    /*--------------------------------------------------+
9185     |   Standard call to check for call compatibility  |
9186     +--------------------------------------------------*/
9187     IF NOT FND_API.Compatible_API_Call(l_api_version,
9188                                        p_api_version,
9189                                        l_api_name,
9190                                        G_PKG_NAME
9191                                        ) THEN
9192        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9193     END IF;
9194 
9195    /*--------------------------------------------------------------+
9196     |   Initialize message list if p_init_msg_list is set to TRUE  |
9197     +--------------------------------------------------------------*/
9198     IF p_init_msg_list is null THEN
9199       l_init_msg_list := FND_API.G_FALSE;
9200     ELSE
9201       l_init_msg_list := p_init_msg_list;
9202     END IF;
9203 
9204     IF FND_API.to_Boolean(l_init_msg_list) THEN
9205        FND_MSG_PUB.initialize;
9206     END IF;
9207 
9208    /*-----------------------------------------+
9209     |   Initialize return status to SUCCESS   |
9210     +-----------------------------------------*/
9211     x_return_status := FND_API.G_RET_STS_SUCCESS;
9212 
9213    /*-----------------------------------------+
9214     |   Populate Global Variable              |
9215     +-----------------------------------------*/
9216     G_PUB_SRVC := l_api_name;
9217     G_DATA_TRANSFER_MODE := 'TAB';
9218     G_EXTERNAL_API_CALL  := 'N';
9219 
9220     BEGIN
9221       SELECT internal_organization_id,
9222              application_id
9223         INTO l_internal_organization_id,
9224              l_app_id
9225         FROM ZX_TRX_HEADERS_GT headers
9226        WHERE rownum =1;
9227 
9228     EXCEPTION
9229       WHEN NO_DATA_FOUND THEN
9230         l_tax_method := 'EBTAX';
9231     END;
9232 
9233    ZX_GLOBAL_STRUCTURES_PKG.get_product_options_info
9234                    (p_application_id      => l_app_id,
9235                     p_org_id              => l_internal_organization_id,
9236                     x_product_options_rec => l_zx_product_options_rec,
9237                     x_return_status       => x_return_status);
9238 
9239     IF x_return_status = FND_API.G_RET_STS_ERROR then
9240 
9241         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9242            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Incorrect return status after calling '||
9243                           'ZX_GLOBAL_STRUCTURES_PKG.get_product_options_info');
9244         END IF;
9245         l_tax_method := 'EBTAX';
9246     ELSE
9247         -- Bug 7528340
9248         l_tax_method := NVL(l_zx_product_options_rec.tax_method_code,'EBTAX');
9249     END IF;
9250 
9251     IF l_app_id = 200 AND l_tax_method IS NULL THEN
9252       l_tax_method := 'EBTAX';
9253     END IF;
9254 
9255     IF l_tax_method = 'EBTAX' THEN
9256      ZX_VALIDATE_API_PKG.default_and_validate_tax_attr(p_api_version,
9257                                                        l_init_msg_list,
9258                                                        p_commit,
9259                                                        p_validation_level,
9260                                                        l_return_status,
9261                                                        x_msg_count,
9262                                                        x_msg_data
9263                                                       );
9264      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9265        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9266          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALIDATE_API_PKG.default_and_validate_tax_attr returned errors');
9267        END IF;
9268        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9269          RAISE FND_API.G_EXC_ERROR;
9270        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9271          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9272        END IF;
9273      END IF;
9274     ELSIF l_tax_method = 'LTE' THEN
9275     JL_ZZ_TAX_VALIDATE_PKG.default_and_validate_tax_attr(p_api_version,
9276                                                          l_init_msg_list,
9277                                                          p_commit,
9278                                                          p_validation_level,
9279                                                          l_return_status,
9280                                                          x_msg_count,
9281                                                          x_msg_data
9282                                                         );
9283     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9284        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9285          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':JL_ZZ_TAX_VALIDATE_PKG.default_and_validate_tax_attr returned errors');
9286        END IF;
9287        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9288          RAISE FND_API.G_EXC_ERROR;
9289        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9290          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9291        END IF;
9292      END IF;
9293     END IF;  --l_tax_method
9294 
9295 
9296     EXCEPTION
9297       WHEN FND_API.G_EXC_ERROR THEN
9298         --Since this API only inserts into the errors GT and updates the header and line GTTs
9299         --we shouldnt be rolling back here as that data too will be lost
9300         --ROLLBACK TO Validate_And_Default_Tax_Attr;
9301         x_return_status := FND_API.G_RET_STS_ERROR ;
9302         --Messages are inserted into ZX_VALIDATION_ERRORS_GT for this API
9303         DUMP_MSG;
9304         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
9305           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
9306         END IF;
9307 
9308       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9309         ROLLBACK TO Validate_And_Default_Tax_Attr;
9310         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9311         DUMP_MSG;
9312         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
9313         FND_MSG_PUB.Add;
9314        /*---------------------------------------------------------+
9315         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
9316         | in the message stack. If there is only one message in   |
9317         | the stack it retrieves this message                     |
9318         +---------------------------------------------------------*/
9319         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
9320                                   p_count   => x_msg_count,
9321                                   p_data    => x_msg_data
9322                                   );
9323 
9324         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
9325           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
9326         END IF;
9327 
9328       WHEN OTHERS THEN
9329          ROLLBACK TO Validate_And_Default_Tax_Attr;
9330          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9331          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
9332          FND_MSG_PUB.Add;
9333         /*---------------------------------------------------------+
9334          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
9335          | in the message stack. If there is only one message in   |
9336          | the stack it retrieves this message                     |
9337          +---------------------------------------------------------*/
9338          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
9339            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
9340          END IF;
9341  END validate_and_default_tax_attr;
9342 
9343 
9344 
9345 /* ==========================================================================*
9346  | PROCEDURE  rollback_for_tax :  Communicate to the Tax Partners to rollback|
9347  |                                transactions in their system               |
9348  * =========================================================================*/
9349  PROCEDURE rollback_for_tax
9350  ( p_api_version           IN         NUMBER,
9351    p_init_msg_list         IN         VARCHAR2,
9352    p_commit                IN         VARCHAR2,
9353    p_validation_level      IN         NUMBER,
9354    x_return_status         OUT NOCOPY VARCHAR2 ,
9355    x_msg_count             OUT NOCOPY NUMBER ,
9356    x_msg_data              OUT NOCOPY VARCHAR2
9357  )IS
9358   l_api_name          CONSTANT  VARCHAR2(30) := 'ROLLBACK_FOR_TAX';
9359   l_api_version       CONSTANT  NUMBER := 1.0;
9360 
9361  BEGIN
9362   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9363      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
9364   END IF;
9365 
9366  END rollback_for_tax;
9367 
9368 /* ========================================================================*
9369  | PROCEDURE  commit_for_tax :  Communicate to the Tax Partners to commit  |
9370  |                              transactions in their system               |
9371  * =======================================================================*/
9372 
9373  PROCEDURE commit_for_tax
9374  ( p_api_version           IN         NUMBER,
9375    p_init_msg_list         IN         VARCHAR2,
9376    p_commit                IN         VARCHAR2,
9377    p_validation_level      IN         NUMBER ,
9378    x_return_status         OUT NOCOPY VARCHAR2 ,
9379    x_msg_count             OUT NOCOPY NUMBER ,
9380    x_msg_data              OUT NOCOPY VARCHAR2
9381  )IS
9382   l_api_name          CONSTANT  VARCHAR2(30) := 'COMMIT_FOR_TAX';
9383   l_api_version       CONSTANT  NUMBER := 1.0;
9384 
9385  BEGIN
9386     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9387       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
9388     END IF;
9389 
9390  END commit_for_tax;
9391 
9392 /* =======================================================================*
9393  | PROCEDURE  add_msg : Adds the message to the fnd message stack or      |
9394  |                      local plsql table to be dumped later into the     |
9395  |                      errors GT.                                        |
9396  * =======================================================================*/
9397 
9398   PROCEDURE add_msg (p_context_info_rec IN context_info_rec_type)
9399   IS
9400     l_count     BINARY_INTEGER;
9401     l_mesg      VARCHAR2(2000);
9402     l_api_name  CONSTANT VARCHAR2(30) := 'ADD_MSG';
9403   BEGIN
9404     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9405       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
9406     END IF;
9407     --Add unexpected errors to fnd_stack
9408     IF p_context_info_rec.application_id is null THEN
9409       FND_MSG_PUB.Add();
9410     END IF;
9411 
9412     IF G_DATA_TRANSFER_MODE = 'PLS' OR
9413        G_DATA_TRANSFER_MODE = 'WIN' THEN
9414       /*If G_EXTERNAL_API_CALL is 'Y' reset it back to 'N' and no need to add to stack
9415         since message is already in stack.*/
9416       IF G_EXTERNAL_API_CALL  = 'Y' THEN
9417         G_EXTERNAL_API_CALL  := 'N';
9418       ELSE
9419         FND_MSG_PUB.Add();
9420       END IF;
9421     ELSIF G_DATA_TRANSFER_MODE = 'TAB' THEN
9422        l_count:= errors_tbl.application_id.COUNT;
9423        IF G_EXTERNAL_API_CALL  = 'Y' THEN
9424          LOOP
9425            l_mesg := FND_MSG_PUB.Get(FND_MSG_PUB.G_NEXT, FND_API.G_FALSE);
9426            IF  l_mesg IS NULL THEN
9427              EXIT;
9428            ELSE
9429              errors_tbl.application_id(l_count+1)   := p_context_info_rec.application_id;
9430              errors_tbl.entity_code(l_count+1)      := p_context_info_rec.entity_code;
9431              errors_tbl.event_class_code(l_count+1) := p_context_info_rec.event_class_code;
9432              errors_tbl.trx_id(l_count+1)           := Nvl(p_context_info_rec.trx_id,-1);
9433              errors_tbl.trx_level_type(l_count+1)   := p_context_info_rec.trx_level_type;
9434              errors_tbl.trx_line_id(l_count+1)      := p_context_info_rec.trx_line_id;
9435              errors_tbl.summary_tax_line_number(l_count+1) := p_context_info_rec.summary_tax_line_number;
9436              errors_tbl.tax_line_id(l_count+1)      := p_context_info_rec.tax_line_id;
9437              errors_tbl.trx_line_dist_id(l_count+1) := p_context_info_rec.trx_line_dist_id;
9438              errors_tbl.message_text(l_count+1)     := l_mesg;
9439            END IF;
9440          END LOOP;
9441          G_EXTERNAL_API_CALL := 'N'; -- reset G_EXTERNAL_API_CALL
9442        ELSE --G_EXTERNAL_API_CALL is 'N' then retrieve message from fnd_stack
9443          errors_tbl.application_id(l_count+1)   := p_context_info_rec.application_id;
9444          errors_tbl.entity_code(l_count+1)      := p_context_info_rec.entity_code;
9445          errors_tbl.event_class_code(l_count+1) := p_context_info_rec.event_class_code;
9446          errors_tbl.trx_id(l_count+1)           := Nvl(p_context_info_rec.trx_id,-1);
9447          errors_tbl.trx_level_type(l_count+1)   := p_context_info_rec.trx_level_type;
9448          errors_tbl.trx_line_id(l_count+1)      := p_context_info_rec.trx_line_id;
9449          errors_tbl.summary_tax_line_number(l_count+1) := p_context_info_rec.summary_tax_line_number;
9450          errors_tbl.tax_line_id(l_count+1)      := p_context_info_rec.tax_line_id;
9451          errors_tbl.trx_line_dist_id(l_count+1) := p_context_info_rec.trx_line_dist_id;
9452          errors_tbl.message_text(l_count+1)     := fnd_message.get();
9453        END IF; --G_EXTERNAL_API_CALL
9454        l_count:=errors_tbl.application_id.COUNT;
9455     END IF; --G_DATA_TRANSFER_MODE
9456 
9457     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9458       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
9459     END IF;
9460   END add_msg;
9461 
9462  /* ============================================================================*
9463  | PROCEDURE  dump_msg : Dump all error messages from pl/sql structure to table |
9464  * ============================================================================*/
9465   PROCEDURE dump_msg
9466   IS
9467      l_api_name   CONSTANT VARCHAR2(30) := 'DUMP_MSG';
9468   BEGIN
9469     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9470       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
9471     END IF;
9472     FORALL i IN 1 .. nvl(errors_tbl.application_id.LAST,-99)
9473         INSERT INTO ZX_ERRORS_GT            (application_id,
9474                                              entity_code,
9475                                              event_class_code,
9476                                              trx_id,
9477                                              trx_line_id,
9478                                              trx_level_type,
9479                                              summary_tax_line_number,
9480                                              tax_line_id,
9481                                              trx_line_dist_id,
9482                                              message_text)
9483                                       values (errors_tbl.application_id(i),
9484                                               errors_tbl.entity_code(i),
9485                                               errors_tbl.event_class_code(i),
9486                                               errors_tbl.trx_id(i),
9487                                               errors_tbl.trx_line_id(i),
9488                                               errors_tbl.trx_level_type(i),
9489                                               errors_tbl.summary_tax_line_number(i),
9490                                               errors_tbl.tax_line_id(i),
9491                                               errors_tbl.trx_line_dist_id(i),
9492                                               NVL(errors_tbl.message_text(i),'UNEXPECTED_ERROR_DUMP_MSG')
9493                                              );
9494 
9495     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9496       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,SQL%ROWCOUNT||' Error Message(s) dumped into Zx_Errors_GT.');
9497     END IF;
9498 
9499    errors_tbl.application_id.delete;
9500    errors_tbl.entity_code.delete;
9501    errors_tbl.event_class_code.delete;
9502    errors_tbl.trx_id.delete;
9503    errors_tbl.trx_line_id.delete;
9504    errors_tbl.trx_level_type.delete;
9505    errors_tbl.summary_tax_line_number.delete;
9506    errors_tbl.tax_line_id.delete;
9507    errors_tbl.trx_line_dist_id.delete;
9508    errors_tbl.message_text.delete;
9509    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9510       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()-');
9511    END IF;
9512   END dump_msg;
9513 
9514 /* =======================================================================*
9515  | FUNCTION  determine_effective_date :                                   |
9516  * =======================================================================*/
9517 
9518  FUNCTION determine_effective_date
9519  ( p_transaction_date      IN  DATE,
9520    p_related_doc_date      IN  DATE,
9521    p_adjusted_doc_date     IN  DATE
9522  ) RETURN DATE IS
9523 
9524  BEGIN
9525    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9526       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||'DETERMINE_EFFECTIVE_DATE.BEGIN','ZX_API_PUB: DETERMINE_EFFECTIVE_DATE()+');
9527    END IF;
9528 
9529    IF p_related_doc_date IS NOT NULL THEN
9530      return(p_related_doc_date);
9531    ELSIF p_adjusted_doc_date IS NOT NULL THEN
9532       return(p_adjusted_doc_date);
9533    ELSIF p_transaction_date IS NOT NULL THEN
9534       return(p_transaction_date);
9535    ELSE
9536       return(SYSDATE);
9537    END IF;
9538 
9539    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9540       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||'DETERMINE_EFFECTIVE_DATE.END','ZX_API_PUB: DETERMINE_EFFECTIVE_DATE()-');
9541    END IF;
9542 
9543  END determine_effective_date;
9544 
9545 
9546 /* =======================================================================*
9547  | Function  Get_Default_Tax_Reg : Returns the Default Registration Number|
9548  |                                 for a Given Party                      |
9549  * =======================================================================*/
9550 
9551  FUNCTION get_default_tax_reg(
9552   p_api_version       IN         NUMBER,
9553   p_init_msg_list     IN         VARCHAR2,
9554   p_commit            IN         VARCHAR2,
9555   p_validation_level  IN         NUMBER,
9556   x_return_status     OUT NOCOPY VARCHAR2,
9557   x_msg_count         OUT NOCOPY NUMBER,
9558   x_msg_data          OUT NOCOPY VARCHAR2,
9559   p_party_id          IN         ZX_PARTY_TAX_PROFILE.party_id%type,
9560   p_party_type        IN         ZX_PARTY_TAX_PROFILE.party_type_code%type,
9561   p_effective_date    IN         ZX_REGISTRATIONS.effective_from%type
9562  ) RETURN Varchar2 IS
9563   l_api_name          CONSTANT  VARCHAR2(30) := 'GET_DEFAULT_TAX_REG';
9564   l_api_version       CONSTANT  NUMBER := 1.0;
9565   l_reg_number                  VARCHAR2(50);
9566   l_return_status               VARCHAR2(1);
9567   l_context_info_rec            context_info_rec_type;
9568   l_init_msg_list               VARCHAR2(1);
9569  BEGIN
9570    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9571      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
9572    END IF;
9573 
9574   /*--------------------------------------------------+
9575    |   Standard start of API savepoint                |
9576    +--------------------------------------------------*/
9577    -- Commenting this save point as per bug# 5395191
9578    --  SAVEPOINT Get_Default_Tax_Reg_PVT;
9579 
9580    /*--------------------------------------------------+
9581     |   Standard call to check for call compatibility  |
9582     +--------------------------------------------------*/
9583     IF NOT FND_API.Compatible_API_Call(l_api_version,
9584                                        p_api_version,
9585                                        l_api_name,
9586                                        G_PKG_NAME
9590 
9587                                        ) THEN
9588        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9589     END IF;
9591    /*--------------------------------------------------------------+
9592     |   Initialize message list if p_init_msg_list is set to TRUE  |
9593     +--------------------------------------------------------------*/
9594     IF p_init_msg_list is null THEN
9595        l_init_msg_list := FND_API.G_FALSE;
9596     ELSE
9597        l_init_msg_list := p_init_msg_list;
9598     END IF;
9599 
9600     IF FND_API.to_Boolean(l_init_msg_list) THEN
9601        FND_MSG_PUB.initialize;
9602     END IF;
9603 
9604    /*-----------------------------------------+
9605     |   Initialize return status to SUCCESS   |
9606     +-----------------------------------------*/
9607     x_return_status := FND_API.G_RET_STS_SUCCESS;
9608 
9609    /*-----------------------------------------+
9610     |   Populate Global Variable              |
9611     +-----------------------------------------*/
9612     G_PUB_SRVC := l_api_name;
9613     G_DATA_TRANSFER_MODE := 'PLS';
9614     G_EXTERNAL_API_CALL  := 'N';
9615 
9616 
9617    /*-----------------------------------------------------+
9618     |   Get the default value for product category        |
9619     +-----------------------------------------------------*/
9620     l_reg_number:= ZX_TCM_EXT_SERVICES_PUB.get_default_tax_reg(p_party_id,
9621                                                                p_party_type,
9622                                                                p_effective_date,
9623                                                                l_return_status
9624                                                                );
9625 
9626     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9627        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9628          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_TCM_EXT_SERVICES_PUB.get_default_tax_reg returned errors');
9629        END IF;
9630        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9631          RAISE FND_API.G_EXC_ERROR;
9632        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9633          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9634        END IF;
9635     ELSE
9636        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9637          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9638          'Registration Number: '|| l_reg_number
9639          );
9640        END IF;
9641        RETURN l_reg_number;
9642     END IF;
9643 
9644 
9645     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9646       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
9647     END IF;
9648 
9649     EXCEPTION
9650        WHEN FND_API.G_EXC_ERROR THEN
9651           -- Commented rollback as per bug 5395191
9652           -- ROLLBACK TO Get_Default_Tax_Reg_PVT;
9653           x_return_status := FND_API.G_RET_STS_ERROR ;
9654           DUMP_MSG;
9655          /*---------------------------------------------------------+
9656           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
9657           | in the message stack. If there is only one message in   |
9658           | the stack it retrieves this message                     |
9659           +---------------------------------------------------------*/
9660           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
9661                                     p_count   => x_msg_count,
9662                                     p_data    => x_msg_data
9663                                     );
9664           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
9665              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
9666           END IF;
9667 
9668         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9669           -- Commented rollback as per bug 5395191
9670           -- ROLLBACK TO Get_Default_Tax_Reg_PVT;
9671           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9672           DUMP_MSG;
9673           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
9674           FND_MSG_PUB.Add;
9675          /*---------------------------------------------------------+
9676           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
9677           | in the message stack. If there is only one message in   |
9678           | the stack it retrieves this message                     |
9679           +---------------------------------------------------------*/
9680           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
9681                                     p_count   => x_msg_count,
9682                                     p_data    => x_msg_data
9683                                     );
9684           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
9685             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
9686           END IF;
9687 
9688         WHEN OTHERS THEN
9689           -- Commented rollback as per bug 5395191
9690           --  ROLLBACK TO Get_Default_Tax_Reg_PVT;
9691            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9692            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
9693            FND_MSG_PUB.Add;
9694           /*---------------------------------------------------------+
9695            | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
9696            | in the message stack. If there is only one message in   |
9697            | the stack it retrieves this message                     |
9698            +---------------------------------------------------------*/
9699            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
9700                                      p_count  => x_msg_count,
9701                                      p_data   => x_msg_data
9705            END IF;
9702                                      );
9703            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
9704              FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
9706 
9707   END get_default_tax_reg;
9708 
9709  /* ========================================================================*
9710  | PROCEDURE  insert_line_det_factors : This procedure should be called by |
9711  | products when creating a document or inserting a new transaction line   |
9712  | for existing document. This line will be flagged to be picked up by the |
9713  | tax calculation process                                                 |
9714  * =======================================================================*/
9715 PROCEDURE insert_line_det_factors (
9716   p_api_version        IN         NUMBER,
9717   p_init_msg_list      IN         VARCHAR2,
9718   p_commit             IN         VARCHAR2,
9719   p_validation_level   IN         NUMBER,
9720   x_return_status      OUT NOCOPY VARCHAR2,
9721   x_msg_count          OUT NOCOPY NUMBER,
9722   x_msg_data           OUT NOCOPY VARCHAR2,
9723   p_duplicate_line_rec IN         transaction_line_rec_type
9724  )  IS
9725   l_api_name                  CONSTANT  VARCHAR2(30) := 'INSERT_LINE_DET_FACTORS';
9726   l_api_version               CONSTANT  NUMBER := 1.0;
9727   l_return_status             VARCHAR2(1);
9728   l_event_class_rec           event_class_rec_type;
9729   l_line_det_rec              ZX_LINES_DET_FACTORS%rowtype;
9730   l_line_exists               NUMBER;
9731   l_record_exists             BOOLEAN;
9732   l_init_msg_list             VARCHAR2(1);
9733   l_tax_classification_code   VARCHAR2(50);
9734   l_do_defaulting             BOOLEAN;
9735   l_upg_trx_info_rec          ZX_ON_FLY_TRX_UPGRADE_PKG.zx_upg_trx_info_rec_type;
9736  BEGIN
9737    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9738      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'1()+');
9739    END IF;
9740 
9741   /*--------------------------------------------------+
9742    |   Standard start of API savepoint                |
9743    +--------------------------------------------------*/
9744    SAVEPOINT Insert_Line_Det_Factors_PVT;
9745 
9746    /*--------------------------------------------------+
9747     |   Standard call to check for call compatibility  |
9748     +--------------------------------------------------*/
9749     IF NOT FND_API.Compatible_API_Call(l_api_version,
9750                                        p_api_version,
9751                                        l_api_name,
9752                                        G_PKG_NAME
9753                                        ) THEN
9754        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9755     END IF;
9756 
9757    /*--------------------------------------------------------------+
9758     |   Initialize message list if p_init_msg_list is set to TRUE  |
9759     +--------------------------------------------------------------*/
9760     IF p_init_msg_list is null THEN
9761        l_init_msg_list := FND_API.G_FALSE;
9762     ELSE
9763        l_init_msg_list := p_init_msg_list;
9764     END IF;
9765 
9766     IF FND_API.to_Boolean(l_init_msg_list) THEN
9767        FND_MSG_PUB.initialize;
9768     END IF;
9769 
9770    /*-----------------------------------------+
9771     |   Initialize return status to SUCCESS   |
9772     +-----------------------------------------*/
9773     x_return_status := FND_API.G_RET_STS_SUCCESS;
9774 
9775    /*-----------------------------------------+
9776     |   Populate Global Variable              |
9777     +-----------------------------------------*/
9778     G_PUB_SRVC := l_api_name;
9779     G_PUB_CALLING_SRVC := l_api_name;
9780     G_DATA_TRANSFER_MODE := 'PLS';
9781     G_EXTERNAL_API_CALL  := 'N';
9782 
9783    /*-----------------------------------------+
9784     |Populate the event class record structure|
9785     +-----------------------------------------*/
9786    l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.INTERNAL_ORGANIZATION_ID(1);
9787    l_event_class_rec.LEGAL_ENTITY_ID              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEGAL_ENTITY_ID(1);
9788    l_event_class_rec.LEDGER_ID                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEDGER_ID(1);
9789    l_event_class_rec.APPLICATION_ID               :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.APPLICATION_ID(1);
9790    l_event_class_rec.ENTITY_CODE                  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ENTITY_CODE(1);
9791    l_event_class_rec.EVENT_CLASS_CODE             :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_CLASS_CODE(1);
9792    l_event_class_rec.EVENT_TYPE_CODE              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_TYPE_CODE(1);
9793    l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CTRL_TOTAL_HDR_TX_AMT(1);
9794    l_event_class_rec.TRX_ID                       :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_ID(1);
9795    l_event_class_rec.TRX_DATE                     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_DATE(1);
9796    l_event_class_rec.REL_DOC_DATE                 :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RELATED_DOC_DATE(1);
9797    l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PROVNL_TAX_DETERMINATION_DATE(1);
9798    l_event_class_rec.TRX_CURRENCY_CODE            :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_CURRENCY_CODE(1);
9799    l_event_class_rec.PRECISION                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PRECISION(1);
9800    l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_TYPE(1);
9804    l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_FROM_PARTY_ID(1);
9801    l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_RATE(1);
9802    l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_DATE(1);
9803    l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_TO_PARTY_ID(1);
9805    l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_TO_PARTY_ID(1);
9806    l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_FROM_PARTY_ID(1);
9807    l_event_class_rec.RNDG_SHIP_TO_PARTY_SITE_ID   :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_SHIP_TO_PARTY_SITE_ID(1);
9808    l_event_class_rec.RNDG_SHIP_FROM_PARTY_SITE_ID :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_SHIP_FROM_PARTY_SITE_ID(1);
9809    l_event_class_rec.RNDG_BILL_TO_PARTY_SITE_ID   :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_BILL_TO_PARTY_SITE_ID(1);
9810    l_event_class_rec.RNDG_BILL_FROM_PARTY_SITE_ID :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_BILL_FROM_PARTY_SITE_ID(1);
9811 
9812    --Check if need to upgrade
9813    l_record_exists := FALSE;
9814    IF l_event_class_rec.event_type_code = 'INV_UPDATE' THEN
9815       FOR l_line_det_rec in lock_line_det_factors_for_doc(l_event_class_rec)
9816       LOOP
9817         l_record_exists := TRUE;
9818         l_event_class_rec.event_id := l_line_det_rec.event_id;
9819         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.default_taxation_country(1) := l_line_det_rec.default_taxation_country;
9820         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.document_sub_type(1)        := l_line_det_rec.document_sub_type;
9821         EXIT;
9822       END LOOP;
9823       IF NOT(l_record_exists) THEN
9824         --Bugfix 4486946 -Call on the fly upgrade if the transaction if not found
9825         l_upg_trx_info_rec.application_id   := l_event_class_rec.application_id;
9826         l_upg_trx_info_rec.entity_code      := l_event_class_rec.entity_code;
9827         l_upg_trx_info_rec.event_class_code := l_event_class_rec.event_class_code;
9828         l_upg_trx_info_rec.trx_id           := l_event_class_rec.trx_id;
9829         ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(p_upg_trx_info_rec   =>  l_upg_trx_info_rec,
9830                                                      x_return_status      =>  l_return_status
9831                                                     );
9832         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9833           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9834             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly returned errors');
9835           END IF;
9836           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9837             RAISE FND_API.G_EXC_ERROR;
9838           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9839             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9840           END IF;
9841         END IF;
9842         FOR l_line_det_rec in lock_line_det_factors_for_doc(l_event_class_rec)
9843         LOOP
9844           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9845              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
9846                'Lock the document so that no updates can happen for transaction :' || to_char(l_event_class_rec.trx_id));
9847           END IF;
9848           l_record_exists := TRUE;
9849           l_event_class_rec.event_id := l_line_det_rec.event_id;
9850           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.default_taxation_country(1) := l_line_det_rec.default_taxation_country;
9851           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.document_sub_type(1)        := l_line_det_rec.document_sub_type;
9852           EXIT;
9853         END LOOP;
9854       END IF; --record does not exist so upgrade
9855     --Bugfix 4486946 - on-the-fly upgrade end
9856    END IF;    --event_type_code
9857 
9858    IF NOT(l_record_exists) THEN
9859      SELECT ZX_LINES_DET_FACTORS_S.nextval
9860        INTO l_event_class_rec.event_id
9861        FROM dual;
9862    END IF;
9863 
9864    IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9865       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
9866             'application_id: '||to_char(l_event_class_rec.application_id)||
9867              ', entity_code: '||l_event_class_rec.entity_code||
9868              ', event_class_code: '||l_event_class_rec.event_class_code||
9869              ', event_type_code: '||l_event_class_rec.event_type_code||
9870              ', trx_id: '||to_char(l_event_class_rec.trx_id)||
9871              ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
9872              ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
9873              ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
9874              ', trx_date: '||to_char(l_event_class_rec.trx_date)||
9875              ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
9876              ', provnl_tax_determination_date: '||to_char(l_event_class_rec.provnl_tax_determination_date)||
9877              ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
9878              ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
9879              ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
9880              ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
9881              ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
9882              ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
9883              ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
9887              ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
9884              ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
9885              ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
9886              ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
9888              ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id)
9889             );
9890    END IF;
9891 
9892    -- Bug 5676960: Set a flag to indicate if currency information passed at header/line
9893    IF l_event_class_rec.trx_currency_code is not null AND
9894       l_event_class_rec.precision is not null THEN
9895       l_event_class_rec.header_level_currency_flag := 'Y';
9896    END IF;
9897 
9898    /*------------------------------------------------------+
9899    |   Validate and Initializate parameters for Inserting |
9900    |   into line_det_factors                              |
9901    +------------------------------------------------------*/
9902    ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors(p_event_class_rec =>l_event_class_rec,
9903                                                     p_trx_line_index  => 1,
9904                                                     x_return_status   =>l_return_status
9905                                                     );
9906 
9907    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9908      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9909        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors returned errors');
9910      END IF;
9911      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9912        RAISE FND_API.G_EXC_ERROR;
9913      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9914        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9915      END IF;
9916    END IF;
9917 
9918 -- Fix for Bug 5038953
9919    ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TAX_EVENT_CLASS_CODE(1) := l_event_class_rec.TAX_EVENT_CLASS_CODE;
9920 -- End fix for Bug 5038953
9921 
9922  /* ==============================================*
9923    |Determine if we need to default the parameters|
9924    * ============================================*/
9925    l_do_defaulting := ZX_SRVC_TYP_PKG.decide_call_redefault_APIs (p_trx_line_index  => 1);
9926 
9927    IF l_do_defaulting THEN
9928    /*If the Duplicate Source Document Line identifiers are passed, then derive the values
9929      of the tax determining factors from ZX_LINES_DET_FACTORS for the duplicate source document line.*/
9930      IF p_duplicate_line_rec.application_id is not null THEN
9931        --Default determining factors from Duplicated Line
9932        SELECT
9933             default_taxation_country,
9934         document_sub_type,
9935       trx_business_category,
9936       line_intended_use,
9937       user_defined_fisc_class,
9938       product_fisc_classification,
9939       product_category,
9940       assessable_value,
9941             product_type,
9942             decode(l_event_class_rec.prod_family_grp_code,'P2P',input_tax_classification_code,
9943                                                           'O2C',output_tax_classification_code)
9944        INTO
9945             ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.default_taxation_country(1),
9946             ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.document_sub_type(1),
9947             ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_business_category(1),
9948       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_intended_use(1),
9949       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.user_defined_fisc_class(1),
9950       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.product_fisc_classification(1),
9951       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.product_category(1),
9952       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.assessable_value(1),
9953       ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.product_type(1),
9954             l_tax_classification_code
9955        FROM ZX_LINES_DET_FACTORS
9956        WHERE application_id   = p_duplicate_line_rec.application_id
9957          AND entity_code      = p_duplicate_line_rec.entity_code
9958          AND event_class_code = p_duplicate_line_rec.event_class_code
9959          AND trx_id           = p_duplicate_line_rec.trx_id
9960          AND trx_line_id      = p_duplicate_line_rec.trx_line_id
9961          AND trx_level_type   = p_duplicate_line_rec.trx_level_type;
9962 
9963        --AR always passes the tax classification code so do not override the passed value
9964        IF l_event_class_rec.prod_family_grp_code = 'P2P' THEN
9965            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.input_tax_classification_code(1) := l_tax_classification_code;
9966        ELSIF l_event_class_rec.prod_family_grp_code = 'O2C' AND
9967            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.output_tax_classification_code is null THEN
9968            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.output_tax_classification_code(1) := l_tax_classification_code;
9969        END IF;
9970      /*If  the applied from, adjusted, source document information is passed with
9971        the transaction line, then derive the values tax determining factors from
9972        ZX_LINES_DET_FACTORS or call TDS defaulting API*/
9973      ELSE ZX_SRVC_TYP_PKG.default_tax_attrs_wrapper (p_trx_line_index  => 1,
9974                                                      p_event_class_rec => l_event_class_rec,
9975                                                      x_return_status   => l_return_status
9976                                                     );
9977         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9978           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9979             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.default_tax_attrs_wrapper returned errors');
9980           END IF;
9981           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9982             RAISE FND_API.G_EXC_ERROR;
9983           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9984             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9985           END IF;
9986         END IF;
9987      END IF; --duplicate check
9988    END IF; --l_do_defaulting
9989 
9990 
9991    /*------------------------------------------+
9992    |Call to insert the lines                   |
9993    +------------------------------------------*/
9994    ZX_SRVC_TYP_PKG.insupd_line_det_factors(p_event_class_rec  => l_event_class_rec,
9995                                            x_return_status    => l_return_status
9996                                           );
9997 
9998    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9999      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10000        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.insupd_line_det_factors returned errors');
10001      END IF;
10002      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10003        RAISE FND_API.G_EXC_ERROR;
10004      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10005        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10006      END IF;
10007    END IF;
10008 
10009    --Delete from the global structures so that there are no hanging/redundant
10010    --records sitting there
10011    ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
10012 
10013    --Reset G_PUB_CALLING_SRVC at end of API
10014    ZX_API_PUB.G_PUB_CALLING_SRVC := null;
10015 
10016    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10017       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
10018    END IF;
10019 
10020    EXCEPTION
10021         WHEN FND_API.G_EXC_ERROR THEN
10022           ROLLBACK TO Insert_Line_Det_Factors_PVT;
10023           x_return_status := FND_API.G_RET_STS_ERROR ;
10024           DUMP_MSG;
10025          /*---------------------------------------------------------+
10026           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
10027           | in the message stack. If there is only one message in   |
10028           | the stack it retrieves this message                     |
10029           +---------------------------------------------------------*/
10030           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
10031                                     p_count   => x_msg_count,
10035            IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
10032                                     p_data    => x_msg_data
10033                                     );
10034 
10036              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
10037            END IF;
10038 
10039         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10040           ROLLBACK TO Insert_Line_Det_Factors_PVT;
10041           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
10042           DUMP_MSG;
10043           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
10044           FND_MSG_PUB.Add;
10045          /*---------------------------------------------------------+
10046           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
10047           | in the message stack. If there is only one message in   |
10048           | the stack it retrieves this message                     |
10049           +---------------------------------------------------------*/
10050           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
10051                                     p_count   => x_msg_count,
10052                                     p_data    => x_msg_data
10053                                     );
10054           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
10055             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
10056           END IF;
10057 
10058         WHEN OTHERS THEN
10059            ROLLBACK TO Insert_Line_Det_Factors_PVT;
10060            IF (SQLCODE = 54) THEN
10061              x_return_status := FND_API.G_RET_STS_ERROR ;
10062              FND_MESSAGE.SET_NAME('ZX','ZX_RESOURCE_BUSY');
10063            ELSE
10064               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
10065               FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
10066            END IF;
10067            FND_MSG_PUB.Add;
10068          /*---------------------------------------------------------+
10069           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
10070           | in the message stack. If there is only one message in   |
10071           | the stack it retrieves this message                     |
10072           +---------------------------------------------------------*/
10073            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
10074                                      p_count   => x_msg_count,
10075                                      p_data    => x_msg_data
10076                                      );
10077 
10078            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
10079               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
10080            END IF;
10081    END insert_line_det_factors;
10082 
10083  /* ============================================================================*
10084  | PROCEDURE  insert_line_det_factors : This overloaded procedure will be called|
10085  | by iProcurement to insert all the transaction lines with defaulted tax       |
10086  | determining attributes into zx_lines_det_factors after complying with the    |
10087  | validation process                                                           |
10088  * ============================================================================*/
10089 PROCEDURE insert_line_det_factors (
10090   p_api_version        IN         NUMBER,
10091   p_init_msg_list      IN         VARCHAR2,
10092   p_commit             IN         VARCHAR2,
10093   p_validation_level   IN         NUMBER,
10094   x_return_status      OUT NOCOPY VARCHAR2,
10095   x_msg_count          OUT NOCOPY NUMBER,
10096   x_msg_data           OUT NOCOPY VARCHAR2
10097  )  IS
10098   l_api_name          CONSTANT  VARCHAR2(30) := 'INSERT_LINE_DET_FACTORS';
10099   l_api_version       CONSTANT  NUMBER := 1.0;
10100   l_return_status     VARCHAR2(1);
10101   l_event_class_rec   event_class_rec_type;
10102   l_line_det_rec      ZX_LINES_DET_FACTORS%rowtype;
10103   l_line_exists       NUMBER;
10104   l_record_exists     BOOLEAN;
10105   l_init_msg_list     VARCHAR2(1);
10106   l_upg_trx_info_rec  ZX_ON_FLY_TRX_UPGRADE_PKG.zx_upg_trx_info_rec_type;
10107 
10108  BEGIN
10109    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10110      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'2()+');
10111    END IF;
10112 
10113   /*--------------------------------------------------+
10114    |   Standard start of API savepoint                |
10115    +--------------------------------------------------*/
10116    SAVEPOINT Insert_Line_Det_Factors_PVT;
10117 
10118    /*--------------------------------------------------+
10119     |   Standard call to check for call compatibility  |
10120     +--------------------------------------------------*/
10121     IF NOT FND_API.Compatible_API_Call(l_api_version,
10122                                        p_api_version,
10123                                        l_api_name,
10124                                        G_PKG_NAME
10125                                        ) THEN
10126        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10127      END IF;
10128 
10129    /*--------------------------------------------------------------+
10130     |   Initialize message list if p_init_msg_list is set to TRUE  |
10131     +--------------------------------------------------------------*/
10132     IF p_init_msg_list is null THEN
10133        l_init_msg_list := FND_API.G_FALSE;
10134     ELSE
10135        l_init_msg_list := p_init_msg_list;
10136     END IF;
10137 
10138     IF FND_API.to_Boolean(l_init_msg_list) THEN
10139        FND_MSG_PUB.initialize;
10140     END IF;
10141 
10142    /*-----------------------------------------+
10143     |   Initialize return status to SUCCESS   |
10144     +-----------------------------------------*/
10145     x_return_status := FND_API.G_RET_STS_SUCCESS;
10146 
10147    /*-----------------------------------------+
10148     |   Populate Global Variable              |
10149     +-----------------------------------------*/
10150     G_PUB_SRVC := l_api_name;
10151     G_DATA_TRANSFER_MODE := 'PLS';
10152     G_EXTERNAL_API_CALL  := 'N';
10153 
10154 
10155    /*-----------------------------------------+
10156     |Populate the event class record structure|
10157     +-----------------------------------------*/
10158     l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.INTERNAL_ORGANIZATION_ID(1);
10159     l_event_class_rec.LEGAL_ENTITY_ID              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEGAL_ENTITY_ID(1);
10160     l_event_class_rec.LEDGER_ID                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEDGER_ID(1);
10161     l_event_class_rec.APPLICATION_ID               :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.APPLICATION_ID(1);
10162     l_event_class_rec.ENTITY_CODE                  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ENTITY_CODE(1);
10163     l_event_class_rec.EVENT_CLASS_CODE             :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_CLASS_CODE(1);
10164     l_event_class_rec.EVENT_TYPE_CODE              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_TYPE_CODE(1);
10165     l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CTRL_TOTAL_HDR_TX_AMT(1);
10166     l_event_class_rec.TRX_ID                       :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_ID(1);
10167     l_event_class_rec.TRX_DATE                     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_DATE(1);
10168     l_event_class_rec.REL_DOC_DATE                 :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RELATED_DOC_DATE(1);
10169     l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PROVNL_TAX_DETERMINATION_DATE(1);
10170     l_event_class_rec.TRX_CURRENCY_CODE            :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_CURRENCY_CODE(1);
10171     l_event_class_rec.PRECISION                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PRECISION(1);
10172     l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_TYPE(1);
10173     l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_RATE(1);
10174     l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_DATE(1);
10175     l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_TO_PARTY_ID(1);
10176     l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_FROM_PARTY_ID(1);
10177     l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_TO_PARTY_ID(1);
10178     l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_FROM_PARTY_ID(1);
10179     l_event_class_rec.RNDG_SHIP_TO_PARTY_SITE_ID   :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_SHIP_TO_PARTY_SITE_ID(1);
10180     l_event_class_rec.RNDG_SHIP_FROM_PARTY_SITE_ID :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_SHIP_FROM_PARTY_SITE_ID(1);
10181     l_event_class_rec.RNDG_BILL_TO_PARTY_SITE_ID   :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_BILL_TO_PARTY_SITE_ID(1);
10182     l_event_class_rec.RNDG_BILL_FROM_PARTY_SITE_ID :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_BILL_FROM_PARTY_SITE_ID(1);
10183 
10184     --Check if need to upgrade
10185     l_record_exists := FALSE;
10186     IF l_event_class_rec.event_type_code = 'INV_UPDATE' THEN
10187       FOR l_line_det_rec in lock_line_det_factors_for_doc(l_event_class_rec)
10188       LOOP
10189         l_record_exists := TRUE;
10190         l_event_class_rec.event_id := l_line_det_rec.event_id;
10191         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.default_taxation_country(1) := l_line_det_rec.default_taxation_country;
10192         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.document_sub_type(1)        := l_line_det_rec.document_sub_type;
10193         EXIT;
10194       END LOOP;
10195       IF NOT(l_record_exists) THEN
10196         --Bugfix 4486946 -Call on the fly upgrade if the transaction if not found
10197         l_upg_trx_info_rec.application_id   := l_event_class_rec.application_id;
10198         l_upg_trx_info_rec.entity_code      := l_event_class_rec.entity_code;
10199         l_upg_trx_info_rec.event_class_code := l_event_class_rec.event_class_code;
10200         l_upg_trx_info_rec.trx_id           := l_event_class_rec.trx_id;
10201         ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(p_upg_trx_info_rec   =>  l_upg_trx_info_rec,
10202                                                      x_return_status      =>  l_return_status
10203                                                     );
10204         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10205           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10206             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly returned errors');
10207           END IF;
10208           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10209             RAISE FND_API.G_EXC_ERROR;
10210           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10211             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10212           END IF;
10213         END IF;
10214         FOR l_line_det_rec in lock_line_det_factors_for_doc(l_event_class_rec)
10215         LOOP
10216           l_record_exists := TRUE;
10217           l_event_class_rec.event_id := l_line_det_rec.event_id;
10218           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.default_taxation_country(1) := l_line_det_rec.default_taxation_country;
10219           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.document_sub_type(1)        := l_line_det_rec.document_sub_type;
10220           EXIT;
10221         END LOOP;
10222       END IF; --record does not exist so upgrade
10223     --Bugfix 4486946 - on-the-fly upgrade end
10224     END IF;    --event_type_code
10225 
10226    /*------------------------------------------------------------------------------------------+
10227     | Set the event id for the whole document- Since this API is called for each transaction   |
10228     | line, the event id needs to be generated from the sequence only for the first transaction|
10229     | line. For other lines, we need to retrieve the event id from the table.                  |
10230     +-----------------------------------------------------------------------------------------*/
10231     IF NOT(l_record_exists) THEN
10232       SELECT ZX_LINES_DET_FACTORS_S.nextval
10233        INTO l_event_class_rec.event_id
10234        FROM dual;
10235     END IF;
10236 
10237     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10238       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,
10239             'application_id: '||to_char(l_event_class_rec.application_id)||
10240              ', entity_code: '||l_event_class_rec.entity_code||
10241              ', event_class_code: '||l_event_class_rec.event_class_code||
10242              ', event_type_code: '||l_event_class_rec.event_type_code||
10243              ', trx_id: '||to_char(l_event_class_rec.trx_id)||
10244              ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
10245              ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
10246              ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
10247              ', trx_date: '||to_char(l_event_class_rec.trx_date)||
10248              ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
10249              ', provnl_tax_determination_date: '||to_char(l_event_class_rec.provnl_tax_determination_date)||
10250              ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
10251              ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
10252              ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
10253              ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
10254              ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
10255              ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
10256              ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
10257              ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
10258              ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
10259              ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
10260              ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
10261              ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id)
10262             );
10263     END IF;
10264 
10265     /*------------------------------------------------------+
10266     |   Validate and Initializate parameters for Inserting |
10267     |   into line_det_factors                              |
10268     +------------------------------------------------------*/
10269     ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors(p_event_class_rec =>l_event_class_rec,
10270                                                      p_trx_line_index  =>1,
10271                                                      x_return_status   =>l_return_status
10272                                                     );
10273 
10274     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10275       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10276         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors returned errors');
10277       END IF;
10278       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10279         RAISE FND_API.G_EXC_ERROR;
10280       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10281         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10282       END IF;
10283     END IF;
10284 
10285     /*------------------------------------------+
10286     |Call to insert the lines                   |
10287     +------------------------------------------*/
10288     ZX_SRVC_TYP_PKG.insupd_line_det_factors(p_event_class_rec  => l_event_class_rec,
10289                                             x_return_status    => l_return_status
10290                                            );
10291 
10292     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10293       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10294         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_SRVC_TYP_PKG.insupd_line_det_factors returned errors');
10295       END IF;
10296       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10297         RAISE FND_API.G_EXC_ERROR;
10298       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10299         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10300       END IF;
10301     END IF;
10302 
10303     --Delete from the global structures so that there are no hanging/redundant
10304     --records sitting there
10305     ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
10306 
10307     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10308       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
10309     END IF;
10310 
10311     EXCEPTION
10312         WHEN FND_API.G_EXC_ERROR THEN
10313           ROLLBACK TO Insert_Line_Det_Factors_PVT;
10314           x_return_status := FND_API.G_RET_STS_ERROR ;
10315           DUMP_MSG;
10316          /*---------------------------------------------------------+
10317           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
10318           | in the message stack. If there is only one message in   |
10319           | the stack it retrieves this message                     |
10320           +---------------------------------------------------------*/
10321           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
10322                                     p_count   => x_msg_count,
10323                                     p_data    => x_msg_data
10324                                     );
10325 
10326            IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
10327              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
10328            END IF;
10329 
10330         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10331           ROLLBACK TO Insert_Line_Det_Factors_PVT;
10332           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
10333           DUMP_MSG;
10334           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
10335           FND_MSG_PUB.Add;
10336          /*---------------------------------------------------------+
10337           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
10338           | in the message stack. If there is only one message in   |
10339           | the stack it retrieves this message                     |
10340           +---------------------------------------------------------*/
10341           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
10342                                     p_count   => x_msg_count,
10343                                     p_data    => x_msg_data
10344                                     );
10345           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
10346             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
10347           END IF;
10348 
10349         WHEN OTHERS THEN
10350           /*-------------------------------------------------------+
10351            |  Handle application errors that result from trapable  |
10352            |  error conditions. The error messages have already    |
10353            |  been put on the error stack.                         |
10354            +-------------------------------------------------------*/
10355            ROLLBACK TO Insert_Line_Det_Factors_PVT;
10356            IF (SQLCODE = 54) THEN
10357              x_return_status := FND_API.G_RET_STS_ERROR ;
10358              FND_MESSAGE.SET_NAME('ZX','ZX_RESOURCE_BUSY');
10359            ELSE
10360               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
10361               FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
10362            END IF;
10363            FND_MSG_PUB.Add;
10364          /*---------------------------------------------------------+
10365           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
10366           | in the message stack. If there is only one message in   |
10367           | the stack it retrieves this message                     |
10368           +---------------------------------------------------------*/
10369            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
10370                                      p_count   => x_msg_count,
10371                                      p_data    => x_msg_data
10372                                      );
10373 
10374            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
10375               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
10376            END IF;
10377   END insert_line_det_factors;
10378 
10379 
10380 /* ========================================================================*
10381  | PROCEDURE  update_det_factors_hdr: This procedure should be called by   |
10382  | products when updating any of the header attributes on the transaction  |
10383  | so that the tax repository is also in sync with the header level updates|
10384  |                                                                         |
10385  | NOTES: Products will pass intended nullable values as null while they   |
10386  | will pass G_MISS_NUM/G_MISS_DATE/G_MISS_CHAR for the attributes where   |
10387  | intention is to retain the original values as stored in tax repository  |
10388  * =======================================================================*/
10389 
10390  PROCEDURE update_det_factors_hdr
10391  (
10392   p_api_version         IN  NUMBER,
10393   p_init_msg_list       IN  VARCHAR2,
10394   p_commit              IN  VARCHAR2,
10395   p_validation_level    IN  NUMBER,
10396   x_return_status       OUT NOCOPY VARCHAR2,
10397   x_msg_count           OUT NOCOPY NUMBER,
10398   x_msg_data            OUT NOCOPY VARCHAR2,
10399   p_hdr_det_factors_rec IN  header_det_factors_rec_type
10400  )IS
10401   l_api_name                   CONSTANT  VARCHAR2(30) := 'UPDATE_DET_FACTORS_HDR';
10402   l_api_version                CONSTANT  NUMBER := 1.0;
10403   l_return_status              VARCHAR2(1);
10404   l_event_class_rec            event_class_rec_type;
10405   l_init_msg_list              VARCHAR2(1);
10406   l_rdng_ship_to_ptp_id        NUMBER;
10407   l_rdng_bill_to_ptp_id        NUMBER;
10408   l_rdng_ship_from_ptp_id      NUMBER;
10409   l_rdng_bill_from_ptp_id      NUMBER;
10410   l_rdng_bill_to_ptp_st_id     NUMBER;
10411   l_rdng_bill_from_ptp_st_id   NUMBER;
10412   l_rdng_ship_to_ptp_st_id     NUMBER;
10413   l_rdng_ship_from_ptp_st_id   NUMBER;
10414   l_ship_to_ptp_id             NUMBER;
10415   l_ship_from_ptp_id           NUMBER;
10416   l_bill_to_ptp_id             NUMBER;
10417   l_bill_from_ptp_id           NUMBER;
10418   l_ship_to_ptp_site_id        NUMBER;
10419   l_ship_from_ptp_site_id      NUMBER;
10420   l_bill_to_ptp_site_id        NUMBER;
10421   l_bill_from_ptp_site_id      NUMBER;
10422   l_poa_ptp_id                 NUMBER;
10423   l_poo_ptp_id                 NUMBER;
10424   l_poo_ptp_site_id            NUMBER;
10425   l_poa_ptp_site_id            NUMBER;
10426   l_hq_estb_ptp_id             NUMBER;
10427   l_party_type                 VARCHAR2(30);
10428   l_transaction_rec            transaction_rec_type;
10429   l_upg_trx_info_rec           ZX_ON_FLY_TRX_UPGRADE_PKG.zx_upg_trx_info_rec_type;
10430   l_incomplete_scenario        number;
10431 
10432  BEGIN
10433    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10434      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
10435    END IF;
10436 
10437   /*--------------------------------------------------+
10438    |   Standard start of API savepoint                |
10439    +--------------------------------------------------*/
10440    SAVEPOINT Update_Det_Factors_Hdr_PVT;
10441 
10442    /*--------------------------------------------------+
10443     |   Standard call to check for call compatibility  |
10444     +--------------------------------------------------*/
10445     IF NOT FND_API.Compatible_API_Call(l_api_version,
10446                                        p_api_version,
10447                                        l_api_name,
10448                                        G_PKG_NAME
10449                                        ) THEN
10450        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10451     END IF;
10452 
10453    /*--------------------------------------------------------------+
10454     |   Initialize message list if p_init_msg_list is set to TRUE  |
10455     +--------------------------------------------------------------*/
10456     IF p_init_msg_list is null THEN
10457        l_init_msg_list := FND_API.G_FALSE;
10458     ELSE
10459        l_init_msg_list := p_init_msg_list;
10460     END IF;
10461 
10462     IF FND_API.to_Boolean(l_init_msg_list) THEN
10463        FND_MSG_PUB.initialize;
10464     END IF;
10465 
10466    /*-----------------------------------------+
10467     |   Initialize return status to SUCCESS   |
10468     +-----------------------------------------*/
10469     x_return_status := FND_API.G_RET_STS_SUCCESS;
10470 
10471    /*-----------------------------------------+
10472     |   Populate Global Variable              |
10473     +-----------------------------------------*/
10474     G_PUB_SRVC := 'UPDATE_DET_FACTORS_HDR';
10475     G_DATA_TRANSFER_MODE := 'PLS';
10476     G_EXTERNAL_API_CALL  := 'N';
10477     /*
10478     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10479        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Passed in data: APPLICATION_ID: '||to_char(p_hdr_det_factors_rec.application_id)||
10480               ', ENTITY_CODE: '||p_hdr_det_factors_rec.entity_code||
10481               ', EVENT_CLASS_CODE: '||p_hdr_det_factors_rec.event_class_code||
10485         ', INTERNAL_ORG_LOCATION_ID : '|| to_char(p_hdr_det_factors_rec.internal_org_location_id)||
10482         ', EVENT_TYPE_CODE: '||p_hdr_det_factors_rec.event_type_code||
10483               ', TRX_ID: '||to_char(p_hdr_det_factors_rec.trx_id)||
10484               ', INTERNAL_ORGANIZATION_ID: '|| to_char(p_hdr_det_factors_rec.internal_organization_id)||
10486         ', LEGAL_ENTITY_ID :'||to_char(p_hdr_det_factors_rec.legal_entity_id)||
10487               ', LEDGER_ID :' ||to_char(p_hdr_det_factors_rec.ledger_id)||
10488               ', TRX_DATE :' ||to_char(p_hdr_det_factors_rec.trx_date)||
10489               ', TRX_DOC_REVISION :' ||p_hdr_det_factors_rec.trx_doc_revision||
10490               ', TRX_CURRENCY_CODE :' ||p_hdr_det_factors_rec.trx_currency_code ||
10491               ', CURRENCY_CONVERSION_TYPE  :' ||p_hdr_det_factors_rec.currency_conversion_type ||
10492               ', CURRENCY_CONVERSION_RATE :' ||to_char(p_hdr_det_factors_rec.currency_conversion_rate) ||
10493               ', CURRENCY_CONVERSION_DATE :' ||to_char(p_hdr_det_factors_rec.currency_conversion_date) ||
10494               ', MINIMUM_ACCOUNTABLE_UNIT: ' ||to_char(p_hdr_det_factors_rec.minimum_accountable_unit)||
10495               ', PRECISION:' ||to_char(p_hdr_det_factors_rec.precision) ||
10496               ', ROUNDING_SHIP_TO_PARTY_ID : '||to_char(p_hdr_det_factors_rec.rounding_ship_to_party_id)||
10497               ', ROUNDING_SHIP_FROM_PARTY_ID: '||to_char(p_hdr_det_factors_rec.rounding_ship_from_party_id)||
10498               ', ROUNDING_BILL_TO_PARTY_ID: '||to_char(p_hdr_det_factors_rec.rounding_bill_to_party_id)||
10499               ', ROUNDING_BILL_FROM_PARTY_ID :'||to_char(p_hdr_det_factors_rec.rounding_bill_from_party_id)||
10500               ', RNDG_SHIP_TO_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.rndg_ship_to_party_site_id)||
10501               ', RNDG_SHIP_FROM_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.rndg_ship_from_party_site_id)||
10502               ', RNDG_BILL_TO_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.rndg_bill_to_party_site_id)||
10503               ', RNDG_BILL_FROM_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.rndg_bill_from_party_site_id)||
10504               ', QUOTE_FLAG :'||p_hdr_det_factors_rec.quote_flag||
10505               ', ESTABLISHMENT_ID :'||to_char(p_hdr_det_factors_rec.establishment_id)||
10506               ', RECEIVABLES_TRX_TYPE_ID :'||to_char(p_hdr_det_factors_rec.receivables_trx_type_id)||
10507               ', RELATED_DOC_APPLICATION_ID :'||to_char(p_hdr_det_factors_rec.related_doc_application_id)||
10508               ', RELATED_DOC_ENTITY_CODE :'||p_hdr_det_factors_rec.related_doc_entity_code||
10509               ', RELATED_DOC_EVENT_CLASS_CODE :'||p_hdr_det_factors_rec.related_doc_event_class_code||
10510               ', RELATED_DOC_TRX_ID :'||to_char(p_hdr_det_factors_rec.related_doc_trx_id)||
10511               ', RELATED_DOC_NUMBER :'||to_char(p_hdr_det_factors_rec.related_doc_number)||
10512               ', RELATED_DOC_DATE :'||to_char(p_hdr_det_factors_rec.related_doc_date)||
10513               ', DEFAULT_TAXATION_COUNTRY :'||p_hdr_det_factors_rec.default_taxation_country||
10514               ', CTRL_TOTAL_HDR_TX_AMT :'||to_char(p_hdr_det_factors_rec.ctrl_total_hdr_tx_amt)||
10515               ', TRX_NUMBER :'||p_hdr_det_factors_rec.trx_number||
10516               ', TRX_DESCRIPTION :'||p_hdr_det_factors_rec.trx_description||
10517               ', TRX_COMMUNICATED_DATE :'||to_char(p_hdr_det_factors_rec.trx_communicated_date)||
10518               ', BATCH_SOURCE_ID :'||to_char(p_hdr_det_factors_rec.batch_source_id)||
10519               ', BATCH_SOURCE_NAME :'||p_hdr_det_factors_rec.batch_source_name||
10520               ', DOC_SEQ_ID :'||to_char(p_hdr_det_factors_rec.doc_seq_id)||
10521               ', DOC_SEQ_NAME :'||p_hdr_det_factors_rec.doc_seq_id||
10522               ', DOC_SEQ_VALUE :'||p_hdr_det_factors_rec.doc_seq_value||
10523               ', TRX_DUE_DATE :'||to_char(p_hdr_det_factors_rec.trx_due_date)||
10524               ', TRX_TYPE_DESCRIPTION :'||p_hdr_det_factors_rec.trx_type_description
10525               );
10526     END IF;
10527     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10528        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
10529               ', DOCUMENT_SUB_TYPE :'||p_hdr_det_factors_rec.document_sub_type||
10530               ', SUPPLIER_TAX_INVOICE_NUMBER :'||p_hdr_det_factors_rec.supplier_tax_invoice_number||
10531               ', SUPPLIER_TAX_INVOICE_DATE :'||to_char(p_hdr_det_factors_rec.supplier_tax_invoice_date)||
10532               ', SUPPLIER_EXCHANGE_RATE :'||to_char(p_hdr_det_factors_rec.supplier_exchange_rate)||
10533               ', TAX_INVOICE_DATE :'||to_char(p_hdr_det_factors_rec.tax_invoice_date)||
10534               ', TAX_INVOICE_NUMBER :'||p_hdr_det_factors_rec.tax_invoice_date||
10535               ', FIRST_PTY_ORG_ID :'||to_char(p_hdr_det_factors_rec.first_pty_org_id)||
10536               ', TAX_EVENT_CLASS_CODE :'||p_hdr_det_factors_rec.tax_event_class_code||
10537               ', TAX_EVENT_TYPE_CODE :'||p_hdr_det_factors_rec.tax_event_type_code||
10538               ', DOC_EVENT_STATUS :'||p_hdr_det_factors_rec.doc_event_status||
10539               ', PORT_OF_ENTRY_CODE :'||p_hdr_det_factors_rec.port_of_entry_code||
10540               ', TAX_REPORTING_FLAG :'||p_hdr_det_factors_rec.tax_reporting_flag||
10541               ', PROVNL_TAX_DETERMINATION_DATE :'||to_char(p_hdr_det_factors_rec.provnl_tax_determination_date)||
10542               ', SHIP_THIRD_PTY_ACCT_ID :'||to_char(p_hdr_det_factors_rec.ship_third_pty_acct_id)||
10543               ', BILL_THIRD_PTY_ACCT_ID :'||to_char(p_hdr_det_factors_rec.bill_third_pty_acct_id)||
10544               ', SHIP_THIRD_PTY_ACCT_SITE_ID :'||to_char(p_hdr_det_factors_rec.ship_third_pty_acct_site_id)||
10545               ', BILL_THIRD_PTY_ACCT_SITE_ID :'||to_char(p_hdr_det_factors_rec.bill_third_pty_acct_site_id)||
10546               ', SHIP_TO_CUST_ACCT_SITE_USE_ID :'||to_char(p_hdr_det_factors_rec.ship_to_cust_acct_site_use_id)||
10547               ', BILL_TO_CUST_ACCT_SITE_USE_ID :'||to_char(p_hdr_det_factors_rec.bill_to_cust_acct_site_use_id)||
10548               ', TRX_BATCH_ID :'||to_char(p_hdr_det_factors_rec.trx_batch_id)||
10549               ', APPLIED_TO_TRX_NUMBER :'||p_hdr_det_factors_rec.applied_to_trx_number||
10550               ', APPLICATION_DOC_STATUS :'||p_hdr_det_factors_rec.application_doc_status||
10551               ', SHIP_TO_PARTY_ID :'||to_char(p_hdr_det_factors_rec.ship_to_party_id)||
10552               ', SHIP_FROM_PARTY_ID :'||to_char(p_hdr_det_factors_rec.ship_from_party_id)||
10553               ', POA_PARTY_ID :'||to_char(p_hdr_det_factors_rec.poa_party_id)||
10554               ', POO_PARTY_ID :'||to_char(p_hdr_det_factors_rec.poo_party_id)||
10555               ', BILL_TO_PARTY_ID :'||to_char(p_hdr_det_factors_rec.bill_to_party_id)||
10556               ', BILL_FROM_PARTY_ID :'||to_char(p_hdr_det_factors_rec.bill_from_party_id)||
10557               ', MERCHANT_PARTY_ID :'||to_char(p_hdr_det_factors_rec.merchant_party_id)||
10558               ', SHIP_TO_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.ship_to_party_site_id)||
10559               ', SHIP_FROM_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.ship_from_party_site_id)||
10560               ', POA_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.poa_party_site_id)||
10561               ', POO_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.poo_party_site_id)||
10562               ', BILL_TO_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.bill_to_party_site_id)||
10563               ', BILL_FROM_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.bill_from_party_site_id)||
10564               ', SHIP_TO_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.ship_to_location_id)||
10565               ', SHIP_FROM_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.ship_from_location_id)||
10566               ', POA_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.poa_location_id)||
10567               ', POO_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.poo_location_id)||
10568               ', BILL_TO_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.bill_to_location_id)||
10569               ', BILL_FROM_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.bill_from_location_id)||
10570               ', PAYING_PARTY_ID :'||to_char(p_hdr_det_factors_rec.paying_party_id)||
10571               ', OWN_HQ_PARTY_ID :'||to_char(p_hdr_det_factors_rec.own_hq_party_id)||
10572               ', TRADING_HQ_PARTY_ID :'||to_char(p_hdr_det_factors_rec.trading_hq_party_id)||
10573               ', POI_PARTY_ID :'||to_char(p_hdr_det_factors_rec.poi_party_id)
10574               );
10575     END IF;
10576     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10577        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
10578               ', POD_PARTY_ID :'||to_char(p_hdr_det_factors_rec.pod_party_id)||
10579               ', TITLE_TRANSFER_PARTY_ID :'||to_char(p_hdr_det_factors_rec.title_transfer_party_id)||
10580               ', PAYING_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.paying_party_site_id)||
10581               ', OWN_HQ_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.own_hq_party_site_id)||
10582               ', TRADING_HQ_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.trading_hq_party_site_id)||
10583               ', POI_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.poi_party_site_id)||
10584               ', POD_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.pod_party_site_id)||
10585               ', TITLE_TRANSFER_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.title_transfer_party_site_id)||
10586               ', PAYING_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.paying_location_id)||
10587               ', OWN_HQ_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.own_hq_location_id)||
10588               ', TRADING_HQ_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.trading_hq_location_id)||
10589               ', POC_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.poc_location_id)||
10590               ', POI_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.poi_location_id)||
10591               ', POD_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.pod_location_id)||
10592               ', TITLE_TRANSFER_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.title_transfer_location_id)
10593               );
10594      END IF;
10595      */
10596    /*------------------------------------------------------+
10597     |   Populate the event class record structure          |
10598     +------------------------------------------------------*/
10599     l_event_class_rec.application_id               :=  p_hdr_det_factors_rec.application_id;
10600     l_event_class_rec.entity_code                  :=  p_hdr_det_factors_rec.entity_code;
10601     l_event_class_rec.event_class_code             :=  p_hdr_det_factors_rec.event_class_code;
10602     l_event_class_rec.event_type_code              :=  p_hdr_det_factors_rec.event_type_code;
10603     l_event_class_rec.trx_id                       :=  p_hdr_det_factors_rec.trx_id;
10604     l_event_class_rec.trx_date                     :=  p_hdr_det_factors_rec.trx_date;
10605     l_event_class_rec.internal_organization_id     :=  p_hdr_det_factors_rec.internal_organization_id;
10606     l_event_class_rec.legal_entity_id              :=  p_hdr_det_factors_rec.legal_entity_id;
10607     l_event_class_rec.rel_doc_date                 :=  p_hdr_det_factors_rec.related_doc_date;
10608     l_event_class_rec.trx_currency_code            :=  p_hdr_det_factors_rec.trx_currency_code;
10609     l_event_class_rec.precision                    :=  p_hdr_det_factors_rec.precision;
10610     l_event_class_rec.currency_conversion_type     :=  p_hdr_det_factors_rec.currency_conversion_type;
10611     l_event_class_rec.currency_conversion_rate     :=  p_hdr_det_factors_rec.currency_conversion_rate;
10612     l_event_class_rec.currency_conversion_date     :=  p_hdr_det_factors_rec.currency_conversion_date;
10613     l_event_class_rec.rounding_ship_to_party_id    :=  p_hdr_det_factors_rec.rounding_ship_to_party_id;
10614     l_event_class_rec.rounding_ship_from_party_id  :=  p_hdr_det_factors_rec.rounding_ship_from_party_id;
10615     l_event_class_rec.rounding_bill_to_party_id    :=  p_hdr_det_factors_rec.rounding_bill_to_party_id;
10616     l_event_class_rec.rounding_bill_from_party_id  :=  p_hdr_det_factors_rec.rounding_bill_from_party_id;
10617     l_event_class_rec.rndg_ship_to_party_site_id   :=  p_hdr_det_factors_rec.rndg_ship_to_party_site_id;
10618     l_event_class_rec.rndg_ship_from_party_site_id :=  p_hdr_det_factors_rec.rndg_ship_from_party_site_id;
10619     l_event_class_rec.rndg_bill_to_party_site_id   :=  p_hdr_det_factors_rec.rndg_bill_to_party_site_id;
10620     l_event_class_rec.rndg_bill_from_party_site_id :=  p_hdr_det_factors_rec.rndg_bill_from_party_site_id;
10621 
10622     OPEN lock_line_det_factors_for_doc(l_event_class_rec);
10623     CLOSE lock_line_det_factors_for_doc;
10624 
10625    /*------------------------------------------------------+
10626     |   Bug 5371288: Check if AR has called this API       |
10627     |   to incomplete the transaction                      |
10628     +------------------------------------------------------*/
10629 
10630     IF p_hdr_det_factors_rec.application_id = 222 THEN
10631        l_incomplete_scenario := 0;
10632        BEGIN
10633           SELECT 1
10634             INTO l_incomplete_scenario
10635             FROM zx_lines_det_factors
10636           WHERE  event_class_code    = p_hdr_det_factors_rec.event_class_code
10637             AND  application_id      = p_hdr_det_factors_rec.application_id
10638             AND  entity_code         = p_hdr_det_factors_rec.entity_code
10639             AND  trx_id              = p_hdr_det_factors_rec.trx_id
10640             AND  tax_event_type_code = 'VALIDATE_FOR_TAX'
10641             AND  rownum              = 1;
10642        EXCEPTION
10643           WHEN OTHERS THEN
10644                  l_incomplete_scenario := 0;
10645        END;
10646 
10647        IF l_incomplete_scenario = 1 THEN
10648           BEGIN
10649              SELECT zxevnttyp.tax_event_type_code,
10650                     zxevnttyp.status_code
10651                INTO l_event_class_rec.tax_event_type_code,
10652                     l_event_class_rec.doc_status_code
10653                FROM ZX_EVNT_TYP_MAPPINGS zxevntmap,
10654                     ZX_EVNT_CLS_TYPS zxevnttyp
10655              WHERE  zxevntmap.event_class_code     = p_hdr_det_factors_rec.event_class_code
10656                AND  zxevntmap.application_id       = p_hdr_det_factors_rec.application_id
10657                AND  zxevntmap.entity_code          = p_hdr_det_factors_rec.entity_code
10658                AND  zxevntmap.event_type_code      = p_hdr_det_factors_rec.event_type_code
10659                AND  zxevnttyp.tax_event_type_code  = zxevntmap.tax_event_type_code
10660                AND  zxevnttyp.tax_event_class_code = zxevntmap.tax_event_class_code
10661                AND  zxevntmap.enabled_flag = 'Y';
10662           EXCEPTION
10663              WHEN NO_DATA_FOUND THEN
10664                  x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
10665                  IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10666                     FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
10667                     ' Incorrect event information passed in for event type :' ||p_hdr_det_factors_rec.event_type_code ||' Please Check!');
10668                  END IF;
10669           END;
10670           BEGIN
10671              UPDATE ZX_LINES_DET_FACTORS
10672                SET TAX_EVENT_TYPE_CODE = l_event_class_rec.tax_event_type_code,
10673                    DOC_EVENT_STATUS    = l_event_class_rec.doc_status_code
10674              WHERE APPLICATION_ID   = p_hdr_det_factors_rec.APPLICATION_ID
10675               AND ENTITY_CODE       = p_hdr_det_factors_rec.ENTITY_CODE
10676               AND EVENT_CLASS_CODE  = p_hdr_det_factors_rec.EVENT_CLASS_CODE
10677               AND TRX_ID            = p_hdr_det_factors_rec.TRX_ID;
10678           END;
10679           RETURN;
10680        END IF;
10681     END IF;
10682 
10683    /*------------------------------------------------------+
10684     |   Validate and Initializate parameters for Inserting |
10685     |   into line_det_factors                              |
10686     +------------------------------------------------------*/
10687     ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors(p_event_class_rec =>l_event_class_rec,
10688                                                      p_trx_line_index  => NULL,
10689                                                      x_return_status   =>l_return_status
10690                                                     );
10691 
10692     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10693       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10694          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors returned errors');
10695       END IF;
10696       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10697          RAISE FND_API.G_EXC_ERROR;
10698       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10699          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10700       END IF;
10701     END IF;
10702 
10703    /*-----------------------------------------+
10704     |Derive the PTPs                          |
10705     +-----------------------------------------*/
10706     IF p_hdr_det_factors_rec.rounding_ship_to_party_id is NOT NULL AND
10707        p_hdr_det_factors_rec.rounding_ship_to_party_id <> FND_API.G_MISS_NUM THEN
10708        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10709           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Call TCM API to get ptp for rounding_ship_to_party_id: '||
10710                                                                        to_char(p_hdr_det_factors_rec.rounding_ship_to_party_id));
10711        END IF;
10712        ZX_TCM_PTP_PKG.get_ptp(p_hdr_det_factors_rec.rounding_ship_to_party_id
10713                              ,ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_to_party_type
10714                              ,p_hdr_det_factors_rec.legal_entity_id
10715                              ,p_hdr_det_factors_rec.ship_to_location_id
10716                              ,l_rdng_ship_to_ptp_id
10717                              ,l_return_status
10718                              );
10719 
10720         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10721            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10722              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10723              ':ZX_TCM_PTP_PKG.get_ptp for rounding_ship_to_party_id returned errors');
10724            END IF;
10725            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10726              RAISE FND_API.G_EXC_ERROR;
10727            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10728              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10729            END IF;
10730          END IF;
10731     END IF;
10732 
10733     IF p_hdr_det_factors_rec.rounding_ship_from_party_id is NOT NULL AND
10734        p_hdr_det_factors_rec.rounding_ship_from_party_id <> FND_API.G_MISS_NUM THEN
10735        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10736           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Call TCM API to get ptp for rounding_ship_from_party_id: '||
10737                                                                        to_char(p_hdr_det_factors_rec.rounding_ship_from_party_id));
10738        END IF;
10739        ZX_TCM_PTP_PKG.get_ptp(p_hdr_det_factors_rec.rounding_ship_from_party_id
10740                              ,ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_from_party_type
10741                              ,p_hdr_det_factors_rec.legal_entity_id
10742                              ,p_hdr_det_factors_rec.ship_from_location_id
10743                              ,l_rdng_ship_from_ptp_id
10744                              ,l_return_status
10745                              );
10746 
10747         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10748            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10749              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10750              ':ZX_TCM_PTP_PKG.get_ptp for rounding_ship_from_party_id returned errors');
10751            END IF;
10752            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10753              RAISE FND_API.G_EXC_ERROR;
10754            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10755              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10756            END IF;
10757          END IF;
10758     END IF;
10759 
10760     IF p_hdr_det_factors_rec.rndg_ship_to_party_site_id is NOT NULL AND
10761        p_hdr_det_factors_rec.rndg_ship_to_party_site_id <> FND_API.G_MISS_NUM THEN
10762        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10763           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Call TCM API to get ptp for rndg_ship_to_party_site_id: '||
10764                                                                        to_char(p_hdr_det_factors_rec.rndg_ship_to_party_site_id));
10765        END IF;
10766        ZX_TCM_PTP_PKG.get_ptp( p_hdr_det_factors_rec.rndg_ship_to_party_site_id
10767                               ,ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_to_pty_site_type
10768                               ,p_hdr_det_factors_rec.legal_entity_id
10769                               ,null
10770                               ,l_rdng_ship_to_ptp_st_id
10771                               ,l_return_status
10772                               );
10773 
10774         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10775            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10776              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10777              ':ZX_TCM_PTP_PKG.get_ptp for rndg_ship_to_party_site_id returned errors');
10778            END IF;
10779            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10780              RAISE FND_API.G_EXC_ERROR;
10781            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10782              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10783            END IF;
10784          END IF;
10785     END IF;
10786 
10787     IF p_hdr_det_factors_rec.rndg_ship_from_party_site_id is NOT NULL AND
10788        p_hdr_det_factors_rec.rndg_ship_from_party_site_id <> FND_API.G_MISS_NUM THEN
10789        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10790           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Call TCM API to get ptp for rndg_ship_from_party_site_id: '||
10791                                                                        to_char(p_hdr_det_factors_rec.rndg_ship_from_party_site_id));
10792        END IF;
10793        ZX_TCM_PTP_PKG.get_ptp( p_hdr_det_factors_rec.rndg_ship_from_party_site_id
10794                                ,ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_from_pty_site_type
10795                                ,p_hdr_det_factors_rec.legal_entity_id
10796                                ,null
10797                                ,l_rdng_ship_from_ptp_st_id
10798                                ,l_return_status
10799                                );
10800 
10801         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10802            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10803              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10804              ':ZX_TCM_PTP_PKG.get_ptp for rndg_ship_from_party_site_id returned errors');
10805            END IF;
10806            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10807              RAISE FND_API.G_EXC_ERROR;
10808            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10809              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10810            END IF;
10811          END IF;
10812       END IF;
10813 
10814       IF p_hdr_det_factors_rec.rounding_bill_to_party_id is NOT NULL  AND
10815        p_hdr_det_factors_rec.rounding_bill_to_party_id <> FND_API.G_MISS_NUM THEN
10816         IF (p_hdr_det_factors_rec.rounding_bill_to_party_id <> p_hdr_det_factors_rec.rounding_ship_to_party_id)
10817            OR (ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_to_party_type <> ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_to_party_type)
10818        OR  p_hdr_det_factors_rec.rounding_ship_to_party_id is null THEN
10819            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10820              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Call TCM API to get ptp for rounding_bill_to_party_id: '||
10821                                                                        to_char(p_hdr_det_factors_rec.rounding_bill_to_party_id));
10822            END IF;
10823            ZX_TCM_PTP_PKG.get_ptp(p_hdr_det_factors_rec.rounding_bill_to_party_id
10824                                  ,ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_to_party_type
10825                                  ,p_hdr_det_factors_rec.legal_entity_id
10826                                  ,p_hdr_det_factors_rec.bill_to_location_id
10827                                  ,l_rdng_bill_to_ptp_id
10828                                  ,l_return_status
10829                                  );
10830 
10831            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10832              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10833                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10834                 ':ZX_TCM_PTP_PKG.get_ptp for rounding_bill_to_party_id returned errors');
10835              END IF;
10836              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10837                RAISE FND_API.G_EXC_ERROR;
10838              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10839                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10840              END IF;
10841            END IF;
10842         ELSE
10843           l_rdng_bill_to_ptp_id := l_rdng_ship_to_ptp_id;
10844         END IF;
10845       END IF;
10846 
10847       IF p_hdr_det_factors_rec.rounding_bill_from_party_id is NOT NULL AND
10848          p_hdr_det_factors_rec.rounding_bill_from_party_id <> FND_API.G_MISS_NUM THEN
10849          IF (p_hdr_det_factors_rec.rounding_bill_from_party_id <> p_hdr_det_factors_rec.rounding_ship_from_party_id)
10850            OR (ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_from_party_type <> ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_from_party_type)
10851        OR  p_hdr_det_factors_rec.rounding_ship_from_party_id is null THEN
10852            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10853              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Call TCM API to get ptp for rounding_bill_from_party_id: '||
10854                                                                        to_char(p_hdr_det_factors_rec.rounding_bill_from_party_id));
10855            END IF;
10856            ZX_TCM_PTP_PKG.get_ptp(p_hdr_det_factors_rec.rounding_bill_from_party_id
10857                                  ,ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_from_party_type
10858                                  ,p_hdr_det_factors_rec.legal_entity_id
10859                                  ,p_hdr_det_factors_rec.bill_from_location_id
10860                                  ,l_rdng_bill_from_ptp_id
10861                                  ,l_return_status
10862                                  );
10863 
10864            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10865              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10866                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10867                 ':ZX_TCM_PTP_PKG.get_ptp for rounding_bill_from_party_id returned errors');
10868              END IF;
10869              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10870                RAISE FND_API.G_EXC_ERROR;
10871              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10872                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10873              END IF;
10874            END IF;
10875         ELSE
10876           l_rdng_bill_from_ptp_id := l_rdng_ship_from_ptp_id;
10877         END IF;
10878       END IF;
10879 
10880       IF p_hdr_det_factors_rec.rndg_bill_to_party_site_id is NOT NULL AND
10881          p_hdr_det_factors_rec.rndg_bill_to_party_site_id <> FND_API.G_MISS_NUM THEN
10882          IF (p_hdr_det_factors_rec.rndg_bill_to_party_site_id <> p_hdr_det_factors_rec.rndg_ship_to_party_site_id)
10883            OR (ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_to_pty_site_type <> ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_to_pty_site_type)
10884        OR  p_hdr_det_factors_rec.rndg_ship_to_party_site_id is null THEN
10885            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10886              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Call TCM API to get ptp for rndg_bill_to_party_site_id: '||
10887                                                                        to_char(p_hdr_det_factors_rec.rndg_bill_to_party_site_id));
10888            END IF;
10889            ZX_TCM_PTP_PKG.get_ptp(p_hdr_det_factors_rec.rndg_bill_to_party_site_id
10890                                  ,ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_to_pty_site_type
10891                                  ,p_hdr_det_factors_rec.legal_entity_id
10892                                  ,null
10893                                  ,l_rdng_bill_to_ptp_st_id
10894                                  ,l_return_status
10895                                 );
10896 
10897            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10898              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10899                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10900                 ':ZX_TCM_PTP_PKG.get_ptp for rndg_bill_to_party_site_id returned errors');
10901              END IF;
10902              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10903                RAISE FND_API.G_EXC_ERROR;
10904              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10905                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10906              END IF;
10907            END IF;
10908         ELSE
10909           l_rdng_bill_to_ptp_st_id := l_rdng_ship_to_ptp_st_id;
10910         END IF;
10911       END IF;
10912 
10913       IF p_hdr_det_factors_rec.rndg_bill_from_party_site_id is NOT NULL AND
10914          p_hdr_det_factors_rec.rndg_bill_to_party_site_id <> FND_API.G_MISS_NUM THEN
10915         IF p_hdr_det_factors_rec.rndg_bill_from_party_site_id <> p_hdr_det_factors_rec.rndg_ship_from_party_site_id
10916            OR (ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_from_pty_site_type <> ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_from_pty_site_type)
10917        OR  p_hdr_det_factors_rec.rndg_ship_from_party_site_id is null THEN
10918            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10919              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Call TCM API to get ptp for rndg_bill_from_party_site_id: '||
10920                                                                        to_char(p_hdr_det_factors_rec.rndg_bill_from_party_site_id));
10921            END IF;
10922            ZX_TCM_PTP_PKG.get_ptp(p_hdr_det_factors_rec.rndg_bill_from_party_site_id
10923                                  ,ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_from_pty_site_type
10924                                  ,p_hdr_det_factors_rec.legal_entity_id
10925                                  ,null
10926                                  ,l_rdng_bill_from_ptp_st_id
10927                                  ,l_return_status
10928                                  );
10929 
10930            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10931              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10932                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10933                 ':ZX_TCM_PTP_PKG.get_ptp for rndg_bill_from_party_site_id returned errors');
10934              END IF;
10935              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10936                RAISE FND_API.G_EXC_ERROR;
10937              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10938                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10939              END IF;
10940            END IF;
10941         ELSE
10942           l_rdng_bill_from_ptp_st_id := l_rdng_ship_from_ptp_st_id;
10943         END IF;
10944       END IF;
10945 
10946       --get_tax_profile_ids expects the following data legal entity id in zx_global_structures table.
10947       zx_global_structures_pkg.trx_line_dist_tbl.LEGAL_ENTITY_ID(1) := p_hdr_det_factors_rec.legal_entity_id;
10948 
10949       IF p_hdr_det_factors_rec.ship_to_party_id is not NULL AND
10950          p_hdr_det_factors_rec.ship_to_party_id <> FND_API.G_MISS_NUM THEN
10951         IF ((p_hdr_det_factors_rec.rounding_ship_to_party_id is NULL)
10952           OR ((p_hdr_det_factors_rec.rounding_ship_to_party_id is NOT NULL)
10953           AND (p_hdr_det_factors_rec.ship_to_party_id <>
10954               p_hdr_det_factors_rec.rounding_ship_to_party_id))) THEN
10955           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10956             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Ship To Party Id: '||
10957                                                                         to_char(p_hdr_det_factors_rec.ship_to_party_id));
10958           END IF;
10959           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_to_party_type;
10960           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
10961                                                l_party_type,
10962                                                p_hdr_det_factors_rec.ship_to_party_id,
10963                                                p_hdr_det_factors_rec.ship_to_location_id,
10964                                                NULL,
10965                                                l_ship_to_ptp_id
10966                                               );
10967 
10968            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10969              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10970                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10971                 ':ZX_TCM_PTP_PKG.get_ptp for ship_to_party_id returned errors');
10972              END IF;
10973              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10974                RAISE FND_API.G_EXC_ERROR;
10975              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10976                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10977              END IF;
10978            END IF;
10979         ELSE /* Ship To Party is same as Rounding Ship To Party */
10980           l_ship_to_ptp_id := l_rdng_ship_to_ptp_id;
10981         END IF;
10982       END IF; /* Completed Condition Check for Ship To Party */
10983 
10984 
10985       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10986         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Call TCM API to get ptp for Legal Entity: '||
10987                                                                     to_char(p_hdr_det_factors_rec.legal_entity_id));
10988       END IF;
10989 
10990       ZX_TCM_PTP_PKG.get_ptp_hq(p_hdr_det_factors_rec.legal_entity_id,
10991                                 l_hq_estb_ptp_id,
10992                                 l_return_status
10993                                 );
10994 
10995       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10996         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10997             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10998              ':ZX_TCM_PTP_PKG.get_ptp for legal_entity_id returned errors');
10999         END IF;
11000         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11001           RAISE FND_API.G_EXC_ERROR;
11002         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11003           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11004         END IF;
11005       END IF;
11006 
11007       IF p_hdr_det_factors_rec.ship_from_party_id is NOT NULL AND
11008          p_hdr_det_factors_rec.ship_from_party_id <> FND_API.G_MISS_NUM THEN
11009          IF ((p_hdr_det_factors_rec.rounding_ship_from_party_id is NULL)
11010           OR ((p_hdr_det_factors_rec.rounding_ship_from_party_id is NOT NULL)
11011           AND (p_hdr_det_factors_rec.ship_from_party_id  <> p_hdr_det_factors_rec.rounding_ship_from_party_id))) THEN
11012           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11013             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Ship From Party Id: '||
11014                                                                        to_char(p_hdr_det_factors_rec.ship_from_party_id));
11015           END IF;
11016           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_from_party_type;
11017           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
11018                                               l_party_type,
11019                                               p_hdr_det_factors_rec.ship_from_party_id,
11020                                               p_hdr_det_factors_rec.ship_from_location_id,
11021                                               NULL,
11022                                               l_ship_from_ptp_id
11023                                              );
11024 
11025           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11026             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11027               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11028                 ':ZX_TCM_PTP_PKG.get_ptp for ship_from_party_id returned errors');
11029             END IF;
11030             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11031               RAISE FND_API.G_EXC_ERROR;
11032             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11033               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11034             END IF;
11035           END IF;
11036         ELSE /* Ship from party is same as rounding ship from party */
11037           l_ship_from_ptp_id := l_rdng_ship_from_ptp_id;
11038         END IF;
11039      END IF; /* Completed condition check for ship from party */
11040 
11041     IF p_hdr_det_factors_rec.poa_party_tax_prof_id is NOT NULL  AND
11042        p_hdr_det_factors_rec.poa_party_tax_prof_id <> FND_API.G_MISS_NUM THEN
11043        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11044           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for POA Party Id: '
11045                                                                      || to_char(p_hdr_det_factors_rec.poa_party_id));
11046        END IF;
11047 
11048        l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.poa_party_type;
11049        ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
11050                                            l_party_type ,
11051                                            p_hdr_det_factors_rec.poa_party_id,
11052                                            p_hdr_det_factors_rec.poa_location_id,
11053                                            NULL,
11054                                            l_poa_ptp_id
11055                                           );
11056 
11057        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11058          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11059            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11060              ':ZX_TCM_PTP_PKG.get_ptp for poa_party_id returned errors');
11061          END IF;
11062          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11063            RAISE FND_API.G_EXC_ERROR;
11064          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11065            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11066          END IF;
11067         END IF;
11068       END IF; /* Completed condition check for poa party */
11069 
11070 
11071       IF p_hdr_det_factors_rec.poo_party_id is NOT NULL AND
11072         p_hdr_det_factors_rec.poa_party_tax_prof_id <> FND_API.G_MISS_NUM THEN
11073         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11074           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for POO Party Id: '||
11075                                                                       to_char(p_hdr_det_factors_rec.poo_party_id));
11076         END IF;
11077 
11078         l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.poo_party_type;
11079         ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
11080                                             l_party_type,
11081                                             p_hdr_det_factors_rec.poo_party_id,
11082                                             p_hdr_det_factors_rec.poo_location_id,
11083                                             NULL,
11084                                             l_poo_ptp_id
11085                                            );
11086 
11087        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11088          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11089            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11090              ':ZX_TCM_PTP_PKG.get_ptp for poo_party_id returned errors');
11091          END IF;
11092          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11093            RAISE FND_API.G_EXC_ERROR;
11094          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11095            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11096          END IF;
11097         END IF;
11098       END IF; /* Completed condition check for poo party */
11099 
11100       IF p_hdr_det_factors_rec.bill_to_party_id is NOT NULL AND
11101         p_hdr_det_factors_rec.bill_to_party_id <> FND_API.G_MISS_NUM THEN
11102         IF ((p_hdr_det_factors_rec.rounding_bill_to_party_id is NULL)
11103         OR ((p_hdr_det_factors_rec.rounding_bill_to_party_id is NOT NULL)
11104         AND (p_hdr_det_factors_rec.bill_to_party_id
11105          <> p_hdr_det_factors_rec.rounding_bill_to_party_id))) THEN
11106 
11107           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11108            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Bill To Party Id: '||
11109                                                                        to_char(p_hdr_det_factors_rec.bill_to_party_id));
11110           END IF;
11111 
11112           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_to_party_type;
11113           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
11114                                               l_party_type,
11115                                               p_hdr_det_factors_rec.bill_to_party_id,
11116                                               p_hdr_det_factors_rec.bill_to_location_id,
11117                                               NULL,
11118                                              l_bill_to_ptp_id
11119                                              );
11120 
11121           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11122             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11123               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11124                 ':ZX_TCM_PTP_PKG.get_ptp for bill_to_party_id returned errors');
11125             END IF;
11126             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11127               RAISE FND_API.G_EXC_ERROR;
11128             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11129               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11130             END IF;
11131           END IF;
11132         ELSE /* Bill to party is same as rounding bill to party */
11133           l_bill_to_ptp_id := l_rdng_bill_to_ptp_id;
11134         END IF;
11135       END IF; /* Completed condition check for bill to party */
11136 
11137 
11138       IF p_hdr_det_factors_rec.bill_from_party_id is NOT NULL AND
11142         AND (p_hdr_det_factors_rec.bill_from_party_id
11139         p_hdr_det_factors_rec.bill_from_party_id <> FND_API.G_MISS_NUM THEN
11140         IF ((p_hdr_det_factors_rec.rounding_bill_from_party_id is NULL)
11141         OR ((p_hdr_det_factors_rec.rounding_bill_from_party_id is NOT NULL)
11143           <> p_hdr_det_factors_rec.rounding_bill_from_party_id))) THEN
11144 
11145           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11146             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Bill From Party Id: '||
11147                                                                         to_char(p_hdr_det_factors_rec.bill_from_party_id));
11148           END IF;
11149 
11150           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_from_party_type;
11151           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
11152                                               l_party_type,
11153                                               p_hdr_det_factors_rec.bill_from_party_id,
11154                                               p_hdr_det_factors_rec.bill_from_location_id ,
11155                                               NULL,
11156                                               l_bill_from_ptp_id
11157                                              );
11158 
11159           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11160             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11161               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11162                 ':ZX_TCM_PTP_PKG.get_ptp for bill_from_party_id returned errors');
11163             END IF;
11164             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11165               RAISE FND_API.G_EXC_ERROR;
11166             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11167               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11168             END IF;
11169           END IF;
11170         ELSE /* Bill from party is same as rounding bill from party */
11171           l_bill_from_ptp_id := l_rdng_bill_from_ptp_id;
11172         END IF;
11173       END IF; /* Completed condition check for bill from party */
11174 
11175       IF p_hdr_det_factors_rec.ship_to_party_site_id is NOT NULL AND
11176         p_hdr_det_factors_rec.ship_to_party_site_id <> FND_API.G_MISS_NUM THEN
11177         IF ((p_hdr_det_factors_rec.rndg_ship_to_party_site_id is NULL)
11178         OR ((p_hdr_det_factors_rec.rndg_ship_to_party_site_id is NOT NULL)
11179         AND (p_hdr_det_factors_rec.ship_to_party_site_id
11180           <> p_hdr_det_factors_rec.rndg_ship_to_party_site_id))) THEN
11181 
11182           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11183             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Ship To Party Site Id: '||
11184                                                                        to_char(p_hdr_det_factors_rec.ship_to_party_site_id));
11185           END IF;
11186           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_to_pty_site_type;
11187           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
11188                                               l_party_type,
11189                                               NULL,
11190                                               NULL,
11191                                               p_hdr_det_factors_rec.ship_to_party_site_id ,
11192                                               l_ship_to_ptp_site_id
11193                                               );
11194 
11195           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11196             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11197               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11198                 ':ZX_TCM_PTP_PKG.get_ptp for ship_to_party_site_id returned errors');
11199             END IF;
11200             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11201               RAISE FND_API.G_EXC_ERROR;
11202             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11203               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11204             END IF;
11205           END IF;
11206         ELSE /* Ship to site is same as rounding ship to site */
11207           l_ship_to_ptp_site_id := l_rdng_ship_to_ptp_st_id;
11208         END IF;
11209       END IF; /* Completed condition check for ship to party site */
11210 
11211       IF p_hdr_det_factors_rec.ship_from_party_site_id is NOT NULL AND
11212         p_hdr_det_factors_rec.ship_to_party_site_id <> FND_API.G_MISS_NUM THEN
11213         IF ((p_hdr_det_factors_rec.rndg_ship_from_party_site_id is NULL)
11214         OR ((p_hdr_det_factors_rec.rndg_ship_from_party_site_id is NOT NULL)
11215         AND (p_hdr_det_factors_rec.ship_from_party_site_id
11216           <> p_hdr_det_factors_rec.rndg_ship_from_party_site_id))) THEN
11217 
11218           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11219             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Ship From Party Site Id: '||
11220                                                                         to_char(p_hdr_det_factors_rec.ship_from_party_site_id));
11221           END IF;
11222 
11223           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_from_pty_site_type;
11224           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
11225                                               l_party_type,
11226                                               NULL,
11227                                               NULL,
11228                                               p_hdr_det_factors_rec.ship_from_party_site_id,
11229                                               l_ship_from_ptp_site_id
11230                                              );
11231 
11232           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11233             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11234               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11235                 ':ZX_TCM_PTP_PKG.get_ptp for ship_from_party_site_id returned errors');
11236             END IF;
11237             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11238               RAISE FND_API.G_EXC_ERROR;
11239             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11240               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11241             END IF;
11242           END IF;
11243         ELSE /* Ship from site is same as rounding ship from site */
11244           l_ship_from_ptp_site_id := l_rdng_ship_from_ptp_st_id;
11245         END IF;
11246       END IF; /* Completed condition check for ship from site*/
11247 
11248       IF p_hdr_det_factors_rec.poa_party_site_id is NOT NULL AND
11249         p_hdr_det_factors_rec.poa_party_site_id <> FND_API.G_MISS_NUM THEN
11250 
11251         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11252           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for POA Party Site Id: '||
11253                                                                       to_char(p_hdr_det_factors_rec.poa_party_site_id));
11254         END IF;
11255         l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.poa_pty_site_type;
11256         ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
11257                                             l_party_type,
11258                                             NULL,
11259                                             NULL,
11260                                             p_hdr_det_factors_rec.poa_party_site_id,
11261                                             l_poa_ptp_site_id
11262                                            );
11263 
11264           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11265             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11266               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11267                 ':ZX_TCM_PTP_PKG.get_ptp for poa_party_site_id returned errors');
11268             END IF;
11269             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11270               RAISE FND_API.G_EXC_ERROR;
11271             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11272               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11273             END IF;
11274           END IF;
11275       END IF; /* Completed condition check for poa party site */
11276 
11277 
11278       IF p_hdr_det_factors_rec.poo_party_site_id is NOT NULL AND
11279         p_hdr_det_factors_rec.poo_party_site_id <> FND_API.G_MISS_NUM THEN
11280         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11281            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for POO Party Site Id: '||
11282                                                                       to_char(p_hdr_det_factors_rec.poo_party_site_id));
11283         END IF;
11284         l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.poo_pty_site_type;
11285         ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
11286                                             l_party_type,
11287                                             NULL,
11288                                             NULL,
11289                                             p_hdr_det_factors_rec.poo_party_site_id,
11290                                             l_poo_ptp_site_id
11291                                            );
11292 
11293           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11294             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11295               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11296                 ':ZX_TCM_PTP_PKG.get_ptp for poo_party_site_id returned errors');
11297             END IF;
11298             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11299               RAISE FND_API.G_EXC_ERROR;
11300             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11301               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11302             END IF;
11303           END IF;
11304       END IF; /* Completed condition check for poo party site */
11305 
11306       IF p_hdr_det_factors_rec.bill_to_party_site_id is NOT NULL AND
11307         p_hdr_det_factors_rec.bill_to_party_site_id <> FND_API.G_MISS_NUM THEN
11308       IF ((p_hdr_det_factors_rec.rndg_bill_to_party_site_id is NULL)
11309       OR ((p_hdr_det_factors_rec.rndg_bill_to_party_site_id is NOT NULL)
11310        AND (p_hdr_det_factors_rec.bill_to_party_site_id
11311          <> p_hdr_det_factors_rec.rndg_bill_to_party_site_id))) THEN
11312 
11313           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11314             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Bill To Party Site Id: '||
11315                                                                         to_char(p_hdr_det_factors_rec.bill_to_party_site_id));
11316           END IF;
11317           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_to_pty_site_type;
11318           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
11319                                               l_party_type,
11320                                               NULL,
11321                                               NULL,
11322                                               p_hdr_det_factors_rec.bill_to_party_site_id,
11323                                               l_bill_to_ptp_site_id
11324                                              );
11325 
11326           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11327             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11328               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11329                 ':ZX_TCM_PTP_PKG.get_ptp for bill_to_party_site_id returned errors');
11330             END IF;
11331             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11332               RAISE FND_API.G_EXC_ERROR;
11333             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11334               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11335             END IF;
11336           END IF;
11337         ELSE  /* Bill to site is same as rounding bill to site */
11338           l_bill_to_ptp_site_id := l_rdng_bill_to_ptp_st_id;
11339         END IF;
11340       END IF; /* Completed condition check for bill to site */
11341 
11342 
11343       IF p_hdr_det_factors_rec.bill_from_party_site_id is NOT NULL AND
11344         p_hdr_det_factors_rec.bill_from_party_site_id <> FND_API.G_MISS_NUM THEN
11345         IF ((p_hdr_det_factors_rec.rndg_bill_from_party_site_id is NULL)
11346         OR ((p_hdr_det_factors_rec.rndg_bill_from_party_site_id is NOT NULL)
11347         AND (p_hdr_det_factors_rec.bill_from_party_site_id
11348           <> p_hdr_det_factors_rec.rndg_bill_from_party_site_id))) THEN
11349 
11350           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11351              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Bill From Party Site Id: '||
11352                                                                          to_char(p_hdr_det_factors_rec.bill_from_party_site_id));
11353           END IF;
11354           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_from_pty_site_type;
11355           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
11356                                               l_party_type,
11357                                               NULL,
11358                                               NULL,
11359                                               p_hdr_det_factors_rec.bill_from_party_site_id,
11360                                               l_bill_from_ptp_site_id
11361                                              );
11362 
11363           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11364             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11365               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11366                 ':ZX_TCM_PTP_PKG.get_ptp for bill_from_party_site_id returned errors');
11367             END IF;
11368             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11369               RAISE FND_API.G_EXC_ERROR;
11370             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11371               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11372             END IF;
11373           END IF;
11374         ELSE /* Bill from site is same as rounding bill from site */
11375           l_bill_from_ptp_site_id := l_rdng_bill_from_ptp_st_id;
11376         END IF;
11377       END IF; /* Completed condition check for rounding bill from site */
11378 
11379       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11380           x_return_status := l_return_status;
11381           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11382             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
11383                    ' RETURN_STATUS = ' || x_return_status);
11384           END IF;
11385           RETURN;
11386       END IF;
11387 
11388       ZX_R11I_TAX_PARTNER_PKG.copy_trx_line_for_ptnr_bef_upd(NULL,
11389                                                             l_event_class_rec,
11390                                                             NULL,
11391                                                             'N',
11392                                                             NULL,
11393                                                  NULL,
11394                                                             l_return_status
11395                                                             );
11396       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11397          x_return_status := l_return_status ;
11398          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11399             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_R11I_TAX_PARTNER_PKG.copy_trx_line_for_ptnr_bef_upd  returned errors');
11400          END IF;
11401          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11402            RAISE FND_API.G_EXC_ERROR;
11403          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11404            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11405          END IF;
11406       END IF;
11407 
11408    /*-----------------------------------------------+
11409     |Update the headers only in zx_line_det_factors |
11410     +----------------------------------------------*/
11411    UPDATE ZX_LINES_DET_FACTORS SET
11412          APPLICATION_ID                    = p_hdr_det_factors_rec.APPLICATION_ID,
11413          ENTITY_CODE                       = p_hdr_det_factors_rec.ENTITY_CODE,
11414          EVENT_CLASS_CODE                  = p_hdr_det_factors_rec.EVENT_CLASS_CODE,
11415          EVENT_TYPE_CODE                   = p_hdr_det_factors_rec.EVENT_TYPE_CODE,
11416          INTERNAL_ORGANIZATION_ID          = p_hdr_det_factors_rec.INTERNAL_ORGANIZATION_ID,
11417          LEGAL_ENTITY_ID                   = p_hdr_det_factors_rec.LEGAL_ENTITY_ID,
11418          TRX_ID                            = p_hdr_det_factors_rec.TRX_ID,
11419          TRX_DOC_REVISION             = decode(p_hdr_det_factors_rec.TRX_DOC_REVISION,FND_API.G_MISS_CHAR,
11420                                                                                                    TRX_DOC_REVISION,
11421                                                                                                    p_hdr_det_factors_rec.TRX_DOC_REVISION),
11422          TRX_DATE                          = decode(p_hdr_det_factors_rec.TRX_DATE,FND_API.G_MISS_DATE,
11423                                                                                                    TRX_DATE,
11424                                                                                                    p_hdr_det_factors_rec.TRX_DATE),
11425          LEDGER_ID                         = decode(p_hdr_det_factors_rec.LEDGER_ID,FND_API.G_MISS_NUM,
11426                                                                                                    LEDGER_ID,
11427                                                                                                    p_hdr_det_factors_rec.LEDGER_ID),
11428          INTERNAL_ORG_LOCATION_ID          = decode(p_hdr_det_factors_rec.INTERNAL_ORG_LOCATION_ID,FND_API.G_MISS_NUM,
11429                                                                                                    INTERNAL_ORG_LOCATION_ID,
11430                                                                                                    p_hdr_det_factors_rec.INTERNAL_ORG_LOCATION_ID),
11431          TRX_CURRENCY_CODE                 = decode(p_hdr_det_factors_rec.TRX_CURRENCY_CODE,FND_API.G_MISS_CHAR,
11432                                                                                                    TRX_CURRENCY_CODE,
11433                                                                                                    p_hdr_det_factors_rec.TRX_CURRENCY_CODE),
11434          CURRENCY_CONVERSION_TYPE          = decode(p_hdr_det_factors_rec.CURRENCY_CONVERSION_TYPE,FND_API.G_MISS_CHAR,
11435                                                                                                    CURRENCY_CONVERSION_TYPE,
11436                                                                                                    p_hdr_det_factors_rec.CURRENCY_CONVERSION_TYPE),
11437          CURRENCY_CONVERSION_RATE          = decode(p_hdr_det_factors_rec.CURRENCY_CONVERSION_RATE,FND_API.G_MISS_NUM,
11438                                                                                                    CURRENCY_CONVERSION_RATE,
11439                                                                                                    p_hdr_det_factors_rec.CURRENCY_CONVERSION_RATE),
11440          CURRENCY_CONVERSION_DATE          = decode(p_hdr_det_factors_rec.CURRENCY_CONVERSION_DATE,FND_API.G_MISS_DATE,
11441                                                                                                    CURRENCY_CONVERSION_DATE,
11442                                                                                                    p_hdr_det_factors_rec.CURRENCY_CONVERSION_DATE),
11443          MINIMUM_ACCOUNTABLE_UNIT     = decode(p_hdr_det_factors_rec.MINIMUM_ACCOUNTABLE_UNIT,FND_API.G_MISS_NUM,
11444                                                                                                    MINIMUM_ACCOUNTABLE_UNIT,
11445                                                                                                    p_hdr_det_factors_rec.MINIMUM_ACCOUNTABLE_UNIT),
11446          PRECISION                         =  decode(p_hdr_det_factors_rec.PRECISION,FND_API.G_MISS_NUM,
11447                                                                                                    PRECISION,
11448                                                                                                    p_hdr_det_factors_rec.PRECISION),
11449          ESTABLISHMENT_ID                  = decode(p_hdr_det_factors_rec.ESTABLISHMENT_ID,FND_API.G_MISS_NUM,
11450                                                                                                     ESTABLISHMENT_ID,
11451                                                                                                     p_hdr_det_factors_rec.ESTABLISHMENT_ID),
11452          RECEIVABLES_TRX_TYPE_ID     = decode(p_hdr_det_factors_rec.RECEIVABLES_TRX_TYPE_ID,FND_API.G_MISS_NUM,
11453                                                                                                     RECEIVABLES_TRX_TYPE_ID,
11454                                                                                                     p_hdr_det_factors_rec.RECEIVABLES_TRX_TYPE_ID),
11455          RELATED_DOC_APPLICATION_ID     = decode(p_hdr_det_factors_rec.RELATED_DOC_APPLICATION_ID,FND_API.G_MISS_NUM,
11456                                                                                                     RELATED_DOC_APPLICATION_ID,
11457                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_APPLICATION_ID),
11458          RELATED_DOC_ENTITY_CODE     = decode(p_hdr_det_factors_rec.RELATED_DOC_ENTITY_CODE,FND_API.G_MISS_CHAR,
11459                                                                                                     RELATED_DOC_ENTITY_CODE,
11460                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_ENTITY_CODE),
11461          RELATED_DOC_EVENT_CLASS_CODE     = decode(p_hdr_det_factors_rec.RELATED_DOC_EVENT_CLASS_CODE,FND_API.G_MISS_CHAR,
11462                                                                                                     RELATED_DOC_EVENT_CLASS_CODE,
11463                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_EVENT_CLASS_CODE),
11464          RELATED_DOC_TRX_ID             = decode(p_hdr_det_factors_rec.RELATED_DOC_TRX_ID,FND_API.G_MISS_NUM,
11465                                                                                                     RELATED_DOC_TRX_ID,
11466                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_TRX_ID),
11467          RELATED_DOC_NUMBER             = decode(p_hdr_det_factors_rec.RELATED_DOC_NUMBER,FND_API.G_MISS_CHAR,
11468                                                                                                     RELATED_DOC_NUMBER,
11469                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_NUMBER),
11470          RELATED_DOC_DATE                  = decode(p_hdr_det_factors_rec.RELATED_DOC_DATE,FND_API.G_MISS_DATE,
11471                                                                                                     RELATED_DOC_DATE,
11472                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_DATE),
11473          DEFAULT_TAXATION_COUNTRY     = decode(p_hdr_det_factors_rec.DEFAULT_TAXATION_COUNTRY,FND_API.G_MISS_CHAR,
11474                                                                                                     DEFAULT_TAXATION_COUNTRY,
11475                                                                                                     p_hdr_det_factors_rec.DEFAULT_TAXATION_COUNTRY),
11476          TRX_NUMBER                     = decode(p_hdr_det_factors_rec.TRX_NUMBER,FND_API.G_MISS_CHAR,
11477                                                                                                     TRX_NUMBER,
11478                                                                                                     p_hdr_det_factors_rec.TRX_NUMBER),
11479          TRX_DESCRIPTION             = decode(p_hdr_det_factors_rec.TRX_DESCRIPTION,FND_API.G_MISS_CHAR,
11480                                                                                                    TRX_DESCRIPTION,
11484                                                                                                    p_hdr_det_factors_rec.TRX_COMMUNICATED_DATE),
11481                                                                                                    p_hdr_det_factors_rec.TRX_DESCRIPTION),
11482          TRX_COMMUNICATED_DATE             = decode(p_hdr_det_factors_rec.TRX_COMMUNICATED_DATE,FND_API.G_MISS_DATE,
11483                                                                                                    TRX_COMMUNICATED_DATE,
11485          BATCH_SOURCE_ID             = decode(p_hdr_det_factors_rec.BATCH_SOURCE_ID,FND_API.G_MISS_NUM,
11486                                                                                                    BATCH_SOURCE_ID,
11487                                                                                                    p_hdr_det_factors_rec.BATCH_SOURCE_ID),
11488          BATCH_SOURCE_NAME             = decode(p_hdr_det_factors_rec.BATCH_SOURCE_NAME,FND_API.G_MISS_CHAR,
11489                                                                                                    BATCH_SOURCE_NAME,
11490                                                                                                    p_hdr_det_factors_rec.BATCH_SOURCE_NAME),
11491          DOC_SEQ_ID                     = decode(p_hdr_det_factors_rec.DOC_SEQ_ID,FND_API.G_MISS_NUM,
11492                                                                                                    DOC_SEQ_ID,
11493                                                                                                    p_hdr_det_factors_rec.DOC_SEQ_ID),
11494          DOC_SEQ_NAME                     = decode(p_hdr_det_factors_rec.DOC_SEQ_NAME,FND_API.G_MISS_CHAR,
11495                                                                                                    DOC_SEQ_NAME,
11496                                                                                                    p_hdr_det_factors_rec.DOC_SEQ_NAME),
11497          DOC_SEQ_VALUE                     = decode(p_hdr_det_factors_rec.DOC_SEQ_VALUE,FND_API.G_MISS_CHAR,
11498                                                                                                    DOC_SEQ_VALUE,
11499                                                                                                    p_hdr_det_factors_rec.DOC_SEQ_VALUE),
11500          TRX_DUE_DATE                     = decode(p_hdr_det_factors_rec.TRX_DUE_DATE,FND_API.G_MISS_DATE,
11501                                                                                                    TRX_DUE_DATE,
11502                                                                                                    p_hdr_det_factors_rec.TRX_DUE_DATE),
11503          TRX_TYPE_DESCRIPTION             = decode(p_hdr_det_factors_rec.TRX_TYPE_DESCRIPTION,FND_API.G_MISS_CHAR,
11504                                                                                                    TRX_TYPE_DESCRIPTION,
11505                                                                                                    p_hdr_det_factors_rec.TRX_TYPE_DESCRIPTION),
11506          DOCUMENT_SUB_TYPE             = decode(p_hdr_det_factors_rec.DOCUMENT_SUB_TYPE,FND_API.G_MISS_CHAR,
11507                                                                                                    DOCUMENT_SUB_TYPE,
11508                                                                                                    p_hdr_det_factors_rec.DOCUMENT_SUB_TYPE),
11509          SUPPLIER_TAX_INVOICE_NUMBER     = decode(p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_NUMBER,FND_API.G_MISS_CHAR,
11510                                                                                                    SUPPLIER_TAX_INVOICE_NUMBER,
11511                                                                                                    p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_NUMBER),
11512          SUPPLIER_TAX_INVOICE_DATE     = decode(p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_DATE,FND_API.G_MISS_DATE,
11513                                                                                                    SUPPLIER_TAX_INVOICE_DATE,
11514                                                                                                    p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_DATE),
11515          SUPPLIER_EXCHANGE_RATE             = decode(p_hdr_det_factors_rec.SUPPLIER_EXCHANGE_RATE,FND_API.G_MISS_NUM,
11516                                                                                                    SUPPLIER_EXCHANGE_RATE,
11517                                                                                                    p_hdr_det_factors_rec.SUPPLIER_EXCHANGE_RATE),
11518          TAX_INVOICE_DATE             = decode(p_hdr_det_factors_rec.TAX_INVOICE_DATE,FND_API.G_MISS_DATE,
11519                                                                                                    TAX_INVOICE_DATE,
11520                                                                                                    p_hdr_det_factors_rec.TAX_INVOICE_DATE),
11521          TAX_INVOICE_NUMBER             = decode(p_hdr_det_factors_rec.TAX_INVOICE_NUMBER,FND_API.G_MISS_CHAR,
11522                                                                                                    TAX_INVOICE_NUMBER,
11523                                                                                                    p_hdr_det_factors_rec.TAX_INVOICE_NUMBER),
11524          CTRL_TOTAL_HDR_TX_AMT             = decode(p_hdr_det_factors_rec.CTRL_TOTAL_HDR_TX_AMT,FND_API.G_MISS_NUM,
11525                                                                                                    ctrl_total_hdr_tx_amt,
11526                                                                                                    p_hdr_det_factors_rec.CTRL_TOTAL_HDR_TX_AMT),
11527          FIRST_PTY_ORG_ID             = l_event_class_rec.first_pty_org_id,
11528          TAX_EVENT_CLASS_CODE             = l_event_class_rec.TAX_EVENT_CLASS_CODE,
11529          TAX_EVENT_TYPE_CODE             = l_event_class_rec.TAX_EVENT_TYPE_CODE,
11530          DOC_EVENT_STATUS             = l_event_class_rec.DOC_STATUS_CODE,
11531          TRX_BATCH_ID                      = decode(p_hdr_det_factors_rec.TRX_BATCH_ID,FND_API.G_MISS_NUM,
11532                                                                                                    TRX_BATCH_ID,
11536                                                                                                    p_hdr_det_factors_rec.APPLIED_TO_TRX_NUMBER),
11533                                                                                                    p_hdr_det_factors_rec.TRX_BATCH_ID),
11534          APPLIED_TO_TRX_NUMBER             = decode(p_hdr_det_factors_rec.APPLIED_TO_TRX_NUMBER,FND_API.G_MISS_CHAR,
11535                                                                                                    APPLIED_TO_TRX_NUMBER,
11537          APPLICATION_DOC_STATUS            = decode(p_hdr_det_factors_rec.APPLICATION_DOC_STATUS,FND_API.G_MISS_CHAR,
11538                                                                                                    APPLICATION_DOC_STATUS,
11539                                                                                                    p_hdr_det_factors_rec.APPLICATION_DOC_STATUS),
11540          RDNG_SHIP_TO_PTY_TX_PROF_ID     = decode(p_hdr_det_factors_rec.ROUNDING_SHIP_TO_PARTY_ID,FND_API.G_MISS_NUM,
11541                                                                                                    RDNG_SHIP_TO_PTY_TX_PROF_ID,
11542                                                                                                    l_rdng_ship_to_ptp_id),
11543          RDNG_SHIP_FROM_PTY_TX_PROF_ID     = decode(p_hdr_det_factors_rec.ROUNDING_SHIP_FROM_PARTY_ID,FND_API.G_MISS_NUM,
11544                                                                                                    RDNG_SHIP_FROM_PTY_TX_PROF_ID,
11545                                                                                                    l_rdng_ship_from_ptp_id),
11546          RDNG_BILL_TO_PTY_TX_PROF_ID     = decode(p_hdr_det_factors_rec.ROUNDING_BILL_TO_PARTY_ID,FND_API.G_MISS_NUM,
11547                                                                                                    RDNG_BILL_TO_PTY_TX_PROF_ID,
11548                                                                                                    l_rdng_bill_to_ptp_id),
11549          RDNG_BILL_FROM_PTY_TX_PROF_ID     = decode(p_hdr_det_factors_rec.ROUNDING_BILL_FROM_PARTY_ID,FND_API.G_MISS_NUM,
11550                                                                                                    RDNG_BILL_FROM_PTY_TX_PROF_ID,
11551                                                                                                    l_rdng_bill_from_ptp_id),
11552          RDNG_SHIP_TO_PTY_TX_P_ST_ID     = decode(p_hdr_det_factors_rec.RNDG_SHIP_TO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11553                                                                                                    RDNG_SHIP_TO_PTY_TX_P_ST_ID,
11554                                                                                                    l_rdng_ship_to_ptp_st_id),
11555          RDNG_SHIP_FROM_PTY_TX_P_ST_ID     = decode(p_hdr_det_factors_rec.RNDG_SHIP_FROM_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11556                                                                                                    RDNG_SHIP_FROM_PTY_TX_P_ST_ID,
11557                                                                                                    l_rdng_ship_from_ptp_st_id),
11558          RDNG_BILL_TO_PTY_TX_P_ST_ID     = decode(p_hdr_det_factors_rec.RNDG_BILL_TO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11559                                                                                                    RDNG_BILL_TO_PTY_TX_P_ST_ID,
11560                                                                                                    l_rdng_bill_to_ptp_st_id),
11561          RDNG_BILL_FROM_PTY_TX_P_ST_ID      = decode(p_hdr_det_factors_rec.RNDG_BILL_FROM_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11562                                                                                                    RDNG_BILL_FROM_PTY_TX_P_ST_ID,
11563                                                                                                    l_rdng_bill_from_ptp_st_id),
11564          PORT_OF_ENTRY_CODE                =  decode(p_hdr_det_factors_rec.PORT_OF_ENTRY_CODE,FND_API.G_MISS_CHAR,
11565                                                                                                    PORT_OF_ENTRY_CODE,
11566                                                                                                    p_hdr_det_factors_rec.PORT_OF_ENTRY_CODE),
11567          TAX_REPORTING_FLAG                = decode(p_hdr_det_factors_rec.TAX_REPORTING_FLAG,FND_API.G_MISS_CHAR,
11568                                                                                                    TAX_REPORTING_FLAG,
11569                                                                                                    p_hdr_det_factors_rec.TAX_REPORTING_FLAG),
11570          PROVNL_TAX_DETERMINATION_DATE     = decode(p_hdr_det_factors_rec.PROVNL_TAX_DETERMINATION_DATE,FND_API.G_MISS_DATE,
11571                                                                                                    PROVNL_TAX_DETERMINATION_DATE,
11572                                                                                                    p_hdr_det_factors_rec.PROVNL_TAX_DETERMINATION_DATE),
11573          SHIP_THIRD_PTY_ACCT_ID            = decode(p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_ID,FND_API.G_MISS_NUM,
11574                                                                                                    SHIP_THIRD_PTY_ACCT_ID,
11575                                                                                                    p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_ID),
11576          BILL_THIRD_PTY_ACCT_ID            = decode(p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_ID,FND_API.G_MISS_NUM,
11577                                                                                                    BILL_THIRD_PTY_ACCT_ID,
11578                                                                                                    p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_ID),
11579          SHIP_THIRD_PTY_ACCT_SITE_ID       = decode(p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_SITE_ID,FND_API.G_MISS_NUM,
11580                                                                                                    SHIP_THIRD_PTY_ACCT_SITE_ID,
11581                                                                                                    p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_SITE_ID),
11582          BILL_THIRD_PTY_ACCT_SITE_ID       = decode(p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_SITE_ID,FND_API.G_MISS_NUM,
11586                                                                                                    SHIP_TO_CUST_ACCT_SITE_USE_ID,
11583                                                                                                    BILL_THIRD_PTY_ACCT_SITE_ID,
11584                                                                                                    p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_SITE_ID),
11585          SHIP_TO_CUST_ACCT_SITE_USE_ID     = decode(p_hdr_det_factors_rec.SHIP_TO_CUST_ACCT_SITE_USE_ID,FND_API.G_MISS_NUM,
11587                                                                                                    p_hdr_det_factors_rec.SHIP_TO_CUST_ACCT_SITE_USE_ID),
11588          BILL_TO_CUST_ACCT_SITE_USE_ID     = decode(p_hdr_det_factors_rec.BILL_TO_CUST_ACCT_SITE_USE_ID,FND_API.G_MISS_NUM,
11589                                                                                                    BILL_TO_CUST_ACCT_SITE_USE_ID,
11590                                                                                                    p_hdr_det_factors_rec.BILL_TO_CUST_ACCT_SITE_USE_ID),
11591          SHIP_TO_LOCATION_ID               = decode(p_hdr_det_factors_rec.SHIP_TO_LOCATION_ID,FND_API.G_MISS_NUM,
11592                                                                                                    SHIP_TO_LOCATION_ID,
11593                                                                                                    p_hdr_det_factors_rec.SHIP_TO_LOCATION_ID),
11594          SHIP_FROM_LOCATION_ID             = decode(p_hdr_det_factors_rec.SHIP_FROM_LOCATION_ID,FND_API.G_MISS_NUM,
11595                                                                                                    SHIP_FROM_LOCATION_ID,
11596                                                                                                    p_hdr_det_factors_rec.SHIP_FROM_LOCATION_ID),
11597          BILL_TO_LOCATION_ID               = decode(p_hdr_det_factors_rec.BILL_TO_LOCATION_ID,FND_API.G_MISS_NUM,
11598                                                                                                    BILL_TO_LOCATION_ID,
11599                                                                                                    p_hdr_det_factors_rec.BILL_TO_LOCATION_ID),
11600          BILL_FROM_LOCATION_ID             = decode(p_hdr_det_factors_rec.BILL_FROM_LOCATION_ID,FND_API.G_MISS_NUM,
11601                                                                                                    BILL_FROM_LOCATION_ID,
11602                                                                                                    p_hdr_det_factors_rec.BILL_FROM_LOCATION_ID),
11603          POA_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POA_LOCATION_ID,FND_API.G_MISS_NUM,
11604                                                                                                    POA_LOCATION_ID,
11605                                                                                                    p_hdr_det_factors_rec.POA_LOCATION_ID),
11606          POO_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POO_LOCATION_ID,FND_API.G_MISS_NUM,
11607                                                                                                    POO_LOCATION_ID,
11608                                                                                                    p_hdr_det_factors_rec.POO_LOCATION_ID),
11609          PAYING_LOCATION_ID                = decode(p_hdr_det_factors_rec.PAYING_LOCATION_ID,FND_API.G_MISS_NUM,
11610                                                                                                    PAYING_LOCATION_ID,
11611                                                                                                    p_hdr_det_factors_rec.PAYING_LOCATION_ID),
11612          OWN_HQ_LOCATION_ID                = decode(p_hdr_det_factors_rec.OWN_HQ_LOCATION_ID,FND_API.G_MISS_NUM,
11613                                                                                                    OWN_HQ_LOCATION_ID,
11614                                                                                                    p_hdr_det_factors_rec.OWN_HQ_LOCATION_ID),
11615          TRADING_HQ_LOCATION_ID            = decode(p_hdr_det_factors_rec.TRADING_HQ_LOCATION_ID,FND_API.G_MISS_NUM,
11616                                                                                                    TRADING_HQ_LOCATION_ID,
11617                                                                                                    p_hdr_det_factors_rec.TRADING_HQ_LOCATION_ID),
11618          POC_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POC_LOCATION_ID,FND_API.G_MISS_NUM,
11619                                                                                                    POC_LOCATION_ID,
11620                                                                                                    p_hdr_det_factors_rec.POC_LOCATION_ID),
11621          POI_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POI_LOCATION_ID,FND_API.G_MISS_NUM,
11622                                                                                                    POI_LOCATION_ID,
11623                                                                                                    p_hdr_det_factors_rec.POI_LOCATION_ID),
11624          POD_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POD_LOCATION_ID,FND_API.G_MISS_NUM,
11625                                                                                                    POD_LOCATION_ID,
11626                                                                                                    p_hdr_det_factors_rec.POD_LOCATION_ID),
11627          TITLE_TRANSFER_LOCATION_ID        = decode(p_hdr_det_factors_rec.TITLE_TRANSFER_LOCATION_ID,FND_API.G_MISS_NUM,
11628                                                                                                    TITLE_TRANSFER_LOCATION_ID,
11629                                                                                                    p_hdr_det_factors_rec.TITLE_TRANSFER_LOCATION_ID),
11630          SHIP_TO_PARTY_TAX_PROF_ID         = decode(p_hdr_det_factors_rec.SHIP_TO_PARTY_ID,FND_API.G_MISS_NUM,
11631                                                                                                    SHIP_TO_PARTY_TAX_PROF_ID,
11632                                                                                                    l_ship_to_ptp_id),
11636          POA_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POA_PARTY_ID,FND_API.G_MISS_NUM,
11633          SHIP_FROM_PARTY_TAX_PROF_ID       = decode(p_hdr_det_factors_rec.SHIP_FROM_PARTY_ID,FND_API.G_MISS_NUM,
11634                                                                                                    SHIP_FROM_PARTY_TAX_PROF_ID,
11635                                                                                                    l_ship_from_ptp_id),
11637                                                                                                    POA_PARTY_TAX_PROF_ID,
11638                                                                                                    l_poa_ptp_id),
11639          POO_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POO_PARTY_ID,FND_API.G_MISS_NUM,
11640                                                                                                    POO_PARTY_TAX_PROF_ID,
11641                                                                                                    l_poo_ptp_id),
11642          PAYING_PARTY_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.PAYING_PARTY_ID,FND_API.G_MISS_NUM,
11643                                                                                                    PAYING_PARTY_TAX_PROF_ID,
11644                                                                                                    p_hdr_det_factors_rec.PAYING_PARTY_TAX_PROF_ID),
11645          OWN_HQ_PARTY_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.OWN_HQ_PARTY_ID,FND_API.G_MISS_NUM,
11646                                                                                                    OWN_HQ_PARTY_TAX_PROF_ID,
11647                                                                                                    p_hdr_det_factors_rec.OWN_HQ_PARTY_TAX_PROF_ID),
11648          TRADING_HQ_PARTY_TAX_PROF_ID      = decode(p_hdr_det_factors_rec.TRADING_HQ_PARTY_ID,FND_API.G_MISS_NUM,
11649                                                                                                    TRADING_HQ_PARTY_TAX_PROF_ID,
11650                                                                                                    p_hdr_det_factors_rec.TRADING_HQ_PARTY_TAX_PROF_ID),
11651          POI_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POI_PARTY_ID,FND_API.G_MISS_NUM,
11652                                                                                                    POI_PARTY_TAX_PROF_ID,
11653                                                                                                    p_hdr_det_factors_rec.POI_PARTY_TAX_PROF_ID),
11654          POD_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POD_PARTY_ID,FND_API.G_MISS_NUM,
11655                                                                                                    POD_PARTY_TAX_PROF_ID,
11656                                                                                                    p_hdr_det_factors_rec.POD_PARTY_TAX_PROF_ID),
11657          BILL_TO_PARTY_TAX_PROF_ID         = decode(p_hdr_det_factors_rec.BILL_TO_PARTY_ID,FND_API.G_MISS_NUM,
11658                                                                                                    BILL_TO_PARTY_TAX_PROF_ID,
11659                                                                                                    l_bill_to_ptp_id),
11660          BILL_FROM_PARTY_TAX_PROF_ID       = decode(p_hdr_det_factors_rec.BILL_FROM_PARTY_ID,FND_API.G_MISS_NUM,
11661                                                                                                    BILL_FROM_PARTY_TAX_PROF_ID,
11662                                                                                                    l_bill_from_ptp_id),
11663          TITLE_TRANS_PARTY_TAX_PROF_ID     = decode(p_hdr_det_factors_rec.TITLE_TRANSFER_PARTY_ID,FND_API.G_MISS_NUM,
11664                                                                                                    TITLE_TRANS_PARTY_TAX_PROF_ID,
11665                                                                                                    p_hdr_det_factors_rec.TITLE_TRANS_PARTY_TAX_PROF_ID),
11666          SHIP_TO_SITE_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.SHIP_TO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11667                                                                                                    SHIP_TO_SITE_TAX_PROF_ID,
11668                                                                                                    l_ship_to_ptp_site_id),
11669          SHIP_FROM_SITE_TAX_PROF_ID        = decode(p_hdr_det_factors_rec.SHIP_FROM_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11670                                                                                                    SHIP_FROM_SITE_TAX_PROF_ID,
11671                                                                                                    l_ship_from_ptp_site_id),
11672          BILL_TO_SITE_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.BILL_TO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11673                                                                                                    BILL_TO_SITE_TAX_PROF_ID,
11674                                                                                                    l_bill_to_ptp_site_id),
11675          BILL_FROM_SITE_TAX_PROF_ID        = decode(p_hdr_det_factors_rec.BILL_FROM_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11676                                                                                                    BILL_FROM_SITE_TAX_PROF_ID,
11677                                                                                                    l_bill_from_ptp_site_id),
11678          POA_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POA_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11679                                                                                                    POA_SITE_TAX_PROF_ID,
11680                                                                                                    l_poa_ptp_site_id),
11681          POO_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11682                                                                                                    POO_SITE_TAX_PROF_ID,
11683                                                                                                    l_poo_ptp_site_id),
11684          PAYING_SITE_TAX_PROF_ID           = decode(p_hdr_det_factors_rec.PAYING_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11688                                                                                                    OWN_HQ_SITE_TAX_PROF_ID,
11685                                                                                                    PAYING_SITE_TAX_PROF_ID,
11686                                                                                                    p_hdr_det_factors_rec.PAYING_SITE_TAX_PROF_ID),
11687          OWN_HQ_SITE_TAX_PROF_ID           = decode(p_hdr_det_factors_rec.OWN_HQ_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11689                                                                                                    p_hdr_det_factors_rec.OWN_HQ_SITE_TAX_PROF_ID),
11690          POI_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POI_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11691                                                                                                    POI_SITE_TAX_PROF_ID,
11692                                                                                                    p_hdr_det_factors_rec.POI_SITE_TAX_PROF_ID),
11693          POD_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POD_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11694                                                                                                    POD_SITE_TAX_PROF_ID,
11695                                                                                                    p_hdr_det_factors_rec.POD_SITE_TAX_PROF_ID),
11696          TITLE_TRANS_SITE_TAX_PROF_ID      = decode(p_hdr_det_factors_rec.TITLE_TRANSFER_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11697                                                                                                    TITLE_TRANS_SITE_TAX_PROF_ID,
11698                                                                                                    p_hdr_det_factors_rec.TITLE_TRANS_SITE_TAX_PROF_ID),
11699          HQ_ESTB_PARTY_TAX_PROF_ID         = l_hq_estb_ptp_id,
11700          LINE_LEVEL_ACTION                 = decode(LINE_LEVEL_ACTION, 'CREATE','UPDATE',
11701                                                                        'SYNCHRONIZE','UPDATE',
11702                                                                        'COPY_AND_CREATE','UPDATE',
11703                                                                        LINE_LEVEL_ACTION),
11704          TAX_PROCESSING_COMPLETED_FLAG     = 'N',
11705          LAST_UPDATE_DATE                  = sysdate,
11706          LAST_UPDATED_BY                   = fnd_global.user_id,
11707          LAST_UPDATE_LOGIN                 = fnd_global.conc_login_id
11708     WHERE APPLICATION_ID   = p_hdr_det_factors_rec.APPLICATION_ID
11709       AND ENTITY_CODE      = p_hdr_det_factors_rec.ENTITY_CODE
11710       AND EVENT_CLASS_CODE = p_hdr_det_factors_rec.EVENT_CLASS_CODE
11711       AND TRX_ID           = p_hdr_det_factors_rec.TRX_ID;
11712      --Bugfix 4486946 -Call on the fly upgrade if the transaction if not found
11713     IF sql%NOTFOUND THEN
11714        l_upg_trx_info_rec.application_id   := l_event_class_rec.application_id;
11715        l_upg_trx_info_rec.entity_code      := l_event_class_rec.entity_code;
11716        l_upg_trx_info_rec.event_class_code := l_event_class_rec.event_class_code;
11717        l_upg_trx_info_rec.trx_id           := l_event_class_rec.trx_id;
11718        ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(p_upg_trx_info_rec   =>  l_upg_trx_info_rec,
11719                                                     x_return_status      =>  l_return_status
11720                                                    );
11721        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11722          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11723            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly returned errors');
11724          END IF;
11725          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11726            RAISE FND_API.G_EXC_ERROR;
11727          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11728            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11729          END IF;
11730        END IF;
11731 
11732        ZX_R11I_TAX_PARTNER_PKG.copy_trx_line_for_ptnr_bef_upd(NULL,
11733                                                             l_event_class_rec,
11734                                                             NULL,
11735                                                             'N',
11736                                                             NULL,
11737                                                  NULL,
11738                                                             l_return_status
11739                                                             );
11740        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11741           x_return_status := l_return_status ;
11742           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11743              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_R11I_TAX_PARTNER_PKG.copy_trx_line_for_ptnr_bef_upd  returned errors');
11744           END IF;
11745           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11746             RAISE FND_API.G_EXC_ERROR;
11747           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11748             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11749           END IF;
11750        END IF;
11751 
11752       /*-----------------------------------------------+
11753        |Update the headers only in zx_line_det_factors |
11754        +----------------------------------------------*/
11755        UPDATE ZX_LINES_DET_FACTORS SET
11756          APPLICATION_ID                    = p_hdr_det_factors_rec.APPLICATION_ID,
11757          ENTITY_CODE                       = p_hdr_det_factors_rec.ENTITY_CODE,
11758          EVENT_CLASS_CODE                  = p_hdr_det_factors_rec.EVENT_CLASS_CODE,
11762          TRX_ID                            = p_hdr_det_factors_rec.TRX_ID,
11759          EVENT_TYPE_CODE                   = p_hdr_det_factors_rec.EVENT_TYPE_CODE,
11760          INTERNAL_ORGANIZATION_ID          = p_hdr_det_factors_rec.INTERNAL_ORGANIZATION_ID,
11761          LEGAL_ENTITY_ID                   = p_hdr_det_factors_rec.LEGAL_ENTITY_ID,
11763          TRX_DOC_REVISION             = decode(p_hdr_det_factors_rec.TRX_DOC_REVISION,FND_API.G_MISS_CHAR,
11764                                                                                                    TRX_DOC_REVISION,
11765                                                                                                    p_hdr_det_factors_rec.TRX_DOC_REVISION),
11766          TRX_DATE                          = decode(p_hdr_det_factors_rec.TRX_DATE,FND_API.G_MISS_DATE,
11767                                                                                                    TRX_DATE,
11768                                                                                                    p_hdr_det_factors_rec.TRX_DATE),
11769          LEDGER_ID                         = decode(p_hdr_det_factors_rec.LEDGER_ID,FND_API.G_MISS_NUM,
11770                                                                                                    LEDGER_ID,
11771                                                                                                    p_hdr_det_factors_rec.LEDGER_ID),
11772          INTERNAL_ORG_LOCATION_ID          = decode(p_hdr_det_factors_rec.INTERNAL_ORG_LOCATION_ID,FND_API.G_MISS_NUM,
11773                                                                                                    INTERNAL_ORG_LOCATION_ID,
11774                                                                                                    p_hdr_det_factors_rec.INTERNAL_ORG_LOCATION_ID),
11775          TRX_CURRENCY_CODE                 = decode(p_hdr_det_factors_rec.TRX_CURRENCY_CODE,FND_API.G_MISS_CHAR,
11776                                                                                                    TRX_CURRENCY_CODE,
11777                                                                                                    p_hdr_det_factors_rec.TRX_CURRENCY_CODE),
11778          CURRENCY_CONVERSION_TYPE          = decode(p_hdr_det_factors_rec.CURRENCY_CONVERSION_TYPE,FND_API.G_MISS_CHAR,
11779                                                                                                    CURRENCY_CONVERSION_TYPE,
11780                                                                                                    p_hdr_det_factors_rec.CURRENCY_CONVERSION_TYPE),
11781          CURRENCY_CONVERSION_RATE          = decode(p_hdr_det_factors_rec.CURRENCY_CONVERSION_RATE,FND_API.G_MISS_NUM,
11782                                                                                                    CURRENCY_CONVERSION_RATE,
11783                                                                                                    p_hdr_det_factors_rec.CURRENCY_CONVERSION_RATE),
11784          CURRENCY_CONVERSION_DATE          = decode(p_hdr_det_factors_rec.CURRENCY_CONVERSION_DATE,FND_API.G_MISS_DATE,
11785                                                                                                    CURRENCY_CONVERSION_DATE,
11786                                                                                                    p_hdr_det_factors_rec.CURRENCY_CONVERSION_DATE),
11787          MINIMUM_ACCOUNTABLE_UNIT     = decode(p_hdr_det_factors_rec.MINIMUM_ACCOUNTABLE_UNIT,FND_API.G_MISS_NUM,
11788                                                                                                    MINIMUM_ACCOUNTABLE_UNIT,
11789                                                                                                    p_hdr_det_factors_rec.MINIMUM_ACCOUNTABLE_UNIT),
11790          PRECISION                         =  decode(p_hdr_det_factors_rec.PRECISION,FND_API.G_MISS_NUM,
11791                                                                                                    PRECISION,
11792                                                                                                    p_hdr_det_factors_rec.PRECISION),
11793          ESTABLISHMENT_ID                  = decode(p_hdr_det_factors_rec.ESTABLISHMENT_ID,FND_API.G_MISS_NUM,
11794                                                                                                     ESTABLISHMENT_ID,
11795                                                                                                     p_hdr_det_factors_rec.ESTABLISHMENT_ID),
11796          RECEIVABLES_TRX_TYPE_ID     = decode(p_hdr_det_factors_rec.RECEIVABLES_TRX_TYPE_ID,FND_API.G_MISS_NUM,
11797                                                                                                     RECEIVABLES_TRX_TYPE_ID,
11798                                                                                                     p_hdr_det_factors_rec.RECEIVABLES_TRX_TYPE_ID),
11799          RELATED_DOC_APPLICATION_ID     = decode(p_hdr_det_factors_rec.RELATED_DOC_APPLICATION_ID,FND_API.G_MISS_NUM,
11800                                                                                                     RELATED_DOC_APPLICATION_ID,
11801                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_APPLICATION_ID),
11802          RELATED_DOC_ENTITY_CODE     = decode(p_hdr_det_factors_rec.RELATED_DOC_ENTITY_CODE,FND_API.G_MISS_CHAR,
11803                                                                                                     RELATED_DOC_ENTITY_CODE,
11804                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_ENTITY_CODE),
11805          RELATED_DOC_EVENT_CLASS_CODE     = decode(p_hdr_det_factors_rec.RELATED_DOC_EVENT_CLASS_CODE,FND_API.G_MISS_CHAR,
11806                                                                                                     RELATED_DOC_EVENT_CLASS_CODE,
11807                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_EVENT_CLASS_CODE),
11808          RELATED_DOC_TRX_ID             = decode(p_hdr_det_factors_rec.RELATED_DOC_TRX_ID,FND_API.G_MISS_NUM,
11812                                                                                                     RELATED_DOC_NUMBER,
11809                                                                                                     RELATED_DOC_TRX_ID,
11810                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_TRX_ID),
11811          RELATED_DOC_NUMBER             = decode(p_hdr_det_factors_rec.RELATED_DOC_NUMBER,FND_API.G_MISS_CHAR,
11813                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_NUMBER),
11814          RELATED_DOC_DATE                  = decode(p_hdr_det_factors_rec.RELATED_DOC_DATE,FND_API.G_MISS_DATE,
11815                                                                                                     RELATED_DOC_DATE,
11816                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_DATE),
11817          DEFAULT_TAXATION_COUNTRY     = decode(p_hdr_det_factors_rec.DEFAULT_TAXATION_COUNTRY,FND_API.G_MISS_CHAR,
11818                                                                                                     DEFAULT_TAXATION_COUNTRY,
11819                                                                                                     p_hdr_det_factors_rec.DEFAULT_TAXATION_COUNTRY),
11820          TRX_NUMBER                     = decode(p_hdr_det_factors_rec.TRX_NUMBER,FND_API.G_MISS_CHAR,
11821                                                                                                     TRX_NUMBER,
11822                                                                                                     p_hdr_det_factors_rec.TRX_NUMBER),
11823          TRX_DESCRIPTION             = decode(p_hdr_det_factors_rec.TRX_DESCRIPTION,FND_API.G_MISS_CHAR,
11824                                                                                                    TRX_DESCRIPTION,
11825                                                                                                    p_hdr_det_factors_rec.TRX_DESCRIPTION),
11826          TRX_COMMUNICATED_DATE             = decode(p_hdr_det_factors_rec.TRX_COMMUNICATED_DATE,FND_API.G_MISS_DATE,
11827                                                                                                    TRX_COMMUNICATED_DATE,
11828                                                                                                    p_hdr_det_factors_rec.TRX_COMMUNICATED_DATE),
11829          BATCH_SOURCE_ID             = decode(p_hdr_det_factors_rec.BATCH_SOURCE_ID,FND_API.G_MISS_NUM,
11830                                                                                                    BATCH_SOURCE_ID,
11831                                                                                                    p_hdr_det_factors_rec.BATCH_SOURCE_ID),
11832          BATCH_SOURCE_NAME             =  decode(p_hdr_det_factors_rec.BATCH_SOURCE_NAME,FND_API.G_MISS_CHAR,
11833                                                                                                    BATCH_SOURCE_NAME,
11834                                                                                                    p_hdr_det_factors_rec.BATCH_SOURCE_NAME),
11835          DOC_SEQ_ID                     = decode(p_hdr_det_factors_rec.DOC_SEQ_ID,FND_API.G_MISS_NUM,
11836                                                                                                    DOC_SEQ_ID,
11837                                                                                                    p_hdr_det_factors_rec.DOC_SEQ_ID),
11838          DOC_SEQ_NAME                     = decode(p_hdr_det_factors_rec.DOC_SEQ_NAME,FND_API.G_MISS_CHAR,
11839                                                                                                    DOC_SEQ_NAME,
11840                                                                                                    p_hdr_det_factors_rec.DOC_SEQ_NAME),
11841          DOC_SEQ_VALUE                     = decode(p_hdr_det_factors_rec.DOC_SEQ_VALUE,FND_API.G_MISS_CHAR,
11842                                                                                                    DOC_SEQ_VALUE,
11843                                                                                                    p_hdr_det_factors_rec.DOC_SEQ_VALUE),
11844          TRX_DUE_DATE                     = decode(p_hdr_det_factors_rec.TRX_DUE_DATE,FND_API.G_MISS_DATE,
11845                                                                                                    TRX_DUE_DATE,
11846                                                                                                    p_hdr_det_factors_rec.TRX_DUE_DATE),
11847          TRX_TYPE_DESCRIPTION             = decode(p_hdr_det_factors_rec.TRX_TYPE_DESCRIPTION,FND_API.G_MISS_CHAR,
11848                                                                                                    TRX_TYPE_DESCRIPTION,
11849                                                                                                    p_hdr_det_factors_rec.TRX_TYPE_DESCRIPTION),
11850          DOCUMENT_SUB_TYPE             = decode(p_hdr_det_factors_rec.DOCUMENT_SUB_TYPE,FND_API.G_MISS_CHAR,
11851                                                                                                    DOCUMENT_SUB_TYPE,
11852                                                                                                    p_hdr_det_factors_rec.DOCUMENT_SUB_TYPE),
11853          SUPPLIER_TAX_INVOICE_NUMBER     = decode(p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_NUMBER,FND_API.G_MISS_CHAR,
11854                                                                                                    SUPPLIER_TAX_INVOICE_NUMBER,
11855                                                                                                    p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_NUMBER),
11856          SUPPLIER_TAX_INVOICE_DATE     = decode(p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_DATE,FND_API.G_MISS_DATE,
11857                                                                                                    SUPPLIER_TAX_INVOICE_DATE,
11858                                                                                                    p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_DATE),
11862          TAX_INVOICE_DATE             = decode(p_hdr_det_factors_rec.TAX_INVOICE_DATE,FND_API.G_MISS_DATE,
11859          SUPPLIER_EXCHANGE_RATE             = decode(p_hdr_det_factors_rec.SUPPLIER_EXCHANGE_RATE,FND_API.G_MISS_NUM,
11860                                                                                                    SUPPLIER_EXCHANGE_RATE,
11861                                                                                                    p_hdr_det_factors_rec.SUPPLIER_EXCHANGE_RATE),
11863                                                                                                    TAX_INVOICE_DATE,
11864                                                                                                    p_hdr_det_factors_rec.TAX_INVOICE_DATE),
11865          TAX_INVOICE_NUMBER             = decode(p_hdr_det_factors_rec.TAX_INVOICE_NUMBER,FND_API.G_MISS_CHAR,
11866                                                                                                    TAX_INVOICE_NUMBER,
11867                                                                                                    p_hdr_det_factors_rec.TAX_INVOICE_NUMBER),
11868          CTRL_TOTAL_HDR_TX_AMT             = decode(p_hdr_det_factors_rec.CTRL_TOTAL_HDR_TX_AMT,FND_API.G_MISS_NUM,
11869                                                                                                    ctrl_total_hdr_tx_amt,
11870                                                                                                    p_hdr_det_factors_rec.CTRL_TOTAL_HDR_TX_AMT),
11871          FIRST_PTY_ORG_ID             = l_event_class_rec.first_pty_org_id,
11872          TAX_EVENT_CLASS_CODE             = l_event_class_rec.TAX_EVENT_CLASS_CODE,
11873          TAX_EVENT_TYPE_CODE             = l_event_class_rec.TAX_EVENT_TYPE_CODE,
11874          DOC_EVENT_STATUS             = l_event_class_rec.DOC_STATUS_CODE,
11875          TRX_BATCH_ID                      = decode(p_hdr_det_factors_rec.TRX_BATCH_ID,FND_API.G_MISS_NUM,
11876                                                                                                    TRX_BATCH_ID,
11877                                                                                                    p_hdr_det_factors_rec.TRX_BATCH_ID),
11878          APPLIED_TO_TRX_NUMBER             = decode(p_hdr_det_factors_rec.APPLIED_TO_TRX_NUMBER,FND_API.G_MISS_CHAR,
11879                                                                                                    APPLIED_TO_TRX_NUMBER,
11880                                                                                                    p_hdr_det_factors_rec.APPLIED_TO_TRX_NUMBER),
11881          APPLICATION_DOC_STATUS            = decode(p_hdr_det_factors_rec.APPLICATION_DOC_STATUS,FND_API.G_MISS_CHAR,
11882                                                                                                    APPLICATION_DOC_STATUS,
11883                                                                                                    p_hdr_det_factors_rec.APPLICATION_DOC_STATUS),
11884          RDNG_SHIP_TO_PTY_TX_PROF_ID     = decode(p_hdr_det_factors_rec.ROUNDING_SHIP_TO_PARTY_ID,FND_API.G_MISS_NUM,
11885                                                                                                    RDNG_SHIP_TO_PTY_TX_PROF_ID,
11886                                                                                                    l_rdng_ship_to_ptp_id),
11887          RDNG_SHIP_FROM_PTY_TX_PROF_ID     = decode(p_hdr_det_factors_rec.ROUNDING_SHIP_FROM_PARTY_ID,FND_API.G_MISS_NUM,
11888                                                                                                    RDNG_SHIP_FROM_PTY_TX_PROF_ID,
11889                                                                                                    l_rdng_ship_from_ptp_id),
11890          RDNG_BILL_TO_PTY_TX_PROF_ID     = decode(p_hdr_det_factors_rec.ROUNDING_BILL_TO_PARTY_ID,FND_API.G_MISS_NUM,
11891                                                                                                    RDNG_BILL_TO_PTY_TX_PROF_ID,
11892                                                                                                    l_rdng_bill_to_ptp_id),
11893          RDNG_BILL_FROM_PTY_TX_PROF_ID     = decode(p_hdr_det_factors_rec.ROUNDING_BILL_FROM_PARTY_ID,FND_API.G_MISS_NUM,
11894                                                                                                    RDNG_BILL_FROM_PTY_TX_PROF_ID,
11895                                                                                                    l_rdng_bill_from_ptp_id),
11896          RDNG_SHIP_TO_PTY_TX_P_ST_ID     = decode(p_hdr_det_factors_rec.RNDG_SHIP_TO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11897                                                                                                    RDNG_SHIP_TO_PTY_TX_P_ST_ID,
11898                                                                                                    l_rdng_ship_to_ptp_st_id),
11899          RDNG_SHIP_FROM_PTY_TX_P_ST_ID     = decode(p_hdr_det_factors_rec.RNDG_SHIP_FROM_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11900                                                                                                    RDNG_SHIP_FROM_PTY_TX_P_ST_ID,
11901                                                                                                    l_rdng_ship_from_ptp_st_id),
11902          RDNG_BILL_TO_PTY_TX_P_ST_ID     = decode(p_hdr_det_factors_rec.RNDG_BILL_TO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11903                                                                                                    RDNG_BILL_TO_PTY_TX_P_ST_ID,
11904                                                                                                    l_rdng_bill_to_ptp_st_id),
11905          RDNG_BILL_FROM_PTY_TX_P_ST_ID      = decode(p_hdr_det_factors_rec.RNDG_BILL_FROM_PARTY_SITE_ID,FND_API.G_MISS_NUM,
11906                                                                                                    RDNG_BILL_FROM_PTY_TX_P_ST_ID,
11907                                                                                                    l_rdng_bill_from_ptp_st_id),
11908          PORT_OF_ENTRY_CODE                =  decode(p_hdr_det_factors_rec.PORT_OF_ENTRY_CODE,FND_API.G_MISS_CHAR,
11909                                                                                                    PORT_OF_ENTRY_CODE,
11913                                                                                                    p_hdr_det_factors_rec.TAX_REPORTING_FLAG),
11910                                                                                                    p_hdr_det_factors_rec.PORT_OF_ENTRY_CODE),
11911          TAX_REPORTING_FLAG                = decode(p_hdr_det_factors_rec.TAX_REPORTING_FLAG,FND_API.G_MISS_CHAR,
11912                                                                                                    TAX_REPORTING_FLAG,
11914          PROVNL_TAX_DETERMINATION_DATE     = decode(p_hdr_det_factors_rec.PROVNL_TAX_DETERMINATION_DATE,FND_API.G_MISS_DATE,
11915                                                                                                    PROVNL_TAX_DETERMINATION_DATE,
11916                                                                                                    p_hdr_det_factors_rec.PROVNL_TAX_DETERMINATION_DATE),
11917          SHIP_THIRD_PTY_ACCT_ID            = decode(p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_ID,FND_API.G_MISS_NUM,
11918                                                                                                    SHIP_THIRD_PTY_ACCT_ID,
11919                                                                                                    p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_ID),
11920          BILL_THIRD_PTY_ACCT_ID            = decode(p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_ID,FND_API.G_MISS_NUM,
11921                                                                                                    BILL_THIRD_PTY_ACCT_ID,
11922                                                                                                    p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_ID),
11923          SHIP_THIRD_PTY_ACCT_SITE_ID       = decode(p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_SITE_ID,FND_API.G_MISS_NUM,
11924                                                                                                    SHIP_THIRD_PTY_ACCT_SITE_ID,
11925                                                                                                    p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_SITE_ID),
11926          BILL_THIRD_PTY_ACCT_SITE_ID       = decode(p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_SITE_ID,FND_API.G_MISS_NUM,
11927                                                                                                    BILL_THIRD_PTY_ACCT_SITE_ID,
11928                                                                                                    p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_SITE_ID),
11929          SHIP_TO_CUST_ACCT_SITE_USE_ID     = decode(p_hdr_det_factors_rec.SHIP_TO_CUST_ACCT_SITE_USE_ID,FND_API.G_MISS_NUM,
11930                                                                                                    SHIP_TO_CUST_ACCT_SITE_USE_ID,
11931                                                                                                    p_hdr_det_factors_rec.SHIP_TO_CUST_ACCT_SITE_USE_ID),
11932          BILL_TO_CUST_ACCT_SITE_USE_ID     = decode(p_hdr_det_factors_rec.BILL_TO_CUST_ACCT_SITE_USE_ID,FND_API.G_MISS_NUM,
11933                                                                                                    BILL_TO_CUST_ACCT_SITE_USE_ID,
11934                                                                                                    p_hdr_det_factors_rec.BILL_TO_CUST_ACCT_SITE_USE_ID),
11935          SHIP_TO_LOCATION_ID               = decode(p_hdr_det_factors_rec.SHIP_TO_LOCATION_ID,FND_API.G_MISS_NUM,
11936                                                                                                    SHIP_TO_LOCATION_ID,
11937                                                                                                    p_hdr_det_factors_rec.SHIP_TO_LOCATION_ID),
11938          SHIP_FROM_LOCATION_ID             = decode(p_hdr_det_factors_rec.SHIP_FROM_LOCATION_ID,FND_API.G_MISS_NUM,
11939                                                                                                    SHIP_FROM_LOCATION_ID,
11940                                                                                                    p_hdr_det_factors_rec.SHIP_FROM_LOCATION_ID),
11941          BILL_TO_LOCATION_ID               = decode(p_hdr_det_factors_rec.BILL_TO_LOCATION_ID,FND_API.G_MISS_NUM,
11942                                                                                                    BILL_TO_LOCATION_ID,
11943                                                                                                    p_hdr_det_factors_rec.BILL_TO_LOCATION_ID),
11944          BILL_FROM_LOCATION_ID             = decode(p_hdr_det_factors_rec.BILL_FROM_LOCATION_ID,FND_API.G_MISS_NUM,
11945                                                                                                    BILL_FROM_LOCATION_ID,
11946                                                                                                    p_hdr_det_factors_rec.BILL_FROM_LOCATION_ID),
11947          POA_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POA_LOCATION_ID,FND_API.G_MISS_NUM,
11948                                                                                                    POA_LOCATION_ID,
11949                                                                                                    p_hdr_det_factors_rec.POA_LOCATION_ID),
11950          POO_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POO_LOCATION_ID,FND_API.G_MISS_NUM,
11951                                                                                                    POO_LOCATION_ID,
11952                                                                                                    p_hdr_det_factors_rec.POO_LOCATION_ID),
11953          PAYING_LOCATION_ID                = decode(p_hdr_det_factors_rec.PAYING_LOCATION_ID,FND_API.G_MISS_NUM,
11954                                                                                                    PAYING_LOCATION_ID,
11955                                                                                                    p_hdr_det_factors_rec.PAYING_LOCATION_ID),
11956          OWN_HQ_LOCATION_ID                = decode(p_hdr_det_factors_rec.OWN_HQ_LOCATION_ID,FND_API.G_MISS_NUM,
11957                                                                                                    OWN_HQ_LOCATION_ID,
11958                                                                                                    p_hdr_det_factors_rec.OWN_HQ_LOCATION_ID),
11959          TRADING_HQ_LOCATION_ID            = decode(p_hdr_det_factors_rec.TRADING_HQ_LOCATION_ID,FND_API.G_MISS_NUM,
11963                                                                                                    POC_LOCATION_ID,
11960                                                                                                    TRADING_HQ_LOCATION_ID,
11961                                                                                                    p_hdr_det_factors_rec.TRADING_HQ_LOCATION_ID),
11962          POC_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POC_LOCATION_ID,FND_API.G_MISS_NUM,
11964                                                                                                    p_hdr_det_factors_rec.POC_LOCATION_ID),
11965          POI_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POI_LOCATION_ID,FND_API.G_MISS_NUM,
11966                                                                                                    POI_LOCATION_ID,
11967                                                                                                    p_hdr_det_factors_rec.POI_LOCATION_ID),
11968          POD_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POD_LOCATION_ID,FND_API.G_MISS_NUM,
11969                                                                                                    POD_LOCATION_ID,
11970                                                                                                    p_hdr_det_factors_rec.POD_LOCATION_ID),
11971          TITLE_TRANSFER_LOCATION_ID        = decode(p_hdr_det_factors_rec.TITLE_TRANSFER_LOCATION_ID,FND_API.G_MISS_NUM,
11972                                                                                                    TITLE_TRANSFER_LOCATION_ID,
11973                                                                                                    p_hdr_det_factors_rec.TITLE_TRANSFER_LOCATION_ID),
11974          SHIP_TO_PARTY_TAX_PROF_ID         = decode(p_hdr_det_factors_rec.SHIP_TO_PARTY_ID,FND_API.G_MISS_NUM,
11975                                                                                                    SHIP_TO_PARTY_TAX_PROF_ID,
11976                                                                                                    l_ship_to_ptp_id),
11977          SHIP_FROM_PARTY_TAX_PROF_ID       = decode(p_hdr_det_factors_rec.SHIP_FROM_PARTY_ID,FND_API.G_MISS_NUM,
11978                                                                                                    SHIP_FROM_PARTY_TAX_PROF_ID,
11979                                                                                                    l_ship_from_ptp_id),
11980          POA_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POA_PARTY_ID,FND_API.G_MISS_NUM,
11981                                                                                                    POA_PARTY_TAX_PROF_ID,
11982                                                                                                    l_poa_ptp_id),
11983          POO_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POO_PARTY_ID,FND_API.G_MISS_NUM,
11984                                                                                                    POO_PARTY_TAX_PROF_ID,
11985                                                                                                    l_poo_ptp_id),
11986          PAYING_PARTY_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.PAYING_PARTY_ID,FND_API.G_MISS_NUM,
11987                                                                                                    PAYING_PARTY_TAX_PROF_ID,
11988                                                                                                    p_hdr_det_factors_rec.PAYING_PARTY_TAX_PROF_ID),
11989          OWN_HQ_PARTY_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.OWN_HQ_PARTY_ID,FND_API.G_MISS_NUM,
11990                                                                                                    OWN_HQ_PARTY_TAX_PROF_ID,
11991                                                                                                    p_hdr_det_factors_rec.OWN_HQ_PARTY_TAX_PROF_ID),
11992          TRADING_HQ_PARTY_TAX_PROF_ID      = decode(p_hdr_det_factors_rec.TRADING_HQ_PARTY_ID,FND_API.G_MISS_NUM,
11993                                                                                                    TRADING_HQ_PARTY_TAX_PROF_ID,
11994                                                                                                    p_hdr_det_factors_rec.TRADING_HQ_PARTY_TAX_PROF_ID),
11995          POI_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POI_PARTY_ID,FND_API.G_MISS_NUM,
11996                                                                                                    POI_PARTY_TAX_PROF_ID,
11997                                                                                                    p_hdr_det_factors_rec.POI_PARTY_TAX_PROF_ID),
11998          POD_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POD_PARTY_ID,FND_API.G_MISS_NUM,
11999                                                                                                    POD_PARTY_TAX_PROF_ID,
12000                                                                                                    p_hdr_det_factors_rec.POD_PARTY_TAX_PROF_ID),
12001          BILL_TO_PARTY_TAX_PROF_ID         = decode(p_hdr_det_factors_rec.BILL_TO_PARTY_ID,FND_API.G_MISS_NUM,
12002                                                                                                    BILL_TO_PARTY_TAX_PROF_ID,
12003                                                                                                    l_bill_to_ptp_id),
12004          BILL_FROM_PARTY_TAX_PROF_ID       = decode(p_hdr_det_factors_rec.BILL_FROM_PARTY_ID,FND_API.G_MISS_NUM,
12005                                                                                                    BILL_FROM_PARTY_TAX_PROF_ID,
12006                                                                                                    l_bill_from_ptp_id),
12007          TITLE_TRANS_PARTY_TAX_PROF_ID     = decode(p_hdr_det_factors_rec.TITLE_TRANSFER_PARTY_ID,FND_API.G_MISS_NUM,
12008                                                                                                    TITLE_TRANS_PARTY_TAX_PROF_ID,
12009                                                                                                    p_hdr_det_factors_rec.TITLE_TRANS_PARTY_TAX_PROF_ID),
12013          SHIP_FROM_SITE_TAX_PROF_ID        = decode(p_hdr_det_factors_rec.SHIP_FROM_PARTY_SITE_ID,FND_API.G_MISS_NUM,
12010          SHIP_TO_SITE_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.SHIP_TO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
12011                                                                                                    SHIP_TO_SITE_TAX_PROF_ID,
12012                                                                                                    l_ship_to_ptp_site_id),
12014                                                                                                    SHIP_FROM_SITE_TAX_PROF_ID,
12015                                                                                                    l_ship_from_ptp_site_id),
12016          BILL_TO_SITE_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.BILL_TO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
12017                                                                                                    BILL_TO_SITE_TAX_PROF_ID,
12018                                                                                                    l_bill_to_ptp_site_id),
12019          BILL_FROM_SITE_TAX_PROF_ID        = decode(p_hdr_det_factors_rec.BILL_FROM_PARTY_SITE_ID,FND_API.G_MISS_NUM,
12020                                                                                                    BILL_FROM_SITE_TAX_PROF_ID,
12021                                                                                                    l_bill_from_ptp_site_id),
12022          POA_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POA_PARTY_SITE_ID,FND_API.G_MISS_NUM,
12023                                                                                                    POA_SITE_TAX_PROF_ID,
12024                                                                                                    l_poa_ptp_site_id),
12025          POO_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
12026                                                                                                    POO_SITE_TAX_PROF_ID,
12027                                                                                                    l_poo_ptp_site_id),
12028          PAYING_SITE_TAX_PROF_ID           = decode(p_hdr_det_factors_rec.PAYING_PARTY_SITE_ID,FND_API.G_MISS_NUM,
12029                                                                                                    PAYING_SITE_TAX_PROF_ID,
12030                                                                                                    p_hdr_det_factors_rec.PAYING_SITE_TAX_PROF_ID),
12031          OWN_HQ_SITE_TAX_PROF_ID           = decode(p_hdr_det_factors_rec.OWN_HQ_PARTY_SITE_ID,FND_API.G_MISS_NUM,
12032                                                                                                    OWN_HQ_SITE_TAX_PROF_ID,
12033                                                                                                    p_hdr_det_factors_rec.OWN_HQ_SITE_TAX_PROF_ID),
12034          POI_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POI_PARTY_SITE_ID,FND_API.G_MISS_NUM,
12035                                                                                                    POI_SITE_TAX_PROF_ID,
12036                                                                                                    p_hdr_det_factors_rec.POI_SITE_TAX_PROF_ID),
12037          POD_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POD_PARTY_SITE_ID,FND_API.G_MISS_NUM,
12038                                                                                                    POD_SITE_TAX_PROF_ID,
12039                                                                                                    p_hdr_det_factors_rec.POD_SITE_TAX_PROF_ID),
12040          TITLE_TRANS_SITE_TAX_PROF_ID      = decode(p_hdr_det_factors_rec.TITLE_TRANSFER_PARTY_SITE_ID,FND_API.G_MISS_NUM,
12041                                                                                                    TITLE_TRANS_SITE_TAX_PROF_ID,
12042                                                                                                    p_hdr_det_factors_rec.TITLE_TRANS_SITE_TAX_PROF_ID),
12043          HQ_ESTB_PARTY_TAX_PROF_ID         = l_hq_estb_ptp_id,
12044          LINE_LEVEL_ACTION                 = decode(LINE_LEVEL_ACTION, 'CREATE','UPDATE',
12045                                                                        'SYNCHRONIZE','UPDATE',
12046                                                                         LINE_LEVEL_ACTION),
12047          TAX_PROCESSING_COMPLETED_FLAG     = 'N',
12048          LAST_UPDATE_DATE                  = sysdate,
12049          LAST_UPDATED_BY                   = fnd_global.user_id,
12050          LAST_UPDATE_LOGIN                 = fnd_global.conc_login_id
12051        WHERE APPLICATION_ID   = p_hdr_det_factors_rec.APPLICATION_ID
12052          AND ENTITY_CODE      = p_hdr_det_factors_rec.ENTITY_CODE
12053          AND EVENT_CLASS_CODE = p_hdr_det_factors_rec.EVENT_CLASS_CODE
12054          AND TRX_ID           = p_hdr_det_factors_rec.TRX_ID;
12055       END IF;
12056     --Bugfix 4486946 - on-the-fly upgrade end
12057 
12058     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12059       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
12060     END IF;
12061 
12062     EXCEPTION
12063         WHEN FND_API.G_EXC_ERROR THEN
12064           ROLLBACK TO Update_Det_Factors_Hdr_PVT;
12065           x_return_status := FND_API.G_RET_STS_ERROR ;
12066           DUMP_MSG;
12067         /*---------------------------------------------------------+
12068           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12069           | in the message stack. If there is only one message in   |
12070           | the stack it retrieves this message                     |
12071           +---------------------------------------------------------*/
12072           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12073                                     p_count   => x_msg_count,
12074                                     p_data    => x_msg_data
12078              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12075                                     );
12076 
12077            IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12079            END IF;
12080 
12081         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
12082           ROLLBACK TO Update_Det_Factors_Hdr_PVT;
12083           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12084           DUMP_MSG;
12085           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12086           FND_MSG_PUB.Add;
12087          /*---------------------------------------------------------+
12088           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12089           | in the message stack. If there is only one message in   |
12090           | the stack it retrieves this message                     |
12091           +---------------------------------------------------------*/
12092           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12093                                     p_count   => x_msg_count,
12094                                     p_data    => x_msg_data
12095                                     );
12096           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12097             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12098           END IF;
12099         WHEN OTHERS THEN
12100            ROLLBACK TO Update_Det_Factors_Hdr_PVT;
12101            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12102            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12103            FND_MSG_PUB.Add;
12104          /*---------------------------------------------------------+
12105           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12106           | in the message stack. If there is only one message in   |
12107           | the stack it retrieves this message                     |
12108           +---------------------------------------------------------*/
12109            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12110                                      p_count   => x_msg_count,
12111                                      p_data    => x_msg_data
12112                                      );
12113 
12114            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
12115               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
12116            END IF;
12117  END update_det_factors_hdr;
12118 
12119 
12120 /* ========================================================================*
12121  | PROCEDURE  update_line_det_factors : This procedure should be called by |
12122  | products when updating any of the line attributes on the transaction    |
12123  | so that the tax repository is also in sync with the line level updates  |
12124  | This line will be flagged to be picked up by the tax calculation process|
12125  * =======================================================================*/
12126 
12127 PROCEDURE update_line_det_factors (
12128   p_api_version        IN  NUMBER,
12129   p_init_msg_list      IN  VARCHAR2,
12130   p_commit             IN  VARCHAR2,
12131   p_validation_level   IN  NUMBER,
12132   x_return_status      OUT NOCOPY VARCHAR2,
12133   x_msg_count          OUT NOCOPY NUMBER,
12134   x_msg_data           OUT NOCOPY VARCHAR2
12135  )  IS
12136   l_api_name           CONSTANT  VARCHAR2(30) := 'UPDATE_LINE_DET_FACTORS';
12137   l_api_version        CONSTANT  NUMBER := 1.0;
12138   l_return_status      VARCHAR2(1);
12139   l_init_msg_list      VARCHAR2(1);
12140   l_user_updated_flag  VARCHAR2(1);
12141   l_call_default_APIs  BOOLEAN;
12142   l_upg_trx_info_rec   ZX_ON_FLY_TRX_UPGRADE_PKG.zx_upg_trx_info_rec_type;
12143   l_event_class_rec    event_class_rec_type;
12144 
12145  BEGIN
12146    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12147      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
12148    END IF;
12149 
12150   /*--------------------------------------------------+
12151    |   Standard start of API savepoint                |
12152    +--------------------------------------------------*/
12153    SAVEPOINT Update_Line_Det_Factors_PVT;
12154 
12155    /*--------------------------------------------------+
12156     |   Standard call to check for call compatibility  |
12157     +--------------------------------------------------*/
12158     IF NOT FND_API.Compatible_API_Call(l_api_version,
12159                                        p_api_version,
12160                                        l_api_name,
12161                                        G_PKG_NAME
12162                                        ) THEN
12163        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12164      END IF;
12165 
12166     /*--------------------------------------------------------------+
12167      |   Initialize message list if p_init_msg_list is set to TRUE  |
12168      +--------------------------------------------------------------*/
12169      IF p_init_msg_list is null THEN
12170        l_init_msg_list := FND_API.G_FALSE;
12171      ELSE
12172        l_init_msg_list := p_init_msg_list;
12173      END IF;
12174 
12175      IF FND_API.to_Boolean(l_init_msg_list) THEN
12176        FND_MSG_PUB.initialize;
12177      END IF;
12178 
12179   /*-----------------------------------------+
12180    |   Initialize return status to SUCCESS   |
12181    +-----------------------------------------*/
12182    x_return_status := FND_API.G_RET_STS_SUCCESS;
12183 
12184   /*-----------------------------------------+
12185    |   Populate Global Variable              |
12186    +-----------------------------------------*/
12187    G_PUB_SRVC := l_api_name;
12191    l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.INTERNAL_ORGANIZATION_ID(1);
12188    G_DATA_TRANSFER_MODE := 'PLS';
12189    G_EXTERNAL_API_CALL  := 'N';
12190 
12192    l_event_class_rec.LEGAL_ENTITY_ID              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEGAL_ENTITY_ID(1);
12193    l_event_class_rec.LEDGER_ID                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEDGER_ID(1);
12194    l_event_class_rec.APPLICATION_ID               :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.APPLICATION_ID(1);
12195    l_event_class_rec.ENTITY_CODE                  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ENTITY_CODE(1);
12196    l_event_class_rec.EVENT_CLASS_CODE             :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_CLASS_CODE(1);
12197    l_event_class_rec.EVENT_TYPE_CODE              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_TYPE_CODE(1);
12198    l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CTRL_TOTAL_HDR_TX_AMT(1);
12199    l_event_class_rec.TRX_ID                       :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_ID(1);
12200    l_event_class_rec.TRX_DATE                     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_DATE(1);
12201    l_event_class_rec.REL_DOC_DATE                 :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RELATED_DOC_DATE(1);
12202    l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PROVNL_TAX_DETERMINATION_DATE(1);
12203    l_event_class_rec.TRX_CURRENCY_CODE            :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_CURRENCY_CODE(1);
12204    l_event_class_rec.PRECISION                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PRECISION(1);
12205    l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_TYPE(1);
12206    l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_RATE(1);
12207    l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_DATE(1);
12208    l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_TO_PARTY_ID(1);
12209    l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_FROM_PARTY_ID(1);
12210    l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_TO_PARTY_ID(1);
12211    l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_FROM_PARTY_ID(1);
12212    l_event_class_rec.RNDG_SHIP_TO_PARTY_SITE_ID   :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_SHIP_TO_PARTY_SITE_ID(1);
12213    l_event_class_rec.RNDG_SHIP_FROM_PARTY_SITE_ID :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_SHIP_FROM_PARTY_SITE_ID(1);
12214    l_event_class_rec.RNDG_BILL_TO_PARTY_SITE_ID   :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_BILL_TO_PARTY_SITE_ID(1);
12215    l_event_class_rec.RNDG_BILL_FROM_PARTY_SITE_ID :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_BILL_FROM_PARTY_SITE_ID(1);
12216 
12217 
12218    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12219       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,
12220             'application_id: '||to_char(l_event_class_rec.application_id)||
12221              ', entity_code: '||l_event_class_rec.entity_code||
12222              ', event_class_code: '||l_event_class_rec.event_class_code||
12223              ', event_type_code: '||l_event_class_rec.event_type_code||
12224              ', trx_id: '||to_char(l_event_class_rec.trx_id)||
12225              ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
12226              ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
12227              ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
12228              ', trx_date: '||to_char(l_event_class_rec.trx_date)||
12229              ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
12230              ', provnl_tax_determination_date: '||to_char(l_event_class_rec.provnl_tax_determination_date)||
12231              ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
12232              ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
12233              ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
12234              ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
12235              ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
12236              ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
12237              ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
12238              ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
12239              ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
12240              ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
12241              ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
12242              ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id)
12243             );
12244    END IF;
12245 
12246 
12247    /*Lock the line so no updates by another user can happen*/
12248    BEGIN
12249      SELECT event_id,
12250             nvl(user_upd_det_factors_flag,'N')
12251       INTO l_event_class_rec.event_id,
12252            l_user_updated_flag
12253       FROM ZX_LINES_DET_FACTORS
12254      WHERE application_id   = l_event_class_rec.application_id
12255        AND entity_code      = l_event_class_rec.entity_code
12256        AND event_class_code = l_event_class_rec.event_class_code
12257        AND trx_id           = l_event_class_rec.trx_id
12258        AND trx_line_id      = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(1)
12262      EXCEPTION
12259        AND trx_level_type   = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(1)
12260      FOR UPDATE NOWAIT; --locks the line
12261 
12263        WHEN NO_DATA_FOUND THEN
12264          l_upg_trx_info_rec.application_id   := l_event_class_rec.application_id;
12265          l_upg_trx_info_rec.entity_code      := l_event_class_rec.entity_code;
12266          l_upg_trx_info_rec.event_class_code := l_event_class_rec.event_class_code;
12267          l_upg_trx_info_rec.trx_id           := l_event_class_rec.trx_id;
12268          ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(p_upg_trx_info_rec   =>  l_upg_trx_info_rec,
12269                                                       x_return_status      =>  l_return_status
12270                                                      );
12271          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12272            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12273              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly returned errors');
12274            END IF;
12275            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12276              RAISE FND_API.G_EXC_ERROR;
12277            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12278              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12279            END IF;
12280          END IF;
12281          /*Lock the line so no updates by another user can happen*/
12282          SELECT event_id,
12283                 nvl(user_upd_det_factors_flag,'N')
12284            INTO l_event_class_rec.event_id,
12285                 l_user_updated_flag
12286            FROM ZX_LINES_DET_FACTORS
12287           WHERE application_id   = l_event_class_rec.application_id
12288             AND entity_code      = l_event_class_rec.entity_code
12289             AND event_class_code = l_event_class_rec.event_class_code
12290             AND trx_id           = l_event_class_rec.trx_id
12291             AND trx_line_id      = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(1)
12292             AND trx_level_type   = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(1)
12293           FOR UPDATE NOWAIT; --locks the line
12294    END;
12295 
12296      /*------------------------------------------------------+
12297       |   Validate and Initializate parameters for Inserting |
12298       |   into line_det_factors                              |
12299       +------------------------------------------------------*/
12300 
12301    IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12302       FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
12303               'Validating Transaction: '||
12304               to_char(l_event_class_rec.trx_id)||
12305               ' of Application: '||
12306               to_char(l_event_class_rec.application_id) ||
12307               ' and Event Class: '||
12308               l_event_class_rec.event_class_code
12309             );
12310    END IF;
12311 
12312    ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors(p_event_class_rec =>l_event_class_rec,
12313                                                     p_trx_line_index  => 1,
12314                                                     x_return_status   =>l_return_status
12315                                                     );
12316 
12317    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12318      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12319         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12320           ':ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors returned errors');
12321      END IF;
12322      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12323         RAISE FND_API.G_EXC_ERROR;
12324      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12325         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12326      END IF;
12327    END IF;
12328 
12329 -- Fix for Bug 5038953
12330    ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TAX_EVENT_CLASS_CODE(1) := l_event_class_rec.TAX_EVENT_CLASS_CODE;
12331 -- End fix for Bug 5038953
12332 
12333    /*----------------------------------------------------------------------------+
12334    |Call the defaulting API to default the determining attributes if user has not|
12335    |already overridden them in the determining factors window in which case we   |
12336    |need to honor the overridden values                                          |
12337    +----------------------------------------------------------------------------*/
12338    IF l_user_updated_flag = 'N' THEN
12339       --Call the redefaulting APIs only if all tax determining attributes passed as null
12340       l_call_default_APIs := ZX_SRVC_TYP_PKG.decide_call_redefault_APIs (p_trx_line_index  => 1);
12341 
12342       IF l_call_default_APIs THEN
12343         IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(1) = 'UPDATE' THEN
12344            ZX_SRVC_TYP_PKG.call_redefaulting_APIs(p_event_class_rec  => l_event_class_rec,
12345                                                   p_trx_line_index   => 1,
12346                                                   x_return_status    => l_return_status
12347                                                  );
12348         END IF;
12349       END IF;
12350 
12351       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12352         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12353           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12354             ':ZX_SRVC_TYP_PKG.call_redefaulting_APIs returned errors');
12355         END IF;
12356         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12357            RAISE FND_API.G_EXC_ERROR;
12358         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12359            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12360         END IF;
12361       END IF;
12362    END IF;
12363 
12367    ZX_SRVC_TYP_PKG.insupd_line_det_factors(p_event_class_rec => l_event_class_rec,
12364    /*------------------------------------------+
12365    |Call to update the lines                   |
12366    +------------------------------------------*/
12368                                            x_return_status   => l_return_status
12369                                           );
12370 
12371    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12372      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12373         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12374           ':ZX_SRVC_TYP_PKG.insupd_line_det_factors returned errors');
12375      END IF;
12376      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12377         RAISE FND_API.G_EXC_ERROR;
12378      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12379         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12380      END IF;
12381    END IF;
12382 
12383    --Delete from the global structures so that there are no hanging/redundant
12384    --records sitting there
12385    ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
12386 
12387    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12388       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
12389    END IF;
12390 
12391    EXCEPTION
12392      WHEN FND_API.G_EXC_ERROR THEN
12393        ROLLBACK TO Update_Line_Det_Factors_PVT;
12394        x_return_status := FND_API.G_RET_STS_ERROR ;
12395        DUMP_MSG;
12396       /*---------------------------------------------------------+
12397        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12398        | in the message stack. If there is only one message in   |
12399        | the stack it retrieves this message                     |
12400        +---------------------------------------------------------*/
12401        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12402                                  p_count   => x_msg_count,
12403                                  p_data    => x_msg_data
12404                                  );
12405 
12406        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12407           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12408        END IF;
12409 
12410      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
12411        ROLLBACK TO Update_Line_Det_Factors_PVT;
12412        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12413        DUMP_MSG;
12414        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12415        FND_MSG_PUB.Add;
12416       /*---------------------------------------------------------+
12417        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12418        | in the message stack. If there is only one message in   |
12419        | the stack it retrieves this message                     |
12420        +---------------------------------------------------------*/
12421        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12422                                  p_count   => x_msg_count,
12423                                  p_data    => x_msg_data
12424                                 );
12425        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12426          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12427        END IF;
12428 
12429        WHEN OTHERS THEN
12430           /*-------------------------------------------------------+
12431            |  Handle application errors that result from trapable  |
12432            |  error conditions. The error messages have already    |
12433            |  been put on the error stack.                         |
12434            +-------------------------------------------------------*/
12435           ROLLBACK TO Update_Line_Det_Factors_PVT;
12436           IF (SQLCODE = 54) THEN
12437              x_return_status := FND_API.G_RET_STS_ERROR ;
12438              FND_MESSAGE.SET_NAME('ZX','ZX_RESOURCE_BUSY');
12439           ELSE
12440              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12441              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12442           END IF;
12443           FND_MSG_PUB.Add;
12444          /*---------------------------------------------------------+
12445           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12446           | in the message stack. If there is only one message in   |
12447           | the stack it retrieves this message                     |
12448           +---------------------------------------------------------*/
12449           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12450                                     p_count   => x_msg_count,
12451                                     p_data    => x_msg_data
12452                                     );
12453 
12454           IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
12455              FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
12456           END IF;
12457    END update_line_det_factors;
12458 
12459 /* ============================================================================*
12460  | PROCEDURE  copy_insert_line_det_factors : This procedure will be called      |
12461  | by iProcurement to insert all the transaction lines into zx_lines_det_factors|
12462  | after copying the tax determining attributes from the source document        |
12463  | information passed in. All lines thus inserted will be flagged to be picked  |
12464  | up by the tax calculation process                                            |
12465  * ============================================================================*/
12466 
12467  PROCEDURE copy_insert_line_det_factors(
12468   p_api_version        IN  NUMBER,
12469   p_init_msg_list      IN  VARCHAR2,
12473   x_msg_count          OUT NOCOPY NUMBER,
12470   p_commit             IN  VARCHAR2,
12471   p_validation_level   IN  NUMBER,
12472   x_return_status      OUT NOCOPY VARCHAR2,
12474   x_msg_data           OUT NOCOPY VARCHAR2
12475   )IS
12476   l_api_name                  CONSTANT  VARCHAR2(30) := 'COPY_INSERT_LINE_DET_FACTORS';
12477   l_api_version               CONSTANT  NUMBER := 1.0;
12478   l_return_status             VARCHAR2(1);
12479   l_event_class_rec           event_class_rec_type;
12480   l_line_det_rec              ZX_LINES_DET_FACTORS%rowtype;
12481   l_line_exists               NUMBER;
12482   l_record_exists             BOOLEAN;
12483   l_init_msg_list             VARCHAR2(1);
12484   l_tax_classification_code   VARCHAR2(50);
12485  BEGIN
12486    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12487      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
12488    END IF;
12489 
12490   /*--------------------------------------------------+
12491    |   Standard start of API savepoint                |
12492    +--------------------------------------------------*/
12493    SAVEPOINT Copy_Ins_Line_Det_Factors_PVT;
12494 
12495    /*--------------------------------------------------+
12496     |   Standard call to check for call compatibility  |
12497     +--------------------------------------------------*/
12498     IF NOT FND_API.Compatible_API_Call(l_api_version,
12499                                        p_api_version,
12500                                        l_api_name,
12501                                        G_PKG_NAME
12502                                        ) THEN
12503        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12504      END IF;
12505 
12506     /*--------------------------------------------------------------+
12507      |   Initialize message list if p_init_msg_list is set to TRUE  |
12508      +--------------------------------------------------------------*/
12509      IF p_init_msg_list is null THEN
12510        l_init_msg_list := FND_API.G_FALSE;
12511      ELSE
12512        l_init_msg_list := p_init_msg_list;
12513      END IF;
12514 
12515      IF FND_API.to_Boolean(l_init_msg_list) THEN
12516        FND_MSG_PUB.initialize;
12517      END IF;
12518 
12519   /*-----------------------------------------+
12520    |   Initialize return status to SUCCESS   |
12521    +-----------------------------------------*/
12522    x_return_status := FND_API.G_RET_STS_SUCCESS;
12523 
12524   /*-----------------------------------------+
12525    |   Populate Global Variable              |
12526    +-----------------------------------------*/
12527    G_PUB_SRVC := l_api_name;
12528    G_DATA_TRANSFER_MODE := 'PLS';
12529    G_EXTERNAL_API_CALL  := 'N';
12530 
12531 
12532    /*-----------------------------------------+
12533     |Populate the event class record structure|
12534     +-----------------------------------------*/
12535    l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.INTERNAL_ORGANIZATION_ID(1);
12536    l_event_class_rec.LEGAL_ENTITY_ID              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEGAL_ENTITY_ID(1);
12537    l_event_class_rec.LEDGER_ID                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEDGER_ID(1);
12538    l_event_class_rec.APPLICATION_ID               :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.APPLICATION_ID(1);
12539    l_event_class_rec.ENTITY_CODE                  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ENTITY_CODE(1);
12540    l_event_class_rec.EVENT_CLASS_CODE             :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_CLASS_CODE(1);
12541    l_event_class_rec.EVENT_TYPE_CODE              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_TYPE_CODE(1);
12542    l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CTRL_TOTAL_HDR_TX_AMT(1);
12543    l_event_class_rec.TRX_ID                       :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_ID(1);
12544    l_event_class_rec.TRX_DATE                     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_DATE(1);
12545    l_event_class_rec.REL_DOC_DATE                 :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RELATED_DOC_DATE(1);
12546    l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PROVNL_TAX_DETERMINATION_DATE(1);
12547    l_event_class_rec.TRX_CURRENCY_CODE            :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_CURRENCY_CODE(1);
12548    l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_TYPE(1);
12549    l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_RATE(1);
12550    l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_DATE(1);
12551    l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_TO_PARTY_ID(1);
12552    l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_FROM_PARTY_ID(1);
12553    l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_TO_PARTY_ID(1);
12554    l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_FROM_PARTY_ID(1);
12555    l_event_class_rec.RNDG_SHIP_TO_PARTY_SITE_ID   :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_SHIP_TO_PARTY_SITE_ID(1);
12556    l_event_class_rec.RNDG_SHIP_FROM_PARTY_SITE_ID :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_SHIP_FROM_PARTY_SITE_ID(1);
12557    l_event_class_rec.RNDG_BILL_TO_PARTY_SITE_ID   :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_BILL_TO_PARTY_SITE_ID(1);
12558    l_event_class_rec.RNDG_BILL_FROM_PARTY_SITE_ID :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RNDG_BILL_FROM_PARTY_SITE_ID(1);
12562     | Set the event id for the whole document- Since this API is called for each transaction   |
12559 
12560 
12561    /*------------------------------------------------------------------------------------------+
12563     | line, the event id needs to be generated from the sequence only for the first transaction|
12564     | line. For other lines, we need to retrieve the event id from the table.                  |
12565     | Also store the taxation country, document sub type from the line to be passed to         |
12566     | defaulting API which will honor these header attributes of the line instead of trying to |
12567     | redefault them again                                                                     |
12568     +-----------------------------------------------------------------------------------------*/
12569     l_record_exists := FALSE;
12570     FOR l_line_det_rec in lock_line_det_factors_for_doc(l_event_class_rec)
12571     LOOP
12572       l_record_exists := TRUE;
12573       l_event_class_rec.event_id := l_line_det_rec.event_id;
12574       exit;
12575     END LOOP;
12576 
12577 
12578     IF NOT(l_record_exists) THEN
12579       SELECT zx_lines_det_factors_s.nextval
12580         INTO l_event_class_rec.event_id
12581         FROM dual;
12582     END IF;
12583 
12584     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12585       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,
12586              'application_id: '||to_char(l_event_class_rec.application_id)||
12587              ', entity_code: '||l_event_class_rec.entity_code||
12588              ', event_class_code: '||l_event_class_rec.event_class_code||
12589              ', event_type_code: '||l_event_class_rec.event_type_code||
12590              ', trx_id: '||to_char(l_event_class_rec.trx_id)||
12591              ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
12592              ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
12593              ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
12594              ', trx_date: '||to_char(l_event_class_rec.trx_date)||
12595              ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
12596              ', provnl_tax_determination_date: '||to_char(l_event_class_rec.provnl_tax_determination_date)||
12597              ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
12598              ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
12599              ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
12600              ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
12601              ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
12602              ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
12603              ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
12604              ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
12605              ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
12606              ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
12607              ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
12608              ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id)
12609             );
12610    END IF;
12611 
12612    /*------------------------------------------------------+
12613    |   Validate and Initializate parameters for Inserting |
12614    |   into line_det_factors                              |
12615    +------------------------------------------------------*/
12616    ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors(p_event_class_rec =>l_event_class_rec,
12617                                                      p_trx_line_index  => 1,
12618                                                      x_return_status   =>l_return_status
12619                                                     );
12620 
12621    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12622      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12623         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12624           ':ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors returned errors');
12625      END IF;
12626      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12627         RAISE FND_API.G_EXC_ERROR;
12628      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12629         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12630      END IF;
12631    END IF;
12632 
12633  /* =============================================*
12634    |Default the tax determining attributes        |
12635    * ============================================*/
12636    /*If the Source Document Line identifiers are passed, then derive the values
12637      of the tax determining factors from ZX_LINES_DET_FACTORS for the source document line.*/
12638    FOR i in 1 .. nvl(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.application_id.LAST,-99)
12639    LOOP
12640      SELECT
12641        default_taxation_country,
12642        document_sub_type,
12643        trx_business_category,
12644        line_intended_use,
12645        user_defined_fisc_class,
12646        product_fisc_classification,
12647        product_category,
12648        assessable_value,
12649        product_type,
12650        decode(l_event_class_rec.prod_family_grp_code,'P2P',input_tax_classification_code,
12651                                                      'O2C',output_tax_classification_code),
12652        user_upd_det_factors_flag --Bug11694368
12653      INTO
12657         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_intended_use(i),
12654         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.default_taxation_country(i),
12655         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.document_sub_type(i),
12656         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_business_category(i),
12658         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.user_defined_fisc_class(i),
12659         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.product_fisc_classification(i),
12660         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.product_category(i),
12661         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.assessable_value(i),
12662         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.product_type(i),
12663         l_tax_classification_code,
12664         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.user_upd_det_factors_flag(i)
12665      FROM ZX_LINES_DET_FACTORS
12666     WHERE application_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_application_id(i)
12667       AND entity_code = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_entity_code(i)
12668       AND event_class_code = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_event_class_code(i)
12669       AND trx_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_trx_id(i)
12670       AND trx_line_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_line_id(i)
12671       AND trx_level_type = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_trx_level_type(i);
12672 
12673      IF l_event_class_rec.prod_family_grp_code = 'P2P' THEN
12674         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.input_tax_classification_code(i) := l_tax_classification_code;
12675      ELSIF l_event_class_rec.prod_family_grp_code = 'O2C' AND --AR passes the tax classification code so do not override
12676         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.output_tax_classification_code(i) is null  THEN
12677         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.output_tax_classification_code(i) := l_tax_classification_code;
12678      END IF;
12679    END LOOP;
12680    /*------------------------------------------+
12681    |Call to insert the lines                   |
12682    +------------------------------------------*/
12683    ZX_SRVC_TYP_PKG.insupd_line_det_factors(p_event_class_rec  => l_event_class_rec,
12684                                            x_return_status    => l_return_status
12685                                           );
12686 
12687    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12688      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12689         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12690           ':ZX_SRVC_TYP_PKG.insupd_line_det_factors returned errors');
12691      END IF;
12692      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12693         RAISE FND_API.G_EXC_ERROR;
12694      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12695         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12696      END IF;
12697    END IF;
12698 
12699    --Delete from the global structures so that there are no hanging/redundant
12700    --records sitting there
12701    ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
12702 
12703    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12704      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
12705    END IF;
12706 
12707    EXCEPTION
12708         WHEN FND_API.G_EXC_ERROR THEN
12709           ROLLBACK TO Copy_Ins_Line_Det_Factors_PVT;
12710           x_return_status := FND_API.G_RET_STS_ERROR ;
12711           DUMP_MSG;
12712          /*---------------------------------------------------------+
12713           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12714           | in the message stack. If there is only one message in   |
12715           | the stack it retrieves this message                     |
12716           +---------------------------------------------------------*/
12717           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12718                                     p_count   => x_msg_count,
12719                                     p_data    => x_msg_data
12720                                     );
12721 
12722            IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12723              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12724            END IF;
12725 
12726         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
12727           ROLLBACK TO Copy_Ins_Line_Det_Factors_PVT;
12728           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12729           DUMP_MSG;
12730           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12731           FND_MSG_PUB.Add;
12732          /*---------------------------------------------------------+
12733           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12734           | in the message stack. If there is only one message in   |
12735           | the stack it retrieves this message                     |
12736           +---------------------------------------------------------*/
12737           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12738                                     p_count   => x_msg_count,
12739                                     p_data    => x_msg_data
12740                                     );
12741           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12742             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12743           END IF;
12744 
12745         WHEN OTHERS THEN
12746           /*-------------------------------------------------------+
12747            |  Handle application errors that result from trapable  |
12748            |  error conditions. The error messages have already    |
12749            |  been put on the error stack.                         |
12750            +-------------------------------------------------------*/
12751            ROLLBACK TO Copy_Ins_Line_Det_Factors_PVT;
12752            IF (SQLCODE = 54) THEN
12753              x_return_status := FND_API.G_RET_STS_ERROR ;
12757               FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12754              FND_MESSAGE.SET_NAME('ZX','ZX_RESOURCE_BUSY');
12755            ELSE
12756               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12758            END IF;
12759            FND_MSG_PUB.Add;
12760          /*---------------------------------------------------------+
12761           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12762           | in the message stack. If there is only one message in   |
12763           | the stack it retrieves this message                     |
12764           +---------------------------------------------------------*/
12765            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12766                                      p_count   => x_msg_count,
12767                                      p_data    => x_msg_data
12768                                      );
12769 
12770            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
12771               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
12772            END IF;
12773  END copy_insert_line_det_factors;
12774 
12775 
12776 /* ============================================================================*
12777  | PROCEDURE  is_recoverability_affected : This procedure will determine       |
12778  | whether some accounting related information can be modified on the item     |
12779  | distribution from tax point of view.                                        |
12780  * ============================================================================*/
12781  PROCEDURE is_recoverability_affected(
12782   p_api_version        IN  NUMBER,
12783   p_init_msg_list      IN  VARCHAR2,
12784   p_commit             IN  VARCHAR2,
12785   p_validation_level   IN  NUMBER,
12786   x_return_status      OUT NOCOPY     VARCHAR2,
12787   x_msg_count          OUT NOCOPY     NUMBER,
12788   x_msg_data           OUT NOCOPY     VARCHAR2,
12789   p_pa_item_info_tbl   IN  OUT NOCOPY pa_item_info_tbl_type
12790   )IS
12791   l_api_name                  CONSTANT  VARCHAR2(30) := 'IS_RECOVERABILITY_AFFECTED';
12792   l_api_version               CONSTANT  NUMBER := 1.0;
12793   l_return_status             VARCHAR2(1);
12794   l_init_msg_list             VARCHAR2(1);
12795 
12796  BEGIN
12797    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12798      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
12799    END IF;
12800 
12801   /*--------------------------------------------------+
12802    |   Standard start of API savepoint                |
12803    +--------------------------------------------------*/
12804    SAVEPOINT Is_Recoverability_Affected_PVT;
12805 
12806    /*--------------------------------------------------+
12807     |   Standard call to check for call compatibility  |
12808     +--------------------------------------------------*/
12809     IF NOT FND_API.Compatible_API_Call(l_api_version,
12810                                        p_api_version,
12811                                        l_api_name,
12812                                        G_PKG_NAME
12813                                        ) THEN
12814        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12815      END IF;
12816 
12817     /*--------------------------------------------------------------+
12818      |   Initialize message list if p_init_msg_list is set to TRUE  |
12819      +--------------------------------------------------------------*/
12820      IF p_init_msg_list is null THEN
12821        l_init_msg_list := FND_API.G_FALSE;
12822      ELSE
12823        l_init_msg_list := p_init_msg_list;
12824      END IF;
12825 
12826      IF FND_API.to_Boolean(l_init_msg_list) THEN
12827        FND_MSG_PUB.initialize;
12828      END IF;
12829 
12830   /*-----------------------------------------+
12831    |   Initialize return status to SUCCESS   |
12832    +-----------------------------------------*/
12833    x_return_status := FND_API.G_RET_STS_SUCCESS;
12834 
12835   /*-----------------------------------------+
12836    |   Populate Global Variable              |
12837    +-----------------------------------------*/
12838    G_PUB_SRVC := l_api_name;
12839    G_DATA_TRANSFER_MODE := 'PLS';
12840    G_EXTERNAL_API_CALL  := 'N';
12841 
12842    IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12843       FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
12844       'Call TRD service to determine if accouting info on distributions can be modified'
12845        );
12846    END IF;
12847 
12848    ZX_TRD_SERVICES_PUB_PKG.is_recoverability_affected(p_pa_item_info_tbl => p_pa_item_info_tbl,
12849                                                       x_return_status    => l_return_status
12850                                                      );
12851 
12852    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12853      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12854         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12855           ':ZX_TRD_SERVICES_PUB_PKG.is_recoverability_affected returned errors');
12856      END IF;
12857      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12858         RAISE FND_API.G_EXC_ERROR;
12859      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12860         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12861      END IF;
12862    END IF;
12863 
12864    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12865      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
12866    END IF;
12867 
12868    EXCEPTION
12869       WHEN FND_API.G_EXC_ERROR THEN
12870         ROLLBACK TO Is_Recoverability_Affected_PVT;
12871         x_return_status := FND_API.G_RET_STS_ERROR ;
12872         DUMP_MSG;
12876         | the stack it retrieves this message                     |
12873        /*---------------------------------------------------------+
12874         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12875         | in the message stack. If there is only one message in   |
12877         +---------------------------------------------------------*/
12878         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12879                                   p_count   => x_msg_count,
12880                                   p_data    => x_msg_data
12881                                   );
12882 
12883         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12884           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12885         END IF;
12886 
12887       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
12888         ROLLBACK TO Is_Recoverability_Affected_PVT;
12889         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12890         DUMP_MSG;
12891         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12892         FND_MSG_PUB.Add;
12893        /*---------------------------------------------------------+
12894         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12895         | in the message stack. If there is only one message in   |
12896         | the stack it retrieves this message                     |
12897         +---------------------------------------------------------*/
12898         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12899                                   p_count   => x_msg_count,
12900                                   p_data    => x_msg_data
12901                                   );
12902 
12903         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12904           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12905         END IF;
12906 
12907       WHEN OTHERS THEN
12908          ROLLBACK TO Is_Recoverability_Affected_PVT;
12909          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12910          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12911          FND_MSG_PUB.Add;
12912         /*---------------------------------------------------------+
12913          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12914          | in the message stack. If there is only one message in   |
12915          | the stack it retrieves this message                     |
12916          +---------------------------------------------------------*/
12917          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12918                                    p_count   => x_msg_count,
12919                                    p_data    => x_msg_data
12920                                    );
12921          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
12922            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
12923          END IF;
12924 
12925  END is_recoverability_affected;
12926 
12927 /* ======================================================================*
12928  | PROCEDURE delete_tax_line_and_distributions:                          |
12929  * ======================================================================*/
12930 
12931  PROCEDURE del_tax_line_and_distributions(
12932   p_api_version           IN            NUMBER,
12933   p_init_msg_list         IN            VARCHAR2,
12934   p_commit                IN            VARCHAR2,
12935   p_validation_level      IN            NUMBER,
12936   x_return_status         OUT NOCOPY    VARCHAR2 ,
12937   x_msg_count             OUT NOCOPY    NUMBER ,
12938   x_msg_data              OUT NOCOPY    VARCHAR2 ,
12939   p_transaction_line_rec  IN OUT NOCOPY transaction_line_rec_type
12940   )IS
12941   l_api_name                  CONSTANT  VARCHAR2(30) := 'DEL_TAX_LINE_AND_DISTRIBUTIONS';
12942   l_api_version               CONSTANT  NUMBER := 1.0;
12943   l_return_status             VARCHAR2(1);
12944   l_init_msg_list             VARCHAR2(1);
12945 
12946   --Added for Bug#16483600 JAI ZX Integration
12947   lb_jai_exists               BOOLEAN := FALSE;
12948   l_transaction_rec           ZX_API_PUB.transaction_rec_type;
12949 
12950  BEGIN
12951    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12952      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
12953    END IF;
12954 
12955   /*--------------------------------------------------+
12956    |   Standard start of API savepoint                |
12957    +--------------------------------------------------*/
12958    SAVEPOINT Del_Tax_Line_And_Dists_PVT;
12959 
12960    /*--------------------------------------------------+
12961     |   Standard call to check for call compatibility  |
12962     +--------------------------------------------------*/
12963     IF NOT FND_API.Compatible_API_Call(l_api_version,
12964                                        p_api_version,
12965                                        l_api_name,
12966                                        G_PKG_NAME
12967                                        ) THEN
12968        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12969      END IF;
12970 
12971     /*--------------------------------------------------------------+
12972      |   Initialize message list if p_init_msg_list is set to TRUE  |
12973      +--------------------------------------------------------------*/
12974      IF p_init_msg_list is null THEN
12975        l_init_msg_list := FND_API.G_FALSE;
12976      ELSE
12977        l_init_msg_list := p_init_msg_list;
12978      END IF;
12979 
12980      IF FND_API.to_Boolean(l_init_msg_list) THEN
12981        FND_MSG_PUB.initialize;
12982      END IF;
12983 
12984     /*-----------------------------------------+
12985      |   Initialize return status to SUCCESS   |
12986      +-----------------------------------------*/
12987      x_return_status := FND_API.G_RET_STS_SUCCESS;
12988 
12992      G_PUB_SRVC := l_api_name;
12989     /*-----------------------------------------+
12990      |   Populate Global Variable              |
12991      +-----------------------------------------*/
12993      G_DATA_TRANSFER_MODE := 'PLS';
12994      G_EXTERNAL_API_CALL  := 'N';
12995 
12996      /*--------------------------------------------+
12997      |  Added for JAI Trigger Elimination          |
12998      |  for JAI PO document and line delete        |
12999      +---------------------------------------------*/
13000      -- Start : Added for JAI Trigger Elimination : Bug#16483600 JAI ZX Integration
13001      lb_jai_exists := JAI_TAX_PROCESSING_PKG.CHECK_JAI_EXISTS_IN_ZX(
13002                             pn_set_of_books_id => NULL,
13003                             pv_entity_code     => p_transaction_line_rec.entity_code,
13004                             pn_trx_id          => p_transaction_line_rec.trx_id
13005 
13006                           );
13007      IF lb_jai_exists THEN
13008        IF p_transaction_line_rec.entity_code = 'PURCHASE_ORDER'
13009           AND p_transaction_line_rec.event_class_code = 'PO_PA'
13010           AND p_transaction_line_rec.event_type_code ='PO_PA_ADJUSTED'
13011           AND p_transaction_line_rec.application_id = 7000
13012        THEN
13013          --Reset the application_id to 201 since application id in p_transaction_line_rec is 7000
13014          --and get all the required parameters from global variables
13015          l_transaction_rec.application_id      := 201;
13016          l_transaction_rec.entity_code         := p_transaction_line_rec.entity_code;
13017          l_transaction_rec.event_class_code    := p_transaction_line_rec.event_class_code;
13018          l_transaction_rec.event_type_code     := p_transaction_line_rec.event_type_code;
13019          l_transaction_rec.trx_id              := p_transaction_line_rec.trx_id;
13020          --JAI call placed here for processing delete JAI records
13021          JAI_TAX_PROCESSING_PKG.CALCULATE_TAX(p_transaction_rec   => l_transaction_rec
13022                                              ,p_event_class_rec   => NULL
13023                                              ,p_line_level_action => NULL
13024                                              ,p_trx_line_id       => p_transaction_line_rec.trx_line_id
13025                                              ,x_return_status     => l_return_status
13026                                              );
13027 
13028          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13029            x_return_status := l_return_status;
13030            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13031               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
13032               ' JAI_TAX_PROCESSING_PKG.CALCULATE_TAX  RETURN_STATUS = ' || x_return_status);
13033            END IF;
13034            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
13035               RAISE FND_API.G_EXC_ERROR;
13036            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
13037               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13038            END IF;
13039          END IF;
13040        END IF;
13041      END IF;
13042      -- End : Added for JAI Trigger Elimination
13043 
13044     /*-----------------------------------------+
13045      |   Delete transaction line               |
13046      +-----------------------------------------*/
13047 
13048      DELETE from ZX_LINES_DET_FACTORS
13049        WHERE application_id = p_transaction_line_rec.application_id
13050          AND entity_code = p_transaction_line_rec.entity_code
13051          AND event_class_code = p_transaction_line_rec.event_class_code
13052          AND trx_id = p_transaction_line_rec.trx_id
13053          AND trx_line_id = p_transaction_line_rec.trx_line_id
13054          AND trx_level_type = p_transaction_line_rec.trx_level_type;
13055 
13056 
13057     /*-----------------------------------------+
13058      |   Delete tax line and distributions     |
13059      +-----------------------------------------*/
13060      ZX_TRL_PUB_PKG.delete_tax_lines_and_dists(p_application_id    => p_transaction_line_rec.application_id,
13061                                                p_entity_code       => p_transaction_line_rec.entity_code,
13062                                                p_event_class_code  => p_transaction_line_rec.event_class_code,
13063                                                p_trx_id            => p_transaction_line_rec.trx_id,
13064                                                p_trx_line_id       => p_transaction_line_rec.trx_line_id,
13065                                                p_trx_level_type    => p_transaction_line_rec.trx_level_type,
13066                                                x_return_status     => l_return_status
13067                                               );
13068      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13069        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13070           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13071            ':ZX_TRL_PUB_PKG.delete_tax_lines_and_dists returned errors');
13072        END IF;
13073        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
13074           RAISE FND_API.G_EXC_ERROR;
13075        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
13076           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13077        END IF;
13078      END IF;
13079 
13080      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13081         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
13082      END IF;
13083 
13084      EXCEPTION
13085       WHEN FND_API.G_EXC_ERROR THEN
13086         ROLLBACK TO Del_Tax_Line_And_Dists_PVT;
13087         x_return_status := FND_API.G_RET_STS_ERROR ;
13088         DUMP_MSG;
13089        /*---------------------------------------------------------+
13090         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13094         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13091         | in the message stack. If there is only one message in   |
13092         | the stack it retrieves this message                     |
13093         +---------------------------------------------------------*/
13095                                   p_count   => x_msg_count,
13096                                   p_data    => x_msg_data
13097                                   );
13098 
13099         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13100           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13101         END IF;
13102 
13103       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13104         ROLLBACK TO Del_Tax_Line_And_Dists_PVT;
13105         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13106         DUMP_MSG;
13107         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13108         FND_MSG_PUB.Add;
13109        /*---------------------------------------------------------+
13110         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13111         | in the message stack. If there is only one message in   |
13112         | the stack it retrieves this message                     |
13113         +---------------------------------------------------------*/
13114         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13115                                   p_count   => x_msg_count,
13116                                   p_data    => x_msg_data
13117                                   );
13118 
13119         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13120           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13121         END IF;
13122 
13123       WHEN OTHERS THEN
13124          ROLLBACK TO Del_Tax_Line_And_Dists_PVT;
13125          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13126          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13127          FND_MSG_PUB.Add;
13128         /*---------------------------------------------------------+
13129          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13130          | in the message stack. If there is only one message in   |
13131          | the stack it retrieves this message                     |
13132          +---------------------------------------------------------*/
13133          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13134                                    p_count   => x_msg_count,
13135                                    p_data    => x_msg_data
13136                                    );
13137          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
13138            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
13139          END IF;
13140 
13141  END del_tax_line_and_distributions;
13142 
13143 /* ======================================================================*
13144  | PROCEDURE delete_tax_distributions:                                   |
13145  * ======================================================================*/
13146 
13147  PROCEDURE delete_tax_distributions(
13148   p_api_version           IN            NUMBER,
13149   p_init_msg_list         IN            VARCHAR2,
13150   p_commit                IN            VARCHAR2,
13151   p_validation_level      IN            NUMBER,
13152   x_return_status         OUT NOCOPY    VARCHAR2 ,
13153   x_msg_count             OUT NOCOPY    NUMBER ,
13154   x_msg_data              OUT NOCOPY    VARCHAR2 ,
13155   p_transaction_line_rec  IN OUT NOCOPY transaction_line_rec_type
13156   )IS
13157   l_api_name                  CONSTANT  VARCHAR2(30) := 'DEL_TAX_DISTRIBUTIONS';
13158   l_api_version               CONSTANT  NUMBER := 1.0;
13159   l_return_status             VARCHAR2(1);
13160   l_init_msg_list             VARCHAR2(1);
13161 
13162  BEGIN
13163    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13164      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
13165    END IF;
13166 
13167   /*--------------------------------------------------+
13168    |   Standard start of API savepoint                |
13169    +--------------------------------------------------*/
13170    SAVEPOINT Del_Tax_Distributions_PVT;
13171 
13172    /*--------------------------------------------------+
13173     |   Standard call to check for call compatibility  |
13174     +--------------------------------------------------*/
13175     IF NOT FND_API.Compatible_API_Call(l_api_version,
13176                                        p_api_version,
13177                                        l_api_name,
13178                                        G_PKG_NAME
13179                                        ) THEN
13180        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13181      END IF;
13182 
13183     /*--------------------------------------------------------------+
13184      |   Initialize message list if p_init_msg_list is set to TRUE  |
13185      +--------------------------------------------------------------*/
13186      IF p_init_msg_list is null THEN
13187        l_init_msg_list := FND_API.G_FALSE;
13188      ELSE
13189        l_init_msg_list := p_init_msg_list;
13190      END IF;
13191 
13192      IF FND_API.to_Boolean(l_init_msg_list) THEN
13193        FND_MSG_PUB.initialize;
13194      END IF;
13195 
13196     /*-----------------------------------------+
13197      |   Initialize return status to SUCCESS   |
13198      +-----------------------------------------*/
13199      x_return_status := FND_API.G_RET_STS_SUCCESS;
13200 
13201     /*-----------------------------------------+
13202      |   Populate Global Variable              |
13206      G_EXTERNAL_API_CALL  := 'N';
13203      +-----------------------------------------*/
13204      G_PUB_SRVC := l_api_name;
13205      G_DATA_TRANSFER_MODE := 'PLS';
13207 
13208     /*-----------------------------------------+
13209      |   Delete tax distributions              |
13210      +-----------------------------------------*/
13211      IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13212         FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
13213         'Call TRL service to delete tax distributions'
13214         );
13215      END IF;
13216 
13217      ZX_TRL_PUB_PKG.delete_tax_dists (p_application_id    => p_transaction_line_rec.application_id,
13218                                       p_entity_code       => p_transaction_line_rec.entity_code,
13219                                       p_event_class_code  => p_transaction_line_rec.event_class_code,
13220                                       p_trx_id            => p_transaction_line_rec.trx_id,
13221                                       p_trx_line_id       => p_transaction_line_rec.trx_line_id,
13222                                       p_trx_level_type    => p_transaction_line_rec.trx_level_type,
13223                                       x_return_status     => l_return_status
13224                                       );
13225      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13226        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13227           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13228            ':ZX_TRL_PUB_PKG.delete_tax_dists returned errors');
13229        END IF;
13230        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
13231           RAISE FND_API.G_EXC_ERROR;
13232        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
13233           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13234        END IF;
13235      END IF;
13236 
13237      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13238         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
13239      END IF;
13240 
13241      EXCEPTION
13242       WHEN FND_API.G_EXC_ERROR THEN
13243         ROLLBACK TO Del_Tax_Distributions_PVT;
13244         x_return_status := FND_API.G_RET_STS_ERROR ;
13245         DUMP_MSG;
13246        /*---------------------------------------------------------+
13247         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13248         | in the message stack. If there is only one message in   |
13249         | the stack it retrieves this message                     |
13250         +---------------------------------------------------------*/
13251         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13252                                   p_count   => x_msg_count,
13253                                   p_data    => x_msg_data
13254                                   );
13255 
13256         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13257           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13258         END IF;
13259 
13260       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13261         ROLLBACK TO Del_Tax_Distributions_PVT;
13262         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13263         DUMP_MSG;
13264         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13265         FND_MSG_PUB.Add;
13266        /*---------------------------------------------------------+
13267         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13268         | in the message stack. If there is only one message in   |
13269         | the stack it retrieves this message                     |
13270         +---------------------------------------------------------*/
13271         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13272                                   p_count   => x_msg_count,
13273                                   p_data    => x_msg_data
13274                                   );
13275 
13276         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13277           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13278         END IF;
13279 
13280       WHEN OTHERS THEN
13281          ROLLBACK TO Del_Tax_Distributions_PVT;
13282          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13283          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13284          FND_MSG_PUB.Add;
13285        /*---------------------------------------------------------+
13286         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13287         | in the message stack. If there is only one message in   |
13288         | the stack it retrieves this message                     |
13289         +---------------------------------------------------------*/
13290         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13291                                    p_count  => x_msg_count,
13292                                    p_data   => x_msg_data
13293                                    );
13294          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
13295            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
13296          END IF;
13297 
13298  END delete_tax_distributions;
13299 
13300  -----------------------------------------------------------------------
13301  --  PUBLIC PROCEDURE
13302  --  get_default_tax_det_attrs
13303  --
13304  --  DESCRIPTION
13305  --  This overloaded procedure acts as a wrapper on TDS default_tax_attribs
13306  --  procedure to default the tax determining attributes. It follows the
13307  --  following logic defaulting the determining attributes.
13308  --
13309  --  Fetch from zx_trx_headers_gt and zx_trx_transaction_lines_gt into
13310  --  global structure zx_global_structures_pkg.trx_line_dist_tbl
13311  --  For records in trx_line_dist_tbl
13312  --  Loop
13313  --    If line_level_action is UPDATE
13314  --      If all tax determining attributes are passed null
13318  --        if item/item_org_id/assessable value has changed
13315  --        Fetch all attributes from zx_lines_det_factors
13316  --        if item/item_org_id/country has changed
13317  --           call RE-defaulting API for intended_use, product_fiscal_classification
13319  --           call redefaulting API for assessable value
13320  --        Always call the tax classification defaulting API
13321  --    ELSIF line level action is CREATE
13322  --       IF historical_tax_code_id/global_attribute_category/global_Attribute1 passed
13323  --          redefault the tax attributes for PO (on the fly migration)
13324  --       elsif historical tax code id/global_attribute_category/global_attribute1 null
13325  --          If adjusted_doc informaiton passed
13326  --            default from adjusted_doc
13327  --          elsif applied_from information passed
13328  --            default from applied_from
13329  --          elsif soure_doc information passed
13330  --            default from source
13331  --          else
13332  --            call the TDM default API
13333  --  End loop
13334  --  Update the GTTs with the defaulting attributes derived here.
13335 
13336  --  CALLED BY
13337  --    populateTaxAttributes java method given to iP/PO
13338  --    directly from forms
13339  ----------------------------------------------------------------------
13340  PROCEDURE get_default_tax_det_attribs(
13341   p_api_version           IN            NUMBER,
13342   p_init_msg_list         IN            VARCHAR2,
13343   p_commit                IN            VARCHAR2,
13344   p_validation_level      IN            NUMBER,
13345   x_return_status         OUT NOCOPY    VARCHAR2,
13346   x_msg_count             OUT NOCOPY    NUMBER,
13347   x_msg_data              OUT NOCOPY    VARCHAR2
13348  )IS
13349   l_api_name                      CONSTANT  VARCHAR2(30) := 'GET_DEFAULT_TAX_DET_ATTRIBS';
13350   l_api_version                   CONSTANT  NUMBER := 1.0;
13351   l_return_status                 VARCHAR2(1);
13352   l_init_msg_list                 VARCHAR2(1);
13353   l_event_class_rec               event_class_rec_type;
13354   l_context_info_rec              context_info_rec_type;
13355   l_transaction_header_rec        transaction_header_rec_type;
13356 
13357    CURSOR headers_doc IS
13358      SELECT INTERNAL_ORGANIZATION_ID,
13359             LEGAL_ENTITY_ID,
13360             LEDGER_ID,
13361             APPLICATION_ID,
13362             ENTITY_CODE,
13363             EVENT_CLASS_CODE,
13364             EVENT_TYPE_CODE,
13365             CTRL_TOTAL_HDR_TX_AMT,
13366             TRX_ID,
13367             TRX_DATE,
13368             RELATED_DOC_DATE,
13369             PROVNL_TAX_DETERMINATION_DATE,
13370             TRX_CURRENCY_CODE,
13371             PRECISION,
13372             CURRENCY_CONVERSION_TYPE,
13373             CURRENCY_CONVERSION_RATE,
13374             CURRENCY_CONVERSION_DATE,
13375             ROUNDING_SHIP_TO_PARTY_ID,
13376             ROUNDING_SHIP_FROM_PARTY_ID,
13377             ROUNDING_BILL_TO_PARTY_ID,
13378             ROUNDING_BILL_FROM_PARTY_ID,
13379             RNDG_SHIP_TO_PARTY_SITE_ID,
13380             RNDG_SHIP_FROM_PARTY_SITE_ID,
13381             RNDG_BILL_TO_PARTY_SITE_ID,
13382             RNDG_BILL_FROM_PARTY_SITE_ID,
13383             QUOTE_FLAG,
13384             ESTABLISHMENT_ID
13385        FROM ZX_TRX_HEADERS_GT;
13386 
13387  BEGIN
13388    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13389      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
13390    END IF;
13391 
13392   /*--------------------------------------------------+
13393    |   Standard start of API savepoint                |
13394    +--------------------------------------------------*/
13395    SAVEPOINT Get_Default_Tax_Det_Attrs_PVT;
13396 
13397    /*--------------------------------------------------+
13398     |   Standard call to check for call compatibility  |
13399     +--------------------------------------------------*/
13400     IF NOT FND_API.Compatible_API_Call(l_api_version,
13401                                        p_api_version,
13402                                        l_api_name,
13403                                        G_PKG_NAME
13404                                        ) THEN
13405        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13406      END IF;
13407 
13408     /*--------------------------------------------------------------+
13409      |   Initialize message list if p_init_msg_list is set to TRUE  |
13410      +--------------------------------------------------------------*/
13411      IF p_init_msg_list is null THEN
13412        l_init_msg_list := FND_API.G_FALSE;
13413      ELSE
13414        l_init_msg_list := p_init_msg_list;
13415      END IF;
13416 
13417      IF FND_API.to_Boolean(l_init_msg_list) THEN
13418        FND_MSG_PUB.initialize;
13419      END IF;
13420 
13421     /*-----------------------------------------+
13422      |   Initialize return status to SUCCESS   |
13423      +-----------------------------------------*/
13424      x_return_status := FND_API.G_RET_STS_SUCCESS;
13425 
13426     /*-----------------------------------------+
13427      |   Populate Global Variable              |
13428      +-----------------------------------------*/
13429      G_PUB_SRVC := l_api_name;
13430      G_DATA_TRANSFER_MODE := 'TAB';
13431      G_EXTERNAL_API_CALL  := 'N';
13432 
13433      OPEN headers_doc;
13434      LOOP
13435        FETCH headers_doc BULK COLLECT INTO
13436              l_transaction_header_rec.INTERNAL_ORGANIZATION_ID,
13437              l_transaction_header_rec.LEGAL_ENTITY_ID,
13438              l_transaction_header_rec.LEDGER_ID,
13439              l_transaction_header_rec.APPLICATION_ID,
13440              l_transaction_header_rec.ENTITY_CODE,
13444              l_transaction_header_rec.TRX_ID,
13441              l_transaction_header_rec.EVENT_CLASS_CODE,
13442              l_transaction_header_rec.EVENT_TYPE_CODE,
13443              l_transaction_header_rec.CTRL_TOTAL_HDR_TX_AMT,
13445              l_transaction_header_rec.TRX_DATE,
13446              l_transaction_header_rec.REL_DOC_DATE,
13447              l_transaction_header_rec.PROVNL_TAX_DETERMINATION_DATE,
13448              l_transaction_header_rec.TRX_CURRENCY_CODE,
13449              l_transaction_header_rec.PRECISION,
13450              l_transaction_header_rec.CURRENCY_CONVERSION_TYPE,
13451              l_transaction_header_rec.CURRENCY_CONVERSION_RATE,
13452              l_transaction_header_rec.CURRENCY_CONVERSION_DATE,
13453              l_transaction_header_rec.ROUNDING_SHIP_TO_PARTY_ID,
13454              l_transaction_header_rec.ROUNDING_SHIP_FROM_PARTY_ID,
13455              l_transaction_header_rec.ROUNDING_BILL_TO_PARTY_ID,
13456              l_transaction_header_rec.ROUNDING_BILL_FROM_PARTY_ID,
13457              l_transaction_header_rec.RNDG_SHIP_TO_PARTY_SITE_ID,
13458              l_transaction_header_rec.RNDG_SHIP_FROM_PARTY_SITE_ID,
13459              l_transaction_header_rec.RNDG_BILL_TO_PARTY_SITE_ID,
13460              l_transaction_header_rec.RNDG_BILL_FROM_PARTY_SITE_ID,
13461              l_transaction_header_rec.QUOTE_FLAG,
13462              l_transaction_header_rec.ESTABLISHMENT_ID
13463        LIMIT G_LINES_PER_FETCH;
13464 
13465        FOR l_index IN 1..nvl(l_transaction_header_rec.application_id.LAST,0)
13466        LOOP
13467          BEGIN
13468            SAVEPOINT Get_Def_Tax_Det_Attrs_Doc_PVT;
13469            l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  l_transaction_header_rec.INTERNAL_ORGANIZATION_ID(l_index);
13470            l_event_class_rec.LEGAL_ENTITY_ID              :=  l_transaction_header_rec.LEGAL_ENTITY_ID(l_index);
13471            l_event_class_rec.LEDGER_ID                    :=  l_transaction_header_rec.LEDGER_ID(l_index);
13472            l_event_class_rec.APPLICATION_ID               :=  l_transaction_header_rec.APPLICATION_ID(l_index);
13473            l_event_class_rec.ENTITY_CODE                  :=  l_transaction_header_rec.ENTITY_CODE(l_index);
13474            l_event_class_rec.EVENT_CLASS_CODE             :=  l_transaction_header_rec.EVENT_CLASS_CODE(l_index);
13475            l_event_class_rec.EVENT_TYPE_CODE              :=  l_transaction_header_rec.EVENT_TYPE_CODE(l_index);
13476            l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  l_transaction_header_rec.CTRL_TOTAL_HDR_TX_AMT(l_index);
13477            l_event_class_rec.TRX_ID                       :=  l_transaction_header_rec.TRX_ID(l_index);
13478            l_event_class_rec.TRX_DATE                     :=  l_transaction_header_rec.TRX_DATE(l_index);
13479            l_event_class_rec.REL_DOC_DATE                 :=  l_transaction_header_rec.REL_DOC_DATE(l_index);
13480            l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  l_transaction_header_rec.PROVNL_TAX_DETERMINATION_DATE(l_index);
13481            l_event_class_rec.TRX_CURRENCY_CODE            :=  l_transaction_header_rec.TRX_CURRENCY_CODE(l_index);
13482            l_event_class_rec.PRECISION                    :=  l_transaction_header_rec.PRECISION(l_index);
13483            l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  l_transaction_header_rec.CURRENCY_CONVERSION_TYPE(l_index);
13484            l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  l_transaction_header_rec.CURRENCY_CONVERSION_RATE(l_index);
13485            l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  l_transaction_header_rec.CURRENCY_CONVERSION_DATE(l_index);
13486            l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  l_transaction_header_rec.ROUNDING_SHIP_TO_PARTY_ID(l_index);
13487            l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  l_transaction_header_rec.ROUNDING_SHIP_FROM_PARTY_ID(l_index);
13488            l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  l_transaction_header_rec.ROUNDING_BILL_TO_PARTY_ID(l_index);
13489            l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  l_transaction_header_rec.ROUNDING_BILL_FROM_PARTY_ID(l_index);
13490            l_event_class_rec.RNDG_SHIP_TO_PARTY_SITE_ID   :=  l_transaction_header_rec.RNDG_SHIP_TO_PARTY_SITE_ID(l_index);
13491            l_event_class_rec.RNDG_SHIP_FROM_PARTY_SITE_ID :=  l_transaction_header_rec.RNDG_SHIP_FROM_PARTY_SITE_ID(l_index);
13492            l_event_class_rec.RNDG_BILL_TO_PARTY_SITE_ID   :=  l_transaction_header_rec.RNDG_BILL_TO_PARTY_SITE_ID(l_index);
13493            l_event_class_rec.RNDG_BILL_FROM_PARTY_SITE_ID :=  l_transaction_header_rec.RNDG_BILL_FROM_PARTY_SITE_ID(l_index);
13494            l_event_class_rec.QUOTE_FLAG                   :=  nvl(l_transaction_header_rec.QUOTE_FLAG(l_index),'N');
13495 
13496            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13497                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
13498                'application_id: '||to_char(l_event_class_rec.application_id)||
13499                ', entity_code: '||l_event_class_rec.entity_code||
13500                ', event_class_code: '||l_event_class_rec.event_class_code||
13501                ', event_type_code: '||l_event_class_rec.event_type_code||
13502                ', trx_id: '||to_char(l_event_class_rec.trx_id)||
13503                ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
13504                ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
13505                ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
13506                ', trx_date: '||to_char(l_event_class_rec.trx_date)||
13507                ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
13508                ', provnl_tax_determination_date: '||to_char(l_event_class_rec.provnl_tax_determination_date)||
13509                ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
13510                ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
13511                ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
13512                ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
13516                ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
13513                ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
13514                ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
13515                ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
13517                ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
13518                ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
13519                ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
13520                ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id));
13521            END IF;
13522 
13523           /*------------------------------------------------------+
13524            |   Validate and Initializate parameters for Calculate |
13525            |   tax                                                |
13526            +------------------------------------------------------*/
13527            ZX_VALID_INIT_PARAMS_PKG.get_default_tax_det_attrs(p_event_class_rec => l_event_class_rec,
13528                                                               x_return_status   => l_return_status
13529                                                              );
13530 
13531            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13532              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13533                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13534                 ':ZX_VALID_INIT_PARAMS_PKG.get_default_tax_det_attrs returned errors');
13535              END IF;
13536              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
13537                 RAISE FND_API.G_EXC_ERROR;
13538              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
13539                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13540              END IF;
13541            END IF;
13542 
13543           /*------------------------------------------------------+
13544            |   Call the redefaulting APIs                         |
13545            +------------------------------------------------------*/
13546            ZX_SRVC_TYP_PKG.get_default_tax_det_attrs(p_event_class_rec => l_event_class_rec,
13547                                                      x_return_status   => l_return_status
13548                                                     );
13549 
13550            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13551              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13552                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13553                 ':ZX_SRVC_TYP_PKG.get_default_tax_det_attrs returned errors');
13554              END IF;
13555              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
13556                 RAISE FND_API.G_EXC_ERROR;
13557              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
13558                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13559              END IF;
13560            END IF;
13561 
13562            --Delete from the global structure for every loop on header
13563            --so that there are no hanging/redundant records sitting there
13564            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13565               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
13566                'Calling routine to delete the global structures ');
13567            END IF;
13568            ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
13569 
13570            EXCEPTION
13571              WHEN FND_API.G_EXC_ERROR THEN
13572                ROLLBACK TO Get_Def_Tax_Det_Attrs_Doc_PVT;
13573                x_return_status := FND_API.G_RET_STS_ERROR ;
13574                --Call API to dump into zx_errors_gt
13575                DUMP_MSG;
13576                IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13577                  FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13578                END IF;
13579          END;
13580        END LOOP;--for headers_doc
13581        EXIT WHEN headers_doc%NOTFOUND;
13582     END LOOP;
13583     CLOSE headers_doc;
13584 
13585     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13586         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
13587     END IF;
13588 
13589     EXCEPTION
13590           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13591             ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
13592             --Close all open cursors
13593             IF headers_doc%ISOPEN THEN CLOSE headers_doc; END IF;
13594             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13595             DUMP_MSG;
13596             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13597             FND_MSG_PUB.Add;
13598            /*---------------------------------------------------------+
13599             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13600             | in the message stack. If there is only one message in   |
13601             | the stack it retrieves this message                     |
13602             +---------------------------------------------------------*/
13603             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13604                                       p_count   => x_msg_count,
13605                                       p_data    => x_msg_data
13606                                       );
13607             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13608               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13612              ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
13609             END IF;
13610 
13611           WHEN OTHERS THEN
13613              --Close all open cursors
13614              IF headers_doc%ISOPEN THEN CLOSE headers_doc; END IF;
13615              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13616              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13617              FND_MSG_PUB.Add;
13618             /*---------------------------------------------------------+
13619              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13620              | in the message stack. If there is only one message in   |
13621              | the stack it retrieves this message                     |
13622              +---------------------------------------------------------*/
13623              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
13624                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
13625              END IF;
13626  END get_default_tax_det_attribs;
13627 
13628 /* ======================================================================*
13629  | PROCEDURE redefault_intended_use: Redefault intended use              |
13630  * ======================================================================*/
13631 
13632  PROCEDURE redefault_intended_use(
13633   p_api_version          IN            NUMBER,
13634   p_init_msg_list        IN            VARCHAR2,
13635   p_commit               IN            VARCHAR2,
13636   p_validation_level     IN            NUMBER,
13637   x_return_status        OUT NOCOPY    VARCHAR2,
13638   x_msg_count            OUT NOCOPY    NUMBER ,
13639   x_msg_data             OUT NOCOPY    VARCHAR2,
13640   p_application_id       IN            NUMBER,
13641   p_entity_code          IN            VARCHAR2,
13642   p_event_class_code     IN            VARCHAR2,
13643   p_internal_org_id      IN            NUMBER,
13644   p_country_code         IN            VARCHAR2,
13645   p_item_id              IN            NUMBER,
13646   p_item_org_id          IN            NUMBER,
13647   x_intended_use         OUT NOCOPY    VARCHAR2
13648   )IS
13649   l_api_name                  CONSTANT  VARCHAR2(30) := 'REDEFAULT_INTENDED_USE';
13650   l_api_version               CONSTANT  NUMBER := 1.0;
13651   l_return_status             VARCHAR2(1);
13652   l_init_msg_list             VARCHAR2(1);
13653 
13654  BEGIN
13655    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13656      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
13657    END IF;
13658 
13659   /*--------------------------------------------------+
13660    |   Standard start of API savepoint                |
13661    +--------------------------------------------------*/
13662    SAVEPOINT Redefault_Intended_Use_PVT;
13663 
13664    /*--------------------------------------------------+
13665     |   Standard call to check for call compatibility  |
13666     +--------------------------------------------------*/
13667     IF NOT FND_API.Compatible_API_Call(l_api_version,
13668                                        p_api_version,
13669                                        l_api_name,
13670                                        G_PKG_NAME
13671                                        ) THEN
13672        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13673      END IF;
13674 
13675     /*--------------------------------------------------------------+
13676      |   Initialize message list if p_init_msg_list is set to TRUE  |
13677      +--------------------------------------------------------------*/
13678      IF p_init_msg_list is null THEN
13679        l_init_msg_list := FND_API.G_FALSE;
13680      ELSE
13681        l_init_msg_list := p_init_msg_list;
13682      END IF;
13683 
13684      IF FND_API.to_Boolean(l_init_msg_list) THEN
13685        FND_MSG_PUB.initialize;
13686      END IF;
13687 
13688     /*-----------------------------------------+
13689      |   Initialize return status to SUCCESS   |
13690      +-----------------------------------------*/
13691      x_return_status := FND_API.G_RET_STS_SUCCESS;
13692 
13693     /*-----------------------------------------+
13694      |   Populate Global Variable              |
13695      +-----------------------------------------*/
13696      G_PUB_SRVC := l_api_name;
13697      G_DATA_TRANSFER_MODE := 'PLS';
13698      G_EXTERNAL_API_CALL  := 'N';
13699 
13700      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13701        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
13702        'application_id: ' || to_char(p_application_id)||
13703        ', entity_code: ' || p_entity_code||
13704        ', event_class_code: ' || p_event_class_code||
13705        ', country_code: ' || p_country_code||
13706        ', org_id: ' || to_char(p_internal_org_id)||
13707        ', product_id: ' || to_char(p_item_id)||
13708        ', product_org_id: ' || to_char(p_item_org_id));
13709      END IF;
13710 
13711      ZX_DEFAULT_AUTOMATION_PKG.redefault_intended_use(p_application_id,
13712                                                       p_entity_code,
13713                                                       p_event_class_code,
13714                                                       p_internal_org_id,
13715                                                       p_country_code,
13716                                                       p_item_id,
13717                                                       p_item_org_id,
13718                                                       x_intended_use,
13719                                                       x_return_status
13720                                                       );
13721 
13722      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13723        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13727        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
13724          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13725            ':ZX_DEFAULT_AUTOMATION_PKG.redefault_intended_use returned errors');
13726        END IF;
13728          RAISE FND_API.G_EXC_ERROR;
13729        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
13730          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13731        END IF;
13732      ELSE
13733        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13734          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13735            ':Intended Use :' || x_intended_use);
13736        END IF;
13737      END IF;
13738 
13739      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13740        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
13741      END IF;
13742 
13743      EXCEPTION
13744           WHEN FND_API.G_EXC_ERROR THEN
13745             ROLLBACK TO Redefault_Intended_Use_PVT;
13746             x_return_status := FND_API.G_RET_STS_ERROR ;
13747             DUMP_MSG;
13748            /*---------------------------------------------------------+
13749             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13750             | in the message stack. If there is only one message in   |
13751             | the stack it retrieves this message                     |
13752             +---------------------------------------------------------*/
13753             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13754                                       p_count   => x_msg_count,
13755                                       p_data    => x_msg_data
13756                                       );
13757             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13758                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13759             END IF;
13760 
13761           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13762             ROLLBACK TO Redefault_Intended_Use_PVT;
13763             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13764             DUMP_MSG;
13765             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13766             FND_MSG_PUB.Add;
13767            /*---------------------------------------------------------+
13768             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13769             | in the message stack. If there is only one message in   |
13770             | the stack it retrieves this message                     |
13771             +---------------------------------------------------------*/
13772             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13773                                       p_count   => x_msg_count,
13774                                       p_data    => x_msg_data
13775                                       );
13776             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13777               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13778             END IF;
13779 
13780           WHEN OTHERS THEN
13781              ROLLBACK TO Redefault_Intended_Use_PVT;
13782              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13783              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13784              FND_MSG_PUB.Add;
13785             /*---------------------------------------------------------+
13786              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13787              | in the message stack. If there is only one message in   |
13788              | the stack it retrieves this message                     |
13789              +---------------------------------------------------------*/
13790              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13791                                        p_count   => x_msg_count,
13792                                        p_data    => x_msg_data
13793                                       );
13794              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
13795                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
13796              END IF;
13797  END redefault_intended_use;
13798 
13799 /* ======================================================================*
13800  | PROCEDURE redefault_prod_fisc_class_code: Redefault product fiscal    |
13801  |                                           classification              |
13802  * ======================================================================*/
13803  PROCEDURE redefault_prod_fisc_class_code(
13804   p_api_version          IN            NUMBER,
13805   p_init_msg_list        IN            VARCHAR2,
13806   p_commit               IN            VARCHAR2,
13807   p_validation_level     IN            NUMBER,
13808   x_return_status        OUT NOCOPY    VARCHAR2,
13809   x_msg_count            OUT NOCOPY    NUMBER ,
13810   x_msg_data             OUT NOCOPY    VARCHAR2,
13811   p_application_id       IN            NUMBER,
13812   p_entity_code          IN            VARCHAR2,
13813   p_event_class_code     IN            VARCHAR2,
13814   p_internal_org_id      IN            NUMBER,
13815   p_country_code         IN            VARCHAR2,
13816   p_item_id              IN            NUMBER,
13817   p_item_org_id          IN            NUMBER,
13818   x_prod_fisc_class_code OUT NOCOPY    VARCHAR2
13819   )IS
13820   l_api_name                  CONSTANT  VARCHAR2(30) := 'REDEFAULT_PROD_FISC_CLASS_CODE';
13821   l_api_version               CONSTANT  NUMBER := 1.0;
13822   l_return_status             VARCHAR2(1);
13823   l_init_msg_list             VARCHAR2(1);
13824 
13825  BEGIN
13826    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13827      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
13828    END IF;
13829 
13833    SAVEPOINT Redef_Prod_Fisc_Class_Code_PVT;
13830   /*--------------------------------------------------+
13831    |   Standard start of API savepoint                |
13832    +--------------------------------------------------*/
13834 
13835    /*--------------------------------------------------+
13836     |   Standard call to check for call compatibility  |
13837     +--------------------------------------------------*/
13838     IF NOT FND_API.Compatible_API_Call(l_api_version,
13839                                        p_api_version,
13840                                        l_api_name,
13841                                        G_PKG_NAME
13842                                        ) THEN
13843        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13844      END IF;
13845 
13846     /*--------------------------------------------------------------+
13847      |   Initialize message list if p_init_msg_list is set to TRUE  |
13848      +--------------------------------------------------------------*/
13849      IF p_init_msg_list is null THEN
13850        l_init_msg_list := FND_API.G_FALSE;
13851      ELSE
13852        l_init_msg_list := p_init_msg_list;
13853      END IF;
13854 
13855      IF FND_API.to_Boolean(l_init_msg_list) THEN
13856        FND_MSG_PUB.initialize;
13857      END IF;
13858 
13859     /*-----------------------------------------+
13860      |   Initialize return status to SUCCESS   |
13861      +-----------------------------------------*/
13862      x_return_status := FND_API.G_RET_STS_SUCCESS;
13863 
13864     /*-----------------------------------------+
13865      |   Populate Global Variable              |
13866      +-----------------------------------------*/
13867      G_PUB_SRVC := l_api_name;
13868      G_DATA_TRANSFER_MODE := 'PLS';
13869      G_EXTERNAL_API_CALL  := 'N';
13870 
13871      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13872        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
13873        'application_id: ' || to_char(p_application_id)||
13874        ', entity_code: ' || p_entity_code||
13875        ', event_class_code: ' || p_event_class_code||
13876        ', country_code: ' || p_country_code||
13877        ', org_id: ' || to_char(p_internal_org_id)||
13878        ', product_id: ' || to_char(p_item_id)||
13879        ', product_org_id: ' || to_char(p_item_org_id));
13880      END IF;
13881 
13882      ZX_DEFAULT_AUTOMATION_PKG.redefault_prod_fisc_class_code(p_application_id,
13883                                                               p_entity_code,
13884                                                               p_event_class_code,
13885                                                               p_internal_org_id,
13886                                                               p_country_code,
13887                                                               p_item_id,
13888                                                               p_item_org_id,
13889                                                               x_prod_fisc_class_code,
13890                                                               x_return_status
13891                                                               );
13892      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13893        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13894          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13895            ':ZX_DEFAULT_AUTOMATION_PKG.redefault_prod_fisc_class_code returned errors');
13896        END IF;
13897        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
13898          RAISE FND_API.G_EXC_ERROR;
13899        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
13900          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13901        END IF;
13902      ELSE
13903        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13904          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13905            ':Product Fiscal Classification Code :' || x_prod_fisc_class_code);
13906        END IF;
13907      END IF;
13908 
13909      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13910         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
13911      END IF;
13912 
13913      EXCEPTION
13914           WHEN FND_API.G_EXC_ERROR THEN
13915             ROLLBACK TO Redef_Prod_Fisc_Class_Code_PVT;
13916             x_return_status := FND_API.G_RET_STS_ERROR ;
13917             DUMP_MSG;
13918             /*---------------------------------------------------------+
13919              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13920              | in the message stack. If there is only one message in   |
13921              | the stack it retrieves this message                     |
13922              +---------------------------------------------------------*/
13923              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13924                                        p_count   => x_msg_count,
13925                                        p_data    => x_msg_data
13926                                        );
13927 
13928             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13929                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13930             END IF;
13931 
13932           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13933             ROLLBACK TO Redef_Prod_Fisc_Class_Code_PVT;
13934             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13935             DUMP_MSG;
13936             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13937             FND_MSG_PUB.Add;
13938            /*---------------------------------------------------------+
13939             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13943             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13940             | in the message stack. If there is only one message in   |
13941             | the stack it retrieves this message                     |
13942             +---------------------------------------------------------*/
13944                                       p_count   => x_msg_count,
13945                                       p_data    => x_msg_data
13946                                       );
13947             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13948               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13949             END IF;
13950 
13951           WHEN OTHERS THEN
13952              ROLLBACK TO Redef_Prod_Fisc_Class_Code_PVT;
13953              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13954              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13955              FND_MSG_PUB.Add;
13956             /*---------------------------------------------------------+
13957              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13958              | in the message stack. If there is only one message in   |
13959              | the stack it retrieves this message                     |
13960              +---------------------------------------------------------*/
13961              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13962                                        p_count   => x_msg_count,
13963                                        p_data    => x_msg_data
13964                                        );
13965              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
13966                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
13967              END IF;
13968  END redefault_prod_fisc_class_code;
13969 
13970 
13971 /* ======================================================================*
13972  | PROCEDURE redefault_assessable_value: Redefault assessable value      |
13973  * ======================================================================*/
13974 
13975  PROCEDURE redefault_assessable_value(
13976   p_api_version          IN            NUMBER,
13977   p_init_msg_list        IN            VARCHAR2,
13978   p_commit               IN            VARCHAR2,
13979   p_validation_level     IN            NUMBER,
13980   x_return_status        OUT NOCOPY    VARCHAR2,
13981   x_msg_count            OUT NOCOPY    NUMBER ,
13982   x_msg_data             OUT NOCOPY    VARCHAR2,
13983   p_application_id       IN            NUMBER,
13984   p_entity_code          IN            VARCHAR2,
13985   p_event_class_code     IN            VARCHAR2,
13986   p_internal_org_id      IN            NUMBER,
13987   p_trx_id               IN            NUMBER,
13988   p_trx_line_id          IN            NUMBER,
13989   p_trx_level_type       IN            VARCHAR2,
13990   p_item_id              IN            NUMBER,
13991   p_item_org_id          IN            NUMBER,
13992   p_line_amt             IN            NUMBER,
13993   x_assessable_value     OUT NOCOPY    NUMBER
13994   )IS
13995   l_api_name                  CONSTANT  VARCHAR2(30) := 'REDEFAULT_ASSESSABLE_VALUE';
13996   l_api_version               CONSTANT  NUMBER := 1.0;
13997   l_return_status             VARCHAR2(1);
13998   l_init_msg_list             VARCHAR2(1);
13999 
14000  BEGIN
14001    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
14002      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
14003    END IF;
14004 
14005   /*--------------------------------------------------+
14006    |   Standard start of API savepoint                |
14007    +--------------------------------------------------*/
14008    SAVEPOINT Redefault_Assessable_Value_PVT;
14009 
14010    /*--------------------------------------------------+
14011     |   Standard call to check for call compatibility  |
14012     +--------------------------------------------------*/
14013     IF NOT FND_API.Compatible_API_Call(l_api_version,
14014                                        p_api_version,
14015                                        l_api_name,
14016                                        G_PKG_NAME
14017                                        ) THEN
14018        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14019      END IF;
14020 
14021     /*--------------------------------------------------------------+
14022      |   Initialize message list if p_init_msg_list is set to TRUE  |
14023      +--------------------------------------------------------------*/
14024      IF p_init_msg_list is null THEN
14025        l_init_msg_list := FND_API.G_FALSE;
14026      ELSE
14027        l_init_msg_list := p_init_msg_list;
14028      END IF;
14029 
14030      IF FND_API.to_Boolean(l_init_msg_list) THEN
14031        FND_MSG_PUB.initialize;
14032      END IF;
14033 
14034     /*-----------------------------------------+
14035      |   Initialize return status to SUCCESS   |
14036      +-----------------------------------------*/
14037      x_return_status := FND_API.G_RET_STS_SUCCESS;
14038 
14039     /*-----------------------------------------+
14040      |   Populate Global Variable              |
14041      +-----------------------------------------*/
14042      G_PUB_SRVC := l_api_name;
14043      G_DATA_TRANSFER_MODE := 'PLS';
14044      G_EXTERNAL_API_CALL  := 'N';
14045 
14046      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14047        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
14048        'application_id: ' || to_char(p_application_id)||
14049        ', entity_code: ' || p_entity_code||
14050        ', event_class_code: ' || p_event_class_code||
14051        ', org_id: ' || to_char(p_internal_org_id)||
14052        ', product_id: ' || to_char(p_item_id)||
14056        ', trx_level_type: ' || to_char(p_trx_level_type)||
14053        ', product_org_id: ' || to_char(p_item_org_id)||
14054        ', trx_id: ' || to_char(p_trx_id)||
14055        ', trx_line_id: ' || to_char(p_trx_line_id)||
14057        ', line_amount: ' || to_char(p_line_amt));
14058      END IF;
14059 
14060      ZX_DEFAULT_AUTOMATION_PKG.redefault_assessable_value(p_application_id,
14061                                                           p_entity_code,
14062                                                           p_event_class_code,
14063                                                           p_internal_org_id,
14064                                                           p_trx_id,
14065                                                           p_trx_line_id,
14066                                                           p_trx_level_type,
14067                                                           p_item_id,
14068                                                           p_item_org_id,
14069                                                           p_line_amt,
14070                                                           x_assessable_value,
14071                                                           x_return_status
14072                                                           );
14073 
14074      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14075        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14076          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
14077            ':ZX_DEFAULT_AUTOMATION_PKG.redefault_assessable_value returned errors');
14078        END IF;
14079        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
14080          RAISE FND_API.G_EXC_ERROR;
14081        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
14082          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14083        END IF;
14084      ELSE
14085        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14086          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
14087            'Reassessable Value :' || to_char(x_assessable_value));
14088        END IF;
14089      END IF;
14090 
14091      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
14092         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
14093      END IF;
14094 
14095      EXCEPTION
14096           WHEN FND_API.G_EXC_ERROR THEN
14097             ROLLBACK TO Redefault_Assessable_Value_PVT;
14098             x_return_status := FND_API.G_RET_STS_ERROR ;
14099             DUMP_MSG;
14100            /*---------------------------------------------------------+
14101             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14102             | in the message stack. If there is only one message in   |
14103             | the stack it retrieves this message                     |
14104             +---------------------------------------------------------*/
14105             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14106                                       p_count   => x_msg_count,
14107                                       p_data    => x_msg_data
14108                                       );
14109             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
14110                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
14111             END IF;
14112 
14113           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
14114             ROLLBACK TO Redefault_Assessable_Value_PVT;
14115             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
14116             DUMP_MSG;
14117             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
14118             FND_MSG_PUB.Add;
14119            /*---------------------------------------------------------+
14120             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14121             | in the message stack. If there is only one message in   |
14122             | the stack it retrieves this message                     |
14123             +---------------------------------------------------------*/
14124             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14125                                       p_count   => x_msg_count,
14126                                       p_data    => x_msg_data
14127                                       );
14128             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
14129               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
14130             END IF;
14131 
14132           WHEN OTHERS THEN
14133              ROLLBACK TO Redefault_Assessable_Value_PVT;
14134              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
14135              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
14136              FND_MSG_PUB.Add;
14137            /*---------------------------------------------------------+
14138             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14139             | in the message stack. If there is only one message in   |
14140             | the stack it retrieves this message                     |
14141             +---------------------------------------------------------*/
14142             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14143                                        p_count  => x_msg_count,
14144                                        p_data   => x_msg_data
14145                                       );
14146              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
14147                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
14148              END IF;
14149  END redefault_assessable_value;
14150 
14151 /* ======================================================================*
14155  PROCEDURE redefault_product_type(
14152  | PROCEDURE redefault_product_type: Redefault product type              |
14153  * ======================================================================*/
14154 
14156   p_api_version          IN            NUMBER,
14157   p_init_msg_list        IN            VARCHAR2,
14158   p_commit               IN            VARCHAR2,
14159   p_validation_level     IN            NUMBER,
14160   x_return_status        OUT NOCOPY    VARCHAR2,
14161   x_msg_count            OUT NOCOPY    NUMBER ,
14162   x_msg_data             OUT NOCOPY    VARCHAR2,
14163   p_application_id       IN            NUMBER,
14164   p_entity_code          IN            VARCHAR2,
14165   p_event_class_code     IN            VARCHAR2,
14166   p_country_code         IN            VARCHAR2,
14167   p_item_id              IN            NUMBER,
14168   p_org_id               IN            NUMBER,
14169   x_product_type         OUT NOCOPY    VARCHAR2
14170   )IS
14171   l_api_name                  CONSTANT  VARCHAR2(30) := 'REDEFAULT_ASSESSABLE_VALUE';
14172   l_api_version               CONSTANT  NUMBER := 1.0;
14173   l_return_status             VARCHAR2(1);
14174   l_init_msg_list             VARCHAR2(1);
14175 
14176  BEGIN
14177    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
14178      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
14179    END IF;
14180 
14181   /*--------------------------------------------------+
14182    |   Standard start of API savepoint                |
14183    +--------------------------------------------------*/
14184    SAVEPOINT Redefault_Assessable_Value_PVT;
14185 
14186    /*--------------------------------------------------+
14187     |   Standard call to check for call compatibility  |
14188     +--------------------------------------------------*/
14189     IF NOT FND_API.Compatible_API_Call(l_api_version,
14190                                        p_api_version,
14191                                        l_api_name,
14192                                        G_PKG_NAME
14193                                        ) THEN
14194        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14195      END IF;
14196 
14197     /*--------------------------------------------------------------+
14198      |   Initialize message list if p_init_msg_list is set to TRUE  |
14199      +--------------------------------------------------------------*/
14200      IF p_init_msg_list is null THEN
14201        l_init_msg_list := FND_API.G_FALSE;
14202      ELSE
14203        l_init_msg_list := p_init_msg_list;
14204      END IF;
14205 
14206      IF FND_API.to_Boolean(l_init_msg_list) THEN
14207        FND_MSG_PUB.initialize;
14208      END IF;
14209 
14210     /*-----------------------------------------+
14211      |   Initialize return status to SUCCESS   |
14212      +-----------------------------------------*/
14213      x_return_status := FND_API.G_RET_STS_SUCCESS;
14214 
14215     /*-----------------------------------------+
14216      |   Populate Global Variable              |
14217      +-----------------------------------------*/
14218      G_PUB_SRVC := l_api_name;
14219      G_DATA_TRANSFER_MODE := 'PLS';
14220      G_EXTERNAL_API_CALL  := 'N';
14221 
14222 
14223      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14224        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
14225        'application_id: ' || to_char(p_application_id)||
14226        ', entity_code: ' || p_entity_code||
14227        ', event_class_code: ' || p_event_class_code||
14228        ', country_code: ' || p_country_code||
14229        ', org_id: ' || to_char(p_org_id)||
14230        ', product_id: ' || to_char(p_item_id));
14231      END IF;
14232 
14233      ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code(p_fiscal_type_code  =>  'PRODUCT_TYPE',
14234                                                       p_country_code      =>  p_country_code,
14235                                                       p_application_id    =>  p_application_id,
14236                                                       p_entity_code       =>  p_entity_code,
14237                                                       p_event_class_code  =>  p_event_class_code,
14238                                                       p_source_event_class_code  =>  null,
14239                                                       p_item_id           =>  p_item_id,
14240                                                       p_org_id            =>  p_org_id,
14241                                                       p_default_code      =>  x_product_type ,
14242                                                       p_return_status     =>  l_return_status
14243                                                       );
14244 
14245      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14246        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14247          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
14248            ':ZX_DEFAULT_AUTOMATION_PKG.redefault_assessable_value returned errors');
14249        END IF;
14250        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
14251          RAISE FND_API.G_EXC_ERROR;
14252        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
14253          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14254        END IF;
14255      ELSE
14256        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14257          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
14258            'Product Type :' || x_product_type);
14259        END IF;
14260      END IF;
14261 
14262      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
14266      EXCEPTION
14263         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
14264      END IF;
14265 
14267           WHEN FND_API.G_EXC_ERROR THEN
14268             ROLLBACK TO Redefault_Assessable_Value_PVT;
14269             x_return_status := FND_API.G_RET_STS_ERROR ;
14270             DUMP_MSG;
14271            /*---------------------------------------------------------+
14272             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14273             | in the message stack. If there is only one message in   |
14274             | the stack it retrieves this message                     |
14275             +---------------------------------------------------------*/
14276             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14277                                       p_count   => x_msg_count,
14278                                       p_data    => x_msg_data
14279                                       );
14280             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
14281                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
14282             END IF;
14283 
14284           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
14285             ROLLBACK TO Redefault_Assessable_Value_PVT;
14286             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
14287             DUMP_MSG;
14288             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
14289             FND_MSG_PUB.Add;
14290            /*---------------------------------------------------------+
14291             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14292             | in the message stack. If there is only one message in   |
14293             | the stack it retrieves this message                     |
14294             +---------------------------------------------------------*/
14295             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14296                                       p_count   => x_msg_count,
14297                                       p_data    => x_msg_data
14298                                       );
14299             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
14300               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
14301             END IF;
14302 
14303           WHEN OTHERS THEN
14304              ROLLBACK TO Redefault_Assessable_Value_PVT;
14305              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
14306              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
14307              FND_MSG_PUB.Add;
14308            /*---------------------------------------------------------+
14309             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14310             | in the message stack. If there is only one message in   |
14311             | the stack it retrieves this message                     |
14312             +---------------------------------------------------------*/
14313             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14314                                        p_count  => x_msg_count,
14315                                        p_data   => x_msg_data
14316                                       );
14317              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
14318                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
14319              END IF;
14320  END redefault_product_type;
14321  /* ======================================================================*
14322  | PROCEDURE redef_tax_classification_code: ReDefault tax classification  |
14323  * ======================================================================*/
14324  PROCEDURE redef_tax_classification_code(
14325   p_api_version                  IN               NUMBER,
14326   p_init_msg_list                IN               VARCHAR2,
14327   p_commit                       IN               VARCHAR2,
14328   p_validation_level             IN               NUMBER,
14329   x_msg_count                    OUT    NOCOPY    NUMBER ,
14330   x_msg_data                     OUT    NOCOPY    VARCHAR2,
14331   x_return_status                OUT    NOCOPY    VARCHAR2,
14332   p_redef_tax_cls_code_info_rec  IN OUT NOCOPY    def_tax_cls_code_info_rec_type
14333   ) IS
14334   l_api_name                  CONSTANT  VARCHAR2(30) := 'REDEF_TAX_CLASSIFICATION_CODE';
14335   l_api_version               CONSTANT  NUMBER := 1.0;
14336   l_return_status             VARCHAR2(1);
14337   l_init_msg_list             VARCHAR2(1);
14338   l_error_buffer              VARCHAR2(1000);
14339 
14340  BEGIN
14341    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
14342      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
14343    END IF;
14344 
14345   /*--------------------------------------------------+
14346    |   Standard start of API savepoint                |
14347    +--------------------------------------------------*/
14348    SAVEPOINT Redef_Tax_Class_Code_PVT;
14349 
14350    /*--------------------------------------------------+
14351     |   Standard call to check for call compatibility  |
14352     +--------------------------------------------------*/
14353     IF NOT FND_API.Compatible_API_Call(l_api_version,
14354                                        p_api_version,
14355                                        l_api_name,
14356                                        G_PKG_NAME
14357                                        ) THEN
14358        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14359      END IF;
14360 
14361     /*--------------------------------------------------------------+
14362      |   Initialize message list if p_init_msg_list is set to TRUE  |
14363      +--------------------------------------------------------------*/
14367        l_init_msg_list := p_init_msg_list;
14364      IF p_init_msg_list is null THEN
14365        l_init_msg_list := FND_API.G_FALSE;
14366      ELSE
14368      END IF;
14369 
14370      IF FND_API.to_Boolean(l_init_msg_list) THEN
14371        FND_MSG_PUB.initialize;
14372      END IF;
14373 
14374     /*-----------------------------------------+
14375      |   Initialize return status to SUCCESS   |
14376      +-----------------------------------------*/
14377      x_return_status := FND_API.G_RET_STS_SUCCESS;
14378 
14379     /*-----------------------------------------+
14380      |   Populate Global Variable              |
14381      +-----------------------------------------*/
14382      G_PUB_SRVC := l_api_name;
14383      G_DATA_TRANSFER_MODE := 'PLS';
14384      G_EXTERNAL_API_CALL  := 'N';
14385 
14386 
14387      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14388        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
14389        'application_id: ' || to_char(p_redef_tax_cls_code_info_rec.application_id)||
14390        ', entity_code: ' || p_redef_tax_cls_code_info_rec.entity_code||
14391        ', event_class_code: ' || p_redef_tax_cls_code_info_rec.event_class_code||
14392        ', org_id: ' || to_char(p_redef_tax_cls_code_info_rec.internal_organization_id)||
14393        ', product_id: ' || to_char(p_redef_tax_cls_code_info_rec.product_id)||
14394        ', product_org_id: ' || to_char(p_redef_tax_cls_code_info_rec.product_org_id)||
14395        ', trx_date: ' || to_char(p_redef_tax_cls_code_info_rec.trx_date)||
14396        ', trx_id: ' || to_char(p_redef_tax_cls_code_info_rec.trx_id)||
14397        ', trx_line_id: ' || to_char(p_redef_tax_cls_code_info_rec.trx_line_id)||
14398        ', trx_level_type: ' || p_redef_tax_cls_code_info_rec.trx_level_type||
14399        ', trx_date: ' || to_char(p_redef_tax_cls_code_info_rec.trx_date)||
14400        ', ledger_id: ' || to_char(p_redef_tax_cls_code_info_rec.ledger_id)||
14401        ', ship_third_pty_acct_id: ' || to_char(p_redef_tax_cls_code_info_rec.ship_third_pty_acct_id)||
14402        ', ship_third_pty_acct_site_id: ' || to_char(p_redef_tax_cls_code_info_rec.ship_third_pty_acct_site_id)||
14403        ', bill_third_pty_acct_id: ' || to_char(p_redef_tax_cls_code_info_rec.bill_third_pty_acct_id)||
14404        ', bill_third_pty_acct_site_id: ' || to_char(p_redef_tax_cls_code_info_rec.bill_third_pty_acct_site_id)||
14405        ', ship_to_cust_acct_site_use_id: ' || to_char(p_redef_tax_cls_code_info_rec.ship_to_cust_acct_site_use_id)||
14406        ', bill_to_cust_acct_site_use_id: ' || to_char(p_redef_tax_cls_code_info_rec.bill_to_cust_acct_site_use_id)||
14407        ', ship_to_location_id: ' || to_char(p_redef_tax_cls_code_info_rec.ship_to_location_id)||
14408        ', account_ccid: ' || to_char(p_redef_tax_cls_code_info_rec.account_ccid)||
14409        ', account_string: ' || p_redef_tax_cls_code_info_rec.account_string||
14410        ', ref_doc_application_id: ' || to_char(p_redef_tax_cls_code_info_rec.application_id)||
14411        ', ref_doc_entity_code: ' || p_redef_tax_cls_code_info_rec.ref_doc_entity_code||
14412        ', ref_doc_event_class_code: ' || p_redef_tax_cls_code_info_rec.ref_doc_event_class_code||
14413        ', ref_doc_trx_id: ' || to_char(p_redef_tax_cls_code_info_rec.ref_doc_trx_id)||
14414        ', ref_doc_line_id: ' || to_char(p_redef_tax_cls_code_info_rec.ref_doc_line_id)||
14415        ', ref_doc_trx_level_type: ' || p_redef_tax_cls_code_info_rec.ref_doc_trx_level_type||
14416        ', tax_user_override_flag: ' || p_redef_tax_cls_code_info_rec.tax_user_override_flag||
14417        ', overridden_tax_cls_code : ' || p_redef_tax_cls_code_info_rec.overridden_tax_cls_code ||
14418        ', defaulting_attribute10: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute10||
14419        ', defaulting_attribute1: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute1||
14420        ', defaulting_attribute2: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute2||
14421        ', defaulting_attribute3: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute3||
14422        ', defaulting_attribute4: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute4||
14423        ', defaulting_attribute5: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute5||
14424        ', defaulting_attribute6: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute6||
14425        ', defaulting_attribute7: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute7||
14426        ', defaulting_attribute8: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute8||
14427        ', defaulting_attribute9: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute9||
14428        ', defaulting_attribute10: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute10);
14429      END IF;
14430 
14431 
14432     /*-------------------------------------------------+
14433      |   Call TDM API to default the tax classification|
14434      +-------------------------------------------------*/
14435      ZX_TAX_DEFAULT_PKG.get_default_tax_classification (p_definfo            =>  p_redef_tax_cls_code_info_rec,
14436                                                         p_return_status      =>  l_return_status,
14437                                                         p_error_buffer       =>  l_error_buffer
14438                                                         );
14439      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14440        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14441          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
14442            ':ZX_TAX_DEFAULT_PKG.get_default_tax_classification returned errors');
14443        END IF;
14444        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
14445          RAISE FND_API.G_EXC_ERROR;
14446        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
14447          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14448        END IF;
14449      ELSE
14450        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14454        END IF;
14451          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
14452          'Tax Classification: ' || p_redef_tax_cls_code_info_rec.x_tax_classification_code
14453          );
14455      END IF;
14456 
14457      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
14458         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
14459      END IF;
14460 
14461      EXCEPTION
14462           WHEN FND_API.G_EXC_ERROR THEN
14463             ROLLBACK TO Redef_Tax_Class_Code_PVT;
14464             x_return_status := FND_API.G_RET_STS_ERROR ;
14465             DUMP_MSG;
14466            /*---------------------------------------------------------+
14467             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14468             | in the message stack. If there is only one message in   |
14469             | the stack it retrieves this message                     |
14470             +---------------------------------------------------------*/
14471             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14472                                       p_count   => x_msg_count,
14473                                       p_data    => x_msg_data
14474                                       );
14475             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
14476                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
14477             END IF;
14478 
14479           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
14480             ROLLBACK TO Redef_Tax_Class_Code_PVT;
14481             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
14482             DUMP_MSG;
14483             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
14484             FND_MSG_PUB.Add;
14485            /*---------------------------------------------------------+
14486             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14487             | in the message stack. If there is only one message in   |
14488             | the stack it retrieves this message                     |
14489             +---------------------------------------------------------*/
14490             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14491                                       p_count   => x_msg_count,
14492                                       p_data    => x_msg_data
14493                                       );
14494             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
14495               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
14496             END IF;
14497 
14498           WHEN OTHERS THEN
14499              ROLLBACK TO Redef_Tax_Class_Code_PVT;
14500              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
14501              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
14502              FND_MSG_PUB.Add;
14503             /*---------------------------------------------------------+
14504              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14505              | in the message stack. If there is only one message in   |
14506              | the stack it retrieves this message                     |
14507              +---------------------------------------------------------*/
14508              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14509                                        p_count   => x_msg_count,
14510                                        p_data    => x_msg_data
14511                                        );
14512              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
14513                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
14514              END IF;
14515  END redef_tax_classification_code;
14516 
14517 /* =========================================================================*
14518  | PROCEDURE purge_tax_repository: Purges the transaction lines and tax data|
14519  | GTT : ZX_PURGE_TRANSACTIONS_GT                                           |
14520  * ========================================================================*/
14521  PROCEDURE purge_tax_repository(
14522   p_api_version                  IN               NUMBER,
14523   p_init_msg_list                IN               VARCHAR2,
14524   p_commit                       IN               VARCHAR2,
14525   p_validation_level             IN               NUMBER,
14526   x_msg_count                    OUT    NOCOPY    NUMBER ,
14527   x_msg_data                     OUT    NOCOPY    VARCHAR2,
14528   x_return_status                OUT    NOCOPY    VARCHAR2
14529   )IS
14530   l_api_name                  CONSTANT  VARCHAR2(30) := 'PURGE_TAX_REPOSITORY';
14531   l_api_version               CONSTANT  NUMBER := 1.0;
14532   l_init_msg_list             VARCHAR2(1);
14533   l_summarization_flag        VARCHAR2(1);
14534   l_tax_recovery_flag         VARCHAR2(1);
14535   l_tax_reporting_flag        VARCHAR2(1);
14536   l_row_count                 NUMBER;
14537   l_context_info_rec          context_info_rec_type;
14538   l_application_id            NUMBER;
14539   l_entity_code               VARCHAR2(30);
14540   l_event_class_code          VARCHAR2(30);
14541 
14542  BEGIN
14543    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
14544      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
14545    END IF;
14546 
14547   /*--------------------------------------------------+
14548    |   Standard start of API savepoint                |
14549    +--------------------------------------------------*/
14550    SAVEPOINT Purge_Tax_Repository_PVT;
14551 
14552    /*--------------------------------------------------+
14553     |   Standard call to check for call compatibility  |
14554     +--------------------------------------------------*/
14555     IF NOT FND_API.Compatible_API_Call(l_api_version,
14559                                        ) THEN
14556                                        p_api_version,
14557                                        l_api_name,
14558                                        G_PKG_NAME
14560        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14561      END IF;
14562 
14563     /*--------------------------------------------------------------+
14564      |   Initialize message list if p_init_msg_list is set to TRUE  |
14565      +--------------------------------------------------------------*/
14566      IF p_init_msg_list is null THEN
14567        l_init_msg_list := FND_API.G_FALSE;
14568      ELSE
14569        l_init_msg_list := p_init_msg_list;
14570      END IF;
14571 
14572      IF FND_API.to_Boolean(l_init_msg_list) THEN
14573        FND_MSG_PUB.initialize;
14574      END IF;
14575 
14576     /*-----------------------------------------+
14577      |   Initialize return status to SUCCESS   |
14578      +-----------------------------------------*/
14579      x_return_status := FND_API.G_RET_STS_SUCCESS;
14580 
14581     /*-----------------------------------------+
14582      |   Populate Global Variable              |
14583      +------ -----------------------------------*/
14584      G_PUB_SRVC := l_api_name;
14585      G_DATA_TRANSFER_MODE := 'TAB';
14586      G_EXTERNAL_API_CALL  := 'N';
14587 
14588     SELECT application_id,
14589            entity_code,
14590            event_class_code
14591       INTO l_application_id,
14592            l_entity_code,
14593            l_event_class_code
14594       FROM ZX_PURGE_TRANSACTIONS_GT
14595      WHERE rownum=1;
14596 
14597     IF l_event_class_code = 'SALES_TRANSACTION_TAX_QUOTE' THEN
14598         SELECT summarization_flag,
14599                tax_reporting_flag,
14600                tax_recovery_flag
14601           INTO l_summarization_flag,
14602                l_tax_reporting_flag,
14603                l_tax_recovery_flag
14604           FROM ZX_EVNT_CLS_MAPPINGS
14605          WHERE APPLICATION_ID    = 222
14606            AND ENTITY_CODE       = 'TRANSACTIONS'
14607            AND EVENT_CLASS_CODE  = 'INVOICE';
14608      ELSIF l_event_class_code = 'PURCHASE_TRANSACTION_TAX_QUOTE' THEN
14609        SELECT summarization_flag,
14610               tax_reporting_flag,
14611               tax_recovery_flag
14612          INTO l_summarization_flag,
14613               l_tax_reporting_flag,
14614               l_tax_recovery_flag
14615          FROM ZX_EVNT_CLS_MAPPINGS
14616         WHERE APPLICATION_ID    = 200
14617           AND ENTITY_CODE       = 'AP_INVOICES'
14618           AND EVENT_CLASS_CODE  = 'STANDARD INVOICE';
14619      ELSE
14620        SELECT summarization_flag,
14621               tax_reporting_flag,
14622               tax_recovery_flag
14623          INTO l_summarization_flag,
14624               l_tax_reporting_flag,
14625               l_tax_recovery_flag
14626          FROM ZX_EVNT_CLS_MAPPINGS
14627         WHERE APPLICATION_ID    = l_application_id
14628           AND ENTITY_CODE       = l_entity_code
14629           AND EVENT_CLASS_CODE  = l_event_class_code;
14630      END IF;
14631 
14632      --PO does not report taxes so go ahead and delete the tax repository
14633      IF l_tax_reporting_flag = 'N' THEN
14634         DELETE
14635         FROM ZX_LINES tax
14636        WHERE (APPLICATION_ID, ENTITY_CODE,EVENT_CLASS_CODE, TRX_ID)
14637           IN (SELECT  /*+ INDEX (ZX_PURGE_TRANSACTIONS_GT ZX_PURGE_TRANSACTIONS_GT_U1)*/
14638                    APPLICATION_ID,
14639                    ENTITY_CODE,
14640                    EVENT_CLASS_CODE,
14641                    TRX_ID
14642               FROM ZX_PURGE_TRANSACTIONS_GT purge);
14643 
14644        IF SQL%FOUND THEN
14645          l_row_count := SQL%ROWCOUNT;
14646          IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
14647            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name ,
14648                           'Number of rows deleted from ZX_LINES = '|| to_char(l_row_count));
14649          END IF;
14650        END IF;
14651 
14652        IF l_summarization_flag = 'Y' THEN
14653           DELETE
14654           FROM ZX_LINES_SUMMARY summ
14655          WHERE (APPLICATION_ID, ENTITY_CODE,EVENT_CLASS_CODE,TRX_ID)
14656             IN (SELECT  /*+ INDEX (ZX_PURGE_TRANSACTIONS_GT ZX_PURGE_TRANSACTIONS_GT_U1)*/
14657                      APPLICATION_ID,
14658                      ENTITY_CODE,
14659                      EVENT_CLASS_CODE,
14660                      TRX_ID
14661                 FROM ZX_PURGE_TRANSACTIONS_GT purge);
14662 
14663          IF SQL%FOUND THEN
14664            l_row_count := SQL%ROWCOUNT;
14665            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
14666              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name ,
14667                             'Number of rows deleted from ZX_LINES_SUMMARY = '||to_char(l_row_count));
14668            END IF;
14669          END IF;
14670        END IF; --summarization_flag is Y
14671 
14672        IF l_tax_recovery_flag ='Y' THEN
14673          DELETE
14674           FROM ZX_REC_NREC_DIST dist
14675          WHERE (APPLICATION_ID, ENTITY_CODE,EVENT_CLASS_CODE,TRX_ID)
14676             IN (SELECT  /*+ INDEX (ZX_PURGE_TRANSACTIONS_GT ZX_PURGE_TRANSACTIONS_GT_U1)*/
14677                      APPLICATION_ID,
14678                      ENTITY_CODE,
14679                      EVENT_CLASS_CODE,
14680                      TRX_ID
14681                 FROM ZX_PURGE_TRANSACTIONS_GT purge);
14682 
14683 
14684          IF SQL%FOUND THEN
14685            l_row_count := SQL%ROWCOUNT;
14686            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
14690          END IF;
14687              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name ,
14688                             'Number of rows deleted from ZX_REC_NREC_DIST = '||to_char(l_row_count));
14689            END IF;
14691        END IF; --tax recovery is Y
14692 
14693        DELETE
14694         FROM ZX_LINES_DET_FACTORS lines
14695        WHERE (APPLICATION_ID, ENTITY_CODE,EVENT_CLASS_CODE, TRX_ID)
14696           IN (SELECT  /*+ INDEX (ZX_PURGE_TRANSACTIONS_GT ZX_PURGE_TRANSACTIONS_GT_U1)*/
14697                    APPLICATION_ID,
14698                    ENTITY_CODE,
14699                    EVENT_CLASS_CODE,
14700                    TRX_ID
14701               FROM ZX_PURGE_TRANSACTIONS_GT purge);
14702 
14703        IF SQL%FOUND THEN
14704          l_row_count := SQL%ROWCOUNT;
14705          IF (G_LEVEL_PROCEDURE >= g_current_runtime_level ) THEN
14706            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name ,
14707                           'Number of rows deleted from ZX_LINES_DET_FACTORS = '||to_char(l_row_count));
14708          END IF;
14709        END IF;
14710      --ELSIF tax_reporting_flag = 'Y' --AR/AP cases wherein we need to purge only if tax lines are frozen --TBD on requirement basis
14711      END IF; --tax reporting flag is N
14712 
14713 
14714      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
14715         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
14716      END IF;
14717 
14718      EXCEPTION
14719           WHEN FND_API.G_EXC_ERROR THEN
14720             ROLLBACK TO Purge_Tax_Repository_PVT;
14721             x_return_status := FND_API.G_RET_STS_ERROR ;
14722             --Call API to dump into zx_errors_gt
14723             DUMP_MSG;
14724             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
14725                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
14726             END IF;
14727 
14728           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
14729             ROLLBACK TO Purge_Tax_Repository_PVT;
14730             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
14731             DUMP_MSG;
14732             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
14733             FND_MSG_PUB.Add;
14734            /*---------------------------------------------------------+
14735             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14736             | in the message stack. If there is only one message in   |
14737             | the stack it retrieves this message                     |
14738             +---------------------------------------------------------*/
14739             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14740                                       p_count   => x_msg_count,
14741                                       p_data    => x_msg_data
14742                                       );
14743             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
14744               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
14745             END IF;
14746 
14747           WHEN OTHERS THEN
14748              ROLLBACK TO Purge_Tax_Repository_PVT;
14749              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
14750              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
14751              FND_MSG_PUB.Add;
14752             /*---------------------------------------------------------+
14753              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14754              | in the message stack. If there is only one message in   |
14755              | the stack it retrieves this message                     |
14756              +---------------------------------------------------------*/
14757              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14758                                       p_count    => x_msg_count,
14759                                       p_data     => x_msg_data
14760                                       );
14761              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
14762                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
14763              END IF;
14764 
14765  END purge_tax_repository;
14766 
14767 /* ======================================================================*
14768  | API TO GET  LE FOR AP IMPORT TRANSACTIONS                             |
14769  * ======================================================================*/
14770 FUNCTION get_le_from_tax_registration(
14771    p_api_version       IN         NUMBER,
14772    p_init_msg_list     IN         VARCHAR2,
14773    p_commit            IN         VARCHAR2,
14774    p_validation_level  IN         NUMBER,
14775    x_return_status     OUT NOCOPY VARCHAR2,
14776    x_msg_count         OUT NOCOPY NUMBER,
14777    x_msg_data          OUT NOCOPY VARCHAR2,
14778    p_registration_num  IN         ZX_REGISTRATIONS.Registration_Number%type,
14779    p_effective_date    IN         ZX_REGISTRATIONS.effective_from%type,
14780    p_country           IN         ZX_PARTY_TAX_PROFILE.Country_code%type
14781   ) RETURN Number IS
14782   l_api_name           CONSTANT VARCHAR2(30) := 'GET_LE_FROM_TAX_REGISTRATION';
14783   l_api_version        CONSTANT  NUMBER := 1.0;
14784   l_init_msg_list      VARCHAR2(1);
14785   l_legal_entity_id    NUMBER;
14786   l_return_status      VARCHAR2(1);
14787 
14788  BEGIN
14789    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
14790      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
14791    END IF;
14792 
14793   /*--------------------------------------------------+
14794    |   Standard start of API savepoint                |
14795    +--------------------------------------------------*/
14796    SAVEPOINT GET_LE_FROM_TAX_REGISTRATN_PVT;
14800     +--------------------------------------------------*/
14797 
14798    /*--------------------------------------------------+
14799     |   Standard call to check for call compatibility  |
14801     IF NOT FND_API.Compatible_API_Call(l_api_version,
14802                                        p_api_version,
14803                                        l_api_name,
14804                                        G_PKG_NAME
14805                                        ) THEN
14806        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14807      END IF;
14808 
14809     /*--------------------------------------------------------------+
14810      |   Initialize message list if p_init_msg_list is set to TRUE  |
14811      +--------------------------------------------------------------*/
14812      IF p_init_msg_list is null THEN
14813        l_init_msg_list := FND_API.G_FALSE;
14814      ELSE
14815        l_init_msg_list := p_init_msg_list;
14816      END IF;
14817 
14818      IF FND_API.to_Boolean(l_init_msg_list) THEN
14819        FND_MSG_PUB.initialize;
14820      END IF;
14821 
14822     /*-----------------------------------------+
14823      |   Initialize return status to SUCCESS   |
14824      +-----------------------------------------*/
14825      x_return_status := FND_API.G_RET_STS_SUCCESS;
14826 
14827     /*-----------------------------------------+
14828      |   Populate Global Variable              |
14829      +-----------------------------------------*/
14830      G_PUB_SRVC := l_api_name;
14831      G_DATA_TRANSFER_MODE := 'PLS';
14832      G_EXTERNAL_API_CALL  := 'N';
14833 
14834 
14835      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14836        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
14837          'Registration Number: ' || to_char(p_registration_num)||
14838          ', Country Code: ' || p_country ||
14839          ', Effective_date: ' || to_char(p_effective_date));
14840      END IF;
14841 
14842 
14843     /*-------------------------------------------------+
14844      |   Call TDM API to default the tax classification|
14845      +-------------------------------------------------*/
14846 
14847     l_legal_entity_id :=  ZX_TCM_EXT_SERVICES_PUB.get_le_from_tax_registration (x_return_status,
14848                                                                                 p_registration_num,
14849                                                                                 p_effective_date,
14850                                                                                 p_country
14851                                                                                );
14852      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
14853        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14854          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
14855            ':ZX_TCM_EXT_SERVICES.get_le_from_tax_registration returned errors');
14856        END IF;
14857        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
14858          RAISE FND_API.G_EXC_ERROR;
14859        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
14860          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14861        END IF;
14862      ELSE
14863        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14864          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
14865          'Legal Entity : ' || to_char(l_legal_entity_id)
14866          );
14867        END IF;
14868        RETURN l_legal_entity_id;
14869      END IF;
14870 
14871      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
14872         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
14873      END IF;
14874      EXCEPTION
14875           WHEN FND_API.G_EXC_ERROR THEN
14876             ROLLBACK TO GET_LE_FROM_TAX_REGISTRATN_PVT;
14877             x_return_status := FND_API.G_RET_STS_ERROR ;
14878             DUMP_MSG;
14879            /*---------------------------------------------------------+
14880             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14881             | in the message stack. If there is only one message in   |
14882             | the stack it retrieves this message                     |
14883             +---------------------------------------------------------*/
14884             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14885                                       p_count   => x_msg_count,
14886                                       p_data    => x_msg_data
14887                                       );
14888             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
14889                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
14890             END IF;
14891 
14892           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
14893             ROLLBACK TO GET_LE_FROM_TAX_REGISTRATN_PVT;
14894             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
14895             DUMP_MSG;
14896             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
14897             FND_MSG_PUB.Add;
14898            /*---------------------------------------------------------+
14899             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14900             | in the message stack. If there is only one message in   |
14901             | the stack it retrieves this message                     |
14902             +---------------------------------------------------------*/
14903             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14904                                       p_count   => x_msg_count,
14905                                       p_data    => x_msg_data
14906                                       );
14910 
14907             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
14908               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
14909             END IF;
14911           WHEN OTHERS THEN
14912              ROLLBACK TO GET_LE_FROM_TAX_REGISTRATN_PVT;
14913              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
14914              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
14915              FND_MSG_PUB.Add;
14916             /*---------------------------------------------------------+
14917              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
14918              | in the message stack. If there is only one message in   |
14919              | the stack it retrieves this message                     |
14920              +---------------------------------------------------------*/
14921              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
14922                                        p_count   => x_msg_count,
14923                                        p_data    => x_msg_data
14924                                        );
14925              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
14926                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
14927              END IF;
14928 END get_le_from_tax_registration;
14929 
14930  /* ============================================================================*
14931  | PROCEDURE  update_posting_flag : This procedure will update the posting_flag|
14932  | for the tax distribution ids that are passed in from product.               |
14933  * ============================================================================*/
14934  PROCEDURE update_posting_flag(
14935   p_api_version        IN  NUMBER,
14936   p_init_msg_list      IN  VARCHAR2,
14937   p_commit             IN  VARCHAR2,
14938   p_validation_level   IN  NUMBER,
14939   x_return_status      OUT NOCOPY     VARCHAR2,
14940   x_msg_count          OUT NOCOPY     NUMBER,
14941   x_msg_data           OUT NOCOPY     VARCHAR2,
14942   p_tax_dist_id_tbl    IN  tax_dist_id_tbl_type
14943   )IS
14944   l_api_name                  CONSTANT  VARCHAR2(30) := 'UPDATE_POSTING_FLAG';
14945   l_api_version               CONSTANT  NUMBER := 1.0;
14946   l_return_status             VARCHAR2(1);
14947   l_init_msg_list             VARCHAR2(1);
14948 
14949  BEGIN
14950    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
14951      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
14952    END IF;
14953 
14954   /*--------------------------------------------------+
14955    |   Standard start of API savepoint                |
14956    +--------------------------------------------------*/
14957    SAVEPOINT update_posting_flag_PVT;
14958 
14959    /*--------------------------------------------------+
14960     |   Standard call to check for call compatibility  |
14961     +--------------------------------------------------*/
14962     IF NOT FND_API.Compatible_API_Call(l_api_version,
14963                                        p_api_version,
14964                                        l_api_name,
14965                                        G_PKG_NAME
14966                                        ) THEN
14967        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
14968      END IF;
14969 
14970     /*--------------------------------------------------------------+
14971      |   Initialize message list if p_init_msg_list is set to TRUE  |
14972      +--------------------------------------------------------------*/
14973      IF p_init_msg_list is null THEN
14974        l_init_msg_list := FND_API.G_FALSE;
14975      ELSE
14976        l_init_msg_list := p_init_msg_list;
14977      END IF;
14978 
14979      IF FND_API.to_Boolean(l_init_msg_list) THEN
14980        FND_MSG_PUB.initialize;
14981      END IF;
14982 
14983   /*-----------------------------------------+
14984    |   Initialize return status to SUCCESS   |
14985    +-----------------------------------------*/
14986    x_return_status := FND_API.G_RET_STS_SUCCESS;
14987 
14988   /*-----------------------------------------+
14989    |   Populate Global Variable              |
14990    +-----------------------------------------*/
14991    G_PUB_SRVC := l_api_name;
14992    G_DATA_TRANSFER_MODE := 'PLS';
14993    G_EXTERNAL_API_CALL  := 'N';
14994 
14995    IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
14996       FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
14997       'Call TRD service to update posting flag'
14998        );
14999    END IF;
15000 
15001    ZX_TRD_SERVICES_PUB_PKG.update_posting_flag(p_tax_dist_id_tbl => p_tax_dist_id_tbl,
15002                                                       x_return_status    => l_return_status
15003                                                      );
15004 
15005    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
15006      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
15007         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
15008           ':ZX_TRD_SERVICES_PUB_PKG.update_posting_flag returned errors');
15009      END IF;
15010      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
15011         RAISE FND_API.G_EXC_ERROR;
15012      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
15013         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15014      END IF;
15015    END IF;
15016 
15017    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
15018      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
15019    END IF;
15020 
15021    EXCEPTION
15022       WHEN FND_API.G_EXC_ERROR THEN
15023         ROLLBACK TO update_posting_flag_PVT;
15024         x_return_status := FND_API.G_RET_STS_ERROR ;
15025         DUMP_MSG;
15029         | the stack it retrieves this message                     |
15026        /*---------------------------------------------------------+
15027         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
15028         | in the message stack. If there is only one message in   |
15030         +---------------------------------------------------------*/
15031         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
15032                                   p_count   => x_msg_count,
15033                                   p_data    => x_msg_data
15034                                   );
15035 
15036         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
15037           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
15038         END IF;
15039 
15040       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
15041         ROLLBACK TO update_posting_flag_PVT;
15042         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
15043         DUMP_MSG;
15044         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
15045         FND_MSG_PUB.Add;
15046        /*---------------------------------------------------------+
15047         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
15048         | in the message stack. If there is only one message in   |
15049         | the stack it retrieves this message                     |
15050         +---------------------------------------------------------*/
15051         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
15052                                   p_count   => x_msg_count,
15053                                   p_data    => x_msg_data
15054                                   );
15055 
15056         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
15057           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
15058         END IF;
15059 
15060       WHEN OTHERS THEN
15061          ROLLBACK TO update_posting_flag_PVT;
15062          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
15063          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
15064          FND_MSG_PUB.Add;
15065         /*---------------------------------------------------------+
15066          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
15067          | in the message stack. If there is only one message in   |
15068          | the stack it retrieves this message                     |
15069          +---------------------------------------------------------*/
15070          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
15071                                    p_count   => x_msg_count,
15072                                    p_data    => x_msg_data
15073                                    );
15074          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
15075            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
15076          END IF;
15077 
15078  END update_posting_flag;
15079 
15080 PROCEDURE unapply_applied_cm
15081    ( p_api_version           IN            NUMBER,
15082      p_init_msg_list         IN            VARCHAR2,
15083      p_commit                IN            VARCHAR2,
15084      p_validation_level      IN            NUMBER,
15085      p_trx_id                IN            NUMBER,
15086      x_return_status         OUT NOCOPY    VARCHAR2,
15087      x_msg_count             OUT NOCOPY    NUMBER,
15088      x_msg_data              OUT NOCOPY    VARCHAR2
15089     ) IS
15090 
15091   l_api_name                  CONSTANT  VARCHAR2(30) := 'UNAPPLY_APPLIED_CM';
15092   l_api_version               CONSTANT  NUMBER := 1.0;
15093   l_init_msg_list             VARCHAR2(1);
15094 BEGIN
15095   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
15096     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
15097   END IF;
15098 
15099   /*--------------------------------------------------+
15100    |   Standard start of API savepoint                |
15101    +--------------------------------------------------*/
15102   SAVEPOINT unapply_applied_cm_PVT;
15103 
15104   /*-------------------------------------------------+
15105   |   Standard call to check for call compatibility  |
15106   +--------------------------------------------------*/
15107   IF NOT FND_API.Compatible_API_Call(l_api_version,
15108                                      p_api_version,
15109                                      l_api_name,
15110                                      G_PKG_NAME
15111                                      ) THEN
15112     RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
15113   END IF;
15114 
15115   /*-------------------------------------------------------------+
15116   |   Initialize message list if p_init_msg_list is set to TRUE  |
15117   +--------------------------------------------------------------*/
15118   IF p_init_msg_list is null THEN
15119     l_init_msg_list := FND_API.G_FALSE;
15120   ELSE
15121     l_init_msg_list := p_init_msg_list;
15122   END IF;
15123 
15124   IF FND_API.to_Boolean(l_init_msg_list) THEN
15125     FND_MSG_PUB.initialize;
15126   END IF;
15127 
15128   /*----------------------------------------+
15129   |   Initialize return status to SUCCESS   |
15130   +-----------------------------------------*/
15131 
15132   x_return_status := FND_API.G_RET_STS_SUCCESS;
15133 
15134   /*----------------------------------------+
15135   |   Populate Global Variable              |
15136   +-----------------------------------------*/
15137 
15138   G_DATA_TRANSFER_MODE := 'WIN';
15139 
15140   update zx_lines
15141   set adjusted_doc_application_id = null,
15142     adjusted_doc_entity_code = null,
15143     adjusted_doc_event_class_code = null,
15144     adjusted_doc_trx_id = null,
15145     adjusted_doc_line_id = null,
15146     adjusted_doc_number = null,
15147     adjusted_doc_date = null,
15151   and entity_code = 'TRANSACTIONS'
15148     adjusted_doc_trx_level_type = null,
15149     adjusted_doc_tax_line_id = null
15150   where application_id = 222
15152   and event_class_code = 'CREDIT_MEMO'
15153   and trx_id = p_trx_id;
15154 
15155   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
15156     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,
15157                   'Number of Rows updated in zx_lines: '||SQL%ROWCOUNT);
15158   END IF;
15159 
15160   update zx_lines_det_factors
15161   set adjusted_doc_application_id = null,
15162     adjusted_doc_entity_code = null,
15163     adjusted_doc_event_class_code = null,
15164     adjusted_doc_trx_id = null,
15165     adjusted_doc_line_id = null,
15166     adjusted_doc_number = null,
15167     adjusted_doc_trx_level_type = null,
15168     adjusted_doc_date = null
15169   where application_id = 222
15170   and entity_code = 'TRANSACTIONS'
15171   and event_class_code = 'CREDIT_MEMO'
15172   and trx_id = p_trx_id;
15173 
15174   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
15175     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,
15176                   'Number of Rows updated in zx_lines_det_factors: '||SQL%ROWCOUNT);
15177     FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()-');
15178   END IF;
15179 EXCEPTION
15180   WHEN FND_API.G_EXC_ERROR THEN
15181     ROLLBACK TO unapply_applied_cm_PVT;
15182     x_return_status := FND_API.G_RET_STS_ERROR ;
15183     DUMP_MSG;
15184     FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
15185                               p_count   => x_msg_count,
15186                               p_data    => x_msg_data
15187                              );
15188     IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
15189       FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'Exception(-)');
15190     END IF;
15191   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
15192     ROLLBACK TO unapply_applied_cm_PVT;
15193     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
15194     DUMP_MSG;
15195     FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
15196                               p_count   => x_msg_count,
15197                               p_data    => x_msg_data
15198                              );
15199     IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
15200       FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'Unexpected Error(-)');
15201     END IF;
15202   WHEN OTHERS THEN
15203     ROLLBACK TO unapply_applied_cm_PVT;
15204     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
15205     IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
15206       FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
15207     END IF;
15208 END unapply_applied_cm;
15209 
15210 END ZX_API_PUB;