DBA Data[Home] [Help]

PACKAGE BODY: APPS.ZX_API_PUB

Source


1 PACKAGE BODY ZX_API_PUB AS
2 /* $Header: zxifpubsrvcspubb.pls 120.291.12010000.6 2009/01/27 09:27:05 rajessub 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
165    l_api_name              CONSTANT VARCHAR2(30) := 'SET_PTNR_SRVC_SUBSCR_FLAG';
166   BEGIN
167      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
168         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN',G_PKG_NAME||': '||l_api_name||'(+)');
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
330  BEGIN
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';
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;
404           END IF;
401                 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
402                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
403                 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);
462     l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  p_transaction_header_rec.ROUNDING_SHIP_FROM_PARTY_ID(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);
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
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 
485     --If the user calls calculate_tax twice using same db session for the same icx session, then we will have
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,
546                                                            );
543                                                            p_trx_id              => l_event_class_rec.trx_id,
544                                                            x_return_status       => l_return_status,
545                                                            x_error_buffer        => l_error_buffer
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       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
602         x_return_status := l_return_status ;
603         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
604           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');
605         END IF;
606         RETURN;
607       END IF;
608 
609 
610         /*---------------------------------------------------------+
611          | Delete from the global structures for every loop on the |
612          | header document so that there are no hanging/redundant  |
613          | records sitting there                                   |
614          +--------------------------------------------------------*/
615          --Calling routine to delete the global structures
616          ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
617 
618          --Also delete the location caching global structures
619          --** execute the following code only when tax partners are used.
620          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.EVENT_CLASS_MAPPING_ID.DELETE;
624          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_TYPE.DELETE;
621          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_ID.DELETE;
622          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_LINE_ID.DELETE;
623          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_LEVEL_TYPE.DELETE;
625          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_TABLE_NAME.DELETE;
626          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_ID.DELETE;
627          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_TYPE.DELETE;
628          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_VALUE.DELETE;
629          ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_ID.DELETE;
630          ZX_GLOBAL_STRUCTURES_PKG.LOCATION_HASH_TBL.DELETE;
631 
632          IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
633            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||p_api_name||'.END','ZX_API_PUB: '||'calculate_tax_pvt'||'()-');
634          END IF;
635   END calculate_tax_pvt;
636 
637 
638 PROCEDURE import_tax_pvt
639  ( p_evnt_cls               IN            evnt_cls_rec_type,
640    p_api_name               IN            VARCHAR2,
641    p_event_id               IN            NUMBER,
642    p_index                  IN            NUMBER,
643    p_api_version            IN            NUMBER,
644    p_init_msg_list          IN            VARCHAR2,
645    p_commit                 IN            VARCHAR2,
646    p_validation_level       IN            NUMBER,
647    x_return_status          IN OUT NOCOPY VARCHAR2,
648    x_msg_count              IN OUT NOCOPY NUMBER,
649    x_msg_data               IN OUT NOCOPY VARCHAR2
650   ) IS
651    l_sync_needed                 BOOLEAN;
652    l_return_status               VARCHAR2(30);
653    l_event_class_rec             event_class_rec_type;
654 
655   BEGIN
656    /*------------------------------------------------------+
657     |   Copy to Event Class Record                         |
658     +------------------------------------------------------*/
659      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
660        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||p_api_name||'.BEGIN','ZX_API_PUB: import_tax_pvt()+');
661      END IF;
662 
663     l_event_class_rec.EVENT_ID                     :=  p_event_id;
664     l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  p_evnt_cls.INTERNAL_ORGANIZATION_ID(p_index);
665     l_event_class_rec.APPLICATION_ID               :=  p_evnt_cls.APPLICATION_ID(p_index);
666     l_event_class_rec.ENTITY_CODE                  :=  p_evnt_cls.ENTITY_CODE(p_index);
667     l_event_class_rec.EVENT_CLASS_CODE             :=  p_evnt_cls.EVENT_CLASS_CODE(p_index);
668 
669 
670    /*------------------------------------------------------+
671     |   Validate Input Paramerters and Fetch Tax Options   |
672     +------------------------------------------------------*/
673 
674     ZX_VALID_INIT_PARAMS_PKG.import_document_with_tax(p_event_class_rec =>l_event_class_rec,
675                                                       x_return_status   =>l_return_status
676                                                       );
677 
678     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
679        x_return_status := l_return_status;
680        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
681          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');
682        END IF;
683        RETURN;
684     END IF;
685 
686 
687      /*--------------------------------------------------+
688       |   Call Service Type Import Document with Tax     |
689       +--------------------------------------------------*/
690 
691       ZX_SRVC_TYP_PKG.import(p_event_class_rec  => l_event_class_rec,
692                              x_return_status    => l_return_status
693                             );
694 
695       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
696         x_return_status := l_return_status;
697         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
698           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');
699         END IF;
700         RETURN;
701       END IF;
702 
703 
704         /*---------------------------------------------------------+
705          | Delete from the global structures for every loop on the |
706          | header document so that there are no hanging/redundant  |
707          | records sitting there                                   |
708          +--------------------------------------------------------*/
709          --Calling routine to delete the global structures
710          ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
711 
712          --Also delete the location caching global structures
713          --** Execute this code only when partners are used
714          IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
715 	      ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.EVENT_CLASS_MAPPING_ID.DELETE;
716               ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_ID.DELETE;
717               ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_LINE_ID.DELETE;
718 	      ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_LEVEL_TYPE.DELETE;
719 	      ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_TYPE.DELETE;
720               ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_TABLE_NAME.DELETE;
721               ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_ID.DELETE;
722               ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_TYPE.DELETE;
726 
723               ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_VALUE.DELETE;
724               ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_ID.DELETE;
725               ZX_GLOBAL_STRUCTURES_PKG.LOCATION_HASH_TBL.DELETE;
727               ZX_GLOBAL_STRUCTURES_PKG.g_party_tax_prof_id_info_tbl.DELETE;
728          END IF;
729 
730          IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
731            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||p_api_name||'.END','ZX_API_PUB: '||'import_tax_pvt'||'()-');
732          END IF;
733 
734 END import_tax_pvt;
735 
736 /* ======================================================================*
737  | PROCEDURE calculate_tax : Calculates and records tax info             |
738  | There exists a pl/sql version of same API for performance             |
739  | This API also supports processing for multiple event classes          |
740  | GTT involved : ZX_TRX_HEADERS_GT, ZX_TRANSACTION_LINES_GT             |
741  * ======================================================================*/
742 
743  PROCEDURE Calculate_tax
744    ( p_api_version           IN         NUMBER,
745      p_init_msg_list         IN         VARCHAR2,
746      p_commit                IN         VARCHAR2,
747      p_validation_level      IN         NUMBER,
748      x_return_status         OUT NOCOPY VARCHAR2,
749      x_msg_count             OUT NOCOPY NUMBER,
750      x_msg_data              OUT NOCOPY VARCHAR2
751    ) IS
752 
753    l_api_name          CONSTANT  VARCHAR2(30) := 'CALCULATE_TAX';
754    l_api_version       CONSTANT  NUMBER := 1.0;
755    l_return_status               VARCHAR2(30);
756    l_event_id                    NUMBER;
757    l_transaction_header_rec      transaction_header_rec_type;
758    l_context_info_rec            context_info_rec_type;
759    l_index                       BINARY_INTEGER;
760    l_precedence                  NUMBER_tbl_type;
761    l_init_msg_list               VARCHAR2(1);
762    l_record_tax_lines            VARCHAR2(1);
763    l_ptnr_index                       NUMBER;
764 
765  CURSOR common_header_info IS
766      SELECT
767             INTERNAL_ORGANIZATION_ID,
768             APPLICATION_ID,
769           --  ENTITY_CODE,
770           --  EVENT_CLASS_CODE,
771             QUOTE_FLAG,
772             ICX_SESSION_ID
773        FROM ZX_TRX_HEADERS_GT
774       WHERE rownum = 1;
775 
776     CURSOR event_classes IS
777      SELECT distinct
778             header.event_class_code,
779             header.application_id,
780             header.entity_code,
781             header.internal_organization_id,
782             evntmap.processing_precedence
783        FROM ZX_EVNT_CLS_MAPPINGS evntmap,
784             ZX_TRX_HEADERS_GT header
785       WHERE header.application_id = evntmap.application_id
786         AND header.entity_code = evntmap.entity_code
787         AND header.event_class_code = evntmap.event_class_code
788    ORDER BY evntmap.processing_precedence;
789 
790     CURSOR c_headers is
791     SELECT APPLICATION_ID,
792            ENTITY_CODE,
793            EVENT_CLASS_CODE,
794            TRX_ID,
795            ICX_SESSION_ID,
796            EVENT_TYPE_CODE,
797            TAX_EVENT_TYPE_CODE,
798            DOC_EVENT_STATUS
799     FROM ZX_TRX_HEADERS_GT;
800 
801     l_application_id_tbl     	NUMBER_tbl_type;
802     l_entity_code_tbl    	VARCHAR2_30_tbl_type;
803     l_event_class_code_tbl	VARCHAR2_30_tbl_type;
804     l_trx_id_tbl		NUMBER_tbl_type;
805     l_icx_session_id_tbl	NUMBER_tbl_type;
806     l_event_type_code_tbl	VARCHAR2_30_tbl_type;
807     l_tax_event_type_code_tbl	VARCHAR2_30_tbl_type;
808     l_doc_event_status_tbl	VARCHAR2_30_tbl_type;
809 
810    BEGIN
811      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
812        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: CALCULATE_TAX()+');
813      END IF;
814 
815     /*--------------------------------------------------+
816     |   Standard start of API savepoint                 |
817     +--------------------------------------------------*/
818     SAVEPOINT Calculate_tax_PVT;
819 
820     /*--------------------------------------------------+
821     |   Standard call to check for call compatibility   |
822     +--------------------------------------------------*/
823 
824     IF NOT FND_API.Compatible_API_Call(
825                                        l_api_version,
826                                        p_api_version,
827                                        l_api_name,
828                                        G_PKG_NAME
829                                        )  THEN
830       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
831     END IF;
832 
833 
834     /*--------------------------------------------------------------+
838        l_init_msg_list := FND_API.G_FALSE;
835     |   Initialize message list if p_init_msg_list is set to TRUE  |
836     +--------------------------------------------------------------*/
837      IF p_init_msg_list is null THEN
839      ELSE
840 	   l_init_msg_list := p_init_msg_list;
841      END IF;
842 
843      IF FND_API.to_Boolean(l_init_msg_list) THEN
844        FND_MSG_PUB.initialize;
845      END IF;
846 
847 
848     /*-----------------------------------------+
849     |   Initialize return status to SUCCESS   |
850     +-----------------------------------------*/
851 
852      x_return_status := FND_API.G_RET_STS_SUCCESS;
853 
854     /*-----------------------------------------+
855     |   Populate Global Variable              |
856     +-----------------------------------------*/
857 
858      G_PUB_SRVC := l_api_name;
859      G_PUB_CALLING_SRVC := l_api_name;
860      G_DATA_TRANSFER_MODE := 'TAB';
861      G_EXTERNAL_API_CALL  := 'N';
862 
863      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
864        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
865              'Data Transfer Mode: '||G_DATA_TRANSFER_MODE);
866      END IF;
867 
868      --Call TDS process to reset the session for previous calculate tax calls if any
869       ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (p_event_class_rec => NULL,
870                                                p_init_level      => 'SESSION',
871                                                x_return_status   => l_return_status
872                                               );
873 
874       set_ptnr_srvc_subscr_flag (p_event_class_rec => NULL,
875                                  x_return_status   => l_return_status
876                                 );
877       /*---------------------------------------------------------+
878       |  Initialize the trx line app regimes table for every doc|
879       +--------------------------------------------------------*/
880 
881       IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
882          ZX_GLOBAL_STRUCTURES_PKG.init_trx_line_app_regime_tbl;
883       END IF;
884 
885         ZX_GLOBAL_STRUCTURES_PKG.LOC_GEOGRAPHY_INFO_TBL.DELETE;
886         ZX_GLOBAL_STRUCTURES_PKG.g_registration_info_tbl.DELETE;
887      /*-----------------------------------------+
888      | Get the event id for the whole document |
889      +-----------------------------------------*/
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.internal_organization_id,
901           l_evnt_cls.precedence
902         LIMIT G_LINES_PER_FETCH;
903         EXIT WHEN event_classes%NOTFOUND;
904        END LOOP;
905      CLOSE event_classes;
906 
907      --Event classes such as SALES_TRANSACTION_TAX_QUOTE/PURCHASE_TRANSACTION_TAX_QUOTE
908      --are not seeded in zx_evnt_cls_mappings so cursor event classes will not
909      --return any rows for such event classes passed.
910      IF l_evnt_cls.event_class_code.LAST is null THEN
911        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
912           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
913              'Event class information does not exist - indicates SALES_TRANSACTION_TAX_QUOTE/PURCHASE_TRANSACTION_TAX_QUOTE');
914        END IF;
915 
916        select event_class_code,
917               application_id,
918               entity_code,
919               internal_organization_id
920          into l_evnt_cls.event_class_code(1),
921               l_evnt_cls.application_id(1),
922               l_evnt_cls.entity_code(1),
923               l_evnt_cls.internal_organization_id(1)
924          from ZX_TRX_HEADERS_GT
925          where rownum=1;
926      END IF;
927 
928      -- added for bug fix 5417887
929 
930 -- Assumption for multiple docs: application_id, event class and OU
931 -- will be same for all transactions in a call.
932 
933      OPEN common_header_info;
934      FETCH common_header_info BULK COLLECT INTO
935              l_transaction_header_rec.INTERNAL_ORGANIZATION_ID,
936              l_transaction_header_rec.APPLICATION_ID,
937           --   l_transaction_header_rec.ENTITY_CODE,
938           --   l_transaction_header_rec.EVENT_CLASS_CODE,
939              l_transaction_header_rec.QUOTE_FLAG,
940              l_transaction_header_rec.ICX_SESSION_ID;
941 
942      CLOSE common_header_info;
943 
944     FOR i IN 1..nvl(l_evnt_cls.event_class_code.LAST,0)
945     LOOP
946 
947          IF l_evnt_cls.event_class_code(i) = 'CREDIT_MEMO' THEN
948            ZX_GLOBAL_STRUCTURES_PKG.g_credit_memo_exists_flg := 'Y';
949          END IF;
950 
951          -- Bug 5704675- need to use index here to avoid entity_code
952          -- and event_class_code in l_transaction_header_rec always
953          -- using the entity_code and event_class_code from the 1st
954          -- record of l_evnt_cls
955          --
959          --BEGIN
956          l_transaction_header_rec.ENTITY_CODE(1)      := l_evnt_cls.entity_code(i);
957          l_transaction_header_rec.EVENT_CLASS_CODE(1) := l_evnt_cls.event_class_code(i);
958 
960          --    SAVEPOINT Calculate_Tax_Doc_Norel_PVT;
961                calculate_tax_pvt (l_transaction_header_rec,
962                                   l_api_name,
963                                   l_event_id,
964                                   1,
965                                   p_api_version,
966                                   l_init_msg_list,
967                                   p_commit,
968                                   p_validation_level,
969                                   l_return_status,
970                                   x_msg_count,
971                                   x_msg_data
972                                  );
973 
974                IF l_return_status = FND_API.G_RET_STS_ERROR THEN
975                  RAISE FND_API.G_EXC_ERROR;
976                ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
977                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
978                END IF;
979 
980           /*
981                EXCEPTION
982                  WHEN FND_API.G_EXC_ERROR THEN
983                   -- ROLLBACK TO Calculate_Tax_Doc_Norel_PVT;
984                    x_return_status := FND_API.G_RET_STS_ERROR ;
985                    --Call API to dump into zx_errors_gt
986                    IF ( errors_tbl.application_id.LAST is NOT NULL) THEN
987                       DUMP_MSG;
988                    END IF;
989                    IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
990                      FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
991                    END IF;
992              END;
993          */
994 
995 
996      -- bug fix 5417887 begin 17-Aug-2006
997      -- Following code for tail end services/TRL/ptnr sync code, is moved from calculte_tax_pvt
998      -- and should be handled for each event_class_code. At present, all product integrations call etax
999      -- for one event class at a time, hence we put these processed out of the event class loop.
1000      -- In the future, if there are cases that etax handle multiple event_class batch, we need to
1001      -- revisist the following code and change accordingly.
1002 
1003      -- For furture LTE features, there are could cases that related documents was imported together
1004      -- with original document. For this case, we need to make sure the tail end service for the original
1005      -- docs must be handled before the calculation process of the related docs.
1006 
1007      /*-----------------------------------------------------+
1008       |   Call to eTax service Dump Detail Tax Lines Into GT|
1009       +-----------------------------------------------------*/
1010 
1011      --IF nvl(l_event_class_rec.PROCESS_FOR_APPLICABILITY_FLAG,'Y') = 'Y' THEN
1012      ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(x_return_status => l_return_status);
1013 
1014 
1015      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1016         x_return_status := l_return_status;
1017         DUMP_MSG;
1018         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1019           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');
1020         END IF;
1024      /*--------------------------------------------------+
1021         RETURN;
1022      END IF;
1023 
1025       |   Call to eTax Service Tax Lines Determination   |
1026       +--------------------------------------------------*/
1027      ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(p_event_class_rec => zx_global_structures_pkg.g_event_class_rec,
1028                                                           x_return_status   => l_return_status
1029 							   );
1030 
1031      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1032        x_return_status := l_return_status ;
1033        DUMP_MSG;
1034        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1035          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');
1036        END IF;
1037        RETURN;
1038      END IF;
1039 
1040      --  Replace the below call with a merge statement
1041 
1042      /*--------------------------------------------------+
1043       |   Call to Update Total Inclusive Tax Amount      |
1044       +--------------------------------------------------*/
1045 
1046      /* Replace the call to update_total_inc_tax_amt with the merge statement below
1047 
1048      update_total_inc_tax_amt(p_event_class_rec => zx_global_structures_pkg.g_event_class_rec,
1049                               x_return_status   => l_return_status
1050 	                      );
1051 
1052      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1053        x_return_status := l_return_status ;
1054        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1055          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');
1056        END IF;
1057        RETURN;
1058      END IF;
1059      */
1060 
1061      IF zx_global_structures_pkg.g_event_class_rec.prod_family_grp_code = 'P2P' THEN
1062         MERGE INTO  ZX_LINES_DET_FACTORS     lines_dt
1063         USING (SELECT
1064                      application_id,
1065                      entity_code,
1066                      event_class_code,
1067                      trx_id,
1068                      trx_level_type,
1069                      trx_line_id,
1070                      sum(tax_amt)   incl_tax_amt
1071                FROM
1072                     zx_detail_tax_lines_gt TaxLines
1073                WHERE
1074                      tax_amt_included_flag = 'Y'
1075            --    AND mrc_tax_line_flag = 'N'
1076      	         AND cancel_flag <> 'Y'
1077            GROUP BY
1078                      application_id,
1079                      entity_code,
1080                      event_class_code,
1081                      trx_id,
1082                      trx_level_type,
1083                      trx_line_id
1084              ) Temp
1085          ON  (      lines_dt.tax_amt_included_flag = 'Y'
1086                --AND  lines_dt.total_inc_tax_amt is NULL
1087                AND  lines_dt.application_id   = temp.application_id
1088                AND  lines_dt.entity_code      = temp.entity_code
1089                AND  lines_dt.event_class_code = temp.event_class_code
1090                AND  lines_dt.trx_id           = temp.trx_id
1091                AND  Lines_dt.trx_level_type   = temp.trx_level_type
1092                AND  Lines_dt.trx_line_id      = temp.trx_line_id
1093               )
1094          WHEN MATCHED THEN
1095            UPDATE SET
1096                   total_inc_tax_amt   = incl_tax_amt;
1097 
1098      END IF;
1099 
1100 
1101      /*--------------------------------------------------+
1102       |   Call to eTax Service Manage Tax Lines          |
1103       +--------------------------------------------------*/
1104      --Rounding and Summarizing Tax Lines for Transaction
1105      /*Bug 3649502 - Check for record flag before calling TRR service*/
1106      /*Bug 4232918 - If record flag =Y and quote flag =Y then do not
1107        record in zx_lines */
1108      l_record_tax_lines := ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.record_flag;
1109      IF ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.record_flag = 'Y' and
1110         ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'Y' THEN
1111         l_record_tax_lines := 'N';
1112      END IF;
1113      IF l_record_tax_lines = 'Y' THEN
1114         ZX_TRL_PUB_PKG.manage_taxlines(p_event_class_rec  =>zx_global_structures_pkg.g_event_class_rec,
1115                                        x_return_status    =>l_return_status
1116                                       );
1117      END IF;
1118 
1119      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1120         x_return_status := l_return_status ;
1121         DUMP_MSG;
1122         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1123           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');
1124         END IF;
1125         RETURN;
1126      END IF;
1127      --END IF; --process_applicability_flag is 'Y'
1128 
1129      /*******************************PARTNER CODE START****************************/
1130      -- check with Santosh for a compatible API
1131      IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
1132        ptnr_bulk_sync_calc_tax ( p_event_class_rec   => zx_global_structures_pkg.g_event_class_rec ,
1133                             x_return_status     => l_return_status
1134                           );
1135        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1136            x_return_status := l_return_status;
1137            DUMP_MSG;
1138            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1139              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');
1140            END IF;
1141            RETURN;
1142        END IF;
1143      END IF;
1144 
1145      /*-----------------------------------------------------------+
1146      | Do not record lines based on following condition           |
1147      +-----------------------------------------------------------*/
1148      IF (ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.RECORD_FLAG = 'Y' and
1149          ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'Y' and
1150          ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.icx_session_id is null)
1151          OR
1152         (ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.RECORD_FLAG = 'N' and
1153          ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'Y' and
1154          ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.intgrtn_det_factors_ui_flag = 'N' and
1155          ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.icx_session_id is null)
1156          OR
1157          /*------------------------------------------------------------------------------+
1158           |  Bug 4948674: Handle delete for O2C products when icx_session_id is NOT NULL |
1159           +------------------------------------------------------------------------------*/
1160         (zx_global_structures_pkg.g_event_class_rec.ICX_SESSION_ID is not null AND
1161          zx_global_structures_pkg.g_event_class_rec.PROD_FAMILY_GRP_CODE = 'O2C')
1162       THEN
1163 
1164          IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1165                  FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
1166                   'Delete lines for transaction header which need not be recorded');
1167          END IF;
1168 
1169          BEGIN
1170 /*
1171              OPEN C_HEADERS;
1172              LOOP
1173                 FETCH c_HEADERS BULK COLLECT INTO
1174                     l_application_id_tbl,
1175                     l_entity_code_tbl,
1176                     l_event_class_code_tbl,
1177                     l_trx_id_tbl,
1178                     l_icx_session_id_tbl,
1179                     l_event_type_code_tbl,
1180                     l_tax_event_type_code_tbl,
1181                     l_doc_event_status_tbl
1182                 LIMIT G_LINES_PER_FETCH;
1183 
1184 
1185                 FORALL i IN l_trx_id_tbl.FIRST .. l_trx_id_tbl.LAST
1186 */
1187                     DELETE FROM zx_lines_det_factors
1188                     WHERE  (APPLICATION_ID, ENTITY_CODE, EVENT_CLASS_CODE, TRX_ID)
1189                            IN (SELECT /*+ cardinality (ZX_TRX_HEADERS_GT 1) */ APPLICATION_ID, ENTITY_CODE, EVENT_CLASS_CODE, TRX_ID
1190                                FROM ZX_TRX_HEADERS_GT);
1191 
1192 
1193 
1194 /*
1195                 exit when c_HEADERS%NOTFOUND;
1196              END LOOP;
1197 
1198              close c_HEADERS;
1199 */
1200          EXCEPTION
1201               WHEN OTHERS THEN
1202 
1203                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1204                      FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||': returned errors');
1205                      FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name, SQLCODE||' ; '||SQLERRM);
1206                 END IF;
1207 
1208                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1209                 FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
1210                 FND_MSG_PUB.Add;
1211 
1212                 IF  c_HEADERS%ISOPEN THEN
1213                       close c_HEADERS;
1214                 END IF;
1215          END;
1216      ELSE
1217 
1218         /*-----------------------------------------------------+
1219          |  Handle delete for mark tax lines deleted           |
1220          +-----------------------------------------------------*/
1221          --Remove all lines marked for delete by the mark_tax_lines_deleted API
1222          BEGIN
1223 /*
1224              OPEN C_HEADERS;
1225              LOOP
1226                 FETCH c_HEADERS BULK COLLECT INTO
1227                     l_application_id_tbl,
1228                     l_entity_code_tbl,
1229                     l_event_class_code_tbl,
1230                     l_trx_id_tbl,
1231                     l_icx_session_id_tbl,
1232                     l_event_type_code_tbl,
1233                     l_tax_event_type_code_tbl,
1234                     l_doc_event_status_tbl
1235                 LIMIT G_LINES_PER_FETCH;
1236 
1237                 FORALL i IN l_trx_id_tbl.FIRST .. l_trx_id_tbl.LAST
1238 
1239                      DELETE from zx_lines_det_factors
1240                      WHERE APPLICATION_ID   = l_application_id_tbl(i)
1241                       AND ENTITY_CODE       = l_entity_code_tbl(i)
1242                       AND EVENT_CLASS_CODE  = l_event_class_code_tbl(i)
1243                       AND TRX_ID            = l_trx_id_tbl(i)
1244                       AND line_level_action ='DELETE';
1245 
1246 */
1247                     DELETE  /*+ ORDERED USE_NL_WITH_INDEX (Z,ZX_LINES_DET_FACTORS_U1) */ FROM zx_lines_det_factors Z
1248                     WHERE  (Z.APPLICATION_ID, Z.ENTITY_CODE, Z.EVENT_CLASS_CODE, Z.TRX_ID)
1249                            IN (SELECT  /*+ unnest cardinality (ZX_TRX_HEADERS_GT 1) */
1250                                APPLICATION_ID, ENTITY_CODE, EVENT_CLASS_CODE, TRX_ID
1251                                FROM ZX_TRX_HEADERS_GT)
1255 /*
1252                       AND  Z.line_level_action ='DELETE';
1253 
1254 
1256                 exit when c_HEADERS%NOTFOUND;
1257              END LOOP;
1258 
1259              close c_HEADERS;
1260 */
1261            EXCEPTION
1262               WHEN OTHERS THEN
1263 
1264                 IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
1265                      FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||': returned errors');
1266                      FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name, SQLCODE||' ; '||SQLERRM);
1267                 END IF;
1268 
1269                 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1270                 FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
1271                 FND_MSG_PUB.Add;
1272 
1273                 IF  c_HEADERS%ISOPEN THEN
1274                       close c_HEADERS;
1275                 END IF;
1276             END;
1277 
1278      END IF;
1279 
1280 
1281      /*----------------------------------------------------------------+
1282      | Set the tax_reporting_flag to 'N' for documents called for quote|
1283      +----------------------------------------------------------------*/
1284 -- Bug Fix for 5155481 - Commented out the following update. Reporting flag is set during the
1285 -- insert itself based on the record_flag.
1286 
1287 /*         IF l_event_class_rec.QUOTE_FLAG = 'Y' THEN
1288 	       UPDATE zx_lines_det_factors
1289 	         SET tax_reporting_flag ='N'
1290            WHERE application_id       = l_event_class_rec.application_id
1291 	         AND entity_code      = l_event_class_rec.entity_code
1292 	         AND event_class_code = l_event_class_rec.event_class_code
1293   		 AND trx_id           = l_event_class_rec.trx_id;
1294           END IF;
1295 */
1296      -- bug fix 5417887 end
1297 
1298      -- bug#6594730
1299      -- need to flush ZX_DETAIL_TAX_LINES_GT before the procedure
1300      -- calculate_tax_pvt is called for the next event class
1301 
1302      IF l_record_tax_lines = 'Y' THEN
1303        DELETE FROM ZX_DETAIL_TAX_LINES_GT;
1304      END IF;
1305 
1306      -- bug 6824850
1307      ZX_GLOBAL_STRUCTURES_PKG.PTNR_TAX_REGIME_TBL.DELETE;
1308 
1309     END LOOP;  -- i IN 1..nvl(l_evnt_cls.event_class_code.LAST,0)
1310 
1311      /*---------------------------------------------------------+
1312      | Set the out parameter                                   |
1313      +--------------------------------------------------------*/
1314      BEGIN
1315         UPDATE ZX_TRX_HEADERS_GT headers
1316 	   SET doc_level_recalc_flag = (SELECT distinct(lines.threshold_indicator_flag)
1317   	                                FROM ZX_LINES_DET_FACTORS lines
1318                                         WHERE lines.application_id = headers.application_id
1319                                           AND lines.event_class_code = headers.event_class_code
1320                                           AND lines.entity_code  = headers.entity_code
1321                                           AND lines.trx_id = headers.trx_id
1322 	                                  AND lines.threshold_indicator_flag = 'Y' -- Bug 5210984
1323                                        );
1324      EXCEPTION WHEN OTHERS THEN
1325         null;
1326      END;
1327 
1328      --Reset the icx_session_id at end of API
1329      ZX_SECURITY.G_ICX_SESSION_ID := null;
1330      ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
1331      --dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
1332 
1333 
1334      --Reset G_PUB_CALLING_SRVC at end of API
1335      ZX_API_PUB.G_PUB_CALLING_SRVC := null;
1336 
1337      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1338         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: CALCULATE_TAX()-');
1339      END IF;
1340 
1341      EXCEPTION
1342        WHEN FND_API.G_EXC_ERROR THEN
1343          ROLLBACK TO Calculate_tax_PVT;
1344          --Close all open cursors
1345          IF common_header_info%ISOPEN THEN CLOSE common_header_info; END IF;
1346          x_return_status := FND_API.G_RET_STS_ERROR;
1347          DUMP_MSG;
1348          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
1349            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
1350          END IF;
1351 
1352        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
1353          ROLLBACK TO Calculate_tax_PVT;
1354          --Close all open cursors
1355          IF common_header_info%ISOPEN THEN CLOSE common_header_info; END IF;
1356          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1357          DUMP_MSG;
1358          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
1359          FND_MSG_PUB.add;
1360          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
1361                                    p_count   =>      x_msg_count,
1362                                    p_data    =>      x_msg_data
1363                                   );
1364          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
1365            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
1366          END IF;
1367 
1368        WHEN OTHERS THEN
1369           ROLLBACK TO Calculate_tax_PVT;
1370           --Close all open cursors
1371           IF common_header_info%ISOPEN THEN CLOSE common_header_info; END IF;
1372           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
1373           DUMP_MSG;
1377                                    p_count   =>      x_msg_count,
1374           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
1375           FND_MSG_PUB.add;
1376           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
1378                                    p_data    =>      x_msg_data
1379                                    );
1380           IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
1381             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
1382           END IF;
1383     END calculate_tax; --gtt version
1384 
1385   /*======================================================================*
1386  | PROCEDURE calculate_tax : Calculates and records tax info             |
1387  | PL/sql tables: trx_line_dist_tbl   , transaction_rec                  |
1388  |                                                                       |
1389  | This API will be also called by products who uptake the               |
1390  | determining factors UI window by which the transaction lines are      |
1391  | already recorded into the eBTax repository , however the tax on them  |
1392  | is not calculated. They will pass p_data_transfer_mode as WIN         |
1393  * ======================================================================*/
1394 
1395   PROCEDURE calculate_tax
1396   ( p_api_version           IN         NUMBER,
1397     p_init_msg_list         IN         VARCHAR2,
1398     p_commit                IN         VARCHAR2,
1399     p_validation_level      IN         NUMBER,
1400     x_return_status         OUT NOCOPY VARCHAR2 ,
1401     x_msg_count             OUT NOCOPY NUMBER ,
1402     x_msg_data              OUT NOCOPY VARCHAR2,
1403     p_transaction_rec       IN         transaction_rec_type,
1404     p_quote_flag            IN         VARCHAR2,
1405     p_data_transfer_mode    IN         VARCHAR2,
1406     x_doc_level_recalc_flag OUT NOCOPY VARCHAR2
1407    )
1408     IS
1409 
1410    l_api_name          CONSTANT  VARCHAR2(30) := 'CALCULATE_TAX';
1411    l_api_version       CONSTANT  NUMBER := 1.0;
1412    l_return_status               VARCHAR2(30);
1413    l_event_class_rec             event_class_rec_type;
1414    l_init_msg_list               VARCHAR2(1);
1415    l_record_tax_lines            VARCHAR2(1);
1416    l_error_buffer                VARCHAR2(1000);
1417 
1418    l_ptnr_index                       NUMBER;
1419    BEGIN
1420      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
1421        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: CALCULATE_TAX()+');
1422      END IF;
1423 
1424     /*--------------------------------------------------+
1425     |   Standard start of API savepoint                 |
1426     +--------------------------------------------------*/
1427     SAVEPOINT Calculate_tax_PVT;
1428 
1429     /*--------------------------------------------------+
1430     |   Standard call to check for call compatibility   |
1431     +--------------------------------------------------*/
1432 
1433     IF NOT FND_API.Compatible_API_Call(l_api_version,
1434                                        p_api_version,
1435                                        l_api_name,
1436                                        G_PKG_NAME
1437                                        )  THEN
1438       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1439     END IF;
1440 
1441     /*--------------------------------------------------------------+
1442     |   Initialize message list if p_init_msg_list is set to TRUE  |
1443     +--------------------------------------------------------------*/
1444      IF p_init_msg_list is null THEN
1445        l_init_msg_list := FND_API.G_FALSE;
1446      ELSE
1447        l_init_msg_list := p_init_msg_list;
1448      END IF;
1449 
1450      IF FND_API.to_Boolean(l_init_msg_list) THEN
1451        FND_MSG_PUB.initialize;
1452      END IF;
1453 
1454     /*-----------------------------------------+
1455     |   Initialize return status to SUCCESS   |
1456     +-----------------------------------------*/
1457 
1458      x_return_status := FND_API.G_RET_STS_SUCCESS;
1459 
1460     /*-----------------------------------------+
1461     |   Populate Global Variable              |
1462     +-----------------------------------------*/
1463 
1464      G_PUB_SRVC := l_api_name;
1465      G_PUB_CALLING_SRVC := l_api_name;
1466      G_DATA_TRANSFER_MODE := p_data_transfer_mode;
1467      G_EXTERNAL_API_CALL  := 'N';
1468 
1469 
1470      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1471        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
1472              'Data Transfer Mode: '||G_DATA_TRANSFER_MODE);
1473      END IF;
1474 
1475      --Call TDS process to reset the session for previous calculate tax calls if any
1476      ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (p_event_class_rec => NULL,
1477                                               p_init_level      => 'SESSION',
1478                                               x_return_status   => l_return_status
1479                                              );
1480      set_ptnr_srvc_subscr_flag (p_event_class_rec => NULL,
1481                                 x_return_status   => l_return_status
1482                                );
1483 
1484         ZX_GLOBAL_STRUCTURES_PKG.LOC_GEOGRAPHY_INFO_TBL.DELETE;
1485         ZX_GLOBAL_STRUCTURES_PKG.g_registration_info_tbl.DELETE;
1486      /*------------------------------------------------------+
1487       |   Copy to Event Class Record                         |
1488       +------------------------------------------------------*/
1489 
1490        /*Fetch the event id for the document*/
1491        select ZX_LINES_DET_FACTORS_S.nextval
1492          into l_event_class_rec.event_id
1493          from dual;
1494 
1495        /*Populate the event class record structure*/
1496        IF G_DATA_TRANSFER_MODE = 'PLS' THEN
1497          l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.INTERNAL_ORGANIZATION_ID(1);
1498          l_event_class_rec.LEGAL_ENTITY_ID              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEGAL_ENTITY_ID(1);
1499          l_event_class_rec.LEDGER_ID                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEDGER_ID(1);
1500          l_event_class_rec.APPLICATION_ID               :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.APPLICATION_ID(1);
1501          l_event_class_rec.ENTITY_CODE                  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ENTITY_CODE(1);
1502          l_event_class_rec.EVENT_CLASS_CODE             :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_CLASS_CODE(1);
1503          l_event_class_rec.EVENT_TYPE_CODE              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_TYPE_CODE(1);
1504          l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CTRL_TOTAL_HDR_TX_AMT(1);
1505          l_event_class_rec.TRX_ID                       :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_ID(1);
1506          l_event_class_rec.TRX_DATE                     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_DATE(1);
1507          l_event_class_rec.REL_DOC_DATE                 :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RELATED_DOC_DATE(1);
1508          l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PROVNL_TAX_DETERMINATION_DATE(1);
1509          l_event_class_rec.TRX_CURRENCY_CODE            :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_CURRENCY_CODE(1);
1510          l_event_class_rec.PRECISION                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PRECISION(1);
1511          l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_TYPE(1);
1512          l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_RATE(1);
1513          l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_DATE(1);
1514          l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_TO_PARTY_ID(1);
1515          l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_FROM_PARTY_ID(1);
1516          l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_TO_PARTY_ID(1);
1517          l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_FROM_PARTY_ID(1);
1518          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);
1519          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);
1520          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);
1521          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);
1522          l_event_class_rec.QUOTE_FLAG                   :=  nvl(p_quote_flag,'N');
1523          l_event_class_rec.ICX_SESSION_ID               :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ICX_SESSION_ID(1);
1524        ELSIF G_DATA_TRANSFER_MODE ='WIN' THEN
1525          l_event_class_rec.internal_organization_id     :=  p_transaction_rec.internal_organization_id;
1526          l_event_class_rec.APPLICATION_ID               :=  p_transaction_rec.application_id;
1527          l_event_class_rec.ENTITY_CODE                  :=  p_transaction_rec.entity_code;
1528          l_event_class_rec.EVENT_CLASS_CODE             :=  p_transaction_rec.event_class_code;
1529          l_event_class_rec.EVENT_TYPE_CODE              :=  p_transaction_rec.event_type_code;
1530          l_event_class_rec.TRX_ID                       :=  p_transaction_rec.trx_id;
1531          l_event_class_rec.QUOTE_FLAG                   :=  p_quote_flag;
1532 
1533          BEGIN
1534          SELECT legal_entity_id,
1535                 ledger_id,
1536                 trx_date,
1537                 related_doc_date,
1538                 trx_currency_code,
1539                 precision,
1540                 currency_conversion_type,
1541                 currency_conversion_rate,
1542                 currency_conversion_date,
1543                 Rdng_ship_to_pty_tx_prof_id,
1544                 Rdng_ship_from_pty_tx_prof_id,
1545                 Rdng_bill_to_pty_tx_prof_id,
1546                 Rdng_bill_from_pty_tx_prof_id,
1547                 Rdng_ship_to_pty_tx_p_st_id,
1548                 Rdng_ship_from_pty_tx_p_st_id,
1549                 Rdng_bill_to_pty_tx_p_st_id,
1550                 Rdng_bill_from_pty_tx_p_st_id
1551            INTO l_event_class_rec.legal_entity_id,
1552                 l_event_class_rec.ledger_id,
1553                 l_event_class_rec.trx_date,
1554                 l_event_class_rec.rel_doc_date,
1555                 l_event_class_rec.trx_currency_code,
1556                 l_event_class_rec.precision,
1557                 l_event_class_rec.currency_conversion_type,
1558                 l_event_class_rec.currency_conversion_rate,
1559                 l_event_class_rec.currency_conversion_date,
1560                 l_event_class_rec.RDNG_SHIP_TO_PTY_TX_PROF_ID,
1561                 l_event_class_rec.RDNG_SHIP_FROM_PTY_TX_PROF_ID,
1562                 l_event_class_rec.RDNG_BILL_TO_PTY_TX_PROF_ID,
1563                 l_event_class_rec.RDNG_BILL_FROM_PTY_TX_PROF_ID,
1564                 l_event_class_rec.RDNG_SHIP_TO_PTY_TX_P_ST_ID,
1568            FROM ZX_LINES_DET_FACTORS
1565                 l_event_class_rec.RDNG_SHIP_FROM_PTY_TX_P_ST_ID,
1566                 l_event_class_rec.RDNG_BILL_TO_PTY_TX_P_ST_ID,
1567                 l_event_class_rec.RDNG_BILL_FROM_PTY_TX_P_ST_ID
1569           WHERE application_id   = p_transaction_rec.application_id
1570             AND entity_code      = p_transaction_rec.entity_code
1571             AND event_class_code = p_transaction_rec.event_class_code
1572             AND trx_id           = p_transaction_rec.trx_id
1573             AND rownum           = 1;
1574          EXCEPTION
1575            WHEN OTHERS THEN
1576              IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
1577                 FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'Data is expected to be in eBTax Repository for this call');
1578              END IF;
1579              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1580          END;
1581        END IF;
1582        --Set a flag to indicate if currency information passed at header/line
1583        IF l_event_class_rec.trx_currency_code is not null AND
1584           l_event_class_rec.precision is not null THEN
1585           l_event_class_rec.header_level_currency_flag := 'Y';
1586        END IF;
1587 
1588        --Set the global variable if icx_session_id is not null
1589        IF l_event_class_rec.QUOTE_FLAG = 'Y' and
1590           l_event_class_rec.ICX_SESSION_ID is not null THEN
1591           ZX_SECURITY.G_ICX_SESSION_ID := l_event_class_rec.ICX_SESSION_ID;
1592           ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
1593           -- dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
1594        ELSE
1595           ZX_SECURITY.G_ICX_SESSION_ID := null;
1596           -- dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
1597           ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
1598        END IF;
1599 
1600     -- Bug 4948674: Following Delete will not work when there are different dbms sessions used for the same user
1601     -- session when call originates from a FWK UI. Moved the following Delete logic to the end of this API for O2C
1602     -- products and to the end of determine_recovery API for P2P products.
1603 
1604        --If the user calls calculate_tax twice using same db session for the same icx session, then we will have
1605        -- un-deleted data in the Det Factors table for the previousc all. So, we need to clean it up first before
1606        -- starting to process the input lines of the new call.We should at first always attempt to remove any rows
1607        --sitting in Det Factors table for that icx session
1608     /*   IF l_event_class_rec.ICX_SESSION_ID is not null THEN
1609           DELETE from zx_lines_det_factors
1610           WHERE application_id = l_event_class_rec.application_id and
1611                 entity_code    = l_event_class_rec.entity_code and
1612                 event_class_code = l_event_class_rec.event_class_code and
1613                 trx_id = l_event_class_rec.trx_id;
1614        END IF;
1615     */
1616 
1617        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1618          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
1619              'application_id: '||to_char(l_event_class_rec.application_id)||
1620              ', entity_code: '||l_event_class_rec.entity_code||
1621              ', event_class_code: '||l_event_class_rec.event_class_code||
1622              ', event_type_code: '||l_event_class_rec.event_type_code||
1623              ', trx_id: '||to_char(l_event_class_rec.trx_id)||
1624              ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
1625              ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
1626              ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
1627              ', trx_date: '||to_char(l_event_class_rec.trx_date)||
1628              ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
1629              ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
1630              ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
1631              ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
1632              ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
1633              ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
1634              ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
1635              ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
1636              ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
1637              ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
1638              ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
1639              ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
1640              ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id)||
1641              ', quote_flag: '||l_event_class_rec.quote_flag ||
1642              ', icx_session_id: '||to_char(l_event_class_rec.icx_session_id) );
1643        END IF;
1644 
1645        /*-------------------------------------------------------+
1646        |Lock the tax lines table to prevent another             |
1647        |user from updating same line via the forms/UIs while    |
1648        |calculation is in progress                              |
1649        +-------------------------------------------------------*/
1650        IF l_event_class_rec.tax_event_type_code ='UPDATE' THEN
1654                                                                p_trx_id              => l_event_class_rec.trx_id,
1651          ZX_TRL_DETAIL_OVERRIDE_PKG.lock_dtl_tax_lines_for_doc(p_application_id      => l_event_class_rec.application_id,
1652                                                                p_entity_code         => l_event_class_rec.entity_code,
1653                                                                p_event_class_code    => l_event_class_rec.event_class_code,
1655                                                                x_return_status       => l_return_status,
1656                                                                x_error_buffer        => l_error_buffer
1657                                                                );
1658 
1659          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1660             RAISE FND_API.G_EXC_ERROR;
1661          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1662             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1663          END IF;
1664 
1665          ZX_TRL_SUMMARY_OVERRIDE_PKG.lock_summ_tax_lines_for_doc(p_application_id      => l_event_class_rec.application_id,
1666                                                                  p_entity_code         => l_event_class_rec.entity_code,
1667                                                                  p_event_class_code    => l_event_class_rec.event_class_code,
1668                                                                  p_trx_id              => l_event_class_rec.trx_id,
1669                                                                  x_return_status       => l_return_status,
1670                                                                  x_error_buffer        => l_error_buffer
1671                                                                  );
1672          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1673             RAISE FND_API.G_EXC_ERROR;
1674          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1675             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1676          END IF;
1677 
1678          ZX_TRL_DISTRIBUTIONS_PKG.lock_rec_nrec_dist_for_doc (p_application_id      => l_event_class_rec.application_id,
1679                                                               p_entity_code         => l_event_class_rec.entity_code,
1680                                                               p_event_class_code    => l_event_class_rec.event_class_code,
1681                                                               p_trx_id              => l_event_class_rec.trx_id,
1682                                                               x_return_status       => l_return_status,
1683                                                               x_error_buffer        => l_error_buffer
1684                                                               );
1685          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1686             RAISE FND_API.G_EXC_ERROR;
1687          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1688             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1689          END IF;
1690        END IF; --tax event type is UPDATE
1691 
1692        IF l_event_class_rec.event_class_code = 'CREDIT_MEMO' THEN
1693          ZX_GLOBAL_STRUCTURES_PKG.g_credit_memo_exists_flg := 'Y';
1694        END IF;
1695 
1696        /*------------------------------------------------------+
1697        |   Validate and Initializate parameters for Calculate |
1698        |   tax                                                |
1699        +------------------------------------------------------*/
1700 
1701          ZX_VALID_INIT_PARAMS_PKG.calculate_tax(p_event_class_rec => l_event_class_rec,
1702                                                 x_return_status   => l_return_status
1703                                                );
1704 
1705          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1706             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1707               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');
1708             END IF;
1709             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1710               RAISE FND_API.G_EXC_ERROR;
1711             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1712               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1713             END IF;
1714          END IF;
1715 
1716         /* ===============================================================================*
1717         |Initialize the global structures/global temp tables owned by TDM at header level |
1718         * ===============================================================================*/
1719 
1720          ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (l_event_class_rec ,
1721                                                   'HEADER',
1722                                                   l_return_status
1723                                                  );
1724 
1725          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1726             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1727               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');
1728             END IF;
1729             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1730               RAISE FND_API.G_EXC_ERROR;
1731             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1732               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1733             END IF;
1734          END IF;
1735 
1736 
1737          /*--------------------------------------------------+
1738           |   Call to service type Calculate Tax             |
1742            | of process_for_applicability_flag                   |
1739           +--------------------------------------------------*/
1740           /* ----------------------------------------------------+
1741            | Bug 3922920 - Perfrom tail end processes regardless |
1743            + ---------------------------------------------------*/
1744           --IF nvl(l_event_class_rec.PROCESS_FOR_APPLICABILITY_FLAG,'Y') = 'Y' THEN
1745 
1746             ZX_SRVC_TYP_PKG.calculate_tax(p_event_class_rec    => l_event_class_rec,
1747                                           x_return_status      => l_return_status
1748                                          );
1749 
1750            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1751               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1752                 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');
1753               END IF;
1754               IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1755                 RAISE FND_API.G_EXC_ERROR;
1756               ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1757                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1758               END IF;
1759             END IF;
1760 
1761             -- populate the tax_regime_tbl cache structure for partner
1762             IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
1763 	     IF nvl(ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl.FIRST,0) = 0 THEN
1764               l_ptnr_index := NVL(ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl.LAST, 0) + 1;
1765               ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).application_id
1766                         := l_event_class_rec.application_id;
1767               ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).entity_code
1768                         := l_event_class_rec.entity_code;
1769               ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).event_class_code
1770                         := l_event_class_rec.event_class_code;
1771               ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).trx_id
1772                         := l_event_class_rec.trx_id;
1773                ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).event_class_mapping_id
1774                         := l_event_class_rec.event_class_mapping_id;
1775                ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).event_type_code
1776                         := l_event_class_rec.event_type_code;
1777                ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).record_flag
1778                         := l_event_class_rec.record_flag;
1779                ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).quote_flag
1780                         := l_event_class_rec.quote_flag;
1781                ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).record_for_partners_flag
1782                         := l_event_class_rec.record_for_partners_flag;
1783                ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).prod_family_grp_code
1784                         := l_event_class_rec.prod_family_grp_code;
1785                ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).internal_organization_id
1786                          := l_event_class_rec.internal_organization_id;
1787                ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).legal_entity_id
1788                          := l_event_class_rec.legal_entity_id;
1789                ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).effective_date
1790                         := zx_security.g_effective_date;
1791               ZX_GLOBAL_STRUCTURES_PKG.ptnr_tax_regime_tbl(l_ptnr_index).tax_regime_tbl
1792                         := ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl;
1793 	     END IF;
1794             END IF;
1795 
1796            /*-----------------------------------------------------+
1797             |   Call to eTax service Dump Detail Tax Lines Into GT|
1798             +-----------------------------------------------------*/
1799            ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(x_return_status  => l_return_status);
1800 
1801 
1802            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1803               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1804                 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');
1805               END IF;
1806               IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1807                 RAISE FND_API.G_EXC_ERROR;
1808               ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1809                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1810               END IF;
1811             END IF;
1812 
1813            /*--------------------------------------------------+
1814             |   Call to eTax Service Tax Lines Determination   |
1815             +--------------------------------------------------*/
1816             ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(p_event_class_rec => l_event_class_rec,
1817                                                                 x_return_status   => l_return_status
1818                                                                );
1819 
1820             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1821               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1822                 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');
1823               END IF;
1824               IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1825                 RAISE FND_API.G_EXC_ERROR;
1826               ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1830 
1827                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1828               END IF;
1829             END IF;
1831             /*--------------------------------------------------+
1832              |   Call to Update Total Inclusive Tax Amount      |
1833              +--------------------------------------------------*/
1834             /* Replace the call to update_total_inc_tax_amt with the merge statement below
1835             update_total_inc_tax_amt(p_event_class_rec => l_event_class_rec,
1836                                      x_return_status   => l_return_status
1837 	                            );
1838 
1839             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1840               x_return_status := l_return_status ;
1841               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1842                 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');
1843               END IF;
1844                  IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1845                    RAISE FND_API.G_EXC_ERROR;
1846                  ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1847                    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1848                  END IF;
1849             END IF;
1850             */
1851 
1852             IF zx_global_structures_pkg.g_event_class_rec.prod_family_grp_code = 'P2P' THEN
1853               MERGE INTO  ZX_LINES_DET_FACTORS     lines_dt
1854               USING (SELECT
1855                            application_id,
1856                            entity_code,
1857                            event_class_code,
1858                            trx_id,
1859                            trx_level_type,
1860                            trx_line_id,
1861                            sum(tax_amt)   incl_tax_amt
1862                      FROM
1863                           zx_detail_tax_lines_gt TaxLines
1864                      WHERE
1865                            tax_amt_included_flag = 'Y'
1866                  --    AND mrc_tax_line_flag = 'N'
1867      	               AND cancel_flag <> 'Y'
1868                  GROUP BY
1869                            application_id,
1870                            entity_code,
1871                            event_class_code,
1872                            trx_id,
1873                            trx_level_type,
1874                            trx_line_id
1875                    ) Temp
1876                ON  (      lines_dt.tax_amt_included_flag = 'Y'
1877                      --AND  lines_dt.total_inc_tax_amt is NULL
1878                      AND  lines_dt.application_id   = temp.application_id
1879                      AND  lines_dt.entity_code      = temp.entity_code
1880                      AND  lines_dt.event_class_code = temp.event_class_code
1881                      AND  lines_dt.trx_id           = temp.trx_id
1882                      AND  Lines_dt.trx_level_type   = temp.trx_level_type
1883                      AND  Lines_dt.trx_line_id      = temp.trx_line_id
1884                     )
1885                WHEN MATCHED THEN
1886                  UPDATE SET
1887                         total_inc_tax_amt   = incl_tax_amt;
1888 
1889             END IF;
1890 
1891            /*--------------------------------------------------+
1892             |   Call to eTax Service Manage Tax Lines          |
1893             +--------------------------------------------------*/
1894 
1895             --Rounding and Summarizing Tax Lines for Transaction
1896             /*Bug 3649502 - Check for record flag before calling TRR service*/
1897             /*Bug 4232918 - If record flag =Y and quote flag =Y then do not
1898                             record in zx_lines */
1899             l_record_tax_lines := l_event_class_rec.record_flag;
1900             IF l_event_class_rec.record_flag = 'Y' and
1901                l_event_class_rec.quote_flag = 'Y' THEN
1902                l_record_tax_lines := 'N';
1903             END IF;
1904             IF l_record_tax_lines = 'Y' THEN
1905               ZX_TRL_PUB_PKG.manage_taxlines(p_event_class_rec  =>l_event_class_rec,
1906                                              x_return_status    =>l_return_status
1907                                             );
1908             END IF;
1909 
1910             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1911               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1912                 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');
1913               END IF;
1914               IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1915                 RAISE FND_API.G_EXC_ERROR;
1916               ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1917                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1918               END IF;
1919             END IF;
1920         --  END IF; -- process_applicability_flag is N
1921 
1922    	    /*******************************PARTNER CODE START****************************/
1923             IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
1924 
1925               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1926                  FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
1927                    'Calling partner routine to synchronize the tax'||
1928                    ', ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.count = '||ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.count);
1929               END IF;
1930               ptnr_bulk_sync_calc_tax ( p_event_class_rec   => l_event_class_rec ,
1931                                    x_return_status     => l_return_status
1932                                  );
1933               IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1937                 IF l_return_status = FND_API.G_RET_STS_ERROR THEN
1934                 IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
1935                   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');
1936                 END IF;
1938                   RAISE FND_API.G_EXC_ERROR;
1939                 ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
1940                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1941                 END IF;
1942               END IF;
1943             END IF;
1944    	    /*******************************PARTNER CODE END****************************/
1945         /*---------------------------------------------------------+
1946          | End Loop for Transaction Headers                        |
1947          +---------------------------------------------------------*/
1948 
1949        /*---------------------------------------------------------+
1950         | Set the out parameter                                   |
1951         +--------------------------------------------------------*/
1952          BEGIN
1953             SELECT threshold_indicator_flag
1954               INTO  x_doc_level_recalc_flag
1955               FROM  ZX_LINES_DET_FACTORS
1956               WHERE application_id           = l_event_class_rec.application_id
1957                 AND event_class_code         = l_event_class_rec.event_class_code
1958                 AND entity_code              = l_event_class_rec.entity_code
1959                 AND trx_id                   = l_event_class_rec.trx_id
1960                 AND threshold_indicator_flag = 'Y'                 -- Bug 5210984
1961                 AND rownum                   = 1;
1962          EXCEPTION WHEN OTHERS THEN
1963                 x_doc_level_recalc_flag := 'N'; --bug6062224
1964 		--null;
1965          END;
1966 
1967        /*-------------------------------------------------------------+
1968         | Do not record lines based on following condition            |
1969         +------------------------------------------------------------*/
1970          IF (l_event_class_rec.RECORD_FLAG = 'Y' and
1971              l_event_class_rec.quote_flag = 'Y' and
1972              l_event_class_rec.icx_session_id is null) OR
1973             (l_event_class_rec.RECORD_FLAG = 'N' and
1974              l_event_class_rec.quote_flag = 'Y' and
1975              l_event_class_rec.intgrtn_det_factors_ui_flag = 'N' and
1976              l_event_class_rec.icx_session_id is null) THEN
1977             --Delete lines for transaction header which need not be recorded
1978             DELETE from zx_lines_det_factors
1979              WHERE application_id = l_event_class_rec.application_id
1980                AND entity_code    = l_event_class_rec.entity_code
1981                AND event_class_code = l_event_class_rec.event_class_code
1982                AND trx_id = l_event_class_rec.trx_id;
1983         END IF;
1984         /*----------------------------------------------------------------+
1985         | Set the tax_reporting_flag to 'N' for documents called for quote|
1986         +----------------------------------------------------------------*/
1987 -- Bug Fix for 5155481 - Commented out the following update. Reporting flag is set during the
1988 -- insert itself based on the record_flag.
1989 
1990 /*        IF l_event_class_rec.QUOTE_FLAG = 'Y' THEN
1991 	     UPDATE zx_lines_det_factors
1992 	        SET tax_reporting_flag ='N'
1993               WHERE application_id   = l_event_class_rec.application_id
1994 	        AND entity_code      = l_event_class_rec.entity_code
1995 	        AND event_class_code = l_event_class_rec.event_class_code
1996 	        AND trx_id           = l_event_class_rec.trx_id;
1997         END IF;
1998 
1999 */
2000 
2001         /*-----------------------------------------------------+
2002          |  Handle delete for mark tax lines deleted           |
2003          +-----------------------------------------------------*/
2004         DELETE FROM ZX_LINES_DET_FACTORS
2005     	   WHERE line_level_action ='DELETE'
2006              AND application_id   = l_event_class_rec.application_id
2007              AND entity_code      = l_event_class_rec.entity_code
2008              AND event_class_code = l_event_class_rec.event_class_code
2009              AND trx_id           = l_event_class_rec.trx_id;
2010 
2011         /*------------------------------------------------------------------------------+
2012          |  Bug 4948674: Handle delete for O2C products when icx_session_id is NOT NULL |
2013          +------------------------------------------------------------------------------*/
2014         IF  l_event_class_rec.ICX_SESSION_ID is not null AND
2015             l_event_class_rec.PROD_FAMILY_GRP_CODE = 'O2C' THEN
2016            DELETE from zx_lines_det_factors
2017              WHERE application_id   = l_event_class_rec.application_id and
2018                    entity_code      = l_event_class_rec.entity_code and
2019                    event_class_code = l_event_class_rec.event_class_code and
2020                    trx_id           = l_event_class_rec.trx_id and
2021                    icx_session_id   = l_event_class_rec.icx_session_id;
2022         END IF;
2023 
2024         /*---------------------------------------------------------+
2025          |  Initialize the trx line app regimes table for every doc|
2026          +--------------------------------------------------------*/
2027         IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
2028            ZX_GLOBAL_STRUCTURES_PKG.init_trx_line_app_regime_tbl;
2029         END IF;
2030 
2031         --Delete from the global structures so that there are no hanging/redundant
2035         ZX_GLOBAL_STRUCTURES_PKG.g_registration_info_tbl.DELETE;
2032         --records sitting there
2033         ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
2034         ZX_GLOBAL_STRUCTURES_PKG.LOC_GEOGRAPHY_INFO_TBL.DELETE;
2036         ZX_GLOBAL_STRUCTURES_PKG.g_party_tax_prof_id_info_tbl.DELETE;
2037 
2038         --Also delete the location caching global structures
2039 	      ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.EVENT_CLASS_MAPPING_ID.DELETE;
2040         ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_ID.DELETE;
2041         ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_LINE_ID.DELETE;
2042 	      ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.TRX_LEVEL_TYPE.DELETE;
2043 	      ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_TYPE.DELETE;
2044         ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_TABLE_NAME.DELETE;
2045         ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.LOCATION_ID.DELETE;
2046         ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_TYPE.DELETE;
2047         ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_VALUE.DELETE;
2048         ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.GEOGRAPHY_ID.DELETE;
2049         ZX_GLOBAL_STRUCTURES_PKG.LOCATION_HASH_TBL.DELETE;
2050 
2051         --Reset the icx_session_id at end of API
2052         ZX_SECURITY.G_ICX_SESSION_ID := null;
2053         ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
2054         -- dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
2055 
2056         --Reset the calling API info at end of API
2057         ZX_API_PUB.G_PUB_CALLING_SRVC := null;
2058 
2059         IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2060           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: CALCULATE_TAX()-');
2061         END IF;
2062 
2063         EXCEPTION
2064           WHEN FND_API.G_EXC_ERROR THEN
2065             ROLLBACK TO Calculate_tax_PVT;
2066             x_return_status := FND_API.G_RET_STS_ERROR ;
2067            /*---------------------------------------------------------+
2068             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2069             | in the message stack. If there is only one message in   |
2070             | the stack it retrieves this message                     |
2071             +---------------------------------------------------------*/
2072             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2073                                       p_count  =>      x_msg_count,
2074                                       p_data   =>      x_msg_data
2075                                       );
2076 
2077              IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
2078                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
2079              END IF;
2080 
2081           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2082             ROLLBACK TO Calculate_tax_PVT;
2083             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2084             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
2085             FND_MSG_PUB.Add;
2086           /*---------------------------------------------------------+
2087             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2088             | in the message stack. If there is only one message in   |
2089             | the stack it retrieves this message                     |
2090             +---------------------------------------------------------*/
2091             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2092                                       p_count   =>      x_msg_count,
2093                                       p_data    =>      x_msg_data
2094                                       );
2095             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
2096               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
2097             END IF;
2098 
2099           WHEN OTHERS THEN
2100              ROLLBACK TO Calculate_tax_PVT;
2101              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2102              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
2103              FND_MSG_PUB.Add;
2104            /*---------------------------------------------------------+
2105             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2106             | in the message stack. If there is only one message in   |
2107             | the stack it retrieves this message                     |
2108             +---------------------------------------------------------*/
2109              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2110                                        p_count  =>      x_msg_count,
2111                                        p_data   =>      x_msg_data
2112                                        );
2113 
2114              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2115                 FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
2116              END IF;
2117 
2118    END calculate_tax; --pl/sql version
2119 
2120 /* ======================================================================*
2121  | PROCEDURE import_document_with_tax : Imports document with tax        |
2122  | This API also supports processing for multiple event classes          |
2123  | GTT involved : ZX_TRX_HEADERS_GT, ZX_TRANSACTION_LINES_GT ,           |
2124  |                ZX_IMPORT_TAX_LINES_GT and ZX_TRX_TAX_LINK_GT          |
2125  * ======================================================================*/
2126   PROCEDURE Import_document_with_tax
2127   ( p_api_version           IN         NUMBER,
2128     p_init_msg_list         IN         VARCHAR2,
2129     p_commit                IN         VARCHAR2,
2133     x_msg_data              OUT NOCOPY VARCHAR2
2130     p_validation_level      IN         NUMBER,
2131     x_return_status         OUT NOCOPY VARCHAR2 ,
2132     x_msg_count             OUT NOCOPY NUMBER ,
2134   ) IS
2135    l_api_name          CONSTANT  VARCHAR2(30) := 'IMPORT_DOCUMENT_WITH_TAX';
2136    l_api_version       CONSTANT  NUMBER := 1.0;
2137    l_return_status               VARCHAR2(30);
2138    l_context_info_rec            context_info_rec_type;
2139    l_transaction_header_rec      transaction_header_rec_type;
2140    l_event_id                    NUMBER;
2141    l_precedence                  NUMBER_tbl_type;
2142    l_index                       BINARY_INTEGER;
2143    l_init_msg_list               VARCHAR2(1);
2144    l_record_tax_lines            VARCHAR2(1);
2145 
2146 
2147     CURSOR event_classes IS
2148      SELECT distinct
2149             header.event_class_code,
2150             header.application_id,
2151             header.entity_code,
2152             header.internal_organization_id,
2153             evntmap.processing_precedence
2154        FROM ZX_EVNT_CLS_MAPPINGS evntmap,
2155             ZX_TRX_HEADERS_GT header
2156       WHERE header.application_id = evntmap.application_id
2157         AND header.entity_code = evntmap.entity_code
2158         AND header.event_class_code = evntmap.event_class_code
2159       ORDER BY evntmap.processing_precedence;
2160 
2161       /*Get all the tax lines passed in import process for external tax provider */
2162       CURSOR detail_tax_lines_csr IS
2163       SELECT distinct
2164              r.tax_regime_id,
2165              t.tax_regime_code,
2166              t.tax_provider_id,
2167              r.effective_from,
2168              r.effective_to
2169         FROM ZX_IMPORT_TAX_LINES_GT t, zx_regimes_b r
2170         WHERE t.tax_provider_id is not null
2171           AND r.tax_regime_code = t.tax_regime_code
2172           AND r.effective_to is null;
2173 
2174      dtl_tax_lines  detail_tax_lines_csr%ROWTYPE;
2175      l_ptnr_index        NUMBER;
2176  BEGIN
2177    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2178      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
2179    END IF;
2180 
2181    /*--------------------------------------------------+
2182     |   Standard start of API savepoint                |
2183     +--------------------------------------------------*/
2184     SAVEPOINT import_document_PVT;
2185 
2186    /*--------------------------------------------------+
2187     |   Standard call to check for call compatibility  |
2188     +--------------------------------------------------*/
2189     IF NOT FND_API.Compatible_API_Call(l_api_version,
2190                                        p_api_version,
2191                                        l_api_name,
2192                                        G_PKG_NAME
2193                                        ) THEN
2194        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2195      END IF;
2196 
2197     /*--------------------------------------------------------------+
2198      |   Initialize message list if p_init_msg_list is set to TRUE  |
2199      +--------------------------------------------------------------*/
2200      IF p_init_msg_list is null THEN
2201        l_init_msg_list := FND_API.G_FALSE;
2202      ELSE
2203 	   l_init_msg_list := p_init_msg_list;
2204 	 END IF;
2205 
2206      IF FND_API.to_Boolean(l_init_msg_list) THEN
2207        FND_MSG_PUB.initialize;
2208      END IF;
2209 
2210 
2211     /*-----------------------------------------+
2212      |   Initialize return status to SUCCESS   |
2213      +-----------------------------------------*/
2214      x_return_status := FND_API.G_RET_STS_SUCCESS;
2215 
2216 
2217     /*-----------------------------------------+
2218      |   Populate Global Variable              |
2219      +-----------------------------------------*/
2220      G_PUB_SRVC := l_api_name;
2221      G_DATA_TRANSFER_MODE := 'TAB';
2222      G_EXTERNAL_API_CALL  := 'N';
2223 
2224      /*-----------------------------------------+
2225      | Get the event id for the whole document |
2226      +-----------------------------------------*/
2227      select zx_lines_det_factors_s.nextval
2228       into l_event_id
2229       from dual;
2230 
2231      OPEN event_classes;
2232        LOOP
2233         FETCH event_classes BULK COLLECT INTO
2234           l_evnt_cls.event_class_code,
2235           l_evnt_cls.application_id,
2236           l_evnt_cls.entity_code,
2237           l_evnt_cls.internal_organization_id,
2238           l_evnt_cls.precedence
2239         LIMIT G_LINES_PER_FETCH;
2240         EXIT WHEN event_classes%NOTFOUND;
2241        END LOOP;
2242      CLOSE event_classes;
2243 
2244      --Event classes such as SALES_TRANSACTION_TAX_QUOTE/PURCHASE_TRANSACTION_TAX_QUOTE
2245      --are not seeded in zx_evnt_cls_mappings so cursor event classes will not
2246      --return any rows for such event classes passed.
2247      IF l_evnt_cls.event_class_code.LAST is null THEN
2248        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2249           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
2250              'Event class information does not exist - indicates SALES_TRANSACTION_TAX_QUOTE/PURCHASE_TRANSACTION_TAX_QUOTE');
2251        END IF;
2252 
2253        select event_class_code,
2254               application_id,
2255               entity_code,
2256               internal_organization_id
2260               l_evnt_cls.internal_organization_id(1)
2257          into l_evnt_cls.event_class_code(1),
2258               l_evnt_cls.application_id(1),
2259               l_evnt_cls.entity_code(1),
2261          from ZX_TRX_HEADERS_GT
2262          where rownum=1;
2263      END IF;
2264 
2265 
2266      -- added init for bug fix 5417887
2267      /* ===============================================================================*
2268      |Initialize the global structures/global temp tables owned by TDM at header level |
2269       * =============================================================================*/
2270      ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (p_event_class_rec => NULL,
2271                                               p_init_level      => 'SESSION',
2272                                               x_return_status   => l_return_status
2273                                              );
2274 
2275      set_ptnr_srvc_subscr_flag (p_event_class_rec => NULL,
2276                                 x_return_status   => l_return_status
2277                                );
2278 
2279       /*---------------------------------------------------------+
2280       |  Initialize the trx line app regimes table for every doc|
2281       +--------------------------------------------------------*/
2282 
2283       IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
2284 
2285          -- Partner code, Point 2 (add a logic to conditionall execute this loop only
2286          -- when partner is installed
2287          -- IF p_event_class_rec.record_flag = 'Y' AND
2288          --   p_event_class_rec.record_for_partners_flag = 'Y' THEN
2289          /*Dump into tax regime table only after existence check */
2290 
2291          FOR dtl_tax_lines in detail_tax_lines_csr LOOP
2292              IF NOT ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl.EXISTS(dtl_tax_lines.tax_regime_id) THEN
2293                 ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(dtl_tax_lines.tax_regime_id).tax_regime_id :=  dtl_tax_lines.tax_regime_id;
2294                 ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(dtl_tax_lines.tax_regime_id).tax_regime_code:=  dtl_tax_lines.tax_regime_code;
2295                 ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(dtl_tax_lines.tax_regime_id).tax_provider_id :=  dtl_tax_lines.tax_provider_id;
2296 /* Bug 5557565 */
2297                 ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(dtl_tax_lines.tax_regime_id).effective_from := dtl_tax_lines.effective_from;
2298                 ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(dtl_tax_lines.tax_regime_id).effective_to := dtl_tax_lines.effective_to;
2299                 ZX_GLOBAL_STRUCTURES_PKG.tax_regime_tbl(dtl_tax_lines.tax_regime_id).partner_processing_flag :=  'C';
2300              END IF;
2301          END LOOP;
2302          --END IF;
2303 
2304          ZX_GLOBAL_STRUCTURES_PKG.init_trx_line_app_regime_tbl;
2305       END IF;
2306 
2307         ZX_GLOBAL_STRUCTURES_PKG.LOC_GEOGRAPHY_INFO_TBL.DELETE;
2308         ZX_GLOBAL_STRUCTURES_PKG.g_registration_info_tbl.DELETE;
2309         ZX_GLOBAL_STRUCTURES_PKG.tax_calc_flag_tbl.DELETE;
2310      /*-----------------------------------------+
2311       |   Loop for each transaction header      |
2312       +-----------------------------------------*/
2313      FOR i IN 1..nvl(l_evnt_cls.event_class_code.LAST,0)
2314        LOOP
2315          -- added for bug fix 5417887
2316          IF l_evnt_cls.event_class_code(i) = 'CREDIT_MEMO' THEN
2317            ZX_GLOBAL_STRUCTURES_PKG.g_credit_memo_exists_flg := 'Y';
2318          END IF;
2319 
2320            BEGIN
2321                --SAVEPOINT Import_Doc_Rel_PVT;
2322                import_tax_pvt (l_evnt_cls,
2323                                l_api_name,
2324                                l_event_id,
2325                                i,
2326                                p_api_version,
2327                                l_init_msg_list,
2328                                p_commit,
2329                                p_validation_level,
2330                                l_return_status,
2331                                x_msg_count,
2332                                x_msg_data
2333                               );
2334 
2335                IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2336                  RAISE FND_API.G_EXC_ERROR;
2337                ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2338                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2339                END IF;
2340 
2341                EXCEPTION
2342                  WHEN FND_API.G_EXC_ERROR THEN
2343                    --ROLLBACK TO Import_Doc_Rel_PVT;
2344                    x_return_status := FND_API.G_RET_STS_ERROR ;
2345                    --Call API to dump into zx_errors_gt
2346                    IF ( errors_tbl.application_id.LAST is NOT NULL) THEN
2347                      DUMP_MSG;
2348                    END IF;
2349                    IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
2350                      FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
2351                    END IF;
2352                END;
2353 
2354 
2355      -- bug fix 5417887 begin 17-Aug-2006
2356      -- Following code for tail end services/TRL/ptnr sync code, is moved from calculte_tax_pvt
2357      -- and should be handled for each event_class_code. At present, all product integrations call etax
2358      -- for one event class at a time, hence we put these processed out of the event class loop.
2359      -- In the future, if there are cases that etax handle multiple event_class batch, we need to
2360      -- revisist the following code and change accordingly.
2361 
2362      -- For furture LTE features, there are could cases that related documents was imported together
2363      -- with original document. For this case, we need to make sure the tail end service for the original
2364      -- docs must be handled before the calculation process of the related docs.
2365 
2366       /*-----------------------------------------------------+
2367        |   Call to eTax service Dump Detail Tax Lines Into GT|
2368        +-----------------------------------------------------*/
2369        ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(x_return_status  => l_return_status );
2370 
2371        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2372           x_return_status := l_return_status ;
2373           DUMP_MSG;
2374           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2375             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');
2376           END IF;
2377           RETURN;
2378         END IF;
2379 
2380         /*--------------------------------------------------+
2381          |   Call to eTax Service Tax Lines Determination   |
2382          +--------------------------------------------------*/
2383          ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(
2384                               p_event_class_rec => zx_global_structures_pkg.g_event_class_rec,
2385                               x_return_status   => l_return_status
2386                                                             );
2387 
2388          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2389             x_return_status := l_return_status;
2390             DUMP_MSG;
2391             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2392               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');
2393             END IF;
2394             RETURN;
2395           END IF;
2396 
2397          /*--------------------------------------------------+
2398           |   Call to eTax Service Manage Tax Lines          |
2399           +--------------------------------------------------*/
2400           /*Bug 3649502 - Check for record flag before calling TRR service*/
2401          --IF zx_global_structures_pkg.g_event_class_rec.record_flag = 'Y' THEN
2402          l_record_tax_lines := ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.record_flag;
2403          IF ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.record_flag = 'Y' and
2404             ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'Y' THEN
2405             l_record_tax_lines := 'N';
2406          END IF;
2407          IF l_record_tax_lines = 'Y' THEN
2408             ZX_TRL_PUB_PKG.manage_taxlines(p_event_class_rec  =>zx_global_structures_pkg.g_event_class_rec,
2409                                            x_return_status    =>l_return_status
2410                                           );
2411          END IF;
2412 
2413          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2414             x_return_status := l_return_status;
2415             DUMP_MSG;
2416             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2417               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');
2418             END IF;
2419             RETURN;
2420          END IF;
2421 
2422      -- bug#6389189
2423      -- need to flush ZX_DETAIL_TAX_LINES_GT before the procedure
2424      -- import_tax_pvt is called for the next event class
2425 
2426      -- Bug fix 7506576 Included additional condition flag quote_flag when
2427      -- deleting records from GT TABLES
2428 
2429      --IF zx_global_structures_pkg.g_event_class_rec.record_flag = 'Y'  AND ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'N'
2430      -- Reimplemented the fix done in bug#7506576
2431      IF l_record_tax_lines = 'Y' THEN
2432        DELETE FROM ZX_DETAIL_TAX_LINES_GT;
2433      END IF;
2434 
2435 
2436     /*******************************PARTNER CODE START****************************/
2437      IF zx_global_structures_pkg.g_ptnr_srvc_subscr_flag = 'Y' THEN
2438        ptnr_bulk_sync_calc_tax ( p_event_class_rec   => zx_global_structures_pkg.g_event_class_rec ,
2439                                  x_return_status     => l_return_status
2440                                );
2441        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2442          x_return_status := l_return_status;
2443          DUMP_MSG;
2444          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2445               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');
2446          END IF;
2447          RETURN;
2448        END IF;
2449      END IF;
2450     /*******************************PARTNER CODE END****************************/
2451 
2452      -- bug fix 6824850
2453      ZX_GLOBAL_STRUCTURES_PKG.PTNR_TAX_REGIME_TBL.DELETE;
2454 
2455      -- bug fix 5417887 end 17-Aug-2006
2456      END LOOP;--event_classes cursor
2457 
2458 
2459       IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2460          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
2461       END IF;
2462 
2463         EXCEPTION
2464            WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2465             ROLLBACK TO Import_Document_PVT;
2466             --Close all open cursors
2467             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2468             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
2469             FND_MSG_PUB.Add;
2473             | the stack it retrieves this message                     |
2470            /*---------------------------------------------------------+
2471             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2472             | in the message stack. If there is only one message in   |
2474             +---------------------------------------------------------*/
2475             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2476                                       p_count   =>      x_msg_count,
2477                                       p_data    =>      x_msg_data
2478                                       );
2479             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
2480               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
2481             END IF;
2482 
2483           WHEN OTHERS THEN
2484              ROLLBACK TO Import_Document_PVT;
2485              --Close all open cursors
2486              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2487              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
2488              FND_MSG_PUB.Add;
2489            /*---------------------------------------------------------+
2490             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2491             | in the message stack. If there is only one message in   |
2492             | the stack it retrieves this message                     |
2493             +---------------------------------------------------------*/
2494              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2495                                        p_count  =>      x_msg_count,
2496                                        p_data   =>      x_msg_data
2497                                        );
2498 
2499              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2500                 FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
2501              END IF;
2502  END import_document_with_tax;
2503 
2504  /* ======================================================================*
2505  | PROCEDURE synchronize_tax_repository : Updates tax repository         |
2506  | There exists only pl/sql version for API                              |
2507  * ======================================================================*/
2508 
2509  PROCEDURE synchronize_tax_repository
2510  (  p_api_version           IN         NUMBER,
2511     p_init_msg_list         IN         VARCHAR2,
2512     p_commit                IN         VARCHAR2,
2513     p_validation_level      IN         NUMBER,
2514     x_return_status         OUT NOCOPY VARCHAR2,
2515     x_msg_count             OUT NOCOPY NUMBER,
2516     x_msg_data              OUT NOCOPY VARCHAR2,
2517     p_sync_trx_rec          IN         sync_trx_rec_type,
2518     p_sync_trx_lines_tbl    IN         sync_trx_lines_tbl_type%type
2519   ) IS
2520    l_api_name          CONSTANT  VARCHAR2(30) := 'SYNCHRONIZE_TAX_REPOSITORY';
2521    l_api_version       CONSTANT  NUMBER := 1.0;
2522    l_return_status               VARCHAR2(30);
2523    l_index                       BINARY_INTEGER;
2524    l_event_id                    NUMBER;
2525    l_event_class_rec             event_class_rec_type;
2526    l_init_msg_list               VARCHAR2(1);
2527    l_upg_trx_info_rec            ZX_ON_FLY_TRX_UPGRADE_PKG.zx_upg_trx_info_rec_type;
2528  BEGIN
2529 
2530    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2531      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
2532    END IF;
2533 
2534    /*--------------------------------------------------+
2535     |   Standard start of API savepoint                |
2536     +--------------------------------------------------*/
2537     SAVEPOINT Synchronize_tax_PVT;
2538 
2539     /*--------------------------------------------------+
2540     |   Standard call to check for call compatibility  |
2541     +--------------------------------------------------*/
2542 
2543     IF NOT FND_API.Compatible_API_Call(l_api_version,
2544                                        p_api_version,
2545                                        l_api_name,
2546                                        G_PKG_NAME
2547                                       ) THEN
2548       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2549     END IF;
2550 
2551    /*--------------------------------------------------------------+
2552    |   Initialize message list if p_init_msg_list is set to TRUE  |
2553    +--------------------------------------------------------------*/
2554      IF p_init_msg_list is null THEN
2555        l_init_msg_list := FND_API.G_FALSE;
2556      ELSE
2557 	   l_init_msg_list := p_init_msg_list;
2558      END IF;
2559 
2560      IF FND_API.to_Boolean(l_init_msg_list) THEN
2561        FND_MSG_PUB.initialize;
2562      END IF;
2563 
2564    /*-----------------------------------------+
2565     |   Initialize return status to SUCCESS   |
2566     +-----------------------------------------*/
2567 
2568     x_return_status := FND_API.G_RET_STS_SUCCESS;
2569 
2570    /*-----------------------------------------+
2571     |   Populate Global Variable              |
2572     +-----------------------------------------*/
2573 
2574     G_PUB_SRVC := l_api_name;
2575     G_DATA_TRANSFER_MODE := 'PLS';
2576     G_EXTERNAL_API_CALL  := 'N';
2577 
2578    /*------------------------------------------+
2579      |Populate the event class record          |
2580      +-----------------------------------------*/
2581      l_event_class_rec.APPLICATION_ID              :=  p_sync_trx_rec.APPLICATION_ID;
2582      l_event_class_rec.ENTITY_CODE                 :=  p_sync_trx_rec.ENTITY_CODE;
2586      l_event_class_rec.record_flag                 := 'Y';
2583      l_event_class_rec.EVENT_CLASS_CODE            :=  p_sync_trx_rec.EVENT_CLASS_CODE;
2584      l_event_class_rec.EVENT_TYPE_CODE             :=  p_sync_trx_rec.EVENT_TYPE_CODE;
2585      l_event_class_rec.TRX_ID                      :=  p_sync_trx_rec.TRX_ID;
2587      l_event_class_rec.record_for_partners_flag    := 'Y';
2588 
2589      BEGIN
2590 
2591        SELECT prod_family_grp_code into l_event_class_rec.prod_family_grp_code
2592        FROM
2593        zx_evnt_cls_mappings
2594        WHERE
2595        application_id = p_sync_trx_rec.application_id
2596        AND entity_code = p_sync_trx_rec.entity_code
2597        AND event_class_code = p_sync_trx_rec.event_class_code;
2598 
2599      EXCEPTION
2600        WHEN OTHERS THEN
2601         --NULL;
2602         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2603           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Incorrect event_class_code passed: ' || p_sync_trx_rec.event_class_code);
2604         END IF;
2605         RETURN;
2606      END;
2607 
2608 
2609 
2610      BEGIN
2611 
2612        SELECT tax_event_type_code into l_event_class_rec.tax_event_type_code
2613        FROM
2614        ZX_EVNT_TYP_MAPPINGS
2615        WHERE
2616        application_id = p_sync_trx_rec.application_id
2617        AND entity_code = p_sync_trx_rec.entity_code
2618        AND event_class_code = p_sync_trx_rec.event_class_code
2619        AND event_type_code = p_sync_trx_rec.event_type_code;
2620 
2621      EXCEPTION
2622        WHEN OTHERS THEN
2623         --NULL;
2624         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2625           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Incorrect event_type_code passed: ' || p_sync_trx_rec.event_type_code);
2626         END IF;
2627         RETURN;
2628      END;
2629 
2630      BEGIN
2631 
2632        SELECT distinct internal_organization_id into
2633        l_event_class_rec.internal_organization_id
2634        FROM
2635        zx_lines
2636        WHERE
2637        application_id = p_sync_trx_rec.application_id
2638        AND entity_code = p_sync_trx_rec.entity_code
2639        AND event_class_code = p_sync_trx_rec.event_class_code
2640        AND trx_id = p_sync_trx_rec.trx_id;
2641 
2642      EXCEPTION
2643        WHEN OTHERS THEN
2644         NULL;
2645      END;
2646 
2647     /*--------------------------------------------------+
2648      |   Update zx_lines_det_factors                    |
2649      +--------------------------------------------------*/
2650      /*Retrieve the sequence id since it has to be same for all updated rows*/
2651      select ZX_LINES_DET_FACTORS_S.nextval
2652        INTO l_event_class_rec.event_id
2653        FROM dual;
2654 
2655      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2656         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
2657              'application_id: '||to_char(p_sync_trx_rec.application_id)||
2658              ', entity_code: '||p_sync_trx_rec.entity_code||
2659              ', event_class_code: '||p_sync_trx_rec.event_class_code||
2660              ', event_type_code: '||p_sync_trx_rec.event_type_code||
2661              ', tax_event_type_code: '||l_event_class_rec.tax_event_type_code||
2662              ', trx_id: '||to_char(p_sync_trx_rec.trx_id)||
2663              ', trx_number: '||p_sync_trx_rec.trx_number||
2664              ', trx_description: '||p_sync_trx_rec.trx_description||
2665              ', trx_communicated_date: '||to_char(p_sync_trx_rec.trx_communicated_date)||
2666              ', batch_source_id: '||to_char(p_sync_trx_rec.batch_source_id)||
2667              ', batch_source_name: '||p_sync_trx_rec.batch_source_name||
2668              ', doc_seq_id: '||to_char(p_sync_trx_rec.doc_seq_id)||
2669              ', doc_seq_name: '||p_sync_trx_rec.doc_seq_name||
2670              ', doc_seq_name: '||p_sync_trx_rec.doc_seq_value||
2671              ', trx_due_date: '||to_char(p_sync_trx_rec.trx_due_date)||
2672              ', trx_type_description: '||to_char(p_sync_trx_rec.trx_type_description)||
2673              ', supplier_tax_invoice_number: '||p_sync_trx_rec.supplier_tax_invoice_number||
2674              ', supplier_exchange_rate: '||to_char(p_sync_trx_rec.supplier_exchange_rate)||
2675              ', supplier_tax_invoice_date: '||to_char(p_sync_trx_rec.supplier_tax_invoice_date)||
2676              ', tax_invoice_date: '||to_char(p_sync_trx_rec.tax_invoice_date)||
2677              ', tax_invoice_number: '||p_sync_trx_rec.tax_invoice_number||
2678              ', port_of_entry_code: '||p_sync_trx_rec.port_of_entry_code);
2679 
2680         FOR i IN 1..nvl(p_sync_trx_lines_tbl.APPLICATION_ID.LAST,-99)
2681         LOOP
2682            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
2683              'trx_line_id: '||to_char(p_sync_trx_lines_tbl.trx_line_id(i))||
2684              ', trx_level_type: '||p_sync_trx_lines_tbl.trx_level_type(i)||
2685              ', trx_waybill_number: '||p_sync_trx_lines_tbl.trx_waybill_number(i)||
2686              ', trx_line_description: '||p_sync_trx_lines_tbl.trx_line_description(i)||
2687              ', product_description: '||p_sync_trx_lines_tbl.product_description(i)||
2688              ', trx_line_gl_date: '||to_char(p_sync_trx_lines_tbl.trx_line_gl_date(i))||
2689              ', merchant_party_name: '||p_sync_trx_lines_tbl.merchant_party_name(i)||
2690              ', merchant_party_document_number: '||p_sync_trx_lines_tbl.merchant_party_document_number(i)||
2691              ', merchant_party_reference: '||p_sync_trx_lines_tbl.merchant_party_reference(i)||
2695         END LOOP;
2692              ', merchant_party_taxpayer_id: '||p_sync_trx_lines_tbl.merchant_party_taxpayer_id(i)||
2693              ', merchant_party_tax_reg_number: '||p_sync_trx_lines_tbl.merchant_party_tax_reg_number(i)||
2694              ', asset_number: '||to_char(p_sync_trx_lines_tbl.asset_number(i)));
2696      END IF;
2697 
2698 	 /* update the header level attributes*/
2699      UPDATE ZX_LINES_DET_FACTORS SET
2700            EVENT_ID                       = l_event_class_rec.event_id,
2701            --EVENT_TYPE_CODE              = p_sync_trx_rec.EVENT_TYPE_CODE, /*bug 3922983*/
2702            TRX_NUMBER                     = p_sync_trx_rec.TRX_NUMBER,
2703            TRX_DESCRIPTION                = p_sync_trx_rec.TRX_DESCRIPTION,
2704            TRX_COMMUNICATED_DATE          = p_sync_trx_rec.TRX_COMMUNICATED_DATE,
2705            BATCH_SOURCE_ID                = p_sync_trx_rec.BATCH_SOURCE_ID,
2706            BATCH_SOURCE_NAME              = p_sync_trx_rec.BATCH_SOURCE_NAME,
2707            DOC_SEQ_ID                     = p_sync_trx_rec.DOC_SEQ_ID,
2708            DOC_SEQ_NAME                   = p_sync_trx_rec.DOC_SEQ_NAME,
2709            DOC_SEQ_VALUE                  = p_sync_trx_rec.DOC_SEQ_VALUE,
2710            TRX_DUE_DATE                   = p_sync_trx_rec.TRX_DUE_DATE,
2711            TRX_TYPE_DESCRIPTION           = p_sync_trx_rec.TRX_TYPE_DESCRIPTION,
2712            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
2713            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
2714            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
2715            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
2716            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
2717            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
2718            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
2719          WHERE  APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
2720             AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
2721             AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
2722             AND TRX_ID                    = p_sync_trx_rec.TRX_ID;
2723      /* Fixed as part of 6826754 */
2724      UPDATE ZX_LINES
2725 	      SET TRX_NUMBER = p_sync_trx_rec.TRX_NUMBER
2726       WHERE APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
2727         AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
2728         AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
2729         AND TRX_ID                    = p_sync_trx_rec.TRX_ID;
2730 
2731      --Bugfix 4486946 -Call on the fly upgrade if the transaction if not found
2732      IF sql%notfound THEN
2733        l_upg_trx_info_rec.application_id   := l_event_class_rec.application_id;
2734        l_upg_trx_info_rec.entity_code      := l_event_class_rec.entity_code;
2735        l_upg_trx_info_rec.event_class_code := l_event_class_rec.event_class_code;
2736        l_upg_trx_info_rec.trx_id           := l_event_class_rec.trx_id;
2737        ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(p_upg_trx_info_rec   =>  l_upg_trx_info_rec,
2738                                                     x_return_status      =>  l_return_status
2739                                                    );
2740        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2741          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2742            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');
2743          END IF;
2744          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2745            RAISE FND_API.G_EXC_ERROR;
2746          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2747            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2748          END IF;
2749        END IF;
2750 	   /* update the header level attributes*/
2751        UPDATE ZX_LINES_DET_FACTORS SET
2752            EVENT_ID                       = l_event_class_rec.event_id,
2753            --EVENT_TYPE_CODE              = p_sync_trx_rec.EVENT_TYPE_CODE, /*bug 3922983*/
2754            TRX_NUMBER                     = p_sync_trx_rec.TRX_NUMBER,
2755            TRX_DESCRIPTION                = p_sync_trx_rec.TRX_DESCRIPTION,
2756            TRX_COMMUNICATED_DATE          = p_sync_trx_rec.TRX_COMMUNICATED_DATE,
2757            BATCH_SOURCE_ID                = p_sync_trx_rec.BATCH_SOURCE_ID,
2758            BATCH_SOURCE_NAME              = p_sync_trx_rec.BATCH_SOURCE_NAME,
2759            DOC_SEQ_ID                     = p_sync_trx_rec.DOC_SEQ_ID,
2760            DOC_SEQ_NAME                   = p_sync_trx_rec.DOC_SEQ_NAME,
2761            DOC_SEQ_VALUE                  = p_sync_trx_rec.DOC_SEQ_VALUE,
2762            TRX_DUE_DATE                   = p_sync_trx_rec.TRX_DUE_DATE,
2763            TRX_TYPE_DESCRIPTION           = p_sync_trx_rec.TRX_TYPE_DESCRIPTION,
2767            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
2764            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
2765            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
2766            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
2768            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
2769            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
2770            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
2771 	        WHERE APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
2772             AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
2773             AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
2774             AND TRX_ID                    = p_sync_trx_rec.TRX_ID;
2775      /* Fixed as part of 6826754 */
2776        UPDATE ZX_LINES
2777 	        SET TRX_NUMBER = p_sync_trx_rec.TRX_NUMBER
2778         WHERE APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
2779           AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
2780           AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
2781           AND TRX_ID                    = p_sync_trx_rec.TRX_ID;
2782 
2783      END IF; --sql%notfound
2784      --Bugfix 4486946 - on-the-fly upgrade end
2785 
2786      /* update the line level attributes if passed*/
2787      IF  (p_sync_trx_lines_tbl.APPLICATION_ID.EXISTS(1)) THEN
2788        FORALL i IN 1..nvl(p_sync_trx_lines_tbl.APPLICATION_ID.LAST,-99)
2789          UPDATE ZX_LINES_DET_FACTORS SET
2790            TRX_LEVEL_TYPE                 = p_sync_trx_lines_tbl.TRX_LEVEL_TYPE(i),
2791            TRX_LINE_ID                    = p_sync_trx_lines_tbl.TRX_LINE_ID(i),
2792            TRX_WAYBILL_NUMBER             = p_sync_trx_lines_tbl.TRX_WAYBILL_NUMBER(i),
2793            TRX_LINE_DESCRIPTION           = p_sync_trx_lines_tbl.TRX_LINE_DESCRIPTION(i),
2794            PRODUCT_DESCRIPTION            = p_sync_trx_lines_tbl.PRODUCT_DESCRIPTION(i),
2795            TRX_LINE_GL_DATE               = p_sync_trx_lines_tbl.TRX_LINE_GL_DATE(i),
2796            MERCHANT_PARTY_NAME            = p_sync_trx_lines_tbl.MERCHANT_PARTY_NAME(i),
2797            MERCHANT_PARTY_DOCUMENT_NUMBER = p_sync_trx_lines_tbl.MERCHANT_PARTY_DOCUMENT_NUMBER(i),
2798            MERCHANT_PARTY_REFERENCE       = p_sync_trx_lines_tbl.MERCHANT_PARTY_REFERENCE(i),
2799            MERCHANT_PARTY_TAXPAYER_ID     = p_sync_trx_lines_tbl.MERCHANT_PARTY_TAXPAYER_ID(i),
2800            MERCHANT_PARTY_TAX_REG_NUMBER  = p_sync_trx_lines_tbl.MERCHANT_PARTY_TAX_REG_NUMBER(i),
2801            ASSET_NUMBER                   = p_sync_trx_lines_tbl.ASSET_NUMBER(i)
2802          WHERE APPLICATION_ID            = p_sync_trx_rec.APPLICATION_ID
2803            AND ENTITY_CODE               = p_sync_trx_rec.ENTITY_CODE
2804            AND EVENT_CLASS_CODE          = p_sync_trx_rec.EVENT_CLASS_CODE
2805      	     AND TRX_ID                    = p_sync_trx_rec.TRX_ID
2806            AND TRX_LINE_ID               = p_sync_trx_lines_tbl.TRX_LINE_ID(i)
2807            AND TRX_LEVEL_TYPE            = p_sync_trx_lines_tbl.TRX_LEVEL_TYPE(i);
2808      END IF;
2809 
2810 
2811      /*********Partner code Start************************/
2812      ZX_SRVC_TYP_PKG.synchronize_tax(l_event_class_rec,
2813                                      l_return_status
2814                                      );
2815      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2816        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
2817          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');
2818        END IF;
2819        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
2820          RAISE FND_API.G_EXC_ERROR;
2821        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
2822          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2823        END IF;
2824      END IF;
2825 
2826      /********Partner Code End *************************/
2827 
2828     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2829       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
2830     END IF;
2831 
2832     EXCEPTION
2833       WHEN FND_API.G_EXC_ERROR THEN
2834         ROLLBACK TO Synchronize_tax_PVT;
2835         x_return_status := FND_API.G_RET_STS_ERROR ;
2836         /*---------------------------------------------------------+
2837          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2838          | in the message stack. If there is only one message in   |
2839          | the stack it retrieves this message                     |
2840          +---------------------------------------------------------*/
2841         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2842                                   p_count  => x_msg_count,
2843                                   p_data   => x_msg_data
2844                                   );
2845         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
2849       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
2846           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
2847         END IF;
2848 
2850         ROLLBACK TO Synchronize_tax_PVT;
2851         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2852         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
2853         FND_MSG_PUB.Add;
2854         /*---------------------------------------------------------+
2855          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2856          | in the message stack. If there is only one message in   |
2857          | the stack it retrieves this message                     |
2858          +---------------------------------------------------------*/
2859         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2860                                   p_count  => x_msg_count,
2861                                   p_data   => x_msg_data
2862                                   );
2863         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
2864           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
2865         END IF;
2866 
2867       WHEN OTHERS THEN
2868          ROLLBACK TO Synchronize_tax_PVT;
2869          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2870          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
2871          FND_MSG_PUB.Add;
2872         /*---------------------------------------------------------+
2873          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
2874          | in the message stack. If there is only one message in   |
2875          | the stack it retrieves this message                     |
2876          +---------------------------------------------------------*/
2877          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
2878                                    p_count       =>      x_msg_count,
2879                                    p_data        =>      x_msg_data
2880                                    );
2881          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
2882             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
2883          END IF;
2884  END synchronize_tax_repository;
2885 
2886 /* ======================================================================*
2887  | PROCEDURE override_tax : Overrides tax lines                          |
2888  | There exists only pl/sql version for this API                         |
2889  * ======================================================================*/
2890 
2891  PROCEDURE Override_tax
2892  ( p_api_version           IN         NUMBER,
2893    p_init_msg_list         IN         VARCHAR2,
2894    p_commit                IN         VARCHAR2,
2895    p_validation_level      IN         NUMBER,
2896    x_return_status         OUT NOCOPY VARCHAR2,
2897    x_msg_count             OUT NOCOPY NUMBER,
2898    x_msg_data              OUT NOCOPY VARCHAR2,
2899    p_transaction_rec       IN         transaction_rec_type,
2900    p_override_level        IN         VARCHAR2,
2901    p_event_id              IN         NUMBER
2902   ) IS
2903    l_api_name          CONSTANT  VARCHAR2(30) := 'OVERRIDE_TAX';
2904    l_api_version       CONSTANT  NUMBER := 1.0;
2905    l_return_status               VARCHAR2(30);
2906    l_init_msg_list               VARCHAR2(1);
2907    l_event_class_rec             event_class_rec_type;
2908    l_transaction_header_rec      transaction_header_rec_type;
2909    l_context_info_rec            context_info_rec_type;
2910    l_index                       BINARY_INTEGER;
2911    l_record_tax_lines            VARCHAR2(1);
2912 
2913   CURSOR  get_trx_date_csr
2914             (c_application_id     zx_lines_det_factors.application_id%TYPE,
2915              c_entity_code     zx_lines_det_factors.entity_code%TYPE,
2916              c_event_class_code     zx_lines_det_factors.event_class_code%TYPE,
2917              c_trx_id     zx_lines_det_factors.trx_id%TYPE,
2918              c_event_id     zx_lines_det_factors.event_id%TYPE
2919              ) IS
2920    SELECT trx_date,
2921           related_doc_date,
2922           provnl_tax_determination_date
2923      FROM zx_lines_det_factors
2924     WHERE application_id = c_application_id
2925       AND entity_code = c_entity_code
2926       AND event_class_code = c_event_class_code
2927       AND trx_id = c_trx_id
2928       AND event_id = c_event_id
2929       AND ROWNUM = 1;
2930 
2931  BEGIN
2932 
2933    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
2934      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
2935    END IF;
2936 
2937    /*--------------------------------------------------+
2938     |   Standard start of API savepoint                |
2939     +--------------------------------------------------*/
2940     SAVEPOINT Override_Tax_PVT;
2941 
2942    /*--------------------------------------------------+
2943     |   Standard call to check for call compatibility  |
2944     +--------------------------------------------------*/
2945 
2946     IF NOT FND_API.Compatible_API_Call(l_api_version,
2947                                        p_api_version,
2948                                        l_api_name,
2949                                        G_PKG_NAME
2950                                        ) THEN
2951       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2952     END IF;
2953 
2954 
2955    /*--------------------------------------------------------------+
2956    |   Initialize message list if p_init_msg_list is set to TRUE  |
2957    +--------------------------------------------------------------*/
2958      IF p_init_msg_list is null THEN
2959        l_init_msg_list := FND_API.G_FALSE;
2963 
2960      ELSE
2961 	   l_init_msg_list := p_init_msg_list;
2962 	 END IF;
2964      IF FND_API.to_Boolean(l_init_msg_list) THEN
2965        FND_MSG_PUB.initialize;
2966      END IF;
2967 
2968    /*-----------------------------------------+
2969     |   Initialize return status to SUCCESS   |
2970     +-----------------------------------------*/
2971 
2972     x_return_status := FND_API.G_RET_STS_SUCCESS;
2973 
2974     /*-----------------------------------------+
2975     |   Populate Global Variable              |
2976     +-----------------------------------------*/
2977 
2978      G_PUB_SRVC := l_api_name;
2979      G_DATA_TRANSFER_MODE := 'PLS';
2980      G_EXTERNAL_API_CALL  := 'N';
2981 
2982      --Call TDS process to reset the session for previous override tax calls if any
2983      ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (p_event_class_rec => NULL,
2984                                               p_init_level      => 'SESSION',
2985                                               x_return_status   => l_return_status
2986                                              );
2987 
2988      set_ptnr_srvc_subscr_flag (p_event_class_rec => NULL,
2989                                 x_return_status   => l_return_status
2990                                );
2991 
2992         ZX_GLOBAL_STRUCTURES_PKG.LOC_GEOGRAPHY_INFO_TBL.DELETE;
2993         ZX_GLOBAL_STRUCTURES_PKG.g_registration_info_tbl.DELETE;
2994     /*------------------------------------------------------+
2995      |   Copy to Event Class Record                         |
2996      +------------------------------------------------------*/
2997      l_event_class_rec.event_id                    :=  p_event_id;
2998      l_event_class_rec.INTERNAL_ORGANIZATION_ID    :=  p_transaction_rec.INTERNAL_ORGANIZATION_ID;
2999      l_event_class_rec.APPLICATION_ID              :=  p_transaction_rec.APPLICATION_ID;
3000      l_event_class_rec.ENTITY_CODE                 :=  p_transaction_rec.ENTITY_CODE;
3001      l_event_class_rec.EVENT_CLASS_CODE            :=  p_transaction_rec.EVENT_CLASS_CODE;
3002      l_event_class_rec.EVENT_TYPE_CODE             :=  p_transaction_rec.EVENT_TYPE_CODE;
3003      l_event_class_rec.TRX_ID                      :=  p_transaction_rec.TRX_ID;
3004 
3005      -- bug 5684123
3006      --
3007      OPEN  get_trx_date_csr
3008             (l_event_class_rec.application_id,
3009              l_event_class_rec.entity_code,
3010              l_event_class_rec.event_class_code,
3011              l_event_class_rec.trx_id,
3012              l_event_class_rec.event_id);
3013      FETCH get_trx_date_csr INTO l_event_class_rec.trx_date,
3014                                  l_event_class_rec.rel_doc_date,
3015                                  l_event_class_rec.provnl_tax_determination_date;
3016      CLOSE get_trx_date_csr;
3017 
3018      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3019         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
3020              'application_id: '||to_char(l_event_class_rec.application_id)||
3021              ', entity_code: '||l_event_class_rec.entity_code||
3022              ', event_class_code: '||l_event_class_rec.event_class_code||
3023              ', event_type_code: '||l_event_class_rec.event_type_code||
3024              ', trx_id: '||to_char(l_event_class_rec.trx_id)||
3025              ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id) ||
3026              ', trx_date: '||to_char(l_event_class_rec.trx_date, 'MM-DD-YYYY'));
3027      END IF;
3028 
3029      IF l_event_class_rec.event_class_code = 'CREDIT_MEMO' THEN
3030        ZX_GLOBAL_STRUCTURES_PKG.g_credit_memo_exists_flg := 'Y';
3031      END IF;
3032 
3033      /*------------------------------------------------------+
3034       |   Validate and Initializate parameters for Override  |
3035       |   tax                                                |
3036       +------------------------------------------------------*/
3037      ZX_VALID_INIT_PARAMS_PKG.override_tax(x_return_status   => l_return_status ,
3038                                            p_override        => p_override_level,
3039                                            p_event_class_rec => l_event_class_rec,
3040                                            p_trx_rec         => p_transaction_rec
3041                                            );
3042 
3043      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3044        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3045          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');
3046        END IF;
3047        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3048          RAISE FND_API.G_EXC_ERROR;
3049        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3050          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3051        END IF;
3052      END IF;
3053 
3054      /*===============================================================================*
3055       |Initialize the global structures/global temp tables owned by TDM at header level |
3056       *================================================================================*/
3057      ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (l_event_class_rec,
3058                                               'HEADER',
3059                                                l_return_status
3060                                              );
3061 
3062      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3063        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3064          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');
3065        END IF;
3069          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3066        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3067          RAISE FND_API.G_EXC_ERROR;
3068        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3070        END IF;
3071      END IF;
3072 
3073      /*--------------------------------------------------+
3074       |   Call Service Type Override Summary or Override |
3075       |   Detail Tax Lines depending of the overriding   |
3076       |   level.                                         |
3077       +--------------------------------------------------*/
3078      ZX_SRVC_TYP_PKG.override_tax_lines(p_event_class_rec    => l_event_class_rec,
3079                                         p_override_level     => p_override_level,
3080                                         x_return_status      => l_return_status
3081                                         );
3082      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3083        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3084          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');
3085        END IF;
3086        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3087          RAISE FND_API.G_EXC_ERROR;
3088        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3089          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3090        END IF;
3091      END IF;
3092 
3093      /*-----------------------------------------------------+
3094       |   Call to eTax service Dump Detail Tax Lines Into GT|
3095       +-----------------------------------------------------*/
3096      ZX_TDS_CALC_SERVICES_PUB_PKG.dump_detail_tax_lines_into_gt(x_return_status => l_return_status);
3097 
3098      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3099        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3100          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');
3101        END IF;
3102        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3103          RAISE FND_API.G_EXC_ERROR;
3104        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3105          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3106        END IF;
3107      END IF;
3108 
3109      /*--------------------------------------------------+
3110       |   Call to eTax Service Tax Lines Determination   |
3111       +--------------------------------------------------*/
3112      ZX_TDS_CALC_SERVICES_PUB_PKG.tax_line_determination(p_event_class_rec => l_event_class_rec,
3113                                                          x_return_status   => l_return_status
3114                                                          );
3115 
3116      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3117        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3118          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');
3119        END IF;
3120        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3121          RAISE FND_API.G_EXC_ERROR;
3122        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3123          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3124        END IF;
3125      END IF;
3126 
3127      /*--------------------------------------------------+
3128       |   Call to eTax Service Manage Tax Lines          |
3129       +--------------------------------------------------*/
3130      --Rounding and Summarization of Tax Lines for Transaction
3131      /*Bug 3649502 - Check for record flag before calling TRR service*/
3132      --IF l_event_class_rec.record_flag = 'Y' THEN
3133 
3134      l_record_tax_lines := l_event_class_rec.record_flag;
3135      IF l_event_class_rec.record_flag = 'Y' and
3136         l_event_class_rec.quote_flag = 'Y' THEN
3137         l_record_tax_lines := 'N';
3138      END IF;
3139      IF l_record_tax_lines = 'Y' THEN
3140        ZX_TRL_PUB_PKG.manage_taxlines(p_event_class_rec  =>l_event_class_rec,
3141                                       x_return_status    =>l_return_status
3142                                       );
3143      END IF;
3144 
3145      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3146        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3147          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');
3148        END IF;
3149        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3150          RAISE FND_API.G_EXC_ERROR;
3151        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3152          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3153        END IF;
3154      END IF;
3155 
3156      --Delete from the global structures so that there are no hanging/redundant
3157      --records sitting there
3158      ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
3159 
3160      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3161        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
3162      END IF;
3163 
3164      EXCEPTION
3165       WHEN FND_API.G_EXC_ERROR THEN
3166         ROLLBACK TO Override_Tax_PVT;
3167         x_return_status := FND_API.G_RET_STS_ERROR ;
3168         /*---------------------------------------------------------+
3169          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3170          | in the message stack. If there is only one message in   |
3171          | the stack it retrieves this message                     |
3172          +---------------------------------------------------------*/
3173         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3174                                   p_count  => x_msg_count,
3178           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3175                                   p_data   => x_msg_data
3176                                   );
3177         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3179         END IF;
3180 
3181       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3182         ROLLBACK TO Override_Tax_PVT;
3183         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3184         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3185         FND_MSG_PUB.Add;
3186         /*---------------------------------------------------------+
3187          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3188          | in the message stack. If there is only one message in   |
3189          | the stack it retrieves this message                     |
3190          +---------------------------------------------------------*/
3191         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3192                                   p_count  => x_msg_count,
3193                                   p_data   => x_msg_data
3194                                   );
3195         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3196           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3197         END IF;
3198 
3199       WHEN OTHERS THEN
3200          ROLLBACK TO Override_Tax_PVT;
3201          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3202          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3203          FND_MSG_PUB.Add;
3204         /*---------------------------------------------------------+
3205          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3206          | in the message stack. If there is only one message in   |
3207          | the stack it retrieves this message                     |
3208          +---------------------------------------------------------*/
3209          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3210                                    p_count       =>      x_msg_count,
3211                                    p_data        =>      x_msg_data
3212                                    );
3213          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3214             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3215          END IF;
3216   END override_tax;
3217 
3218 
3219 /* ======================================================================*
3220  | PROCEDURE global_document_update :                                    |
3221  * ======================================================================*/
3222 
3223  PROCEDURE Global_document_update
3224  ( p_api_version           IN  NUMBER,
3225    p_init_msg_list         IN  VARCHAR2,
3226    p_commit                IN  VARCHAR2 ,
3227    p_validation_level      IN  NUMBER,
3228    x_return_status         OUT NOCOPY VARCHAR2,
3229    x_msg_count             OUT NOCOPY NUMBER,
3230    x_msg_data              OUT NOCOPY VARCHAR2,
3231    p_transaction_rec       IN OUT NOCOPY transaction_rec_type
3232   ) IS
3233    l_api_name          CONSTANT  VARCHAR2(30) := 'GLOBAL_DOCUMENT_UPDATE';
3234    l_api_version       CONSTANT  NUMBER := 1.0;
3235    l_return_status               VARCHAR2(30);
3236    l_validation_status           ZX_API_PUB.validation_status_tbl_type;
3237    l_init_msg_list               VARCHAR2(1);
3238 
3239  BEGIN
3240    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3241      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
3242    END IF;
3243 
3244    /*--------------------------------------------------+
3245     |   Standard start of API savepoint                |
3246     +--------------------------------------------------*/
3247     SAVEPOINT global_document_update_PVT;
3248 
3249     /*--------------------------------------------------+
3250      |   Standard call to check for call compatibility  |
3251      +--------------------------------------------------*/
3252 
3253      IF NOT FND_API.Compatible_API_Call(l_api_version,
3254                                         p_api_version,
3255                                         l_api_name,
3256                                         G_PKG_NAME
3257                                         ) THEN
3258        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3259      END IF;
3260 
3261     /*--------------------------------------------------------------+
3262      |   Initialize message list if p_init_msg_list is set to TRUE  |
3263      +--------------------------------------------------------------*/
3264      IF p_init_msg_list is null THEN
3265        l_init_msg_list := FND_API.G_FALSE;
3266      ELSE
3267 	   l_init_msg_list := p_init_msg_list;
3268 	 END IF;
3269 
3270      IF FND_API.to_Boolean(l_init_msg_list) THEN
3271        FND_MSG_PUB.initialize;
3272      END IF;
3273 
3274      /*-----------------------------------------+
3275       |   Initialize return status to SUCCESS   |
3276       +-----------------------------------------*/
3277 
3278       x_return_status := FND_API.G_RET_STS_SUCCESS;
3279 
3280       /*-----------------------------------------+
3281       |   Populate Global Variable              |
3282       +-----------------------------------------*/
3283        G_PUB_SRVC := l_api_name;
3284        G_DATA_TRANSFER_MODE := 'PLS';
3285        G_EXTERNAL_API_CALL  := 'N';
3286 
3287       /*-----------------------------------------------+
3288        |   Calling Global Document Update with         |
3289        |   with validation status                      |
3290        +-----------------------------------------------*/
3291 
3292        ZX_API_PUB.global_document_update(p_api_version,
3293                                          l_init_msg_list,
3294                                          p_commit,
3298                                          x_msg_data,
3295                                          p_validation_level,
3296                                          l_return_status,
3297                                          x_msg_count,
3299                                          p_transaction_rec,
3300                                          l_validation_status
3301                                          );
3302 
3303        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3304          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3305            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');
3306          END IF;
3307          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3308            RAISE FND_API.G_EXC_ERROR;
3309          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3310            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3311          END IF;
3312        END IF;
3313 
3314        IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3315          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
3316        END IF;
3317 
3318        EXCEPTION
3319        WHEN FND_API.G_EXC_ERROR THEN
3320          ROLLBACK TO global_document_update_PVT;
3321          x_return_status := FND_API.G_RET_STS_ERROR ;
3322         /*---------------------------------------------------------+
3323          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3324          | in the message stack. If there is only one message in   |
3325          | the stack it retrieves this message                     |
3326          +---------------------------------------------------------*/
3327          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3328                                    p_count   =>      x_msg_count,
3329                                    p_data    =>      x_msg_data
3330                                    );
3331          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3332            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3333          END IF;
3334 
3335        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3336          ROLLBACK TO global_document_update_PVT;
3337          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3338          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3339          FND_MSG_PUB.Add;
3340         /*---------------------------------------------------------+
3341          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3342          | in the message stack. If there is only one message in   |
3343          | the stack it retrieves this message                     |
3344          +---------------------------------------------------------*/
3345          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3346                                    p_count       =>      x_msg_count,
3347                                    p_data        =>      x_msg_data
3348                                    );
3349          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3350            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3351          END IF;
3352 
3353         WHEN OTHERS THEN
3354            ROLLBACK TO global_document_update_PVT;
3355            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3356            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3357            FND_MSG_PUB.Add;
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 
3368            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3369              FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3370            END IF;
3371   END global_document_update;
3372 
3373 /* ======================================================================*
3374  | PROCEDURE global_document_update :                                    |
3375  * ======================================================================*/
3376 
3377  PROCEDURE global_document_update
3378  ( p_api_version           IN            NUMBER,
3379    p_init_msg_list         IN            VARCHAR2,
3380    p_commit                IN            VARCHAR2,
3381    p_validation_level      IN            NUMBER,
3382    x_return_status         OUT NOCOPY    VARCHAR2,
3383    x_msg_count             OUT NOCOPY    NUMBER,
3384    x_msg_data              OUT NOCOPY    VARCHAR2,
3385    p_transaction_rec       IN OUT NOCOPY transaction_rec_type,
3386    p_validation_status     IN            ZX_API_PUB.validation_status_tbl_type
3387   ) IS
3388    l_api_name          CONSTANT  VARCHAR2(30) := 'GLOBAL_DOCUMENT_UPDATE';
3389    l_api_version       CONSTANT  NUMBER := 1.0;
3390    l_event_class_rec             event_class_rec_type;
3391    l_return_status               VARCHAR2(30);
3392    l_context_info_rec            context_info_rec_type;
3393    l_init_msg_list               VARCHAR2(1);
3394    l_upg_trx_info_rec            ZX_ON_FLY_TRX_UPGRADE_PKG.zx_upg_trx_info_rec_type;
3395    l_lines_det_rec    zx_lines_det_factors%rowtype;
3396  BEGIN
3397    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3398      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
3399    END IF;
3400 
3401    /*--------------------------------------------------+
3405 
3402     |   Standard start of API savepoint                |
3403     +--------------------------------------------------*/
3404     SAVEPOINT global_document_update_PVT;
3406    /*--------------------------------------------------+
3407     |   Standard call to check for call compatibility  |
3408     +--------------------------------------------------*/
3409     IF NOT FND_API.Compatible_API_Call( l_api_version,
3410                                         p_api_version,
3411                                         l_api_name,
3412                                         G_PKG_NAME
3413                                        ) THEN
3414        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3415     END IF;
3416 
3417     /*--------------------------------------------------------------+
3418      |   Initialize message list if p_init_msg_list is set to TRUE  |
3419      +--------------------------------------------------------------*/
3420      IF p_init_msg_list is null THEN
3421        l_init_msg_list := FND_API.G_FALSE;
3422      ELSE
3423 	   l_init_msg_list := p_init_msg_list;
3424 	 END IF;
3425 
3426      IF FND_API.to_Boolean(l_init_msg_list) THEN
3427        FND_MSG_PUB.initialize;
3428      END IF;
3429 
3430     /*-----------------------------------------+
3431      |   Initialize return status to SUCCESS   |
3432      +-----------------------------------------*/
3433      x_return_status := FND_API.G_RET_STS_SUCCESS;
3434 
3435      /*-----------------------------------------+
3436       |   Populate Global Variable              |
3437       +-----------------------------------------*/
3438       G_PUB_SRVC := l_api_name;
3439       G_DATA_TRANSFER_MODE := 'PLS';
3440       G_EXTERNAL_API_CALL  := 'N';
3441 
3442 
3443       /*------------------------------------------------------+
3444        |   Validate Input Paramerters and Fetch Tax Options   |
3445        +------------------------------------------------------*/
3446        ZX_VALID_INIT_PARAMS_PKG.global_document_update(x_return_status   => l_return_status,
3447                                                        p_event_class_rec => l_event_class_rec,
3448                                                        p_trx_rec         => p_transaction_rec
3449                                                       );
3450 
3451        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3452          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3453            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');
3454          END IF;
3455          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3456            RAISE FND_API.G_EXC_ERROR;
3457          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3458            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3459          END IF;
3460        END IF;
3461 
3462 
3463 
3464       /*------------------------------------------------+
3465        |  Update zx_lines_det_factors                   |
3466        +------------------------------------------------*/
3467        IF l_event_class_rec.tax_event_type_code IN ('DELETE','PURGE') THEN
3468           -- Bug 5200373: Incarporated missing hook to take snapshot of zx_lines_det_factors so that
3469           --              upgraded R11i partner softwares can handle the header level document delete
3470           --              sceanrio.
3471           zx_r11i_tax_partner_pkg.copy_trx_line_for_ptnr_bef_upd(NULL
3472                                        , l_event_class_rec
3473                                        , NULL
3474                                        , 'N'
3475                                        , NULL
3476                                        , NULL
3477                                        , l_return_status);
3478           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3479              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3480                 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');
3481              END IF;
3482              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3483                 RAISE FND_API.G_EXC_ERROR;
3484              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3485                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3486              END IF;
3487           END IF;
3488 
3489           -- Bug 5237826: Explicitly check if the resource is busy prior to making the delete. Resource can
3490           --              become busy if calling products fail to issue a COMMIT or ROLLBACK immediately
3491           --              after call to this API.
3492           BEGIN
3493             /*Lock trx line det factors for delete*/
3494              SELECT *
3495               INTO l_lines_det_rec
3496               FROM ZX_LINES_DET_FACTORS
3497              WHERE application_id   = p_transaction_rec.application_id
3498                AND entity_code      = p_transaction_rec.entity_code
3499                AND event_class_code = p_transaction_rec.event_class_code
3500                AND trx_id           = p_transaction_rec.trx_id
3501                AND rownum           = 1
3502              FOR UPDATE NOWAIT;
3503           EXCEPTION
3504             WHEN NO_DATA_FOUND THEN
3505               NULL;
3506             WHEN OTHERS THEN
3507                IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
3508                  FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name,SQLERRM);
3509                END IF;
3510                IF (SQLCODE = 54) THEN
3511                   FND_MESSAGE.SET_NAME('ZX','ZX_RESOURCE_BUSY');
3512                   l_context_info_rec.APPLICATION_ID   := p_transaction_rec.APPLICATION_ID;
3516                   ZX_API_PUB.add_msg( p_context_info_rec => l_context_info_rec );
3513                   l_context_info_rec.ENTITY_CODE      := p_transaction_rec.ENTITY_CODE;
3514                   l_context_info_rec.EVENT_CLASS_CODE := p_transaction_rec.EVENT_CLASS_CODE;
3515                   l_context_info_rec.TRX_ID           := p_transaction_rec.TRX_ID;
3517                   RAISE FND_API.G_EXC_ERROR;
3518                ELSE
3519                   RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3520                END IF;
3521           END;
3522 
3523           DELETE from ZX_LINES_DET_FACTORS
3524            WHERE APPLICATION_ID  = p_transaction_rec.APPLICATION_ID
3525              AND ENTITY_CODE       = p_transaction_rec.ENTITY_CODE
3526              AND EVENT_CLASS_CODE  = p_transaction_rec.EVENT_CLASS_CODE
3527              AND TRX_ID            = p_transaction_rec.TRX_ID;
3528 
3529        ELSIF l_event_class_rec.tax_event_type_code NOT IN ('RELEASE_HOLD') THEN
3530           UPDATE ZX_LINES_DET_FACTORS
3531              SET EVENT_TYPE_CODE     = l_event_class_rec.event_type_code,
3532                  TAX_EVENT_TYPE_CODE = l_event_class_rec.tax_event_type_code,
3533                  DOC_EVENT_STATUS    = l_event_class_rec.doc_status_code
3534              WHERE APPLICATION_ID    = p_transaction_rec.APPLICATION_ID
3535                AND ENTITY_CODE       = p_transaction_rec.ENTITY_CODE
3536                AND EVENT_CLASS_CODE  = p_transaction_rec.EVENT_CLASS_CODE
3537                AND TRX_ID            = p_transaction_rec.TRX_ID;
3538 
3539           --Bugfix 4486946 -Call on the fly upgrade if the transaction if not found
3540           IF sql%notfound THEN
3541             l_upg_trx_info_rec.application_id   := l_event_class_rec.application_id;
3542             l_upg_trx_info_rec.entity_code      := l_event_class_rec.entity_code;
3543             l_upg_trx_info_rec.event_class_code := l_event_class_rec.event_class_code;
3544             l_upg_trx_info_rec.trx_id           := l_event_class_rec.trx_id;
3545             ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(p_upg_trx_info_rec   =>  l_upg_trx_info_rec,
3546                                                          x_return_status      =>  l_return_status
3547                                                         );
3548             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3549               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3550                 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');
3551               END IF;
3552               IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3553                 RAISE FND_API.G_EXC_ERROR;
3554               ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3555                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3556               END IF;
3557             END IF;
3558             UPDATE ZX_LINES_DET_FACTORS
3559                SET EVENT_TYPE_CODE     = l_event_class_rec.event_type_code,
3560                    TAX_EVENT_TYPE_CODE = l_event_class_rec.tax_event_type_code,
3561                    DOC_EVENT_STATUS    = l_event_class_rec.doc_status_code
3562              WHERE APPLICATION_ID    = p_transaction_rec.APPLICATION_ID
3563                AND ENTITY_CODE       = p_transaction_rec.ENTITY_CODE
3564                AND EVENT_CLASS_CODE  = p_transaction_rec.EVENT_CLASS_CODE
3565                AND TRX_ID            = p_transaction_rec.TRX_ID;
3566           END IF; --sql%notfound
3567         END IF; --not in (RELEASE_HOLD)
3568         --Bugfix 4486946 - on-the-fly upgrade end
3569 
3570       /*--------------------------------------------------+
3571        |   Call to Service Type Document Level Changes    |
3572        +--------------------------------------------------*/
3573        --Bug 4463450: Do not carry out any reversals for tax lines and dists for
3574        --event classes not reportable for tax
3575        IF l_event_class_rec.tax_event_type_code = 'CANCEL' AND
3576           l_event_class_rec.tax_reporting_flag = 'N'  THEN
3577           null;
3578        ELSE
3579 
3580          ZX_SRVC_TYP_PKG.document_level_changes(x_return_status          => l_return_status,
3581                                                 p_event_class_rec        => l_event_class_rec,
3582                                                 p_tax_hold_released_code => p_validation_status
3583                                                );
3584 
3585          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3586            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3587              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');
3588            END IF;
3589            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3590              RAISE FND_API.G_EXC_ERROR;
3591            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3592              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3593            END IF;
3594          END IF;
3595        END IF;
3596 
3597 
3598        IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3599          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
3600        END IF;
3601 
3602        EXCEPTION
3603        WHEN FND_API.G_EXC_ERROR THEN
3604          ROLLBACK TO global_document_update_PVT;
3605          x_return_status := FND_API.G_RET_STS_ERROR ;
3606          /*---------------------------------------------------------+
3607           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3608           | in the message stack. If there is only one message in   |
3609           | the stack it retrieves this message                     |
3610           +---------------------------------------------------------*/
3611           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3612                                     p_count       =>      x_msg_count,
3613                                     p_data        =>      x_msg_data
3614                                    );
3615          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3616            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3617          END IF;
3618 
3619         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3620           ROLLBACK TO global_document_update_PVT;
3621           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3622           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3623           FND_MSG_PUB.Add;
3624          /*---------------------------------------------------------+
3625           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3626           | in the message stack. If there is only one message in   |
3627           | the stack it retrieves this message                     |
3628           +---------------------------------------------------------*/
3629           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3630                                     p_count       =>      x_msg_count,
3631                                     p_data        =>      x_msg_data
3632                                    );
3633 
3634           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3635             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3636           END IF;
3637 
3638         WHEN OTHERS THEN
3639            ROLLBACK TO global_document_update_PVT;
3640            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3641            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3642            FND_MSG_PUB.Add;
3643          /*---------------------------------------------------------+
3644           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3645           | in the message stack. If there is only one message in   |
3646           | the stack it retrieves this message                     |
3647           +---------------------------------------------------------*/
3648           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3649                                     p_count       =>      x_msg_count,
3650                                     p_data        =>      x_msg_data
3651                                    );
3652            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3653              FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3654            END IF;
3655  END global_document_update;
3656 
3657 
3658 /* ======================================================================*
3659  | PROCEDURE Mark_tax_lines_deleted :                                    |
3660  * ======================================================================*/
3661 
3662  PROCEDURE Mark_tax_lines_deleted
3663  ( p_api_version           IN            NUMBER,
3664    p_init_msg_list         IN            VARCHAR2,
3665    p_commit                IN            VARCHAR2,
3666    p_validation_level      IN            NUMBER,
3667    x_return_status         OUT NOCOPY    VARCHAR2 ,
3668    x_msg_count             OUT NOCOPY    NUMBER ,
3669    x_msg_data              OUT NOCOPY    VARCHAR2 ,
3670    p_transaction_line_rec  IN OUT NOCOPY transaction_line_rec_type
3671   ) IS
3672    l_api_name          CONSTANT  VARCHAR2(30) := 'MARK_TAX_LINES_DELETED';
3673    l_api_version       CONSTANT  NUMBER := 1.0;
3674    l_return_status               VARCHAR2(30);
3675    l_init_msg_list               VARCHAR2(1);
3676    l_event_type_code             VARCHAR2(30);
3677  BEGIN
3678    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3679      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
3680    END IF;
3681 
3682    /*--------------------------------------------------+
3683     |   Standard start of API savepoint                |
3684     +--------------------------------------------------*/
3685     SAVEPOINT mark_tax_lines_del_PVT;
3686 
3687     /*--------------------------------------------------+
3688      |   Standard call to check for call compatibility  |
3689      +--------------------------------------------------*/
3690      IF NOT FND_API.Compatible_API_Call(l_api_version,
3691                                         p_api_version,
3692                                         l_api_name,
3693                                         G_PKG_NAME
3694                                         ) THEN
3695         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3696       END IF;
3697 
3698      /*--------------------------------------------------------------+
3699       |   Initialize message list if p_init_msg_list is set to TRUE  |
3700       +--------------------------------------------------------------*/
3701       IF p_init_msg_list is null THEN
3702         l_init_msg_list := FND_API.G_FALSE;
3703       ELSE
3704 	    l_init_msg_list := p_init_msg_list;
3705 	  END IF;
3706 
3707       IF FND_API.to_Boolean(l_init_msg_list) THEN
3708         FND_MSG_PUB.initialize;
3709       END IF;
3710 
3711       /*-----------------------------------------+
3712        |   Initialize return status to SUCCESS   |
3713        +-----------------------------------------*/
3714        x_return_status := FND_API.G_RET_STS_SUCCESS;
3715 
3716 
3717        /*-----------------------------------------+
3718         |   Populate Global Variable              |
3719         +-----------------------------------------*/
3720         G_PUB_SRVC := l_api_name;
3721         G_DATA_TRANSFER_MODE := 'PLS';
3722         G_EXTERNAL_API_CALL  := 'N';
3723 
3724        /*------------------------------------------------------+
3725         |   Validate Input Paramerters and Fetch Tax Options   |
3726         +------------------------------------------------------*/
3730 
3727         ZX_VALID_INIT_PARAMS_PKG.mark_tax_lines_deleted( x_return_status        => l_return_status,
3728                                                          p_transaction_line_rec => p_transaction_line_rec
3729                                                        );
3731         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3732           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3733             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');
3734           END IF;
3735           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3736             RAISE FND_API.G_EXC_ERROR;
3737           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3738             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3739           END IF;
3740         END IF;
3741 
3742         /*--------------------------------------------------+
3743          |   Call Service Type Mark Tax Lines Deleted       |
3744          +--------------------------------------------------*/
3745          ZX_SRVC_TYP_PKG.mark_tax_lines_deleted( p_trx_line_rec       => p_transaction_line_rec,
3746                                                  x_return_status      => l_return_status
3747                                                );
3748 
3749          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3750            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3751              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');
3752            END IF;
3753            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3754              RAISE FND_API.G_EXC_ERROR;
3755            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3756              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3757            END IF;
3758          END IF;
3759         /*--------------------------------------------------+
3760          |   Update line level action to  Deleted           |
3761          +--------------------------------------------------*/
3762          IF p_transaction_line_rec.event_type_code is null THEN
3763            BEGIN
3764              SELECT event_type_code
3765                INTO l_event_type_code
3766                FROM ZX_EVNT_TYP_MAPPINGS
3767               WHERE application_id      = p_transaction_line_rec.application_id
3768                 AND entity_code         = p_transaction_line_rec.entity_code
3769                 AND event_class_code    = p_transaction_line_rec.event_class_code
3770                 AND tax_event_type_code = 'UPDATE';
3771            EXCEPTION
3772               WHEN NO_DATA_FOUND  THEN
3773                  IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3774                    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':Event information passed is incorrect');
3775                  END IF;
3776                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3777            END;
3778          END IF;
3779 
3780          BEGIN
3781            UPDATE ZX_LINES_DET_FACTORS
3782              SET LINE_LEVEL_ACTION   = 'DELETE',
3783                  EVENT_TYPE_CODE     = nvl(p_transaction_line_rec.event_type_code, l_event_type_code),
3784                  TAX_EVENT_TYPE_CODE = 'UPDATE'
3785            WHERE application_id   = p_transaction_line_rec.application_id
3786              AND entity_code      = p_transaction_line_rec.entity_code
3787              AND event_class_code = p_transaction_line_rec.event_class_code
3788              AND trx_id           = p_transaction_line_rec.trx_id
3789              AND trx_line_id      = p_transaction_line_rec.trx_line_id;
3790            EXCEPTION
3791               WHEN NO_DATA_FOUND  THEN
3792                  IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3793                    FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||':Event information passed is incorrect');
3794                  END IF;
3795                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3796            END;
3797 
3798 
3799        IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3800           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
3801        END IF;
3802 
3803     /* Bug 3704651 - No need to uptake error handling as it is a PLS API*/
3804        EXCEPTION
3805        WHEN FND_API.G_EXC_ERROR THEN
3806          ROLLBACK TO mark_tax_lines_del_PVT;
3807          x_return_status := FND_API.G_RET_STS_ERROR ;
3808          /*---------------------------------------------------------+
3809           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3810           | in the message stack. If there is only one message in   |
3811           | the stack it retrieves this message                     |
3812           +---------------------------------------------------------*/
3813           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3814                                     p_count  => x_msg_count,
3815                                     p_data   => x_msg_data
3816                                     );
3817          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3818            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3819          END IF;
3820 
3821         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3822           ROLLBACK TO mark_tax_lines_del_PVT;
3823           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3824           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3825           FND_MSG_PUB.Add;
3826          /*---------------------------------------------------------+
3827           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3831           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3828           | in the message stack. If there is only one message in   |
3829           | the stack it retrieves this message                     |
3830           +---------------------------------------------------------*/
3832                                     p_count  => x_msg_count,
3833                                     p_data   => x_msg_data
3834                                     );
3835 
3836           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3837             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3838           END IF;
3839 
3840         WHEN OTHERS THEN
3841            ROLLBACK TO mark_tax_lines_del_PVT;
3842            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3843            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
3844            FND_MSG_PUB.Add;
3845           /*---------------------------------------------------------+
3846            | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
3847            | in the message stack. If there is only one message in   |
3848            | the stack it retrieves this message                     |
3849            +---------------------------------------------------------*/
3850            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
3851                                      p_count   => x_msg_count,
3852                                      p_data    => x_msg_data
3853                                      );
3854            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
3855              FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
3856            END IF;
3857 
3858  END mark_tax_lines_deleted;
3859 
3860 
3861 /* ======================================================================*
3862  | PROCEDURE reverse_document : Reverses the base document               |
3863  | GTT involved : ZX_REV_TRX_HEADERS_GT, ZX_REVERSE_TRX_LINES_GT         |
3864  | This API has been coded with the assumption that it will receive only |
3865  | only document in a call                                               |
3866  * ======================================================================*/
3867  PROCEDURE reverse_document
3868  ( p_api_version            IN         NUMBER,
3869    p_init_msg_list          IN         VARCHAR2,
3870    p_commit                 IN         VARCHAR2,
3871    p_validation_level       IN         NUMBER,
3872    x_return_status          OUT NOCOPY VARCHAR2 ,
3873    x_msg_count              OUT NOCOPY NUMBER ,
3874    x_msg_data               OUT NOCOPY VARCHAR2
3875   ) IS
3876    l_api_name          CONSTANT  VARCHAR2(30) := 'REVERSE_DOCUMENT';
3877    l_api_version       CONSTANT  NUMBER := 1.0;
3878    l_return_status               VARCHAR2(30);
3879    l_event_class_rec             event_class_rec_type;
3880    l_context_info_rec            context_info_rec_type;
3881    l_init_msg_list               VARCHAR2(1);
3882 
3883  BEGIN
3884    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3885      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
3886    END IF;
3887 
3888    /*--------------------------------------------------+
3889     |   Standard start of API savepoint                |
3890     +--------------------------------------------------*/
3891     SAVEPOINT reverse_document_PVT;
3892 
3893    /*--------------------------------------------------+
3894     |   Standard call to check for call compatibility  |
3895     +--------------------------------------------------*/
3896 
3897     IF NOT FND_API.Compatible_API_Call(l_api_version,
3898                                        p_api_version,
3899                                        l_api_name,
3900                                        G_PKG_NAME
3901                                        ) THEN
3902       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3903     END IF;
3904 
3905    /*--------------------------------------------------------------+
3906     |   Initialize message list if p_init_msg_list is set to TRUE  |
3907     +--------------------------------------------------------------*/
3908      IF p_init_msg_list is null THEN
3909        l_init_msg_list := FND_API.G_FALSE;
3910      ELSE
3911 	   l_init_msg_list := p_init_msg_list;
3912 	 END IF;
3913 
3914      IF FND_API.to_Boolean(l_init_msg_list) THEN
3915        FND_MSG_PUB.initialize;
3916      END IF;
3917 
3918    /*-----------------------------------------+
3919     |   Initialize return status to SUCCESS   |
3920     +-----------------------------------------*/
3921     x_return_status := FND_API.G_RET_STS_SUCCESS;
3922 
3923     /*-----------------------------------------+
3924      |   Populate Global Variable              |
3925      +-----------------------------------------*/
3926      G_PUB_SRVC := l_api_name;
3927      G_DATA_TRANSFER_MODE := 'TAB';
3928      G_EXTERNAL_API_CALL  := 'N';
3929 
3930      /*-----------------------------------------+
3931      | Get the event id for the whole document |
3932      +-----------------------------------------*/
3933      select ZX_LINES_DET_FACTORS_S.nextval
3934       into l_event_class_rec.event_id
3935       from dual;
3936 
3937      /*------------------------------------------------------+
3938      |   Validate Input Paramerters and Fetch Tax Options   |
3939      +------------------------------------------------------*/
3940      ZX_VALID_INIT_PARAMS_PKG.reverse_document(x_return_status   => l_return_status,
3941                                                p_event_class_rec => l_event_class_rec
3942                                               );
3943 
3944      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3945        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3949          RAISE FND_API.G_EXC_ERROR;
3946          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');
3947        END IF;
3948        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3950        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3951          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3952        END IF;
3953      END IF;
3954 
3955     /*-----------------------------------------+
3956      |   Bug 5662795                           |
3957      +-----------------------------------------*/
3958      set_ptnr_srvc_subscr_flag (p_event_class_rec => NULL,
3959                                 x_return_status   => l_return_status
3960                                );
3961 
3962     /*--------------------------------------------------+
3963      |   Call Service Reverse Type Document             |
3964      +--------------------------------------------------*/
3965      ZX_SRVC_TYP_PKG.reverse_document(p_event_class_rec => l_event_class_rec,
3966                                       x_return_status   => l_return_status
3967                                      );
3968 
3969      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3970        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
3971          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');
3972        END IF;
3973        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
3974          RAISE FND_API.G_EXC_ERROR;
3975        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
3976          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3977        END IF;
3978      END IF;
3979 
3980      --Delete from the global structures so that there are no hanging/redundant
3981      --records sitting there
3982      ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
3983 
3984      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
3985        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
3986      END IF;
3987 
3988     EXCEPTION
3989       WHEN FND_API.G_EXC_ERROR THEN
3990         ROLLBACK TO reverse_document_PVT;
3991         x_return_status := FND_API.G_RET_STS_ERROR ;
3992         --Call API to dump into zx_errors_gt if not already inserted.
3993         DUMP_MSG;
3994         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
3995           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
3996         END IF;
3997 
3998       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3999         ROLLBACK TO reverse_document_PVT;
4000         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4001         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4002         FND_MSG_PUB.Add;
4003        /*---------------------------------------------------------+
4004         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4005         | in the message stack. If there is only one message in   |
4006         | the stack it retrieves this message                     |
4007         +---------------------------------------------------------*/
4008         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4009                                   p_count   => x_msg_count,
4010                                   p_data    => x_msg_data
4011                                   );
4012 
4013         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4014           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4015         END IF;
4016 
4017       WHEN OTHERS THEN
4018          ROLLBACK TO reverse_document_PVT;
4019          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4020          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4021          FND_MSG_PUB.Add;
4022        /*---------------------------------------------------------+
4023         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4024         | in the message stack. If there is only one message in   |
4025         | the stack it retrieves this message                     |
4026         +---------------------------------------------------------*/
4027         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4028                                   p_count   => x_msg_count,
4029                                   p_data    => x_msg_data
4030                                   );
4031 
4032          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
4033            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
4034          END IF;
4035  END reverse_document;
4036 
4037 
4038 /* ======================================================================*
4039  | PROCEDURE Reverse_distributions : Reverses the base distribution      |
4040  | GTT involved : ZX_REVERSE_DIST_GT                                     |
4041  * ======================================================================*/
4042  PROCEDURE reverse_distributions
4043  ( p_api_version            IN         NUMBER,
4044    p_init_msg_list          IN         VARCHAR2,
4045    p_commit                 IN         VARCHAR2,
4046    p_validation_level       IN         NUMBER,
4047    x_return_status          OUT NOCOPY VARCHAR2 ,
4048    x_msg_count              OUT NOCOPY NUMBER ,
4049    x_msg_data               OUT NOCOPY VARCHAR2
4050   ) IS
4051    l_api_name          CONSTANT  VARCHAR2(30) := 'REVERSE_DISTRIBUTIONS';
4052    l_api_version       CONSTANT  NUMBER := 1.0;
4053    l_return_status               VARCHAR2(30);
4054    l_context_info_rec            context_info_rec_type;
4055    l_init_msg_list               VARCHAR2(1);
4056 
4057  BEGIN
4058    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4059      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
4063    |   Standard start of API savepoint                |
4060    END IF;
4061 
4062   /*--------------------------------------------------+
4064    +--------------------------------------------------*/
4065    SAVEPOINT reverse_distributions_PVT;
4066 
4067   /*--------------------------------------------------+
4068    |   Standard call to check for call compatibility  |
4069    +--------------------------------------------------*/
4070    IF NOT FND_API.Compatible_API_Call( l_api_version,
4071                                        p_api_version,
4072                                        l_api_name,
4073                                        G_PKG_NAME
4074                                        ) THEN
4075       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4076     END IF;
4077 
4078    /*--------------------------------------------------------------+
4079     |   Initialize message list if p_init_msg_list is set to TRUE  |
4080     +--------------------------------------------------------------*/
4081      IF p_init_msg_list is null THEN
4082        l_init_msg_list := FND_API.G_FALSE;
4083      ELSE
4084 	   l_init_msg_list := p_init_msg_list;
4085 	 END IF;
4086 
4087      IF FND_API.to_Boolean(l_init_msg_list) THEN
4088        FND_MSG_PUB.initialize;
4089      END IF;
4090 
4091    /*-----------------------------------------+
4092     |   Initialize return status to SUCCESS   |
4093     +-----------------------------------------*/
4094     x_return_status := FND_API.G_RET_STS_SUCCESS;
4095 
4096 
4097    /*-----------------------------------------+
4098     |   Populate Global Variable              |
4099     +-----------------------------------------*/
4100     G_PUB_SRVC := l_api_name;
4101     G_DATA_TRANSFER_MODE := 'TAB';
4102     G_EXTERNAL_API_CALL  := 'N';
4103 
4104    /*------------------------------------------------------+
4105     |   Validate Input Paramerters and Fetch Tax Options   |
4106     +------------------------------------------------------*/
4107     IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4108       FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
4109         'Validating Reversing Document Distributions'
4110           );
4111     END IF;
4112 
4113     ZX_VALID_INIT_PARAMS_PKG.reverse_distributions(x_return_status  =>l_return_status);
4114 
4115     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4116       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4117         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');
4118       END IF;
4119       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4120         RAISE FND_API.G_EXC_ERROR;
4121       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4122         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4123       END IF;
4124     END IF;
4125 
4126     /*--------------------------------------------------+
4127      |   Call Service Reverse Distributions             |
4128      +--------------------------------------------------*/
4129      ZX_SRVC_TYP_PKG.reverse_distributions(x_return_status   => l_return_status );
4130 
4131      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4132        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4133          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');
4134        END IF;
4135        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4136          RAISE FND_API.G_EXC_ERROR;
4137        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4138          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4139        END IF;
4140      END IF;
4141 
4142      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4143        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
4144      END IF;
4145 
4146      EXCEPTION
4147        WHEN FND_API.G_EXC_ERROR THEN
4148          ROLLBACK TO reverse_distributions_PVT;
4149          x_return_status := FND_API.G_RET_STS_ERROR ;
4150          --Call API to dump into zx_errors_gt
4151          DUMP_MSG;
4152          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4153             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4154          END IF;
4155 
4156        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4157          ROLLBACK TO reverse_distributions_PVT;
4158          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4159          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4160          FND_MSG_PUB.ADD;
4161         /*---------------------------------------------------------+
4162          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4163          | in the message stack. If there is only one message in   |
4164          | the stack it retrieves this message                     |
4165          +---------------------------------------------------------*/
4166          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4167                                    p_count   => x_msg_count,
4168                                    p_data    => x_msg_data
4169                                    );
4170          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4171            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4172          END IF;
4173 
4174        WHEN OTHERS THEN
4175           ROLLBACK TO reverse_distributions_PVT;
4176           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4177           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4178           FND_MSG_PUB.ADD;
4179         /*---------------------------------------------------------+
4180          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4184          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4181          | in the message stack. If there is only one message in   |
4182          | the stack it retrieves this message                     |
4183          +---------------------------------------------------------*/
4185                                    p_count   => x_msg_count,
4186                                    p_data    => x_msg_data
4187                                    );
4188           IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
4189             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
4190           END IF;
4191  END reverse_distributions;
4192 
4193 /* ================================================================================*
4194  | PROCEDURE Reverse_document_distribution: Reverses the base reversing event class|
4195  | GTT involved : ZX_REV_TRX_HEADERS_GT, ZX_REVERSE_TRX_LINES_GT                   |
4196  * ================================================================================*/
4197  PROCEDURE reverse_document_distribution
4198  ( p_api_version            IN  NUMBER,
4199    p_init_msg_list          IN  VARCHAR2,
4200    p_commit                 IN  VARCHAR2,
4201    p_validation_level       IN  NUMBER,
4202    x_return_status          OUT NOCOPY VARCHAR2 ,
4203    x_msg_count              OUT NOCOPY NUMBER ,
4204    x_msg_data               OUT NOCOPY VARCHAR2
4205   ) IS
4206    l_api_name          CONSTANT  VARCHAR2(30) := 'REVERSE_DOCUMENT_DISTRIBUTION';
4207    l_api_version       CONSTANT  NUMBER := 1.0;
4208    l_return_status               VARCHAR2(30);
4209    l_event_class_rec             event_class_rec_type;
4210    l_context_info_rec            context_info_rec_type;
4211    l_init_msg_list               VARCHAR2(1);
4212 
4213  BEGIN
4214    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4215      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
4216    END IF;
4217 
4218   /*--------------------------------------------------+
4219    |   Standard start of API savepoint                |
4220    +--------------------------------------------------*/
4221    SAVEPOINT reverse_doc_distribution_PVT;
4222 
4223   /*--------------------------------------------------+
4224    |   Standard call to check for call compatibility  |
4225    +--------------------------------------------------*/
4226    IF NOT FND_API.Compatible_API_Call( l_api_version,
4227                                        p_api_version,
4228                                        l_api_name,
4229                                        G_PKG_NAME
4230                                        ) THEN
4231       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4232     END IF;
4233 
4234   /*--------------------------------------------------------------+
4235    |   Initialize message list if p_init_msg_list is set to TRUE  |
4236    +--------------------------------------------------------------*/
4237    IF p_init_msg_list is null THEN
4238       l_init_msg_list := FND_API.G_FALSE;
4239    ELSE
4240       l_init_msg_list := p_init_msg_list;
4241    END IF;
4242 
4243    IF FND_API.to_Boolean(l_init_msg_list) THEN
4244      FND_MSG_PUB.initialize;
4245    END IF;
4246 
4247    /*-----------------------------------------+
4248    |   Initialize return status to SUCCESS   |
4249    +-----------------------------------------*/
4250    x_return_status := FND_API.G_RET_STS_SUCCESS;
4251 
4252   /*-----------------------------------------+
4253    |   Populate Global Variable              |
4254    +-----------------------------------------*/
4255    G_PUB_SRVC := l_api_name;
4256    G_DATA_TRANSFER_MODE := 'TAB';
4257    G_EXTERNAL_API_CALL  := 'N';
4258 
4259     /*-----------------------------------------+
4260     | Get the event id for the whole document |
4261     +-----------------------------------------*/
4262      select zx_lines_det_factors_s.nextval
4263       into l_event_class_rec.event_id
4264       from dual;
4265 
4266   /*------------------------------------------------------+
4267    |   Validate Input Paramerters and Fetch Tax Options   |
4268    +------------------------------------------------------*/
4269    ZX_VALID_INIT_PARAMS_PKG.reverse_document( x_return_status        => l_return_status ,
4270                                               p_event_class_rec      => l_event_class_rec
4271                                             );
4272 
4273    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4274      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4275        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');
4276      END IF;
4277      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4278        RAISE FND_API.G_EXC_ERROR;
4279      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4280        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4281      END IF;
4282    END IF;
4283 
4284     /*-----------------------------------------+
4285      |   Bug 5662795                           |
4286      +-----------------------------------------*/
4287      set_ptnr_srvc_subscr_flag (p_event_class_rec => NULL,
4288                                 x_return_status   => l_return_status
4289                                );
4290 
4291   /*--------------------------------------------------+
4292    |   Call Service Reverse Document                  |
4293    +--------------------------------------------------*/
4294    ZX_SRVC_TYP_PKG.reverse_document( p_event_class_rec => l_event_class_rec,
4295                                      x_return_status   => l_return_status
4296                                    );
4297 
4298    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4302      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4299      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4300        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');
4301      END IF;
4303        RAISE FND_API.G_EXC_ERROR;
4304      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4305        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4306      END IF;
4307    END IF;
4308 
4309   /*------------------------------------------------------+
4310    |   Validate Input Paramerters and Fetch Tax Options   |
4311    +------------------------------------------------------*/
4312    ZX_VALID_INIT_PARAMS_PKG.reverse_distributions(x_return_status  => l_return_status );
4313 
4314    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4315      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4316        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');
4317      END IF;
4318      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4319        RAISE FND_API.G_EXC_ERROR;
4320      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4321        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4322      END IF;
4323    END IF;
4324   /*--------------------------------------------------+
4325    |   Call Service Reverse Distributions             |
4326    +--------------------------------------------------*/
4327    ZX_SRVC_TYP_PKG.reverse_distributions(x_return_status => l_return_status );
4328 
4329    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4330      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4331        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');
4332      END IF;
4333      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4334        RAISE FND_API.G_EXC_ERROR;
4335      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4336        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4337      END IF;
4338    END IF;
4339 
4340    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4341      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
4342    END IF;
4343 
4344     EXCEPTION
4345       WHEN FND_API.G_EXC_ERROR THEN
4346         ROLLBACK TO reverse_doc_distribution_PVT;
4347         x_return_status := FND_API.G_RET_STS_ERROR ;
4348         --Call API to dump into zx_errors_gt if not already inserted.
4349         DUMP_MSG;
4350         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4351           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4352         END IF;
4353 
4354       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4355         ROLLBACK TO reverse_doc_distribution_PVT;
4356         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4357         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4358         FND_MSG_PUB.ADD;
4359        /*---------------------------------------------------------+
4360         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4361         | in the message stack. If there is only one message in   |
4362         | the stack it retrieves this message                     |
4363         +---------------------------------------------------------*/
4364         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4365                                   p_count   => x_msg_count,
4366                                   p_data    => x_msg_data
4367                                   );
4368         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4369           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4370         END IF;
4371 
4372       WHEN OTHERS THEN
4373         ROLLBACK TO reverse_doc_distribution_PVT;
4374         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
4375         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
4376         FND_MSG_PUB.ADD;
4377        /*---------------------------------------------------------+
4378         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
4379         | in the message stack. If there is only one message in   |
4380         | the stack it retrieves this message                     |
4381         +---------------------------------------------------------*/
4382         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
4383                                   p_count   => x_msg_count,
4384                                   p_data    => x_msg_data
4385                                   );
4386         IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
4387           FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
4388         END IF;
4389 
4390  END reverse_document_distribution;
4391 
4392 /* =======================================================================*
4393  | PROCEDURE  determine_recovery : Calculate the distribution of tax amounts
4394  | into recoverable and/or non-recoverable tax amounts.                   |
4395  | This API also supports processing for multiple event classes           |
4396  | GTT involved : ZX_TRX_HEADERS_GT, ZX_ITM_DISTRIBUTIONS_GT              |
4397  * =======================================================================*/
4398 
4399  PROCEDURE Determine_recovery
4400   ( p_api_version           IN         NUMBER,
4401     p_init_msg_list         IN         VARCHAR2,
4402     p_commit                IN         VARCHAR2,
4403     p_validation_level      IN         NUMBER,
4404     x_return_status         OUT NOCOPY VARCHAR2 ,
4405     x_msg_count             OUT NOCOPY NUMBER ,
4406     x_msg_data              OUT NOCOPY VARCHAR2
4407   ) IS
4408    l_api_name          CONSTANT  VARCHAR2(30) := 'DETERMINE_RECOVERY';
4412    l_context_info_rec            context_info_rec_type;
4409    l_api_version       CONSTANT  NUMBER := 1.0;
4410    l_return_status               VARCHAR2(30);
4411    l_error_buffer                VARCHAR2(1000);
4413    l_event_class_rec             event_class_rec_type;
4414    l_transaction_header_rec      transaction_header_rec_type;
4415    l_index                       BINARY_INTEGER;
4416    l_precedence                  NUMBER_tbl_type;
4417    l_init_msg_list               VARCHAR2(1);
4418    l_event_id                    NUMBER;
4419    l_related_doc_date            DATE;
4420    l_adjusted_doc_date           DATE;
4421    l_trx_date                    DATE;
4422    l_prov_tax_det_date           DATE;
4423    l_effective_date              DATE;
4424    l_call_evnt_cls_options      VARCHAR2(1);
4425    l_record_dist_lines           VARCHAR2(1);
4426 
4427     CURSOR event_classes IS
4428      SELECT distinct
4429            header.event_class_code,
4430            header.application_id,
4431            header.entity_code,
4432            header.internal_organization_id,
4433            evntmap.processing_precedence
4434       FROM ZX_EVNT_CLS_MAPPINGS evntmap,
4435            ZX_TRX_HEADERS_GT header
4436      WHERE header.application_id = evntmap.application_id
4437        AND header.entity_code = evntmap.entity_code
4438        AND header.event_class_code = evntmap.event_class_code
4439    ORDER BY evntmap.processing_precedence;
4440 
4441    CURSOR headers (p_event_class_code VARCHAR2,
4442                    p_application_id   NUMBER,
4443                    p_entity_code      VARCHAR2 ) IS
4444      SELECT INTERNAL_ORGANIZATION_ID,
4445             APPLICATION_ID,
4446             LEGAL_ENTITY_ID,
4447             ENTITY_CODE,
4448             EVENT_TYPE_CODE,
4449             EVENT_CLASS_CODE,
4450             TRX_ID,
4451             QUOTE_FLAG,
4452             ICX_SESSION_ID
4453        FROM ZX_TRX_HEADERS_GT
4454       WHERE event_class_code = p_event_class_code
4455         AND application_id   = p_application_id
4456         AND entity_code      = p_entity_code
4457         AND (validation_check_flag is null OR
4458              validation_check_flag <> 'N');
4459 
4460    -- added for bug fix 5417887
4461     CURSOR c_headers is
4462     SELECT APPLICATION_ID, ENTITY_CODE, EVENT_CLASS_CODE, TRX_ID, ICX_SESSION_ID,
4463            EVENT_TYPE_CODE, TAX_EVENT_TYPE_CODE, DOC_EVENT_STATUS
4464     FROM ZX_TRX_HEADERS_GT;
4465 
4466     l_application_id_tbl     	NUMBER_tbl_type;
4467     l_entity_code_tbl    	VARCHAR2_30_tbl_type;
4468     l_event_class_code_tbl	VARCHAR2_30_tbl_type;
4469     l_trx_id_tbl		NUMBER_tbl_type;
4470     l_icx_session_id_tbl	NUMBER_tbl_type;
4471     l_event_type_code_tbl	VARCHAR2_30_tbl_type;
4472     l_tax_event_type_code_tbl	VARCHAR2_30_tbl_type;
4473     l_doc_event_status_tbl	VARCHAR2_30_tbl_type;
4474 
4475     CURSOR check_trx_line_dist_qty
4476     IS
4477     SELECT  APPLICATION_ID,
4478             ENTITY_CODE,
4479             EVENT_CLASS_CODE,
4480             TRX_ID,
4481             TRX_LINE_ID,
4482             TRX_LEVEL_TYPE
4483     FROM
4484             ZX_ITM_DISTRIBUTIONS_GT
4485     WHERE application_id   = l_event_class_rec.application_id
4486       AND entity_code      = l_event_class_rec.entity_code
4487       AND event_class_code = l_event_class_rec.event_class_code
4488       AND nvl(tax_variance_calc_flag,l_event_class_rec.tax_variance_calc_flag) = 'Y'
4489       AND ref_doc_application_id is not null
4490       AND trx_line_dist_qty is null;
4491 
4492 -- Bug 5516630: Move unit price validation to determine_recovery
4493 
4494     CURSOR check_trx_line_dist_unit_price
4495     IS
4496     SELECT  APPLICATION_ID,
4497             ENTITY_CODE,
4498             EVENT_CLASS_CODE,
4499             TRX_ID,
4500             TRX_LINE_ID,
4501             TRX_LEVEL_TYPE
4502     FROM
4503             ZX_ITM_DISTRIBUTIONS_GT
4504     WHERE application_id   = l_event_class_rec.application_id
4505       AND entity_code      = l_event_class_rec.entity_code
4506       AND event_class_code = l_event_class_rec.event_class_code
4507       AND nvl(tax_variance_calc_flag,l_event_class_rec.tax_variance_calc_flag) = 'Y'
4508       AND ref_doc_application_id is not null
4509       AND unit_price is null;
4510 
4511    -- This cursor is used to update event info on lines det factors
4512    CURSOR  c_event_info
4513    is
4514    SELECT
4515           l_event_id   			EVENT_ID,
4516           h.EVENT_TYPE_CODE 		EVENT_TYPE_CODE,
4517           zxevntmap.TAX_EVENT_TYPE_CODE TAX_EVENT_TYPE_CODE,
4518           zxevnttyp.status_code 	DOC_EVENT_STATUS,
4519           H.application_id  		application_id,
4520           H.entity_code  		entity_code,
4521           h.event_class_code  		event_class_code,
4522           H.trx_id 			trx_id,
4523           H.quote_flag                  quote_flag    -- Bug 5646787
4524    from
4525           ZX_TRX_HEADERS_GT h,
4526           ZX_EVNT_TYP_MAPPINGS zxevntmap,
4527           ZX_EVNT_CLS_TYPS     zxevnttyp
4528    where
4529              zxevntmap.event_class_code = h.event_class_code
4530         AND  zxevntmap.application_id   = h.application_id
4531         AND  zxevntmap.entity_code      = h.entity_code
4532         AND  zxevntmap.event_type_code  = h.event_type_code
4533         AND  zxevnttyp.tax_event_type_code  = zxevntmap.tax_event_type_code
4534         AND  zxevnttyp.tax_event_class_code = zxevntmap.tax_event_class_code
4535         AND  zxevntmap.enabled_flag = 'Y';
4536 
4537 
4538  BEGIN
4539    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
4543    /*--------------------------------------------------+
4540      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
4541    END IF;
4542 
4544    |   Standard start of API savepoint                |
4545    +--------------------------------------------------*/
4546    SAVEPOINT determine_recovery_PVT;
4547 
4548   /*--------------------------------------------------+
4549    |   Standard call to check for call compatibility  |
4550    +--------------------------------------------------*/
4551    IF NOT FND_API.Compatible_API_Call( l_api_version,
4552                                        p_api_version,
4553                                        l_api_name,
4554                                        G_PKG_NAME
4555                                        ) THEN
4556      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4557    END IF;
4558 
4559   /*--------------------------------------------------------------+
4560    |   Initialize message list if p_init_msg_list is set to TRUE  |
4561    +--------------------------------------------------------------*/
4562      IF p_init_msg_list is null THEN
4563        l_init_msg_list := FND_API.G_FALSE;
4564      ELSE
4565 	   l_init_msg_list := p_init_msg_list;
4566 	 END IF;
4567 
4568      IF FND_API.to_Boolean(l_init_msg_list) THEN
4569        FND_MSG_PUB.initialize;
4570      END IF;
4571 
4572   /*-----------------------------------------+
4573    |   Initialize return status to SUCCESS   |
4574    +-----------------------------------------*/
4575 
4576    x_return_status := FND_API.G_RET_STS_SUCCESS;
4577 
4578   /*-----------------------------------------+
4579    |   Populate Global Variable              |
4580    +-----------------------------------------*/
4581    G_PUB_SRVC := l_api_name;
4582    G_DATA_TRANSFER_MODE := 'TAB';
4583    G_EXTERNAL_API_CALL  := 'N';
4584 
4585    --Call TDS process to initialise distributions for previous calls to determine recovery
4586    --if any
4587    ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (p_event_class_rec => NULL,
4588                                             p_init_level      => 'TAX_DISTRIBUTION',
4589                                             x_return_status   => l_return_status
4590                                             );
4591 
4592     l_call_evnt_cls_options := 'Y';
4593 
4594     /*-----------------------------------------+
4595     | Get the event id for the whole document |
4596     +-----------------------------------------*/
4597     select ZX_LINES_DET_FACTORS_S.nextval
4598     into l_event_id
4599     from dual;
4600 
4601   /*------------------------------------------------+
4602    |  Update zx_lines_det_factors                   |
4603    +------------------------------------------------*/
4604 
4605    FOR c_rec in c_event_info loop
4606       IF c_rec.quote_flag <> 'Y' THEN     -- Bug 5646787
4607          UPDATE ZX_LINES_DET_FACTORS  D
4608             SET  EVENT_ID = c_rec.EVENT_ID,
4609                  EVENT_TYPE_CODE  = c_rec.EVENT_TYPE_CODE,
4610                  TAX_EVENT_TYPE_CODE = c_rec.TAX_EVENT_TYPE_CODE,
4611                  DOC_EVENT_STATUS = c_rec.DOC_EVENT_STATUS
4612          WHERE
4613            D.APPLICATION_ID = c_rec.application_id
4614            AND D.ENTITY_CODE = c_rec.ENTITY_CODE
4615            AND D.EVENT_CLASS_CODE = c_rec.EVENT_CLASS_CODE
4616            AND D.TRX_ID = c_rec.TRX_ID;
4617       END IF;
4618    END LOOP;
4619 
4620    OPEN event_classes;
4621      LOOP
4622        FETCH event_classes BULK COLLECT INTO
4623           l_evnt_cls.event_class_code,
4624           l_evnt_cls.application_id,
4625           l_evnt_cls.entity_code,
4626           l_evnt_cls.internal_organization_id,
4627           l_evnt_cls.precedence
4628        LIMIT G_LINES_PER_FETCH;
4629      EXIT WHEN event_classes%NOTFOUND;
4630      END LOOP;
4631    CLOSE event_classes;
4632 
4633    --Event classes such as SALES_TRANSACTION_TAX_QUOTE/PURCHASE_TRANSACTION_TAX_QUOTE
4634    --are not seeded in zx_evnt_cls_mappings so cursor event classes will not
4635    --return any rows for such event classes passed. This flag to keep track of this
4636    IF l_evnt_cls.event_class_code.LAST is null THEN
4637      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4638         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
4639            'Event class information does not exist - indicates SALES_TRANSACTION_TAX_QUOTE/PURCHASE_TRANSACTION_TAX_QUOTE');
4640      END IF;
4641      SELECT event_class_code,
4642             application_id,
4643             internal_organization_id,
4644             entity_code
4645        INTO l_evnt_cls.event_class_code(1),
4646             l_evnt_cls.application_id(1),
4647             l_evnt_cls.internal_organization_id(1),
4648             l_evnt_cls.entity_code(1)
4649        FROM ZX_TRX_HEADERS_GT
4650        WHERE rownum=1;
4651    END IF;
4652 
4653    /*-----------------------------------------+
4654    |   Loop for each transaction header      |
4655    +-----------------------------------------*/
4656    FOR i IN 1..nvl(l_evnt_cls.event_class_code.LAST,0)
4657      LOOP
4658 
4659       l_event_class_rec.event_id := l_event_id;
4660       l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  l_evnt_cls.INTERNAL_ORGANIZATION_ID(i);
4661       l_event_class_rec.APPLICATION_ID               :=  l_evnt_cls.APPLICATION_ID(i);
4662       l_event_class_rec.ENTITY_CODE                  :=  l_evnt_cls.ENTITY_CODE(i);
4663       l_event_class_rec.EVENT_CLASS_CODE             :=  l_evnt_cls.EVENT_CLASS_CODE(i);
4664 
4668        |   Validate Input Paramerters and Fetch Tax Options   |
4665        ZX_TRD_SERVICES_PUB_PKG.g_variance_calc_flag := 'N';
4666 
4667        /*------------------------------------------------------+
4669        +------------------------------------------------------*/
4670        ZX_VALID_INIT_PARAMS_PKG.determine_recovery(x_return_status   =>l_return_status,
4671                                                    p_event_class_rec =>l_event_class_rec
4672                                                   );
4673 
4674        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4675          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4676            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');
4677          END IF;
4678          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4679            RAISE FND_API.G_EXC_ERROR;
4680          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4681            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4682          END IF;
4683        END IF;
4684 
4685        select  ICX_SESSION_ID
4686        INTO l_event_class_rec.ICX_SESSION_ID
4687        FROM ZX_TRX_HEADERS_GT
4688        where rownum = 1;
4689 
4690        IF l_event_class_rec.QUOTE_FLAG = 'Y' and
4691          l_event_class_rec.ICX_SESSION_ID is not null THEN
4692          ZX_SECURITY.G_ICX_SESSION_ID := l_event_class_rec.ICX_SESSION_ID;
4693          ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
4694          -- dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
4695 
4696        ELSE
4697          ZX_SECURITY.G_ICX_SESSION_ID := null;
4698          ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
4699          --dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
4700 
4701       END IF;
4702 
4703       -- Check if trx line dist qty is passed when variance calc flag is 'Y'
4704 
4705            FOR invalid_rec IN check_trx_line_dist_qty
4706            LOOP
4707 
4708             --  x_return_status := FND_API.G_RET_STS_ERROR;
4709               FND_MESSAGE.SET_NAME('ZX','ZX_TRX_LINE_DIST_QTY_REQD');
4710               l_context_info_rec.APPLICATION_ID   := invalid_rec.APPLICATION_ID;
4711               l_context_info_rec.ENTITY_CODE      := invalid_rec.ENTITY_CODE;
4712               l_context_info_rec.EVENT_CLASS_CODE := invalid_rec.EVENT_CLASS_CODE;
4713               l_context_info_rec.TRX_ID           := invalid_rec.TRX_ID;
4714               ZX_API_PUB.add_msg( p_context_info_rec =>l_context_info_rec );
4715               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4716                 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Transaction line distribution quantity is required');
4717               END IF;
4718           END LOOP;
4719 
4720       -- Check if trx line dist unit price is passed when variance calc flag is 'Y'
4721 
4722            FOR invalid_rec IN check_trx_line_dist_unit_price
4723            LOOP
4724 
4725             --  x_return_status := FND_API.G_RET_STS_ERROR;
4726               FND_MESSAGE.SET_NAME('ZX','ZX_UNIT_PRICE_REQD');
4727               l_context_info_rec.APPLICATION_ID   := invalid_rec.APPLICATION_ID;
4728               l_context_info_rec.ENTITY_CODE      := invalid_rec.ENTITY_CODE;
4729               l_context_info_rec.EVENT_CLASS_CODE := invalid_rec.EVENT_CLASS_CODE;
4730               l_context_info_rec.TRX_ID           := invalid_rec.TRX_ID;
4731               ZX_API_PUB.add_msg( p_context_info_rec =>l_context_info_rec );
4732               IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4733                 FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Transaction line distribution unit price is required');
4734               END IF;
4735           END LOOP;
4736 
4737 
4738        OPEN headers(l_evnt_cls.event_class_code(i),
4739                     l_evnt_cls.application_id(i),
4740                     l_evnt_cls.entity_code(i)
4741                    );
4742        LOOP
4743          FETCH headers BULK COLLECT INTO
4744            l_transaction_header_rec.INTERNAL_ORGANIZATION_ID,
4745            l_transaction_header_rec.APPLICATION_ID,
4746            l_transaction_header_rec.LEGAL_ENTITY_ID,
4747            l_transaction_header_rec.ENTITY_CODE,
4748            l_transaction_header_rec.EVENT_TYPE_CODE,
4749            l_transaction_header_rec.EVENT_CLASS_CODE,
4750            l_transaction_header_rec.TRX_ID,
4751            l_transaction_header_rec.QUOTE_FLAG,
4752            l_transaction_header_rec.ICX_SESSION_ID
4753          LIMIT G_LINES_PER_FETCH;
4754 
4755          FOR l_index IN 1..nvl(l_transaction_header_rec.application_id.LAST,0)
4756          LOOP
4757            BEGIN
4758              SAVEPOINT Determine_Recovery_Hdr_PVT;
4759              --Copy to event class record
4760              l_event_class_rec.INTERNAL_ORGANIZATION_ID :=  l_transaction_header_rec.INTERNAL_ORGANIZATION_ID(l_index);
4761              l_event_class_rec.APPLICATION_ID           :=  l_transaction_header_rec.APPLICATION_ID(l_index);
4762              l_event_class_rec.LEGAL_ENTITY_ID          :=  l_transaction_header_rec.LEGAL_ENTITY_ID(l_index);
4763              l_event_class_rec.ENTITY_CODE              :=  l_transaction_header_rec.ENTITY_CODE(l_index);
4764              l_event_class_rec.EVENT_CLASS_CODE         :=  l_transaction_header_rec.EVENT_CLASS_CODE(l_index);
4765              l_event_class_rec.EVENT_TYPE_CODE          :=  l_transaction_header_rec.EVENT_TYPE_CODE(l_index);
4766              l_event_class_rec.TRX_ID                   :=  l_transaction_header_rec.TRX_ID(l_index);
4770 
4767              l_event_class_rec.ICX_SESSION_ID           :=  l_transaction_header_rec.ICX_SESSION_ID(l_index);
4768              l_event_class_rec.QUOTE_FLAG               :=  l_transaction_header_rec.QUOTE_FLAG(l_index);
4769 
4771               /* ----------------------------------------------------------------------+
4772               | Bug 3129063 - Setting the Security Context for Subscription           |
4773               + ----------------------------------------------------------------------*/
4774               ZX_VALID_INIT_PARAMS_PKG.get_tax_subscriber
4775                                 (l_event_class_rec,
4776                                  l_return_status);
4777 
4778              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4779                DUMP_MSG;
4780                x_return_status := l_return_status;
4781                RETURN;
4782              END IF;
4783 
4784 
4785              /* ----------------------------------------------------------------------+
4786              |      Get Tax Event Type                                               |
4787              + ----------------------------------------------------------------------*/
4788              ZX_VALID_INIT_PARAMS_PKG.get_tax_event_type (l_return_status
4789                                 ,l_event_class_rec.event_class_code
4790                                 ,l_event_class_rec.application_id
4791                                 ,l_event_class_rec.entity_code
4792                                 ,l_event_class_rec.event_type_code
4793                                 ,l_event_class_rec.tax_event_class_code
4794                                 ,l_event_class_rec.tax_event_type_code
4795                                 ,l_event_class_rec.doc_status_code
4796                                );
4797 
4798             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4799               x_return_status := l_return_status;
4800               DUMP_MSG;
4801               RETURN;
4802             END IF;
4803            -- Bug 6135079, SDSU - enforce_tax_from_ref_doc should be picked up from event class instead of event mappings
4804            -- This can be achieved by calling populate_event_class_options as we have done it in calculate_tax
4805 
4806           BEGIN
4807              BEGIN
4808                 SELECT first_pty_org_id ,
4809                        related_doc_date,
4810          	             adjusted_doc_date,
4811          	             trx_date,
4812          	             provnl_tax_determination_date
4813                 INTO   l_event_class_rec.first_pty_org_id,
4814   		                 l_related_doc_date,
4815   		                 l_adjusted_doc_date,
4816   		                 l_trx_date,
4817   		                 l_prov_tax_det_date
4818   		          FROM   ZX_LINES_DET_FACTORS
4819   		          WHERE  application_id   = l_event_class_rec.application_id
4820   		            AND  entity_code      = l_event_class_rec.entity_code
4821   		            AND  event_class_code = l_event_class_rec.event_class_code
4822   		            AND  trx_id           = l_event_class_rec.trx_id
4823   		            AND  rownum           = 1;
4824             EXCEPTION
4825                when no_data_found then
4826                  l_call_evnt_cls_options := 'N';
4827             END;
4828 
4829             l_effective_date := determine_effective_date (l_trx_date,
4830                                                           l_related_doc_date,
4831      		                                                  l_adjusted_doc_date,
4832                                                           l_prov_tax_det_date
4833 		   			                                             );
4834             EXCEPTION
4835 	     WHEN OTHERS THEN
4836 	       l_effective_date := SYSDATE;
4837 	     END;
4838 	    /* ----------------------------------------------------------------------+
4839             |      Populate Event Class Options                                     |
4840             + ----------------------------------------------------------------------*/
4841         IF l_call_evnt_cls_options = 'Y' THEN
4842             ZX_VALID_INIT_PARAMS_PKG.populate_event_class_options(l_return_status,
4843                               l_effective_date,
4844                               l_event_class_rec
4845                              );
4846         END IF;
4847 
4848             IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4849              x_return_status := l_return_status;
4850              DUMP_MSG;
4851              RETURN;
4852             END IF;
4853 
4854             ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec := l_event_class_rec;
4855 
4856              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4857                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
4858                 'application_id: '||to_char(l_event_class_rec.application_id)||
4859                 ' entity_code: '||l_event_class_rec.entity_code||
4860                 ' event_class_code: '||l_event_class_rec.event_class_code||
4861                 ' event_type_code: '||l_event_class_rec.event_type_code||
4862                 ' trx_id: '||to_char(l_event_class_rec.trx_id)||
4863                 ' internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
4864                 ' quote_flag: '||to_char(l_event_class_rec.quote_flag)||
4865                 ' icx_session_id: '||to_char(l_event_class_rec.icx_session_id));
4866              END IF;
4867 
4868 
4869             /* ===============================================================================*
4870             |Initialize the global structures/global temp tables owned by TDM at header level |
4874                                                       l_return_status
4871             * =============================================================================*/
4872              ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (l_event_class_rec ,
4873                                                       'HEADER',
4875                                                      );
4876 
4877              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4878                IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4879                    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');
4880                END IF;
4881                IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4882                  RAISE FND_API.G_EXC_ERROR;
4883                ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4884                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4885                END IF;
4886              END IF;
4887 
4888              ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl.DELETE;
4889             /*--------------------------------------------------+
4890              |   Call Service Type Determine Recovery           |
4891              +--------------------------------------------------*/
4892              ZX_SRVC_TYP_PKG.determine_recovery(p_event_class_rec    => l_event_class_rec,
4893                                                 x_return_status      => l_return_status
4894                                                );
4895 
4896              IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4897                IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4898                    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');
4899                END IF;
4900                IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4901                  RAISE FND_API.G_EXC_ERROR;
4902                ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4903                  RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4904                END IF;
4905              END IF;
4906 
4907              EXCEPTION
4908                WHEN FND_API.G_EXC_ERROR THEN
4909                  ROLLBACK TO Determine_Recovery_Hdr_PVT;
4910                  x_return_status := FND_API.G_RET_STS_ERROR ;
4911                  --Call API to dump into zx_errors_gt
4912                  DUMP_MSG;
4913                  IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
4914                    FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
4915                  END IF;
4916              END;
4917          END LOOP; --end loop for transaction headers
4918          EXIT WHEN headers%NOTFOUND;
4919         END LOOP;
4920       CLOSE headers;
4921 
4922        -- bug fix 3313938: add tax_variance_calc_flag check.
4923        --
4924        IF ZX_TRD_SERVICES_PUB_PKG.g_variance_calc_flag = 'Y' THEN
4925 
4926          ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors(
4927                   l_return_status,
4928                   l_error_buffer);
4929 
4930          IF (l_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4931            IF (g_level_statement >= g_current_runtime_level ) THEN
4932              FND_LOG.STRING(g_level_statement,
4933                            G_MODULE_NAME||l_api_name,
4934                            'After calling calc_variance_factors ' ||
4935                            ' l_return_status = ' || l_return_status);
4936              FND_LOG.STRING(g_level_statement,
4937                            G_MODULE_NAME||l_api_name,
4938                            'ZX_API_PUB.DETERMINE_RECOVERY(-)');
4939            END IF;
4940           DUMP_MSG;
4941           RETURN;
4942          END IF;
4943        END IF;
4944 
4945 
4946     -- Bug fix 5417887 begin
4947 
4948    /*--------------------------------------------------+
4949     |   Call to eTax Service Manage Tax Distributions  |
4950     +--------------------------------------------------*/
4951    /*-----------------------------------------------------------------+
4952     | Bug 3649502 - Check for record flag before calling TRR service  |
4953     +----------------------------------------------------------------*/
4954     --IF zx_global_structures_pkg.g_event_class_rec.record_flag = 'Y' THEN
4955 
4956     l_record_dist_lines := ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.record_flag;
4957 
4958     IF zx_global_structures_pkg.g_event_class_rec.record_flag = 'Y' and
4959        ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'Y' THEN
4960        l_record_dist_lines := 'N';
4961     END IF;
4962 
4963     IF l_record_dist_lines = 'Y' THEN
4964       ZX_TRL_PUB_PKG.manage_taxdistributions(x_return_status    =>l_return_status,
4965                                              p_event_class_rec  =>zx_global_structures_pkg.g_event_class_rec
4966                                             );
4967     END IF;
4968 
4969     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4970       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
4971           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');
4972       END IF;
4973       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
4974         DUMP_MSG;
4975         RAISE FND_API.G_EXC_ERROR;
4976       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
4977         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4978       END IF;
4979     END IF;
4980 
4981     -- Bug fix 7506576 Included additional condition flag quote_flag when
4982     -- deleting records from GT TABLES
4983 
4984     --IF zx_global_structures_pkg.g_event_class_rec.record_flag = 'Y'  AND ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.quote_flag = 'N'
4985 
4986     --Reimplemented the fix done in bug#7506576
4987     IF l_record_dist_lines = 'Y' THEN
4988        DELETE FROM ZX_REC_NREC_DIST_GT;
4989     END IF;
4990 
4991  END LOOP;--event_classes cursor
4992 
4993     /*------------------------------------------------+
4994      |  Update zx_lines_det_factors                   |
4995      +------------------------------------------------*/
4996 
4997      IF zx_global_structures_pkg.g_event_class_rec.quote_flag <> 'Y'  OR
4998         zx_global_structures_pkg.g_event_class_rec.ICX_SESSION_ID is not null
4999      THEN
5000 
5001        -- ICX_SESSION_ID / QUOTE_FLAG should be same for all rows
5002       IF zx_global_structures_pkg.g_event_class_rec.ICX_SESSION_ID is not null THEN
5003 
5004        BEGIN
5005         OPEN C_HEADERS;
5006         LOOP
5007            FETCH c_HEADERS BULK COLLECT INTO
5008                l_application_id_tbl,
5009                l_entity_code_tbl,
5010                l_event_class_code_tbl,
5011                l_trx_id_tbl,
5012                l_icx_session_id_tbl,
5013                l_event_type_code_tbl,
5014                l_tax_event_type_code_tbl,
5015                l_doc_event_status_tbl
5016            LIMIT G_LINES_PER_FETCH;
5017 
5018 
5019               /*------------------------------------------------------------------------------+
5020                |  Bug 4948674: Handle delete for P2P products when icx_session_id is NOT NULL |
5021                +------------------------------------------------------------------------------*/
5022 
5023               FORALL i IN l_application_id_tbl.FIRST .. l_application_id_tbl.LAST
5024                 DELETE from zx_lines_det_factors
5025 		            WHERE APPLICATION_ID   = l_application_id_tbl(i)
5026                  AND ENTITY_CODE       = l_entity_code_tbl(i)
5027                  AND EVENT_CLASS_CODE  = l_event_class_code_tbl(i)
5028                  AND TRX_ID            = l_trx_id_tbl(i)
5029                  AND ICX_SESSION_ID    = l_icx_session_id_tbl(i);
5030 
5031            exit when c_HEADERS%NOTFOUND;
5032         END LOOP;
5033 
5034         close c_HEADERS;
5035       EXCEPTION
5036          WHEN OTHERS THEN
5037 
5038            IF ( G_LEVEL_EXCEPTION >= G_CURRENT_RUNTIME_LEVEL) THEN
5039                 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');
5040                 FND_LOG.STRING(G_LEVEL_EXCEPTION,G_MODULE_NAME||l_api_name, SQLCODE||' ; '||SQLERRM);
5041            END IF;
5042 
5043            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5044            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5045            FND_MSG_PUB.Add;
5046 
5047            IF  c_HEADERS%ISOPEN THEN
5048                  close c_HEADERS;
5049            END IF;
5050        END;
5051      END IF; -- icx_session_id
5052 
5053 
5054     END IF;
5055 
5056     -- Bug fix 5417887 end
5057 
5058     --Reset the icx_session_id at end of API
5059     ZX_SECURITY.G_ICX_SESSION_ID := null;
5060     ZX_SECURITY.name_value('SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
5061     -- dbms_session.set_context('my_ctx','SESSIONID',to_char(ZX_SECURITY.G_ICX_SESSION_ID));
5062 
5063 
5064     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5065        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
5066     END IF;
5067 
5068     EXCEPTION
5069        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5070          ROLLBACK TO Determine_Recovery_PVT;
5071          --Close all open cursors
5072          IF headers%ISOPEN THEN CLOSE headers; END IF;
5073          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5074          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5075          FND_MSG_PUB.Add;
5076         /*---------------------------------------------------------+
5077          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5078          | in the message stack. If there is only one message in   |
5079          | the stack it retrieves this message                     |
5080          +---------------------------------------------------------*/
5081          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5082                                    p_count  => x_msg_count,
5083                                    p_data   => x_msg_data
5084                                    );
5085          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5086            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5087          END IF;
5088 
5089        WHEN OTHERS THEN
5090           ROLLBACK TO Determine_Recovery_PVT;
5091           --Close all open cursors
5092           IF headers%ISOPEN THEN CLOSE headers; END IF;
5093           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5094           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5095           FND_MSG_PUB.Add;
5096         /*---------------------------------------------------------+
5097          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5098          | in the message stack. If there is only one message in   |
5099          | the stack it retrieves this message                     |
5100          +---------------------------------------------------------*/
5101          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5102                                    p_count  => x_msg_count,
5106             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
5103                                    p_data   => x_msg_data
5104                                    );
5105           IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
5107           END IF;
5108 
5109  END determine_recovery;
5110 
5111 /* =======================================================================*
5112  | PROCEDURE  override_recovery :Overrides the tax recovery rate code     |
5113  * =======================================================================*/
5114 
5115  PROCEDURE Override_recovery
5116  ( p_api_version           IN            NUMBER,
5117    p_init_msg_list         IN            VARCHAR2,
5118    p_commit                IN            VARCHAR2,
5119    p_validation_level      IN            NUMBER,
5120    x_return_status         OUT    NOCOPY VARCHAR2 ,
5121    x_msg_count             OUT    NOCOPY NUMBER ,
5122    x_msg_data              OUT    NOCOPY VARCHAR2,
5123    p_transaction_rec       IN OUT NOCOPY transaction_rec_type
5124  ) IS
5125    l_api_name          CONSTANT  VARCHAR2(30) := 'OVERRIDE_RECOVERY';
5126    l_api_version       CONSTANT  NUMBER := 1.0;
5127    l_return_status               VARCHAR2(30);
5128    l_event_class_rec             event_class_rec_type;
5129    l_trans_rec                   transaction_rec_type;
5130    l_init_msg_list               VARCHAR2(1);
5131    l_record_dist_lines           VARCHAR2(1);
5132 
5133  BEGIN
5134    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5135      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
5136    END IF;
5137 
5138    /*--------------------------------------------------+
5139    |   Standard start of API savepoint                |
5140    +--------------------------------------------------*/
5141    SAVEPOINT override_recovery_PVT;
5142 
5143   /*--------------------------------------------------+
5144    |   Standard call to check for call compatibility  |
5145    +--------------------------------------------------*/
5146    IF NOT FND_API.Compatible_API_Call( l_api_version,
5147                                        p_api_version,
5148                                        l_api_name,
5149                                        G_PKG_NAME
5150                                       ) THEN
5151      RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5152    END IF;
5153 
5154   /*--------------------------------------------------------------+
5155    |   Initialize message list if p_init_msg_list is set to TRUE  |
5156    +--------------------------------------------------------------*/
5157      IF p_init_msg_list is null THEN
5158        l_init_msg_list := FND_API.G_FALSE;
5159      ELSE
5160 	   l_init_msg_list := p_init_msg_list;
5161      END IF;
5162 
5163      IF FND_API.to_Boolean(l_init_msg_list) THEN
5164        FND_MSG_PUB.initialize;
5165      END IF;
5166 
5167   /*-----------------------------------------+
5168    |   Initialize return status to SUCCESS   |
5169    +-----------------------------------------*/
5170    x_return_status := FND_API.G_RET_STS_SUCCESS;
5171 
5172   /*-----------------------------------------+
5173    |   Populate Global Variable              |
5174    +-----------------------------------------*/
5175    G_PUB_SRVC := l_api_name;
5176    G_DATA_TRANSFER_MODE := 'PLS';
5177    G_EXTERNAL_API_CALL  := 'N';
5178 
5179    --Call TDS process to initialise distributions for previous calls to determine recovery
5180    --if any
5181    ZX_TDS_CALC_SERVICES_PUB_PKG.initialize (p_event_class_rec => NULL,
5182                                             p_init_level      => 'TAX_DISTRIBUTION',
5183                                             x_return_status   => l_return_status
5184                                             );
5185   /*------------------------------------------------------+
5186    |   Validate Input Paramerters and Fetch Tax Options   |
5187    +------------------------------------------------------*/
5188    ZX_VALID_INIT_PARAMS_PKG.override_recovery(x_return_status   => l_return_status,
5189                                               p_event_class_rec => l_event_class_rec,
5190                                               p_trx_rec         => p_transaction_rec
5191                                              );
5192 
5193    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5194      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5195        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');
5196      END IF;
5197      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5198        RAISE FND_API.G_EXC_ERROR;
5199      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5200        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5201      END IF;
5202    END IF;
5203 
5204   /*--------------------------------------------------+
5205    |   Call Service Type Override Recovery            |
5206    +--------------------------------------------------*/
5207    ZX_SRVC_TYP_PKG.override_recovery(p_event_class_rec    => l_event_class_rec,
5208                                      x_return_status      => l_return_status
5209                                     );
5210 
5211    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5212      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5213        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');
5214      END IF;
5215      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5216        RAISE FND_API.G_EXC_ERROR;
5220    END IF;
5217      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5218        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5219      END IF;
5221 
5222   /*--------------------------------------------------+
5223    |   Call to eTax Service Manage Tax Distributions  |
5224    +--------------------------------------------------*/
5225    --IF l_event_class_rec.record_flag = 'Y' THEN
5226 
5227    l_record_dist_lines := l_event_class_rec.record_flag;
5228 
5229    IF l_event_class_rec.record_flag = 'Y' and
5230       l_event_class_rec.quote_flag = 'Y' THEN
5231       l_record_dist_lines := 'N';
5232    END IF;
5233    IF l_record_dist_lines = 'Y' THEN
5234      ZX_TRL_PUB_PKG.manage_taxdistributions(x_return_status    => l_return_status,
5235                                             p_event_class_rec  => l_event_class_rec
5236                                            );
5237    END IF;
5238 
5239    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5240      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5241        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');
5242      END IF;
5243      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5244        RAISE FND_API.G_EXC_ERROR;
5245      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5246        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5247      END IF;
5248    END IF;
5249 
5250    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5251       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
5252    END IF;
5253 
5254     /* Bug 3704651 - No need to uptake error handling as it is a PLS API*/
5255     EXCEPTION
5256        WHEN FND_API.G_EXC_ERROR THEN
5257          ROLLBACK TO override_recovery_PVT;
5258          x_return_status := FND_API.G_RET_STS_ERROR ;
5259         /*---------------------------------------------------------+
5260          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5261          | in the message stack. If there is only one message in   |
5262          | the stack it retrieves this message                     |
5263          +---------------------------------------------------------*/
5264          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5265                                    p_count   => x_msg_count,
5266                                    p_data    => x_msg_data
5267                                    );
5268          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5269            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5270          END IF;
5271 
5272        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5273          ROLLBACK TO override_recovery_PVT;
5274          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5275          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5276          FND_MSG_PUB.Add;
5277         /*---------------------------------------------------------+
5278          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5279          | in the message stack. If there is only one message in   |
5280          | the stack it retrieves this message                     |
5281          +---------------------------------------------------------*/
5282          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5283                                    p_count   => x_msg_count,
5284                                    p_data    => x_msg_data
5285                                    );
5286          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5287            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5288          END IF;
5289 
5290        WHEN OTHERS THEN
5291          /*-------------------------------------------------------+
5292           |  Handle application errors that result from trapable  |
5293           |  error conditions. The error messages have already    |
5294           |  been put on the error stack.                         |
5295           +-------------------------------------------------------*/
5296           ROLLBACK TO override_recovery_PVT;
5297           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5298           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5299           FND_MSG_PUB.Add;
5300         /*---------------------------------------------------------+
5301          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5302          | in the message stack. If there is only one message in   |
5303          | the stack it retrieves this message                     |
5304          +---------------------------------------------------------*/
5305           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5306                                     p_count  => x_msg_count,
5307                                     p_data   => x_msg_data
5308                                     );
5309           IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
5310             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
5311           END IF;
5312  END override_recovery;
5313 
5314 
5315  /* =======================================================================*
5316  | PROCEDURE  freeze_tax_distributions :                                  |
5317  * =======================================================================*/
5318 
5319  PROCEDURE freeze_tax_distributions
5320  ( p_api_version           IN            NUMBER,
5321    p_init_msg_list         IN            VARCHAR2,
5322    p_commit                IN            VARCHAR2,
5323    p_validation_level      IN            NUMBER,
5324    x_return_status         OUT NOCOPY    VARCHAR2 ,
5328  ) IS
5325    x_msg_count             OUT NOCOPY    NUMBER ,
5326    x_msg_data              OUT NOCOPY    VARCHAR2,
5327    p_transaction_rec       IN OUT NOCOPY transaction_rec_type
5329    l_api_name          CONSTANT  VARCHAR2(30) := 'FREEZE_TAX_DISTRIBUTIONS';
5330    l_api_version       CONSTANT  NUMBER := 1.0;
5331    l_return_status               VARCHAR2(30);
5332    l_event_class_rec             event_class_rec_type;
5333    l_init_msg_list               VARCHAR2(1);
5334 
5335 CURSOR get_event_class_info
5336 IS
5337 SELECT dist.application_id,
5338        dist.entity_code,
5339        dist.event_class_code,
5340        evnttyp.event_type_code,
5341        dist.tax_event_class_code,
5342        'UPDATE' tax_event_type_code,
5343        'UPDATED' doc_status_code,
5344        evntcls.summarization_flag,
5345        evntcls.retain_summ_tax_line_id_flag
5346  FROM zx_rec_nrec_dist dist,
5347       zx_evnt_cls_mappings evntcls,
5348       zx_evnt_typ_mappings evnttyp,
5349       zx_tax_dist_id_gt distgt
5350  WHERE dist.application_id = evntcls.application_id
5351    AND dist.entity_code = evntcls.entity_code
5352    AND dist.event_class_code = evntcls.event_class_code
5353    AND evnttyp.application_id = evntcls.application_id
5354    AND evnttyp.entity_code = evntcls.entity_code
5355    AND evnttyp.event_class_code = evntcls.event_class_code
5356    AND evnttyp.tax_event_type_code = 'UPDATE'
5357    AND dist.REC_NREC_TAX_DIST_ID = distgt.tax_dist_id;
5358 
5359 
5360  BEGIN
5361 
5362    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5363      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
5364    END IF;
5365 
5366   /*--------------------------------------------------+
5367    |   Standard start of API savepoint                |
5368    +--------------------------------------------------*/
5369    SAVEPOINT FREEZE_TAX_DISTRIBUTIONS_PVT;
5370 
5371   /*--------------------------------------------------+
5372    |   Standard call to check for call compatibility  |
5373    +--------------------------------------------------*/
5374    IF NOT FND_API.Compatible_API_Call( l_api_version,
5375                                        p_api_version,
5376                                        l_api_name,
5377                                        G_PKG_NAME
5378                                       ) THEN
5379       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5380     END IF;
5381 
5382   /*--------------------------------------------------------------+
5383    |   Initialize message list if p_init_msg_list is set to TRUE  |
5384    +--------------------------------------------------------------*/
5385    IF p_init_msg_list is null THEN
5386        l_init_msg_list := FND_API.G_FALSE;
5387    ELSE
5388        l_init_msg_list := p_init_msg_list;
5389    END IF;
5390 
5391    IF FND_API.to_Boolean(l_init_msg_list) THEN
5392      FND_MSG_PUB.initialize;
5393    END IF;
5394 
5395   /*-----------------------------------------+
5396    |   Initialize return status to SUCCESS   |
5397    +-----------------------------------------*/
5398    x_return_status := FND_API.G_RET_STS_SUCCESS;
5399 
5400   /*-----------------------------------------+
5401    |   Populate Global Variable              |
5402    +-----------------------------------------*/
5403    G_PUB_SRVC := l_api_name;
5404    G_DATA_TRANSFER_MODE := 'PLS';
5405    G_EXTERNAL_API_CALL  := 'N';
5406 
5407   /*-----------------------------------------------------+
5408    |   Validate Input Parameters and Fetch Tax Options   |
5409    +-----------------------------------------------------*/
5410 -- Bug 5580045 - Commented out the call to valid intit package so that necessary
5411 -- information can be retrieved for BULK processing
5412 /*
5413    ZX_VALID_INIT_PARAMS_PKG.freeze_distribution_lines(x_return_status   => l_return_status,
5414                                                       p_event_class_rec => l_event_class_rec,
5415                                                       p_trx_rec         => p_transaction_rec
5416                                                      );
5417 
5418    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5419      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5420        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');
5421      END IF;
5422      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5423        RAISE FND_API.G_EXC_ERROR;
5424      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5425        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5426      END IF;
5427    END IF;
5428 */
5429 
5430 -- Get Event Class Info.
5431 
5432      OPEN get_event_class_info;
5433      FETCH get_event_class_info INTO
5434              l_event_class_rec.APPLICATION_ID,
5435              l_event_class_rec.ENTITY_CODE,
5436              l_event_class_rec.EVENT_CLASS_CODE,
5437              l_event_class_rec.EVENT_TYPE_CODE,
5438              l_event_class_rec.TAX_EVENT_CLASS_CODE,
5439              l_event_class_rec.TAX_EVENT_TYPE_CODE,
5440              l_event_class_rec.DOC_STATUS_CODE,
5441              l_event_class_rec.summarization_flag,
5442              l_event_class_rec.retain_summ_tax_line_id_flag;
5443 
5444      IF get_event_class_info%notfound THEN
5445 
5446       IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
5447 
5448           FND_LOG.STRING(G_LEVEL_STATEMENT,
5449                         G_MODULE_NAME || l_api_name, G_PKG_NAME||':'||l_api_name
5453      END IF;
5450                         ||': Event Class Info not retreived');
5451       END IF;
5452 
5454 
5455      CLOSE get_event_class_info;
5456 
5457 -- Begin Bug fix 5552750: Stamp event_id for only trx lines for which
5458 --                        tax distributions are being frozen
5459 
5460    /*-----------------------------------------+
5461     | Get the event id for the whole document |
5462     +-----------------------------------------*/
5463     select ZX_LINES_DET_FACTORS_S.nextval
5464     into l_event_class_rec.event_id
5465     from dual;
5466 
5467   /*------------------------------------------------+
5468    |  Update zx_lines_det_factors                   |
5469    +------------------------------------------------*/
5470 
5471    UPDATE ZX_LINES_DET_FACTORS
5472      SET EVENT_TYPE_CODE     = l_event_class_rec.event_type_code,
5473          TAX_EVENT_TYPE_CODE = l_event_class_rec.tax_event_type_code,
5474          EVENT_ID            = l_event_class_rec.event_id,
5475          DOC_EVENT_STATUS    = l_event_class_rec.doc_status_code
5476    WHERE APPLICATION_ID    = p_transaction_rec.APPLICATION_ID
5477      AND ENTITY_CODE       = p_transaction_rec.ENTITY_CODE
5478      AND EVENT_CLASS_CODE  = p_transaction_rec.EVENT_CLASS_CODE
5479 --     AND TRX_ID            = p_transaction_rec.TRX_ID
5480      AND (TRX_ID,TRX_LINE_ID,TRX_LEVEL_TYPE) IN (Select dist.trx_id, dist.trx_line_id,
5481                              dist.trx_level_type from zx_rec_nrec_dist dist,
5482                              zx_tax_dist_id_gt zxgt
5483                             where dist.rec_nrec_tax_dist_id = zxgt.tax_dist_id);
5484 
5485 -- End Bug fix 5552750
5486 
5487   /*--------------------------------------------------+
5488    |   Call Service Type Freeze Distribution Lines    |
5489    +--------------------------------------------------*/
5490    ZX_SRVC_TYP_PKG.freeze_distribution_lines(x_return_status   => l_return_status,
5491                                              p_event_class_rec => l_event_class_rec
5492                                             );
5493 
5494    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5495      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5496        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');
5497      END IF;
5498      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5499        RAISE FND_API.G_EXC_ERROR;
5500      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5501        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5502      END IF;
5503    END IF;
5504 
5505 
5506    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5507      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
5508    END IF;
5509 
5510    EXCEPTION
5511      WHEN FND_API.G_EXC_ERROR THEN
5512        ROLLBACK TO FREEZE_TAX_DISTRIBUTIONS_PVT;
5513        x_return_status := FND_API.G_RET_STS_ERROR ;
5514       /*---------------------------------------------------------+
5515        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5516        | in the message stack. If there is only one message in   |
5517        | the stack it retrieves this message                     |
5518        +---------------------------------------------------------*/
5519        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5520                                  p_count       =>      x_msg_count,
5521                                  p_data        =>      x_msg_data
5522                                  );
5523 
5524        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5525           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5526        END IF;
5527 
5528      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5529        ROLLBACK TO FREEZE_TAX_DISTRIBUTIONS_PVT;
5530        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5531        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5532        FND_MSG_PUB.Add;
5533       /*---------------------------------------------------------+
5534        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5535        | in the message stack. If there is only one message in   |
5536        | the stack it retrieves this message                     |
5537        +---------------------------------------------------------*/
5538        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5539                                  p_count       =>      x_msg_count,
5540                                  p_data        =>      x_msg_data
5541                                  );
5542        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5543          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5544        END IF;
5545 
5546      WHEN OTHERS THEN
5547        ROLLBACK TO FREEZE_TAX_DISTRIBUTIONS_PVT;
5548        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5549        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5550        FND_MSG_PUB.Add;
5551       /*---------------------------------------------------------+
5552        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5553        | in the message stack. If there is only one message in   |
5554        | the stack it retrieves this message                     |
5555        +---------------------------------------------------------*/
5556        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5557                                  p_count       =>      x_msg_count,
5558                                  p_data        =>      x_msg_data
5559                                 );
5560       IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
5564 
5561         FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
5562       END IF;
5563  END freeze_tax_distributions;
5565 /* ======================================================================*
5566  | PROCEDURE get_tax_distribution_ccids : Products call this API if they |
5567  |                                        need to determine the code     |
5568  |                                        combination identifiers for    |
5569  |                                        tax liability and tax recovery/|
5570  |                                        nonrecovery accounts           |
5571  | There exists only the pl/sql version of the API                       |
5572  * ======================================================================*/
5573  PROCEDURE get_tax_distribution_ccids
5574  ( p_api_version             IN            NUMBER,
5575    p_init_msg_list           IN            VARCHAR2,
5576    p_commit                  IN            VARCHAR2,
5577    p_validation_level        IN            NUMBER,
5578    x_return_status           OUT NOCOPY    VARCHAR2 ,
5579    x_msg_count               OUT NOCOPY    NUMBER ,
5580    x_msg_data                OUT NOCOPY    VARCHAR2,
5581    p_dist_ccid_rec           IN OUT NOCOPY distccid_det_facts_rec_type
5582   ) IS
5583    l_api_name          CONSTANT  VARCHAR2(30) := 'GET_TAX_DISTRIBUTION_CCIDS';
5584    l_api_version       CONSTANT  NUMBER := 1.0;
5585    l_return_status               VARCHAR2(30);
5586    l_init_msg_list               VARCHAR2(1);
5587 
5588  BEGIN
5589    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5590      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
5591    END IF;
5592 
5593     /*--------------------------------------------------+
5594     |   Standard start of API savepoint                |
5595     +--------------------------------------------------*/
5596     SAVEPOINT Get_Tax_Distribution_ccids_PVT;
5597 
5598     /*-----------------------------------------+
5599      |   Initialize return status to SUCCESS   |
5600      +-----------------------------------------*/
5601 
5602     x_return_status := FND_API.G_RET_STS_SUCCESS;
5603 
5604     /*--------------------------------------------------+
5605      |   Standard call to check for call compatibility  |
5606      +--------------------------------------------------*/
5607      IF NOT FND_API.Compatible_API_Call( l_api_version,
5608                                          p_api_version,
5609                                          l_api_name,
5610                                          G_PKG_NAME
5611                                         ) THEN
5612        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5613       END IF;
5614 
5615     /*--------------------------------------------------------------+
5616      |   Initialize message list if p_init_msg_list is set to TRUE  |
5617      +--------------------------------------------------------------*/
5618      IF p_init_msg_list is null THEN
5619        l_init_msg_list := FND_API.G_FALSE;
5620      ELSE
5621        l_init_msg_list := p_init_msg_list;
5622      END IF;
5623 
5624      IF FND_API.to_Boolean(l_init_msg_list) THEN
5625        FND_MSG_PUB.initialize;
5626      END IF;
5627 
5628      /*-----------------------------------------+
5629       |   Populate Global Variable              |
5630       +-----------------------------------------*/
5631       G_PUB_SRVC := l_api_name;
5632       G_DATA_TRANSFER_MODE := 'PLS';
5633       G_EXTERNAL_API_CALL  := 'N';
5634 
5635       /*---------------------------------------------+
5636       |   Missing Gl Date                           |
5637       +---------------------------------------------*/
5638       IF p_dist_ccid_rec.gl_date is NULL THEN
5639         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5640           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
5641           'GL date of tax distribution is required');
5642         END IF;
5643         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5644       END IF;
5645 
5646      /*---------------------------------------------+
5647       |   Missing Tax Rate Id                       |
5648       +---------------------------------------------*/
5649       IF p_dist_ccid_rec.tax_rate_id is NULL THEN
5650         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5651           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
5652           'Tax rate ID of tax distribution is required');
5653         END IF;
5654         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5655       END IF;
5656 
5657      /*---------------------------------------------+
5658       |   Missing Rec Rate Id                       |
5659       +---------------------------------------------*/
5660       IF p_dist_ccid_rec.recoverable_flag = 'Y' and
5661          p_dist_ccid_rec.rec_rate_id is NULL THEN
5662         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5663           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
5664           'Recovery rate ID of tax distribution is required');
5665         END IF;
5666         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5667       END IF;
5668 
5669      /*---------------------------------------------+
5670       |   Missing Self Assessed Flag                |
5671       +---------------------------------------------*/
5672 
5673       IF p_dist_ccid_rec.self_assessed_flag is NULL THEN
5674         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5675           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
5676           'Self-assessed flag of tax distribution is required');
5680 
5677         END IF;
5678         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5679       END IF;
5681      /*---------------------------------------------+
5682       |   Missing Recoverable Flag                  |
5683       +---------------------------------------------*/
5684 
5685       IF p_dist_ccid_rec.recoverable_flag is NULL THEN
5686         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5687           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
5688           'Recoverable flag of tax distribution is required');
5689         END IF;
5690         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5691       END IF;
5692 
5693      /*---------------------------------------------+
5694       |   Missing Tax Jurisdiction Id               |
5695       +---------------------------------------------*/
5696 
5697       /*IF p_dist_ccid_rec.tax_jurisdiction_id is NULL THEN
5698         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5699           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
5700           'Tax jurisdiction ID of tax distribution is required');
5701         END IF;
5702         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5703       END IF;
5704       */
5705 
5706      /*---------------------------------------------+
5707       |   Missing Tax Regime Id                     |
5708       +---------------------------------------------*/
5709 
5710       IF p_dist_ccid_rec.tax_regime_id is NULL THEN
5711         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5712           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
5713           'Tax regime ID of tax distribution is required');
5714         END IF;
5715         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5716       END IF;
5717 
5718      /*---------------------------------------------+
5719       |   Missing Tax Id                            |
5720       +---------------------------------------------*/
5721 
5722       IF p_dist_ccid_rec.tax_id is NULL THEN
5723         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5724           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
5725           'Tax id of tax distribution is required');
5726         END IF;
5727         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5728       END IF;
5729 
5730      /*---------------------------------------------+
5731       |   Missing Tax Status Id                     |
5732       +---------------------------------------------*/
5733 
5734       IF p_dist_ccid_rec.tax_status_id is NULL THEN
5735         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5736           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
5737           'Tax status ID of tax distribution is required');
5738         END IF;
5739         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5740       END IF;
5741 
5742      /*---------------------------------------------+
5743       |   Missing Org Id                            |
5744       +---------------------------------------------*/
5745 
5746       IF p_dist_ccid_rec.internal_organization_id is NULL THEN
5747         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5748           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
5749           'Operating Unit is required');
5750         END IF;
5751         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5752       END IF;
5753 
5754      /*---------------------------------------------+
5755       |   Missing Revenue Expense CCID              |
5756       +---------------------------------------------*/
5757 
5758       IF p_dist_ccid_rec.revenue_expense_ccid is NULL THEN
5759         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5760           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
5761           'Revenue account of tax distribution is required');
5762         END IF;
5763         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5764       END IF;
5765 
5766       /*-----------------------------------------+
5767        |   Get CCID                              |
5768        +-----------------------------------------*/
5769        ZX_TRD_SERVICES_PUB_PKG.get_ccid(p_gl_date              => p_dist_ccid_rec.gl_date,
5770                                         p_tax_rate_id          => p_dist_ccid_rec.tax_rate_id,
5771                                         p_rec_rate_id          => p_dist_ccid_rec.rec_rate_id,
5772                                         p_Self_Assessed_Flag   => p_dist_ccid_rec.self_assessed_flag,
5773                                         p_Recoverable_Flag     => p_dist_ccid_rec.recoverable_flag,
5774                                         p_tax_jurisdiction_id  => p_dist_ccid_rec.tax_jurisdiction_id,
5775                                         p_tax_regime_id        => p_dist_ccid_rec.tax_regime_id,
5776                                         p_tax_id               => p_dist_ccid_rec.tax_id,
5777                                         p_tax_status_id        => p_dist_ccid_rec.tax_status_id,
5778                                         p_org_id               => p_dist_ccid_rec.internal_organization_id,
5779                                         p_revenue_expense_ccid => p_dist_ccid_rec.revenue_expense_ccid,
5780                                         p_ledger_id            => p_dist_ccid_rec.ledger_id,
5781         				p_account_source_tax_rate_id  => p_dist_ccid_rec.account_source_tax_rate_id,
5782         				p_rec_nrec_tax_dist_id => p_dist_ccid_rec.rec_nrec_tax_dist_id,
5786                                         );
5783                                         p_rec_nrec_ccid        => p_dist_ccid_rec.rec_nrec_ccid,
5784                                         p_tax_liab_ccid        => p_dist_ccid_rec.tax_liab_ccid,
5785                                         x_return_status        => l_return_status
5787 
5788 
5789        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5790          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5791            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');
5792          END IF;
5793          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5794            RAISE FND_API.G_EXC_ERROR;
5795          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5796            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5797          END IF;
5798        ELSE
5799          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5800            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
5801              'Recovery/NonRecovery CCID : ' ||
5802               to_char(p_dist_ccid_rec.revenue_expense_ccid) ||
5803              'Tax liability CCID : ' ||
5804              to_char(p_dist_ccid_rec.tax_liab_ccid) ||
5805              'Revenue CCID : ' ||
5806              to_char(p_dist_ccid_rec.tax_liab_ccid)
5807              );
5808            END IF;
5809          END IF;
5810 
5811        IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5812          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
5813        END IF;
5814 
5815      /* Bug 3704651 - No need to uptake error handling as it is a PLS API*/
5816        EXCEPTION
5817        WHEN FND_API.G_EXC_ERROR THEN
5818          ROLLBACK TO Get_Tax_Distribution_Ccids_PVT;
5819          x_return_status := FND_API.G_RET_STS_ERROR ;
5820         /*---------------------------------------------------------+
5821          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5822          | in the message stack. If there is only one message in   |
5823          | the stack it retrieves this message                     |
5824          +---------------------------------------------------------*/
5825          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5826                                    p_count   =>      x_msg_count,
5827                                    p_data    =>      x_msg_data
5828                                    );
5829 
5830          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5831            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5832          END IF;
5833 
5834        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5835          ROLLBACK TO Get_Tax_Distribution_Ccids_PVT;
5836          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5837          FND_MSG_PUB.Add;
5838         /*---------------------------------------------------------+
5839          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5840          | in the message stack. If there is only one message in   |
5841          | the stack it retrieves this message                     |
5842          +---------------------------------------------------------*/
5843          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5844                                    p_count       =>      x_msg_count,
5845                                    p_data        =>      x_msg_data
5846                                    );
5847          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5848            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5849          END IF;
5850 
5851         WHEN OTHERS THEN
5852           ROLLBACK TO Get_Tax_Distribution_Ccids_PVT;
5853           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5854           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5855           FND_MSG_PUB.Add;
5856         /*---------------------------------------------------------+
5857          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5858          | in the message stack. If there is only one message in   |
5859          | the stack it retrieves this message                     |
5860          +---------------------------------------------------------*/
5861           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5862                                     p_count       =>      x_msg_count,
5863                                     p_data        =>      x_msg_data
5864                                    );
5865 
5866           IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
5867             FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
5868           END IF;
5869 
5870  END get_tax_distribution_ccids;
5871 
5872 
5873 /* ===================================================================================*
5874  | PROCEDURE Update_tax_dist_gl_date : Updates gl date of a list of Tax Distributions |
5875  | GTT involved : ZX_TAX_DIST_ID_GT                                                   |
5876  * ====================================================================================*/
5877 
5878  PROCEDURE Update_Tax_dist_gl_date
5879  (  p_api_version           IN         NUMBER,
5880     p_init_msg_list         IN         VARCHAR2,
5881     p_commit                IN         VARCHAR2,
5882     p_validation_level      IN         NUMBER,
5883     x_return_status         OUT NOCOPY VARCHAR2,
5884     x_msg_count             OUT NOCOPY NUMBER,
5885     x_msg_data              OUT NOCOPY VARCHAR2,
5886     p_gl_date               IN         DATE
5887   ) IS
5891    l_context_info_rec            context_info_rec_type;
5888    l_api_name          CONSTANT  VARCHAR2(30) := 'UPDATE_TAX_DIST_GL_DATE';
5889    l_api_version       CONSTANT  NUMBER := 1.0;
5890    l_return_status               VARCHAR2(30);
5892    l_init_msg_list               VARCHAR2(1);
5893 
5894  BEGIN
5895     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5896        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
5897     END IF;
5898 
5899 	/*--------------------------------------------------+
5900      |   Standard start of API savepoint                |
5901      +--------------------------------------------------*/
5902      SAVEPOINT Update_Tax_Dist_GL_Date_PVT;
5903 
5904     /*--------------------------------------------------+
5905      |   Standard call to check for call compatibility  |
5906      +--------------------------------------------------*/
5907      IF NOT FND_API.Compatible_API_Call( l_api_version,
5908                                          p_api_version,
5909                                          l_api_name,
5910                                          G_PKG_NAME
5911                                         ) THEN
5912        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5913       END IF;
5914 
5915     /*--------------------------------------------------------------+
5916      |   Initialize message list if p_init_msg_list is set to TRUE  |
5917      +--------------------------------------------------------------*/
5918      IF p_init_msg_list is null THEN
5919        l_init_msg_list := FND_API.G_FALSE;
5920      ELSE
5921        l_init_msg_list := p_init_msg_list;
5922      END IF;
5923 
5924      IF FND_API.to_Boolean(l_init_msg_list) THEN
5925        FND_MSG_PUB.initialize;
5926      END IF;
5927 
5928      /*-----------------------------------------+
5929       |   Initialize return status to SUCCESS   |
5930       +-----------------------------------------*/
5931 
5932       x_return_status := FND_API.G_RET_STS_SUCCESS;
5933 
5934      /*-----------------------------------------+
5935       |   Populate Global Variable              |
5936       +-----------------------------------------*/
5937 
5938       G_PUB_SRVC := l_api_name;
5939       G_DATA_TRANSFER_MODE := 'PLS';
5940       G_EXTERNAL_API_CALL  := 'N';
5941 
5942      /*--------------------------------+
5943       |   Update gl date               |
5944       +-------------------------------*/
5945       ZX_TRL_PUB_PKG.update_gl_date(p_gl_date =>p_gl_date,
5946                                     x_return_status =>l_return_status
5947                                     );
5948 
5949        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5950          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
5951            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');
5952          END IF;
5953          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
5954            RAISE FND_API.G_EXC_ERROR;
5955          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
5956            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5957          END IF;
5958        END IF;
5959 
5960       IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
5961         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()+');
5962       END IF;
5963 
5964       EXCEPTION
5965       WHEN FND_API.G_EXC_ERROR THEN
5966         ROLLBACK TO Update_Tax_Dist_Gl_Date_PVT;
5967         x_return_status := FND_API.G_RET_STS_ERROR ;
5968         /*---------------------------------------------------------+
5969          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5970          | in the message stack. If there is only one message in   |
5971          | the stack it retrieves this message                     |
5972          +---------------------------------------------------------*/
5973         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5974                                   p_count   =>      x_msg_count,
5975                                   p_data    =>      x_msg_data
5976                                   );
5977         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5978           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5979         END IF;
5980 
5981        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5982          ROLLBACK TO Update_Tax_Dist_GL_Date_PVT;
5983          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
5984          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
5985          FND_MSG_PUB.Add;
5986         /*---------------------------------------------------------+
5987          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
5988          | in the message stack. If there is only one message in   |
5989          | the stack it retrieves this message                     |
5990          +---------------------------------------------------------*/
5991          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
5992                                    p_count       =>      x_msg_count,
5993                                    p_data        =>      x_msg_data
5994                                    );
5995          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
5996            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
5997          END IF;
5998 
5999         WHEN OTHERS THEN
6000          ROLLBACK TO Update_tax_dist_gl_date_PVT;
6001          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6002          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6003          FND_MSG_PUB.Add;
6007          | the stack it retrieves this message                     |
6004         /*---------------------------------------------------------+
6005          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6006          | in the message stack. If there is only one message in   |
6008          +---------------------------------------------------------*/
6009          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6010                                    p_count       =>      x_msg_count,
6011                                    p_data        =>      x_msg_data
6012                                    );
6013          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6014            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6015          END IF;
6016 
6017  END update_tax_dist_gl_date;
6018 
6019  /* =====================================================================*
6020  | PROCEDURE Update_exchange_rate : Updates Exchange Rate                |
6021  +========================================================================*/
6022 
6023  PROCEDURE update_exchange_rate
6024   ( p_api_version           IN         NUMBER,
6025     p_init_msg_list         IN         VARCHAR2,
6026     p_commit                IN         VARCHAR2,
6027     p_validation_level      IN         NUMBER,
6028     x_return_status         OUT NOCOPY VARCHAR2,
6029     x_msg_count             OUT NOCOPY NUMBER,
6030     x_msg_data              OUT NOCOPY VARCHAR2,
6031     p_transaction_rec       IN         transaction_rec_type,
6032     p_curr_conv_rate        IN         NUMBER,
6033     p_curr_conv_date        IN         DATE,
6034     p_curr_conv_type        IN         VARCHAR2
6035    ) IS
6036    l_api_name          CONSTANT  VARCHAR2(30) := 'UPDATE_EXCHANGE_RATE';
6037    l_api_version       CONSTANT  NUMBER := 1.0;
6038    l_event_class_rec             event_class_rec_type;
6039    l_return_status               VARCHAR2(30);
6040    l_ledger_id                   NUMBER;
6041    l_init_msg_list               VARCHAR2(1);
6042 
6043  BEGIN
6044 
6045      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6046        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
6047      END IF;
6048 
6049      /*--------------------------------------------------+
6050       |   Standard start of API savepoint                |
6051       +--------------------------------------------------*/
6052       SAVEPOINT Update_Exchange_Rate_PVT;
6053 
6054      /*--------------------------------------------------+
6055       |   Standard call to check for call compatibility  |
6056       +--------------------------------------------------*/
6057      IF NOT FND_API.Compatible_API_Call( l_api_version,
6058                                          p_api_version,
6059                                          l_api_name,
6060                                          G_PKG_NAME
6061                                         ) THEN
6062         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6063       END IF;
6064 
6065      /*--------------------------------------------------------------+
6066       |   Initialize message list if p_init_msg_list is set to TRUE  |
6067       +--------------------------------------------------------------*/
6068       IF p_init_msg_list is null THEN
6069         l_init_msg_list := FND_API.G_FALSE;
6070       ELSE
6071 	l_init_msg_list := p_init_msg_list;
6072       END IF;
6073 
6074       IF FND_API.to_Boolean(l_init_msg_list) THEN
6075         FND_MSG_PUB.initialize;
6076       END IF;
6077 
6078      /*-----------------------------------------+
6079       |   Initialize return status to SUCCESS   |
6080       +-----------------------------------------*/
6081 
6082       x_return_status := FND_API.G_RET_STS_SUCCESS;
6083 
6084       /*-----------------------------------------+
6085       |   Populate Global Variable              |
6086       +-----------------------------------------*/
6087 
6088       G_PUB_SRVC := l_api_name;
6089       G_DATA_TRANSFER_MODE := 'PLS';
6090       G_EXTERNAL_API_CALL  := 'N';
6091 
6092       /*---------------------------------------------+
6093        |   Missing Currency Conversion Rate          |
6094        +---------------------------------------------*/
6095        IF p_curr_conv_rate is NULL THEN
6096          FND_MESSAGE.SET_NAME('ZX','ZX_CURRENCY_CONVERSION_RATE_REQD');
6097          FND_MSG_PUB.Add;
6098          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6099             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6100             'Currency conversion rate is passed as null');
6101          END IF;
6102          RAISE FND_API.G_EXC_ERROR;
6103        END IF;
6104 
6105       /*---------------------------------------------+
6106        |   Missing Currency Conversion Date          |
6107        +---------------------------------------------*/
6108        IF p_curr_conv_date is NULL THEN
6109          FND_MESSAGE.SET_NAME('ZX','ZX_CURRENCY_CONVERSION_DATE_REQD');
6110          FND_MSG_PUB.Add;
6111          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6112             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6113             'Currency conversion date is passed as null');
6114          END IF;
6115          RAISE FND_API.G_EXC_ERROR;
6116        END IF;
6117 
6118        /*---------------------------------------------+
6119         |   Missing Currency Conversion Type          |
6120         +---------------------------------------------*/
6121         IF p_curr_conv_type is NULL THEN
6125             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
6122           FND_MESSAGE.SET_NAME('ZX','ZX_CURRENCY_CONVERSION_TYPE_REQD');
6123           FND_MSG_PUB.Add;
6124          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6126             'Currency conversion type is passed as null');
6127          END IF;
6128          RAISE FND_API.G_EXC_ERROR;
6129         END IF;
6130 
6131        /*-----------------------------------------+
6132         |   Call Check Trx Rec                    |
6133         +-----------------------------------------*/
6134         ZX_CHECK_REQUIRED_PARAMS_PKG.check_trx_rec(l_return_status,
6135                                                    p_transaction_rec
6136                                                   );
6137 
6138         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6139           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6140              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');
6141           END IF;
6142           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6143             RAISE FND_API.G_EXC_ERROR;
6144           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6145             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6146           END IF;
6147         END IF;
6148 
6149        /*-------------------------------------------------+
6150         |  Retrieve the ledger id to pass to TDS process  |
6151         +------------------------------------------------*/
6152         SELECT ledger_id
6153           INTO l_ledger_id
6154           FROM ZX_LINES_DET_FACTORS
6155          WHERE application_id   = p_transaction_rec.application_id
6156            AND entity_code      = p_transaction_rec.entity_code
6157            AND event_class_code = p_transaction_rec.event_class_code
6158            AND trx_id           = p_transaction_rec.trx_id
6159            AND rownum           = 1;
6160 
6161        /*-------------------------------------------------+
6162         |  Call TDS routine update_exchange_rate          |
6163         +------------------------------------------------*/
6164         ZX_TDS_CALC_SERVICES_PUB_PKG.update_exchange_rate(p_event_class_rec          => l_event_class_rec,
6165                                                           p_ledger_id                => l_ledger_id,
6166                                                           p_currency_conversion_rate => p_curr_conv_rate,
6167                                                           p_currency_conversion_type => p_curr_conv_type,
6168                                                           p_currency_conversion_date => p_curr_conv_date,
6169                                                           x_return_status            => l_return_status
6170                                                          );
6171 
6172         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6173           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6174             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');
6175           END IF;
6176           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6177             RAISE FND_API.G_EXC_ERROR;
6178           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6179             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6180           END IF;
6181         END IF;
6182        /*------------------------------------------------+
6183         |  Update zx_lines_det_factors for currency info  |
6184         +------------------------------------------------*/
6185          UPDATE ZX_LINES_DET_FACTORS SET
6186             CURRENCY_CONVERSION_DATE  = p_curr_conv_date,
6187             CURRENCY_CONVERSION_RATE  = p_curr_conv_rate,
6188             CURRENCY_CONVERSION_TYPE  = p_curr_conv_type
6189          WHERE  APPLICATION_ID    = p_transaction_rec.APPLICATION_ID
6190             AND ENTITY_CODE       = p_transaction_rec.ENTITY_CODE
6191             AND EVENT_CLASS_CODE  = p_transaction_rec.EVENT_CLASS_CODE
6192             AND TRX_ID            = p_transaction_rec.TRX_ID;
6193 
6194         IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6195           FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()+');
6196         END IF;
6197 
6198        EXCEPTION
6199        WHEN FND_API.G_EXC_ERROR THEN
6200          ROLLBACK TO Update_Exchange_Rate_PVT;
6201          x_return_status := FND_API.G_RET_STS_ERROR ;
6202         /*---------------------------------------------------------+
6203          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6204          | in the message stack. If there is only one message in   |
6205          | the stack it retrieves this message                     |
6206          +---------------------------------------------------------*/
6207          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6208                                    p_count   =>      x_msg_count,
6209                                    p_data    =>      x_msg_data
6210                                    );
6211 
6212          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6213             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,SQLERRM);
6214          END IF;
6215 
6216        WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6217          ROLLBACK TO Update_Exchange_Rate_PVT;
6218          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6219          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6220          FND_MSG_PUB.Add;
6221         /*---------------------------------------------------------+
6222          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6223          | in the message stack. If there is only one message in   |
6224          | the stack it retrieves this message                     |
6225          +---------------------------------------------------------*/
6226          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6227                                    p_count       =>      x_msg_count,
6228                                    p_data        =>      x_msg_data
6229                                    );
6230          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6231             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,SQLERRM);
6232          END IF;
6233 
6234         WHEN OTHERS THEN
6235            ROLLBACK TO Update_Exchange_Rate_PVT;
6236            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6237            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6238            FND_MSG_PUB.Add;
6239           /*---------------------------------------------------------+
6240            | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6241            | in the message stack. If there is only one message in   |
6242            | the stack it retrieves this message                     |
6243            +---------------------------------------------------------*/
6244            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6245                                      p_count       =>      x_msg_count,
6246                                      p_data        =>      x_msg_data
6247                                      );
6248 
6249            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6250               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6251            END IF;
6252 
6253  END Update_Exchange_Rate;
6254 
6255 /* =============================================================================*
6256  | PROCEDURE  Discard_tax_only_lines : Called when the whole document containing|
6257  |                                     tax only lines is cancelled              |
6258  * =============================================================================*/
6259  PROCEDURE discard_tax_only_lines
6260  ( p_api_version           IN         NUMBER,
6261    p_init_msg_list         IN         VARCHAR2,
6262    p_commit                IN         VARCHAR2,
6263    p_validation_level      IN         NUMBER,
6264    x_return_status         OUT NOCOPY VARCHAR2,
6265    x_msg_count             OUT NOCOPY NUMBER,
6266    x_msg_data              OUT NOCOPY VARCHAR2,
6267    p_transaction_rec       IN         transaction_rec_type
6268    ) IS
6269    l_api_name          CONSTANT  VARCHAR2(30) := 'DISCARD_TAX_ONLY_LINES';
6270    l_api_version       CONSTANT  NUMBER := 1.0;
6271    l_return_status               VARCHAR2(30);
6272    l_event_class_rec             event_class_rec_type;
6273    l_init_msg_list               VARCHAR2(1);
6274 
6275  CURSOR get_event_class_info IS
6276  SELECT summarization_flag,
6277         retain_summ_tax_line_id_flag
6278    FROM zx_evnt_cls_mappings
6279   WHERE application_id = p_transaction_rec.application_id
6280     AND entity_code = p_transaction_rec.entity_code
6281     AND event_class_code = p_transaction_rec.event_class_code;
6282 
6283  BEGIN
6284    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6285      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
6286    END IF;
6287 
6288 
6289    /*--------------------------------------------------+
6290     |   Standard start of API savepoint                |
6291     +--------------------------------------------------*/
6292     SAVEPOINT discard_tax_only_lines_PVT;
6293 
6294     /*--------------------------------------------------+
6295      |   Standard call to check for call compatibility  |
6296      +--------------------------------------------------*/
6297      IF NOT FND_API.Compatible_API_Call( l_api_version,
6298                                          p_api_version,
6299                                          l_api_name,
6300                                          G_PKG_NAME
6301                                          ) THEN
6302         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6303       END IF;
6304 
6305     /*--------------------------------------------------------------+
6306      |   Initialize message list if p_init_msg_list is set to TRUE  |
6307      +--------------------------------------------------------------*/
6308       IF p_init_msg_list is null THEN
6309         l_init_msg_list := FND_API.G_FALSE;
6310       ELSE
6311 	l_init_msg_list := p_init_msg_list;
6312       END IF;
6313 
6314       IF FND_API.to_Boolean(l_init_msg_list) THEN
6315         FND_MSG_PUB.initialize;
6316       END IF;
6317 
6318       /*-----------------------------------------+
6319        |   Initialize return status to SUCCESS   |
6320        +-----------------------------------------*/
6321        x_return_status := FND_API.G_RET_STS_SUCCESS;
6322 
6323        /*-----------------------------------------+
6324         |   Populate Global Variable              |
6325         +-----------------------------------------*/
6326         G_PUB_SRVC := l_api_name;
6327         G_DATA_TRANSFER_MODE := 'PLS';
6328         G_EXTERNAL_API_CALL  := 'N';
6329 
6330        /*------------------------------------------------------+
6331         |   Validate Input Paramerters and Fetch Tax Options   |
6332         +------------------------------------------------------*/
6336 
6333         ZX_VALID_INIT_PARAMS_PKG.discard_tax_only_lines(x_return_status  => l_return_status ,
6334                                                         p_trx_rec        => p_transaction_rec
6335                                                        );
6337         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6338           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6339             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');
6340           END IF;
6341           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6342             RAISE FND_API.G_EXC_ERROR;
6343           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6344             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6345           END IF;
6346         END IF;
6347 
6348         l_event_class_rec.application_id       := p_transaction_rec.application_id;
6349         l_event_class_rec.entity_code          := p_transaction_rec.entity_code;
6350         l_event_class_rec.event_class_code     := p_transaction_rec.event_class_code;
6351         l_event_class_rec.event_type_code      := p_transaction_rec.event_type_code;
6352         l_event_class_rec.trx_id               := p_transaction_rec.trx_id;
6353         l_event_class_rec.first_pty_org_id     := p_transaction_rec.first_pty_org_id;
6354         l_event_class_rec.tax_event_class_code := p_transaction_rec.tax_event_class_code;
6355         l_event_class_rec.tax_event_type_code  := p_transaction_rec.tax_event_type_code;
6356 
6357          -- Get Event Class Info.
6358 
6359         OPEN  get_event_class_info;
6360         FETCH get_event_class_info INTO
6361               l_event_class_rec.summarization_flag,
6362               l_event_class_rec.retain_summ_tax_line_id_flag;
6363 
6364         IF get_event_class_info%NOTFOUND THEN
6365 
6366          IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
6367 
6368              FND_LOG.STRING(G_LEVEL_STATEMENT,
6369                      G_MODULE_NAME || l_api_name,
6370                      G_PKG_NAME||':'||l_api_name||': Event Class Info not retreived');
6371          END IF;
6372 
6373         END IF;
6374 
6375         CLOSE get_event_class_info;
6376 
6377        /*--------------------------------------------------+
6378         |   Call to Service Type Discard Tax Only Lines    |
6379         +--------------------------------------------------*/
6380         IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6381            FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
6382              'Updating Tax Lines for Transaction: '||
6383              to_char(p_transaction_rec.trx_id)||
6384              ' of Application: '||
6385              to_char(p_transaction_rec.application_id)||
6386              ' and Event Class: '||
6387              p_transaction_rec.event_class_code
6388             );
6389         END IF;
6390 
6391         ZX_SRVC_TYP_PKG.discard_tax_only_lines(p_event_class_rec    => l_event_class_rec,
6392                                                x_return_status      => l_return_status
6393                                                );
6394 
6395         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6396           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6397             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');
6398           END IF;
6399           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6400             RAISE FND_API.G_EXC_ERROR;
6401           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6402             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6403           END IF;
6404         END IF;
6405 
6406         IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6407            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
6408         END IF;
6409 
6410        EXCEPTION
6411          WHEN FND_API.G_EXC_ERROR THEN
6412            ROLLBACK TO discard_tax_only_lines_PVT;
6413            x_return_status := FND_API.G_RET_STS_ERROR ;
6414           /*---------------------------------------------------------+
6415            | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6416            | in the message stack. If there is only one message in   |
6417            | the stack it retrieves this message                     |
6418            +---------------------------------------------------------*/
6419            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6420                                      p_count   =>      x_msg_count,
6421                                      p_data    =>      x_msg_data
6422                                      );
6423            IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6424              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6425            END IF;
6426 
6427          WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6428             ROLLBACK TO discard_tax_only_lines_PVT;
6429             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6430             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6431             FND_MSG_PUB.Add;
6432            /*---------------------------------------------------------+
6433             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6434             | in the message stack. If there is only one message in   |
6435             | the stack it retrieves this message                     |
6436             +---------------------------------------------------------*/
6437             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6441             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6438                                       p_count   =>      x_msg_count,
6439                                       p_data    =>      x_msg_data
6440                                       );
6442               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6443             END IF;
6444 
6445          WHEN OTHERS THEN
6446             ROLLBACK TO discard_tax_only_lines_PVT;
6447             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6448             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6449             FND_MSG_PUB.Add;
6450            /*---------------------------------------------------------+
6451             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6452             | in the message stack. If there is only one message in   |
6453             | the stack it retrieves this message                     |
6454             +---------------------------------------------------------*/
6455             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6456                                       p_count       =>      x_msg_count,
6457                                       p_data        =>      x_msg_data
6458                                       );
6459             IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6460               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6461             END IF;
6462  END discard_tax_only_lines;
6463 
6464 
6465 /* =======================================================================*
6466  | PROCEDURE  validate_document_for_tax :                                 |
6467  * =======================================================================*/
6468 
6469  PROCEDURE Validate_document_for_tax
6470  ( p_api_version           IN            NUMBER,
6471    p_init_msg_list         IN            VARCHAR2 ,
6472    p_commit                IN            VARCHAR2,
6473    p_validation_level      IN            NUMBER,
6474    x_return_status         OUT    NOCOPY VARCHAR2 ,
6475    x_msg_count             OUT    NOCOPY NUMBER ,
6476    x_msg_data              OUT    NOCOPY VARCHAR2,
6477    p_transaction_rec       IN OUT NOCOPY transaction_rec_type,
6478    x_validation_status     OUT    NOCOPY VARCHAR2,
6479    x_hold_codes_tbl        OUT    NOCOPY ZX_API_PUB.hold_codes_tbl_type
6480   ) IS
6481    l_api_name          CONSTANT  VARCHAR2(30) := 'VALIDATE_DOCUMENT_FOR_TAX';
6482    l_api_version       CONSTANT  NUMBER := 1.0;
6483    l_return_status               VARCHAR2(30);
6484    l_init_msg_list               VARCHAR2(1);
6485    l_event_class_rec             event_class_rec_type;
6486 
6487  BEGIN
6488    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6489       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
6490    END IF;
6491 
6492 
6493    /*--------------------------------------------------+
6494     |   Standard start of API savepoint                |
6495     +--------------------------------------------------*/
6496    SAVEPOINT Validate_Document_PVT;
6497 
6498     /*--------------------------------------------------+
6499      |   Standard call to check for call compatibility  |
6500      +--------------------------------------------------*/
6501     IF NOT FND_API.Compatible_API_Call(l_api_version,
6502                                         p_api_version,
6503                                         l_api_name,
6504                                         G_PKG_NAME
6505                                         ) THEN
6506         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6507     END IF;
6508 
6509     /*--------------------------------------------------------------+
6510      |   Initialize message list if p_init_msg_list is set to TRUE  |
6511      +--------------------------------------------------------------*/
6512      IF p_init_msg_list is null THEN
6513        l_init_msg_list := FND_API.G_FALSE;
6514      ELSE
6515         l_init_msg_list := p_init_msg_list;
6516      END IF;
6517 
6518      IF FND_API.to_Boolean(l_init_msg_list) THEN
6519        FND_MSG_PUB.initialize;
6520      END IF;
6521 
6522     /*-----------------------------------------+
6523      |   Initialize return status to SUCCESS   |
6524      +-----------------------------------------*/
6525 
6526      x_return_status := FND_API.G_RET_STS_SUCCESS;
6527 
6528     /*-----------------------------------------+
6529      |   Populate Global Variable              |
6530      +-----------------------------------------*/
6531      G_PUB_SRVC := l_api_name;
6532      G_DATA_TRANSFER_MODE := 'PLS';
6533      G_EXTERNAL_API_CALL  := 'N';
6534 
6535     /*------------------------------------------------------+
6536      |   Validate Input Paramerters and Fetch Tax Options   |
6537      +------------------------------------------------------*/
6538      ZX_VALID_INIT_PARAMS_PKG.validate_document_for_tax(x_return_status   => l_return_status,
6539                                                         p_event_class_rec => l_event_class_rec,
6540                                                         p_trx_rec         => p_transaction_rec
6541                                                        );
6542 
6543      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6544        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6545          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');
6546        END IF;
6547        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6548          RAISE FND_API.G_EXC_ERROR;
6549        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6553 
6550          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6551        END IF;
6552      END IF;
6554     /*--------------------------------------------------+
6555      |   Call Service Type Validate Document for Tax    |
6556      +--------------------------------------------------*/
6557      ZX_SRVC_TYP_PKG.validate_document_for_tax(p_trx_rec             => p_transaction_rec,
6558                                                p_event_class_rec     => l_event_class_rec,
6559                                                x_validation_status   => x_validation_status,
6560                                                x_hold_status_code    => x_hold_codes_tbl,
6561                                                x_return_status       => l_return_status
6562                                               );
6563 
6564      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6565        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6566          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');
6567        END IF;
6568        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6569          RAISE FND_API.G_EXC_ERROR;
6570        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6571          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6572        END IF;
6573      END IF;
6574 
6575     /*------------------------------------------------+
6576      |  Update zx_lines_det_factors                   |
6577      +------------------------------------------------*/
6578      UPDATE ZX_LINES_DET_FACTORS
6579        SET TAX_EVENT_TYPE_CODE = l_event_class_rec.tax_event_type_code,
6580            DOC_EVENT_STATUS    = l_event_class_rec.doc_status_code
6581      WHERE APPLICATION_ID  = p_transaction_rec.APPLICATION_ID
6582       AND ENTITY_CODE       = p_transaction_rec.ENTITY_CODE
6583       AND EVENT_CLASS_CODE  = p_transaction_rec.EVENT_CLASS_CODE
6584       AND TRX_ID            = p_transaction_rec.TRX_ID;
6585 
6586      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6587          FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
6588      END IF;
6589 
6590      EXCEPTION
6591        WHEN FND_API.G_EXC_ERROR THEN
6592          ROLLBACK TO Validate_Document_PVT;
6593          x_return_status := FND_API.G_RET_STS_ERROR ;
6594         /*---------------------------------------------------------+
6595          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6596          | in the message stack. If there is only one message in   |
6597          | the stack it retrieves this message                     |
6598          +---------------------------------------------------------*/
6599          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6600                                    p_count   => x_msg_count,
6601                                    p_data    => x_msg_data
6602                                    );
6603          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6604             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6605          END IF;
6606 
6607         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6608           ROLLBACK TO Validate_Document_PVT;
6609           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6610           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6611           FND_MSG_PUB.Add;
6612         /*---------------------------------------------------------+
6613          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6614          | in the message stack. If there is only one message in   |
6615          | the stack it retrieves this message                     |
6616          +---------------------------------------------------------*/
6617           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6618                                     p_count   => x_msg_count,
6619                                     p_data    => x_msg_data
6620                                     );
6621           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6622              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6623           END IF;
6624 
6625 
6626         WHEN OTHERS THEN
6627            ROLLBACK TO Validate_Document_PVT;
6628            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6629            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6630            FND_MSG_PUB.Add;
6631           /*---------------------------------------------------------+
6632            | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6633            | in the message stack. If there is only one message in   |
6634            | the stack it retrieves this message                     |
6635            +---------------------------------------------------------*/
6636            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6637                                      p_count   => x_msg_count,
6638                                      p_data    => x_msg_data
6639                                     );
6640 
6641            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6642               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6643            END IF;
6644 
6645  END validate_document_for_tax;
6646 
6647 
6648 /* =======================================================================*
6649  | PROCEDURE  validate_document_for_tax for Receivables Autoinvoice       |
6650  |            and recurring invoice.                                      |
6651  |            Bug 5518807                                                 |
6652  * =======================================================================*/
6653 
6657    p_commit                IN            VARCHAR2,
6654  PROCEDURE Validate_document_for_tax
6655  ( p_api_version           IN            NUMBER,
6656    p_init_msg_list         IN            VARCHAR2 ,
6658    p_validation_level      IN            NUMBER,
6659    x_return_status         OUT    NOCOPY VARCHAR2 ,
6660    x_msg_count             OUT    NOCOPY NUMBER ,
6661    x_msg_data              OUT    NOCOPY VARCHAR2
6662   ) IS
6663     l_api_name          CONSTANT  VARCHAR2(30) := 'BULK_VALIDATE_DOCUMENT_FOR_TAX';
6664     l_api_version       CONSTANT  NUMBER := 1.0;
6665     l_return_status               VARCHAR2(30);
6666     l_init_msg_list               VARCHAR2(1);
6667 
6668     CURSOR c_headers is
6669        SELECT zthg.application_id
6670             , zthg.entity_code
6671             , zthg.event_class_code
6672             , zthg.trx_id
6673             , zetm.event_type_code  -- Bug 5598384
6674             , zect.tax_event_type_code
6675             , zect.status_code
6676          FROM ZX_TRX_HEADERS_GT zthg
6677             , ZX_EVNT_TYP_MAPPINGS zetm
6678             , ZX_EVNT_CLS_TYPS zect
6679         WHERE zthg.event_class_code     = zetm.event_class_code
6680           AND zthg.entity_code          = zetm.entity_code
6681           AND zthg.application_id       = zetm.application_id
6682           AND zetm.event_type_code      = DECODE(zetm.event_class_code,   -- Bug 5598384
6683                                           'INVOICE', 'INV_COMPLETE',
6684                                           'DEBIT_MEMO', 'DM_COMPLETE',
6685                                           'CREDIT_MEMO', 'CM_COMPLETE'
6686                                           )
6687           AND zect.tax_event_class_code = zetm.tax_event_class_code
6688           AND zect.tax_event_type_code  = zetm.tax_event_type_code
6689           AND (validation_check_flag is null OR
6690                validation_check_flag <> 'N');
6691 
6692     l_application_id_tbl     	NUMBER_tbl_type;
6693     l_entity_code_tbl    	VARCHAR2_30_tbl_type;
6694     l_event_class_code_tbl	VARCHAR2_30_tbl_type;
6695     l_trx_id_tbl		NUMBER_tbl_type;
6696     l_event_type_code_tbl	VARCHAR2_30_tbl_type;
6697     l_tax_event_type_code_tbl	VARCHAR2_30_tbl_type;
6698     l_doc_event_status_tbl	VARCHAR2_30_tbl_type;
6699 
6700 
6701  BEGIN
6702    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6703       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'(+)');
6704    END IF;
6705 
6706 
6707    /*--------------------------------------------------+
6708     |   Standard start of API savepoint                |
6709     +--------------------------------------------------*/
6710    SAVEPOINT Validate_Document_PVT;
6711 
6712     /*--------------------------------------------------+
6713      |   Standard call to check for call compatibility  |
6714      +--------------------------------------------------*/
6715     IF NOT FND_API.Compatible_API_Call(l_api_version,
6716                                         p_api_version,
6717                                         l_api_name,
6718                                         G_PKG_NAME
6719                                         ) THEN
6720         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6721     END IF;
6722 
6723     /*--------------------------------------------------------------+
6724      |   Initialize message list if p_init_msg_list is set to TRUE  |
6725      +--------------------------------------------------------------*/
6726      IF p_init_msg_list is null THEN
6727        l_init_msg_list := FND_API.G_FALSE;
6728      ELSE
6729         l_init_msg_list := p_init_msg_list;
6730      END IF;
6731 
6732      IF FND_API.to_Boolean(l_init_msg_list) THEN
6733        FND_MSG_PUB.initialize;
6734      END IF;
6735 
6736     /*-----------------------------------------+
6737      |   Initialize return status to SUCCESS   |
6738      +-----------------------------------------*/
6739 
6740      x_return_status := FND_API.G_RET_STS_SUCCESS;
6741 
6742     /*-----------------------------------------+
6743      |   Populate Global Variable              |
6744      +-----------------------------------------*/
6745      G_PUB_SRVC := l_api_name;
6746      G_DATA_TRANSFER_MODE := 'PLS';
6747      G_EXTERNAL_API_CALL  := 'N';
6748 
6749      BEGIN
6750         OPEN C_HEADERS;
6751         LOOP
6752            FETCH c_HEADERS BULK COLLECT INTO
6753                l_application_id_tbl,
6754                l_entity_code_tbl,
6755                l_event_class_code_tbl,
6756                l_trx_id_tbl,
6757                l_event_type_code_tbl,
6758                l_tax_event_type_code_tbl,
6759                l_doc_event_status_tbl
6760            LIMIT G_LINES_PER_FETCH;
6761 
6762 
6763            FORALL i IN l_application_id_tbl.FIRST .. l_application_id_tbl.LAST
6764               UPDATE ZX_LINES_DET_FACTORS
6765                  SET EVENT_TYPE_CODE     = l_event_type_code_tbl(i),
6766                      TAX_EVENT_TYPE_CODE = l_tax_event_type_code_tbl(i),
6767                      DOC_EVENT_STATUS    = l_doc_event_status_tbl(i)
6768                WHERE
6769                      APPLICATION_ID    = l_application_id_tbl(i)
6770                  AND ENTITY_CODE       = l_entity_code_tbl(i)
6771                  AND EVENT_CLASS_CODE  = l_event_class_code_tbl(i)
6772                  AND TRX_ID            = l_trx_id_tbl(i);
6773 
6774            exit when c_HEADERS%NOTFOUND;
6775         END LOOP;
6776 
6780      EXCEPTION
6777         close c_HEADERS;
6778      END;
6779 
6781        WHEN FND_API.G_EXC_ERROR THEN
6782          ROLLBACK TO Validate_Document_PVT;
6783          x_return_status := FND_API.G_RET_STS_ERROR ;
6784         /*---------------------------------------------------------+
6785          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6786          | in the message stack. If there is only one message in   |
6787          | the stack it retrieves this message                     |
6788          +---------------------------------------------------------*/
6789          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6790                                    p_count   => x_msg_count,
6791                                    p_data    => x_msg_data
6792                                    );
6793          IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6794             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6795          END IF;
6796 
6797         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6798           ROLLBACK TO Validate_Document_PVT;
6799           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6800           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6801           FND_MSG_PUB.Add;
6802         /*---------------------------------------------------------+
6803          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6804          | in the message stack. If there is only one message in   |
6805          | the stack it retrieves this message                     |
6806          +---------------------------------------------------------*/
6807           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6808                                     p_count   => x_msg_count,
6809                                     p_data    => x_msg_data
6810                                     );
6811           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6812              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6813           END IF;
6814 
6815 
6816         WHEN OTHERS THEN
6817            ROLLBACK TO Validate_Document_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 validate_document_for_tax;
6836 
6837 
6838 /* ============================================================================*
6839  | PROCEDURE get_default_tax_line_attribs : default the tax status and tax rate|
6840  |                                       based on the tax regime and tax       |
6841  * ===========================================================================*/
6842  PROCEDURE get_default_tax_line_attribs
6843  ( p_api_version            IN         NUMBER,
6844    p_init_msg_list          IN         VARCHAR2,
6845    p_commit                 IN         VARCHAR2,
6846    p_validation_level       IN         NUMBER,
6847    x_return_status          OUT NOCOPY VARCHAR2,
6848    x_msg_count              OUT NOCOPY NUMBER,
6849    x_msg_data               OUT NOCOPY VARCHAR2,
6850    p_tax_regime_code	    IN	       VARCHAR2,
6851    p_tax 	            IN	       VARCHAR2,
6852    p_effective_date	    IN	       DATE,
6853    x_tax_status_code	    OUT	NOCOPY VARCHAR2,
6854    x_tax_rate_code          OUT NOCOPY VARCHAR2
6855  )  IS
6856    l_api_name          CONSTANT  VARCHAR2(30) := 'GET_DEFAULT_TAX_LINE_ATTRIBS';
6857    l_api_version       CONSTANT  NUMBER := 1.0;
6858    l_return_status               VARCHAR2(30);
6859    l_error_buffer                VARCHAR2(1000);
6860    l_tax_method                  VARCHAR2(30);
6861    l_init_msg_list               VARCHAR2(1);
6862 
6863  BEGIN
6864    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6865      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
6866    END IF;
6867 
6868 
6869   /*--------------------------------------------------+
6870    |   Standard start of API savepoint                |
6871    +--------------------------------------------------*/
6872    SAVEPOINT Get_Default_Tax_Line_Attrs_PVT;
6873 
6874    /*--------------------------------------------------+
6875     |   Standard call to check for call compatibility  |
6876     +--------------------------------------------------*/
6877     IF NOT FND_API.Compatible_API_Call(l_api_version,
6878                                        p_api_version,
6879                                        l_api_name,
6880                                        G_PKG_NAME
6881                                        ) THEN
6882        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6883      END IF;
6884 
6885     /*--------------------------------------------------------------+
6886      |   Initialize message list if p_init_msg_list is set to TRUE  |
6887      +--------------------------------------------------------------*/
6891        l_init_msg_list := p_init_msg_list;
6888      IF p_init_msg_list is null THEN
6889        l_init_msg_list := FND_API.G_FALSE;
6890      ELSE
6892      END IF;
6893 
6894      IF FND_API.to_Boolean(l_init_msg_list) THEN
6895        FND_MSG_PUB.initialize;
6896      END IF;
6897 
6898 
6899    /*-----------------------------------------+
6900     |   Initialize return status to SUCCESS   |
6901     +-----------------------------------------*/
6902     x_return_status := FND_API.G_RET_STS_SUCCESS;
6903 
6904    /*-----------------------------------------+
6905     |   Populate Global Variable              |
6906     +-----------------------------------------*/
6907     G_PUB_SRVC := l_api_name;
6908     G_DATA_TRANSFER_MODE := 'PLS';
6909     G_EXTERNAL_API_CALL  := 'N';
6910 
6911   /*-----------------------------------------+
6912    |   Get the tax status and tax rate       |
6913    +-----------------------------------------*/
6914      ZX_TCM_EXT_SERVICES_PUB.get_default_status_rates(p_tax_regime_code   => p_tax_regime_code,
6915                                                       p_tax               => p_tax,
6916                                                       p_date              => p_effective_date,
6917                                                       p_tax_status_code   => x_tax_status_code,
6918                                                       p_tax_rate_code     => x_tax_rate_code,
6919                                                       p_return_status     => l_return_status
6920                                                      );
6921 
6922      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6923        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
6924          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');
6925        END IF;
6926        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
6927          RAISE FND_API.G_EXC_ERROR;
6928        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
6929          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6930        END IF;
6931      END IF;
6932 
6933 
6934    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
6935      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()+');
6936    END IF;
6937 
6938    EXCEPTION
6939      WHEN FND_API.G_EXC_ERROR THEN
6940        ROLLBACK TO Get_Default_Tax_Line_Attrs_PVT;
6941        x_return_status := FND_API.G_RET_STS_ERROR ;
6942       /*---------------------------------------------------------+
6943        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6944        | in the message stack. If there is only one message in   |
6945        | the stack it retrieves this message                     |
6946        +---------------------------------------------------------*/
6947        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6948                                  p_count   => x_msg_count,
6949                                  p_data    => x_msg_data
6950                                  );
6951        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6952           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6953        END IF;
6954 
6955      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6956        ROLLBACK TO Get_Default_Tax_Line_Attrs_PVT;
6957        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6958        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6959        FND_MSG_PUB.Add;
6960       /*---------------------------------------------------------+
6961        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6962        | in the message stack. If there is only one message in   |
6963        | the stack it retrieves this message                     |
6964        +---------------------------------------------------------*/
6965        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6966                                  p_count   => x_msg_count,
6967                                  p_data    => x_msg_data
6968                                  );
6969        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
6970           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
6971        END IF;
6972 
6973      WHEN OTHERS THEN
6974        ROLLBACK TO Get_Default_Tax_Line_Attrs_PVT;
6975        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
6976        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
6977        FND_MSG_PUB.Add;
6978       /*---------------------------------------------------------+
6979        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
6980        | in the message stack. If there is only one message in   |
6981        | the stack it retrieves this message                     |
6982        +---------------------------------------------------------*/
6983        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
6984                                  p_count   => x_msg_count,
6985                                  p_data    => x_msg_data
6986                                  );
6987 
6988        IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
6989          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
6990        END IF;
6991 
6992  END get_default_tax_line_attribs;
6993 
6994 /* =================================================================================*
6995  | OVERLOADED version till XBUILD 2 so that AP processes do not get invalidated     |
6996  | NEED TO REMOVE THIS PROCEDURE ONCE AP CHANGES GO IN                                |
7000  | class, inventory organization and inventory item values:                          |
6997  |                                                                                  |
6998  | Procedure  get_default_tax_det_attribs : default the following product fiscal     |
6999  | classification based on the relevant default taxation country, application event  |
7001  |             *	trx_business_category                                        |
7002  |             *	primary_intended_use                                         |
7003  |             *	product_fisc_classification                                  |
7004  |             *	product_category                                             |
7005  * ================================================================================*/
7006 
7007 
7008  PROCEDURE get_default_tax_det_attribs
7009  ( p_api_version            IN         NUMBER,
7010    p_init_msg_list          IN         VARCHAR2,
7011    p_commit                 IN         VARCHAR2,
7012    p_validation_level       IN         NUMBER,
7013    x_return_status          OUT NOCOPY VARCHAR2 ,
7014    x_msg_count              OUT NOCOPY NUMBER ,
7015    x_msg_data               OUT NOCOPY VARCHAR2,
7016    p_application_id	    IN	       NUMBER,
7017    p_entity_code	    IN	       VARCHAR2,
7018    p_event_class_code	    IN	       VARCHAR2,
7019    p_org_id	            IN	       NUMBER,
7020    p_item_id	            IN	       NUMBER,
7021    p_country_code	    IN	       VARCHAR2,
7022    p_effective_date	    IN	       DATE,
7023    x_trx_biz_category	    OUT	NOCOPY VARCHAR2,
7024    x_intended_use	    OUT	NOCOPY VARCHAR2,
7025    x_prod_category	    OUT	NOCOPY VARCHAR2,
7026    x_prod_fisc_class_code   OUT	NOCOPY VARCHAR2,
7027    x_product_type           OUT NOCOPY VARCHAR2
7028  )  IS
7029  BEGIN
7030    NULL;
7031  END get_default_tax_det_attribs;
7032 
7033 
7034 /* =================================================================================*
7035  | Procedure  get_default_tax_det_attribs : default the following product fiscal    |
7036  | classification based on the relevant default taxation country, application event |
7037  | class, inventory organization and inventory item values:                         |
7038  |             *	trx_business_category                                       |
7039  |             *	primary_intended_use                                        |
7040  |             *	product_fisc_classification                                 |
7041  |             *	product_category                                            |
7042  * ================================================================================*/
7043 
7044 
7045  PROCEDURE get_default_tax_det_attribs
7046  ( p_api_version            IN         NUMBER,
7047    p_init_msg_list          IN         VARCHAR2,
7048    p_commit                 IN         VARCHAR2,
7049    p_validation_level       IN         NUMBER,
7050    x_return_status          OUT NOCOPY VARCHAR2 ,
7051    x_msg_count              OUT NOCOPY NUMBER ,
7052    x_msg_data               OUT NOCOPY VARCHAR2,
7053    p_application_id	    IN	       NUMBER,
7054    p_entity_code	    IN	       VARCHAR2,
7055    p_event_class_code	    IN	       VARCHAR2,
7056    p_org_id	            IN	       NUMBER,
7057    p_item_id	            IN	       NUMBER,
7058    p_country_code	    IN	       VARCHAR2,
7059    p_effective_date	    IN	       DATE,
7060    p_source_event_class_code IN        VARCHAR2,
7061    x_trx_biz_category	    OUT	NOCOPY VARCHAR2,
7062    x_intended_use	    OUT	NOCOPY VARCHAR2,
7063    x_prod_category	    OUT	NOCOPY VARCHAR2,
7064    x_prod_fisc_class_code   OUT	NOCOPY VARCHAR2,
7065    x_product_type           OUT NOCOPY VARCHAR2
7066  )  IS
7067    l_api_name          CONSTANT  VARCHAR2(30) := 'GET_DEFAULT_TAX_DET_ATTRIBS';
7068    l_api_version       CONSTANT  NUMBER := 1.0;
7069    l_return_status               VARCHAR2(30);
7070    l_error_buffer                VARCHAR2(1000);
7071    l_tax_method                  VARCHAR2(30);
7072    l_init_msg_list               VARCHAR2(1);
7073    l_internal_org_id             NUMBER;
7074    l_application_id              NUMBER;
7075    l_entity_code                 zx_evnt_cls_mappings.entity_code%TYPE;
7076    l_event_class_code            zx_evnt_cls_mappings.event_class_code%TYPE;
7077    l_zx_product_options_rec      ZX_GLOBAL_STRUCTURES_PKG.zx_product_options_rec_type;
7078 
7079   CURSOR c_trx_biz_cat_csr (c_application_id NUMBER,
7080                             c_entity_code zx_evnt_cls_mappings.entity_code%TYPE,
7081                             c_event_class_code zx_evnt_cls_mappings.event_class_code%TYPE) IS
7082   SELECT tax_event_class_code, intrcmp_tx_evnt_cls_code
7083   FROM   zx_evnt_cls_mappings
7084   WHERE  application_id = c_application_id
7085   AND    entity_code = c_entity_code
7086   AND    event_class_code = c_event_class_code;
7087 
7088   CURSOR c_intrcmp_code (c_application_id NUMBER,
7089                         c_entity_code zx_evnt_cls_mappings.entity_code%TYPE,
7090                         c_event_class_code zx_evnt_cls_mappings.event_class_code%TYPE) IS
7091   SELECT  DEF_INTRCMP_TRX_BIZ_CATEGORY
7092   FROM  ZX_EVNT_CLS_OPTIONS
7093   WHERE  application_id = c_application_id
7094   AND    entity_code = c_entity_code
7095   AND    event_class_code = c_event_class_code
7096   AND    FIRST_PTY_ORG_ID = p_org_id;
7097 
7098  BEGIN
7099    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7100      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
7101    END IF;
7102 
7103   /*--------------------------------------------------+
7107 
7104    |   Standard start of API savepoint                |
7105    +--------------------------------------------------*/
7106    SAVEPOINT Get_Default_Tax_Det_Attrs_PVT;
7108    /*--------------------------------------------------+
7109     |   Standard call to check for call compatibility  |
7110     +--------------------------------------------------*/
7111     IF NOT FND_API.Compatible_API_Call(l_api_version,
7112                                        p_api_version,
7113                                        l_api_name,
7114                                        G_PKG_NAME
7115                                        ) THEN
7116        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7117      END IF;
7118 
7119    /*--------------------------------------------------------------+
7120     |   Initialize message list if p_init_msg_list is set to TRUE  |
7121     +--------------------------------------------------------------*/
7122     IF p_init_msg_list is null THEN
7123        l_init_msg_list := FND_API.G_FALSE;
7124     ELSE
7125        l_init_msg_list := p_init_msg_list;
7126     END IF;
7127 
7128     IF FND_API.to_Boolean(l_init_msg_list) THEN
7129        FND_MSG_PUB.initialize;
7130     END IF;
7131 
7132   /*-----------------------------------------+
7133    |   Initialize return status to SUCCESS   |
7134    +-----------------------------------------*/
7135    x_return_status := FND_API.G_RET_STS_SUCCESS;
7136 
7137 
7138   /*-----------------------------------------+
7139    |   Populate Global Variable              |
7140    +-----------------------------------------*/
7141    --Currently this procedure is being called from internal TDS services when defaulting the determining
7142    --attributes in case of calculate_tax, insert_line_det_factors,etc. So need to set the parameters only
7143    --if direct call to this API and not via other published APIs
7144    IF G_PUB_CALLING_SRVC is null THEN
7145      G_PUB_SRVC := l_api_name;
7146      G_DATA_TRANSFER_MODE := 'PLS';
7147      G_EXTERNAL_API_CALL  := 'N';
7148    --ELSE
7149    --   G_PUB_CALLING_SRVC := null;
7150    END IF;
7151 
7152   /*-----------------------------------------------------------------+
7153    |   Populate Global Event Class Rec If Not Populated              |
7154    +-----------------------------------------------------------------*/
7155 
7156    l_application_id := p_application_id; --bug# 6662504
7157 
7158    IF ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.application_id IS NULL THEN
7159 
7160      IF p_event_class_code = 'SALES_TRANSACTION_TAX_QUOTE' THEN
7161        l_application_id := 222;
7162        l_entity_code := 'TRANSACTIONS';
7163        l_event_class_code := 'INVOICE';
7164      ELSIF p_event_class_code = 'PURCHASE_TRANSACTION_TAX_QUOTE' THEN
7165        l_application_id := 200;
7166        l_entity_code := 'AP_INVOICES';
7167        l_event_class_code := 'STANDARD INVOICES';
7168      ELSE
7169        l_application_id := p_application_id;
7170        l_entity_code := p_entity_code;
7171        l_event_class_code := p_event_class_code;
7172      END IF;
7173 
7174 
7175      -- Fetch tax event class and intercompany tax event class
7176 
7177      OPEN c_trx_biz_cat_csr(l_application_id, l_entity_code, l_event_class_code);
7178      FETCH c_trx_biz_cat_csr INTO ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.tax_event_class_code,
7179                                   ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.intrcmp_tx_evnt_cls_code;
7180      CLOSE c_trx_biz_cat_csr;
7181 
7182      -- Fetch default transaction business category
7183 
7184      OPEN c_intrcmp_code(l_application_id, l_entity_code, l_event_class_code);
7185      FETCH c_intrcmp_code INTO ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.DEF_INTRCMP_TRX_BIZ_CATEGORY;
7186      CLOSE c_intrcmp_code;
7187 
7188    END IF;
7189 
7190 
7191     -- Fetch tax method
7192     -- Fix for bug 5102996: Fetch tax method from zx_product_options only if it is not found in the cache
7193 
7194     ZX_GLOBAL_STRUCTURES_PKG.get_product_options_info
7195                    (p_application_id      => l_application_id,
7196                     p_org_id              => p_org_id,
7197                     x_product_options_rec => l_zx_product_options_rec,
7198                     x_return_status       => x_return_status);
7199 
7200     IF x_return_status = FND_API.G_RET_STS_ERROR then
7201 
7202         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7203            FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'Incorrect return status after calling '||
7204                           'ZX_GLOBAL_STRUCTURES_PKG.get_product_options_info');
7205         END IF;
7206         ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.tax_method_code := 'EBTAX';
7207 
7208     ELSE
7209         ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.tax_method_code := nvl(l_zx_product_options_rec.tax_method_code,'EBTAX'); --6841552
7210     END IF;
7211 
7212     l_tax_method := ZX_GLOBAL_STRUCTURES_PKG.g_event_class_rec.tax_method_code;
7213 
7214 
7215    IF l_tax_method = 'EBTAX' THEN
7216 
7217     /*---------------------------------------------------------+
7218      |   Get the default value for trx business category        |
7219      +---------------------------------------------------------*/
7220      ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code(p_fiscal_type_code  =>  'TRX_BUSINESS_CATEGORY',
7221                                                       p_country_code      =>  p_country_code,
7222                                                       p_application_id    =>  p_application_id,
7226                                                       p_org_id            =>  p_org_id,
7223                                                       p_entity_code       =>  p_entity_code,
7224                                                       p_event_class_code  =>  p_event_class_code,
7225                                                       p_source_event_class_code  =>  p_source_event_class_code,
7227                                                       p_item_id           =>  p_item_id,
7228                                                       p_default_code      =>  x_trx_biz_category,
7229                                                       p_return_status     =>  l_return_status
7230                                                      );
7231       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7232         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7233           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');
7234         END IF;
7235         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7236           RAISE FND_API.G_EXC_ERROR;
7237         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7238           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7239         END IF;
7240      ELSE
7241         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7242           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
7243           'Transaction Business Category:' || x_trx_biz_category);
7244         END IF;
7245      END IF;
7246 
7247     /*---------------------------------------------------------+
7248      |   Get the default value for Intended use                 |
7249      +---------------------------------------------------------*/
7250      ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code(p_fiscal_type_code  =>  'INTENDED_USE',
7251                                                       p_country_code      =>  p_country_code,
7252                                                       p_application_id    =>  p_application_id,
7253                                                       p_entity_code       =>  p_entity_code,
7254                                                       p_event_class_code  =>  p_event_class_code,
7255                                                       p_source_event_class_code  =>  p_source_event_class_code,
7256                                                       p_org_id            =>  p_org_id,
7257                                                       p_item_id           =>  p_item_id,
7258                                                       p_default_code      =>  x_intended_use,
7259                                                       p_return_status     =>  l_return_status
7260                                                      );
7261 
7262       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7263         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7264           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');
7265         END IF;
7266         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7267           RAISE FND_API.G_EXC_ERROR;
7268         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7269           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7270         END IF;
7271       ELSE
7272         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7273           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
7274           'Intended Use :' || x_intended_use);
7275         END IF;
7276       END IF;
7277 
7278       --Bug 6841552
7279       /*-----------------------------------------------------+
7280         |   Get the default value for product category        |
7281         +-----------------------------------------------------*/
7282         ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code(p_fiscal_type_code  =>  'PRODUCT_CATEGORY',
7283                                                          p_country_code      =>  p_country_code,
7284                                                          p_application_id    =>  p_application_id,
7285                                                          p_entity_code       =>  p_entity_code,
7286                                                          p_event_class_code  =>  p_event_class_code,
7287                                                          p_source_event_class_code  =>  p_source_event_class_code,
7288                                                          p_item_id           =>  p_item_id,
7289                                                          p_org_id            =>  p_org_id,
7290                                                          p_default_code      =>  x_prod_category ,
7291                                                          p_return_status     =>  l_return_status
7292                                                          );
7293         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7294           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7295             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');
7296           END IF;
7297           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7298             RAISE FND_API.G_EXC_ERROR;
7299           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7300             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7301           END IF;
7302         ELSE
7303           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7304             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
7308 
7305             'Product Category :' || x_prod_category);
7306           END IF;
7307         END IF;
7309       IF p_item_id is not null THEN
7310        /*---------------------------------------------------------+
7311         |   Get the value for fiscal product classification        |
7312         +---------------------------------------------------------*/
7313 	ZX_TCM_EXT_SERVICES_PUB.get_default_product_classif(p_country_code    =>  p_country_code,
7314                                                             p_item_id         =>  p_item_id,
7315                                                             p_org_id          =>  p_org_id,
7316                                                             p_default_code    =>  x_prod_fisc_class_code,
7317                                                             p_return_status   =>  l_return_status
7318                                                             );
7319         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7320           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7321             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');
7322           END IF;
7323           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7324             RAISE FND_API.G_EXC_ERROR;
7325           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7326             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7327           END IF;
7328         ELSE
7329           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7330             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
7331             'Product Fiscal Classification :'|| x_prod_fisc_class_code);
7332           END IF;
7333         END IF;
7334 
7335        /*-----------------------------------------------------+
7336         |   Get the default value for product type            |
7337         +-----------------------------------------------------*/
7338         ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code(p_fiscal_type_code  =>  'PRODUCT_TYPE',
7339                                                          p_country_code      =>  p_country_code,
7340                                                          p_application_id    =>  p_application_id,
7341                                                          p_entity_code       =>  p_entity_code,
7342                                                          p_event_class_code  =>  p_event_class_code,
7343                                                          p_source_event_class_code  =>  p_source_event_class_code,
7344                                                          p_item_id           =>  p_item_id,
7345                                                          p_org_id            =>  p_org_id,
7346                                                          p_default_code      =>  x_product_type ,
7347                                                          p_return_status     =>  l_return_status
7348                                                          );
7349         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7350           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7351             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');
7352           END IF;
7353           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7354             RAISE FND_API.G_EXC_ERROR;
7355           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7356             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7357           END IF;
7358         ELSE
7359           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7360             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
7361             'Product Type :' || x_product_type);
7362           END IF;
7363         END IF;
7364 
7365      ELSE --p_item_id is null
7366        x_product_type := null;
7367        x_prod_fisc_class_code := null;
7368 
7369        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7370          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
7371          'Product Type :' || x_product_type||
7372          ', Product Fiscal Classification :' || x_prod_fisc_class_code);
7373        END IF;
7374      END IF; --p_item_id is not null
7375    ELSIF l_tax_method = 'LTE' THEN
7376       JL_ZZ_TAX_VALIDATE_PKG.default_tax_attr(x_return_status => l_return_status);
7377 
7378       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7379         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7380           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');
7381         END IF;
7382         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7383           RAISE FND_API.G_EXC_ERROR;
7384         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7385           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7386         END IF;
7387       END IF;
7388    END IF; --tax method condition
7389 
7390    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7391      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()+');
7392    END IF;
7393 
7394    EXCEPTION
7395      WHEN FND_API.G_EXC_ERROR THEN
7396        ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
7397        x_return_status := FND_API.G_RET_STS_ERROR ;
7398       /*---------------------------------------------------------+
7399        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7403        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7400        | in the message stack. If there is only one message in   |
7401        | the stack it retrieves this message                     |
7402        +---------------------------------------------------------*/
7404                                  p_count   => x_msg_count,
7405                                  p_data    => x_msg_data
7406                                 );
7407        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7408          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,SQLERRM);
7409        END IF;
7410 
7411      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7412        ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
7413        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7414        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7415        FND_MSG_PUB.Add;
7416       /*---------------------------------------------------------+
7417        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7418        | in the message stack. If there is only one message in   |
7419        | the stack it retrieves this message                     |
7420        +---------------------------------------------------------*/
7421        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7422                                  p_count   => x_msg_count,
7423                                  p_data    => x_msg_data
7424                                  );
7425 
7426        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7427          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,SQLERRM);
7428        END IF;
7429 
7430      WHEN OTHERS THEN
7431        ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
7432        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7433        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7434        FND_MSG_PUB.Add;
7435       /*---------------------------------------------------------+
7436        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7437        | in the message stack. If there is only one message in   |
7438        | the stack it retrieves this message                     |
7439        +---------------------------------------------------------*/
7440        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7441                                  p_count   => x_msg_count,
7442                                  p_data    => x_msg_data
7443                                  );
7444        IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
7445          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
7446        END IF;
7447  END get_default_tax_det_attribs;
7448 
7449 
7450 
7451 /* =================================================================================*
7452  | Overloaded Procedure  get_default_tax_det_attribs- for products that do not call |
7453  | ARP_TAX.get_default_tax_classification                                           |
7454  | Default the following product fiscal                                             |
7455  | classification based on the relevant default taxation country, application event |
7456  | class, inventory organization and inventory item values:                         |
7457  |             *	trx_business_category                                       |
7458  |             *	primary_intended_use                                        |
7459  |             *	product_fisc_classification                                 |
7460  |             *	product_category                                            |
7461  | Also default the tax classification code                                         |
7462  * ================================================================================*/
7463 
7464  PROCEDURE get_default_tax_det_attribs
7465  (
7466    p_api_version                   IN         NUMBER,
7467    p_init_msg_list                 IN         VARCHAR2,
7468    p_commit                        IN         VARCHAR2,
7469    p_validation_level              IN         NUMBER,
7470    x_return_status                 OUT NOCOPY VARCHAR2 ,
7471    x_msg_count                     OUT NOCOPY NUMBER ,
7472    x_msg_data                      OUT NOCOPY VARCHAR2,
7473    p_defaulting_rec_type           IN         det_fact_defaulting_rec_type,
7474    x_trx_biz_category	           OUT NOCOPY VARCHAR2,
7475    x_intended_use	           OUT NOCOPY VARCHAR2,
7476    x_prod_category	           OUT NOCOPY VARCHAR2,
7477    x_prod_fisc_class_code          OUT NOCOPY VARCHAR2,
7478    x_product_type                  OUT NOCOPY VARCHAR2,
7479    x_tax_classification_code       OUT NOCOPY VARCHAR2
7480  )  IS
7481    l_api_name          CONSTANT  VARCHAR2(30) := 'GET_DEFAULT_TAX_DET_ATTRIBS';
7482    l_api_version       CONSTANT  NUMBER := 1.0;
7483    l_return_status               VARCHAR2(30);
7484    l_error_buffer                VARCHAR2(1000);
7485    l_init_msg_list               VARCHAR2(1);
7486    l_redef_tax_class_code_rec    def_tax_cls_code_info_rec_type;
7487 
7488 BEGIN
7489    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7490      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
7491    END IF;
7492 
7493   /*--------------------------------------------------+
7494    |   Standard start of API savepoint                |
7495    +--------------------------------------------------*/
7496    SAVEPOINT Get_Default_Tax_Det_Attrs_PVT;
7497 
7498    /*--------------------------------------------------+
7499     |   Standard call to check for call compatibility  |
7500     +--------------------------------------------------*/
7501     IF NOT FND_API.Compatible_API_Call(l_api_version,
7502                                        p_api_version,
7503                                        l_api_name,
7504                                        G_PKG_NAME
7505                                        ) THEN
7506        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7507      END IF;
7508 
7509    /*--------------------------------------------------------------+
7510     |   Initialize message list if p_init_msg_list is set to TRUE  |
7511     +--------------------------------------------------------------*/
7512     IF p_init_msg_list is null THEN
7513        l_init_msg_list := FND_API.G_FALSE;
7514     ELSE
7515        l_init_msg_list := p_init_msg_list;
7516     END IF;
7517 
7518     IF FND_API.to_Boolean(l_init_msg_list) THEN
7519        FND_MSG_PUB.initialize;
7520     END IF;
7521 
7522    /*-----------------------------------------+
7523     |   Initialize return status to SUCCESS   |
7524     +-----------------------------------------*/
7525     x_return_status := FND_API.G_RET_STS_SUCCESS;
7526 
7527    /*-----------------------------------------+
7528     |   Populate Global Variable              |
7529     +-----------------------------------------*/
7530     G_PUB_SRVC := l_api_name;
7531     G_DATA_TRANSFER_MODE := 'PLS';
7532     G_EXTERNAL_API_CALL  := 'N';
7533 
7534     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7535       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
7536       'application_id: ' || to_char(p_defaulting_rec_type.application_id)||
7537       ', entity_code: ' || p_defaulting_rec_type.entity_code||
7538       ', event_class_code: ' || p_defaulting_rec_type.event_class_code||
7539       ', org_id: ' || to_char(p_defaulting_rec_type.org_id)||
7540       ', item_id: ' || to_char(p_defaulting_rec_type.item_id)||
7541       ', country_code: ' || p_defaulting_rec_type.country_code||
7542       ', effective_date: ' || to_char(p_defaulting_rec_type.effective_date)||
7543       ', trx_id: ' || to_char(p_defaulting_rec_type.trx_id)||
7544       ', item_id: ' || to_char(p_defaulting_rec_type.item_id)||
7545       ', trx_date: ' || to_char(p_defaulting_rec_type.trx_date)||
7546       ', ledger_id: ' || to_char(p_defaulting_rec_type.ledger_id)||
7547       ', ship_from_party_id: ' || to_char(p_defaulting_rec_type.ship_from_party_id)||
7548       ', ship_to_party_id: ' || to_char(p_defaulting_rec_type.ship_to_party_id)||
7549       ', bill_to_party_id: ' || to_char(p_defaulting_rec_type.bill_to_party_id)||
7550       ', ship_from_pty_site_id: ' || to_char(p_defaulting_rec_type.ship_from_pty_site_id)||
7551       ', ship_to_location_id: ' || to_char(p_defaulting_rec_type.ship_to_location_id)||
7552       ', ship_to_acct_site_use_id: ' || to_char(p_defaulting_rec_type.ship_to_acct_site_use_id)||
7553       ', bill_to_acct_site_use_id: ' || to_char(p_defaulting_rec_type.bill_to_acct_site_use_id)||
7554       ', account_ccid: ' || to_char(p_defaulting_rec_type.account_ccid)||
7555       ', account_string: ' || p_defaulting_rec_type.account_string||
7556       ', ship_third_pty_acct_id: ' || to_char(p_defaulting_rec_type.ship_third_pty_acct_id)||
7557       ', bill_third_pty_acct_id: ' || to_char(p_defaulting_rec_type.bill_third_pty_acct_id)||
7558       ', ref_doc_application_id: ' || to_char(p_defaulting_rec_type.application_id)||
7559       ', ref_doc_entity_code: ' || p_defaulting_rec_type.ref_doc_entity_code||
7560       ', ref_doc_event_class_code: ' || p_defaulting_rec_type.ref_doc_event_class_code||
7561       ', ref_doc_trx_id: ' || to_char(p_defaulting_rec_type.ref_doc_trx_id)||
7562       ', ref_doc_line_id: ' || to_char(p_defaulting_rec_type.ref_doc_line_id)||
7563       ', ref_doc_trx_level_type: ' || p_defaulting_rec_type.ref_doc_trx_level_type||
7564       ', defaulting_attribute1: ' || p_defaulting_rec_type.defaulting_attribute1||
7565       ', defaulting_attribute2: ' || p_defaulting_rec_type.defaulting_attribute2||
7566       ', defaulting_attribute3: ' || p_defaulting_rec_type.defaulting_attribute3||
7567       ', defaulting_attribute4: ' || p_defaulting_rec_type.defaulting_attribute4||
7568       ', defaulting_attribute5: ' || p_defaulting_rec_type.defaulting_attribute5||
7569       ', defaulting_attribute6: ' || p_defaulting_rec_type.defaulting_attribute6||
7570       ', defaulting_attribute7: ' || p_defaulting_rec_type.defaulting_attribute7||
7571       ', defaulting_attribute8: ' || p_defaulting_rec_type.defaulting_attribute8||
7572       ', defaulting_attribute9: ' || p_defaulting_rec_type.defaulting_attribute9||
7573       ', defaulting_attribute10: ' || p_defaulting_rec_type.defaulting_attribute10||
7574       ', legal_entity_id: ' || to_char(p_defaulting_rec_type.legal_entity_id)||
7575       ', source_event_class_code: ' || to_char(p_defaulting_rec_type.source_event_class_code));
7576     END IF;
7577 
7578   /*------------------------------------------------------------------------------------------+
7579    |   Call original get_default_tax_line_attribs to get the values of fiscal classifications |
7580    +-----------------------------------------------------------------------------------------*/
7581    get_default_tax_det_attribs (p_api_version,
7582                                 l_init_msg_list,
7583                                 p_commit,
7584                                 p_validation_level,
7585                                 l_return_status,
7586                                 x_msg_count,
7587                                 x_msg_data,
7588                                 p_defaulting_rec_type.application_id,
7589                                 p_defaulting_rec_type.entity_code,
7590                                 p_defaulting_rec_type.event_class_code,
7591                                 p_defaulting_rec_type.org_id,
7592                                 p_defaulting_rec_type.item_id,
7593                                 p_defaulting_rec_type.country_code,
7594                                 p_defaulting_rec_type.effective_date,
7598                                 x_prod_category,
7595                                 p_defaulting_rec_type.source_event_class_code,
7596                                 x_trx_biz_category,
7597                                 x_intended_use,
7599                                 x_prod_fisc_class_code ,
7600                                 x_product_type
7601                                 ) ;
7602 
7603    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7604      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7605        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');
7606      END IF;
7607      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7608        RAISE FND_API.G_EXC_ERROR;
7609      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7610        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7611      END IF;
7612    END IF;
7613 
7614   /*---------------------------------------------------------------------------------+
7615    |   Copy from input structure before calling API to default the tax classification|
7616    +--------------------------------------------------------------------------------*/
7617    l_redef_tax_class_code_rec.application_id                := p_defaulting_rec_type.application_id;
7618    l_redef_tax_class_code_rec.entity_code                   := p_defaulting_rec_type.entity_code;
7619    l_redef_tax_class_code_rec.event_class_code              := p_defaulting_rec_type.event_class_code;
7620    l_redef_tax_class_code_rec.internal_organization_id      := p_defaulting_rec_type.org_id;
7621    l_redef_tax_class_code_rec.trx_id                        := p_defaulting_rec_type.trx_id;
7622    l_redef_tax_class_code_rec.trx_line_id                   := p_defaulting_rec_type.trx_line_id;
7623    l_redef_tax_class_code_rec.trx_level_type                := p_defaulting_rec_type.trx_level_type;
7624    l_redef_tax_class_code_rec.ledger_id                     := p_defaulting_rec_type.ledger_id;
7625    l_redef_tax_class_code_rec.trx_date                      := p_defaulting_rec_type.trx_date;
7626    l_redef_tax_class_code_rec.ref_doc_application_id        := p_defaulting_rec_type.ref_doc_application_id;
7627    l_redef_tax_class_code_rec.ref_doc_event_class_code      := p_defaulting_rec_type.ref_doc_event_class_code;
7628    l_redef_tax_class_code_rec.ref_doc_entity_code           := p_defaulting_rec_type.ref_doc_entity_code;
7629    l_redef_tax_class_code_rec.ref_doc_trx_id                := p_defaulting_rec_type.ref_doc_trx_id;
7630    l_redef_tax_class_code_rec.ref_doc_line_id               := p_defaulting_rec_type.ref_doc_line_id;
7631    l_redef_tax_class_code_rec.ref_doc_trx_level_type        := p_defaulting_rec_type.ref_doc_trx_level_type;
7632    l_redef_tax_class_code_rec.account_ccid                  := p_defaulting_rec_type.account_ccid;
7633    l_redef_tax_class_code_rec.account_string                := p_defaulting_rec_type.account_string;
7634    l_redef_tax_class_code_rec.product_id                    := p_defaulting_rec_type.item_id;
7635    l_redef_tax_class_code_rec.product_org_id                := p_defaulting_rec_type.item_org_id;
7636    l_redef_tax_class_code_rec.receivables_trx_type_id       := p_defaulting_rec_type.application_id;
7637    l_redef_tax_class_code_rec.ship_third_pty_acct_id        := p_defaulting_rec_type.ship_third_pty_acct_id;
7638    l_redef_tax_class_code_rec.bill_third_pty_acct_id        := p_defaulting_rec_type.bill_third_pty_acct_id;
7639    l_redef_tax_class_code_rec.ship_to_cust_acct_site_use_id := p_defaulting_rec_type.ship_to_acct_site_use_id;
7640    l_redef_tax_class_code_rec.bill_to_cust_acct_site_use_id := p_defaulting_rec_type.bill_to_acct_site_use_id;
7641    l_redef_tax_class_code_rec.ship_to_location_id           := p_defaulting_rec_type.ship_to_location_id;
7642    l_redef_tax_class_code_rec.receivables_trx_type_id       := p_defaulting_rec_type.trx_type_id;
7643    l_redef_tax_class_code_rec.defaulting_attribute1         := p_defaulting_rec_type.defaulting_attribute1;
7644    l_redef_tax_class_code_rec.defaulting_attribute2         := p_defaulting_rec_type.defaulting_attribute2;
7645    l_redef_tax_class_code_rec.defaulting_attribute3         := p_defaulting_rec_type.defaulting_attribute3;
7646    l_redef_tax_class_code_rec.defaulting_attribute4         := p_defaulting_rec_type.defaulting_attribute4;
7647    l_redef_tax_class_code_rec.defaulting_attribute5         := p_defaulting_rec_type.defaulting_attribute5;
7648    l_redef_tax_class_code_rec.defaulting_attribute6         := p_defaulting_rec_type.defaulting_attribute6;
7649    l_redef_tax_class_code_rec.defaulting_attribute7         := p_defaulting_rec_type.defaulting_attribute7;
7650    l_redef_tax_class_code_rec.defaulting_attribute8         := p_defaulting_rec_type.defaulting_attribute8;
7651    l_redef_tax_class_code_rec.defaulting_attribute9         := p_defaulting_rec_type.defaulting_attribute9;
7652    l_redef_tax_class_code_rec.defaulting_attribute10        := p_defaulting_rec_type.defaulting_attribute10;
7653    l_redef_tax_class_code_rec.legal_entity_id               := p_defaulting_rec_type.legal_entity_id;
7654 
7655 
7656   /*-------------------------------------------------+
7657    |   Call TDM API to default the tax classification|
7658    +-------------------------------------------------*/
7659    IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7660      FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
7661      'Call TDM to default tax classfication'
7662       );
7663    END IF;
7664 
7665    ZX_TAX_DEFAULT_PKG.get_default_tax_classification (p_definfo        =>  l_redef_tax_class_code_rec,
7666                                                       p_return_status  =>  l_return_status,
7667                                                       p_error_buffer   =>  l_error_buffer
7668                                                       );
7669    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7673      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7670      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7671        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');
7672      END IF;
7674        RAISE FND_API.G_EXC_ERROR;
7675      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7676        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7677      END IF;
7678    ELSE
7679       x_tax_classification_code := l_redef_tax_class_code_rec.x_tax_classification_code;
7680       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7681         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
7682         'Tax Classification: ' || x_tax_classification_code
7683         );
7684       END IF;
7685    END IF;
7686 
7687    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7688      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()+');
7689    END IF;
7690 
7691    EXCEPTION
7692      WHEN FND_API.G_EXC_ERROR THEN
7693        ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
7694        x_return_status := FND_API.G_RET_STS_ERROR ;
7695       /*---------------------------------------------------------+
7696        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7697        | in the message stack. If there is only one message in   |
7698        | the stack it retrieves this message                     |
7699        +---------------------------------------------------------*/
7700        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7701                                  p_count   => x_msg_count,
7702                                  p_data    => x_msg_data
7703                                  );
7704        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7705          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,SQLERRM);
7706        END IF;
7707 
7708      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7709        ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
7710        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7711        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7712        FND_MSG_PUB.Add;
7713       /*---------------------------------------------------------+
7714        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7715        | in the message stack. If there is only one message in   |
7716        | the stack it retrieves this message                     |
7717        +---------------------------------------------------------*/
7718        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7719                                  p_count   => x_msg_count,
7720                                  p_data    => x_msg_data
7721                                  );
7722 
7723        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7724          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,SQLERRM);
7725        END IF;
7726 
7727      WHEN OTHERS THEN
7728        ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
7729        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7730        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7731        FND_MSG_PUB.Add;
7732       /*---------------------------------------------------------+
7733        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7734        | in the message stack. If there is only one message in   |
7735        | the stack it retrieves this message                     |
7736        +---------------------------------------------------------*/
7737        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7738                                  p_count   => x_msg_count,
7739                                  p_data    => x_msg_data
7740                                  );
7741        IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
7742          FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
7743        END IF;
7744 
7745  END get_default_tax_det_attribs;
7746 
7747 /* =======================================================================*
7748  | PROCEDURE  set_tax_security_context :  Sets the security context based |
7749  |                                        on OU and LE of transaction     |
7750  * =======================================================================*/
7751  PROCEDURE set_tax_security_context
7752  ( p_api_version           IN  NUMBER,
7753    p_init_msg_list         IN  VARCHAR2,
7754    p_commit                IN  VARCHAR2,
7755    p_validation_level      IN  NUMBER,
7756    x_return_status         OUT NOCOPY VARCHAR2 ,
7757    x_msg_count             OUT NOCOPY NUMBER ,
7758    x_msg_data              OUT NOCOPY VARCHAR2,
7759    p_internal_org_id       IN  NUMBER,
7760    p_legal_entity_id       IN  NUMBER,
7761    p_transaction_date      IN  DATE,
7762    p_related_doc_date      IN  DATE,
7763    p_adjusted_doc_date     IN  DATE,
7764    x_effective_date        OUT NOCOPY DATE
7765   )IS
7766    l_api_name          CONSTANT  VARCHAR2(30) := 'SET_TAX_SECURITY_CONTEXT';
7767    l_api_version       CONSTANT  NUMBER := 1.0;
7768    l_return_status               VARCHAR2(30);
7769    l_init_msg_list               VARCHAR2(1);
7770 
7771    l_effective_date              DATE;
7772 
7773  BEGIN
7774    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7775      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
7776    END IF;
7777 
7778   /*--------------------------------------------------+
7779    |   Standard start of API savepoint                |
7783    /*--------------------------------------------------+
7780    +--------------------------------------------------*/
7781    SAVEPOINT Set_Tax_Security_Context_PVT;
7782 
7784     |   Standard call to check for call compatibility  |
7785     +--------------------------------------------------*/
7786     IF NOT FND_API.Compatible_API_Call(l_api_version,
7787                                        p_api_version,
7788                                        l_api_name,
7789                                        G_PKG_NAME
7790                                        ) THEN
7791        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7792      END IF;
7793 
7794    /*--------------------------------------------------------------+
7795     |   Initialize message list if p_init_msg_list is set to TRUE  |
7796     +--------------------------------------------------------------*/
7797     IF p_init_msg_list is null THEN
7798        l_init_msg_list := FND_API.G_FALSE;
7799     ELSE
7800 	   l_init_msg_list := p_init_msg_list;
7801     END IF;
7802 
7803     IF FND_API.to_Boolean(l_init_msg_list) THEN
7804        FND_MSG_PUB.initialize;
7805     END IF;
7806 
7807    /*-----------------------------------------+
7808     |   Initialize return status to SUCCESS   |
7809     +-----------------------------------------*/
7810     x_return_status := FND_API.G_RET_STS_SUCCESS;
7811 
7812 
7813    /*--------------------------------------------+
7814     |   Call to zx_security.set_security_context |
7815     +--------------------------------------------*/
7816 
7817     x_effective_date := determine_effective_date(p_transaction_date,
7818                                                  p_related_doc_date,
7819                                                  p_adjusted_doc_date);
7820     l_effective_date := x_effective_date;
7821 
7822     ZX_SECURITY.set_security_context(p_legal_entity_id,
7823                                      p_internal_org_id,
7824                                      l_effective_date,
7825                                      l_return_status
7826                                      );
7827 
7828      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7829        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7830          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');
7831        END IF;
7832        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7833          RAISE FND_API.G_EXC_ERROR;
7834        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7835          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7836        END IF;
7837      END IF;
7838 
7839     /*---------------------------------------------------------+
7840      | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7841      | in the message stack. If there is only one message in   |
7842      | the stack it retrieves this message                     |
7843      +---------------------------------------------------------*/
7844      FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7845                                p_count   => x_msg_count,
7846                                p_data    => x_msg_data
7847                                );
7848 
7849      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7850        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
7851      END IF;
7852 
7853      EXCEPTION
7854       WHEN FND_API.G_EXC_ERROR THEN
7855         ROLLBACK TO Set_Tax_Security_Context_PVT;
7856         x_return_status := FND_API.G_RET_STS_ERROR ;
7857        /*---------------------------------------------------------+
7858         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7859         | in the message stack. If there is only one message in   |
7860         | the stack it retrieves this message                     |
7861         +---------------------------------------------------------*/
7862         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7863                                   p_count   => x_msg_count,
7864                                   p_data    => x_msg_data
7865                                   );
7866 
7867         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7868           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
7869         END IF;
7870 
7871       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
7872         ROLLBACK TO Set_Tax_Security_Context_PVT;
7873         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7874         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7875         FND_MSG_PUB.Add;
7876        /*---------------------------------------------------------+
7877         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7878         | in the message stack. If there is only one message in   |
7879         | the stack it retrieves this message                     |
7880         +---------------------------------------------------------*/
7881         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7882                                   p_count   => x_msg_count,
7883                                   p_data    => x_msg_data
7884                                   );
7885 
7886         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
7887           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
7888         END IF;
7889 
7890       WHEN OTHERS THEN
7891          ROLLBACK TO set_tax_security_context_PVT;
7892          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
7893          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
7894          FND_MSG_PUB.Add;
7898          | the stack it retrieves this message                     |
7895         /*---------------------------------------------------------+
7896          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
7897          | in the message stack. If there is only one message in   |
7899          +---------------------------------------------------------*/
7900          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
7901                                    p_count   => x_msg_count,
7902                                    p_data    => x_msg_data
7903                                    );
7904          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
7905            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
7906          END IF;
7907   END set_tax_security_context;
7908 
7909 
7910 
7911 /* =======================================================================*
7912  | Overloaded PROCEDURE  set_tax_security_context: for Lease Management   |
7913  | Also includes setting the date based on provnl_tax_determination_date  |
7914  * =======================================================================*/
7915  PROCEDURE set_tax_security_context
7916  ( p_api_version           IN         NUMBER,
7917    p_init_msg_list         IN         VARCHAR2,
7918    p_commit                IN         VARCHAR2,
7919    p_validation_level      IN         NUMBER,
7920    x_return_status         OUT NOCOPY VARCHAR2 ,
7921    x_msg_count             OUT NOCOPY NUMBER ,
7922    x_msg_data              OUT NOCOPY VARCHAR2,
7923    p_internal_org_id       IN         NUMBER,
7924    p_legal_entity_id       IN         NUMBER,
7925    p_transaction_date      IN         DATE,
7926    p_related_doc_date      IN         DATE,
7927    p_adjusted_doc_date     IN         DATE,
7928    p_provnl_tax_det_date   IN         DATE,
7929    x_effective_date        OUT NOCOPY DATE
7930   )IS
7931    l_api_name          CONSTANT  VARCHAR2(30) := 'SET_TAX_SECURITY_CONTEXT';
7932    l_api_version       CONSTANT  NUMBER := 1.0;
7933    l_return_status               VARCHAR2(30);
7934    l_init_msg_list               VARCHAR2(1);
7935 
7936  BEGIN
7937    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
7938      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
7939    END IF;
7940 
7941   /*--------------------------------------------------+
7942    |   Standard start of API savepoint                |
7943    +--------------------------------------------------*/
7944    SAVEPOINT Set_Tax_Security_Context_PVT;
7945 
7946    /*--------------------------------------------------+
7947     |   Standard call to check for call compatibility  |
7948     +--------------------------------------------------*/
7949     IF NOT FND_API.Compatible_API_Call(l_api_version,
7950                                        p_api_version,
7951                                        l_api_name,
7952                                        G_PKG_NAME
7953                                        ) THEN
7954        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7955      END IF;
7956 
7957    /*--------------------------------------------------------------+
7958     |   Initialize message list if p_init_msg_list is set to TRUE  |
7959     +--------------------------------------------------------------*/
7960     IF p_init_msg_list is null THEN
7961        l_init_msg_list := FND_API.G_FALSE;
7962     ELSE
7963        l_init_msg_list := p_init_msg_list;
7964     END IF;
7965 
7966     IF FND_API.to_Boolean(l_init_msg_list) THEN
7967        FND_MSG_PUB.initialize;
7968     END IF;
7969 
7970    /*-----------------------------------------+
7971     |   Initialize return status to SUCCESS   |
7972     +-----------------------------------------*/
7973     x_return_status := FND_API.G_RET_STS_SUCCESS;
7974 
7975 
7976    /*--------------------------------------------+
7977     |   Call to zx_security.set_security_context |
7978     +--------------------------------------------*/
7979      ZX_SECURITY.set_security_context(p_legal_entity_id,
7980                                       p_internal_org_id,
7981                                       determine_effective_date(p_transaction_date,
7982                                                                p_related_doc_date,
7983                                                                p_adjusted_doc_date,
7984                                                                p_provnl_tax_det_date),
7985                                       l_return_status
7986                                       );
7987 
7988      x_effective_date := ZX_SECURITY.G_EFFECTIVE_DATE;
7989 
7990      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
7991        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
7992          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');
7993        END IF;
7994        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
7995          RAISE FND_API.G_EXC_ERROR;
7996        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
7997          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7998        END IF;
7999      END IF;
8000 
8001     /*---------------------------------------------------------+
8002      | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8003      | in the message stack. If there is only one message in   |
8004      | the stack it retrieves this message                     |
8005      +---------------------------------------------------------*/
8006      FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8007                                p_count   => x_msg_count,
8011      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8008                                p_data    => x_msg_data
8009                                );
8010 
8012        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
8013      END IF;
8014 
8015      EXCEPTION
8016       WHEN FND_API.G_EXC_ERROR THEN
8017         ROLLBACK TO Set_Tax_Security_Context_PVT;
8018         x_return_status := FND_API.G_RET_STS_ERROR ;
8019        /*---------------------------------------------------------+
8020         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8021         | in the message stack. If there is only one message in   |
8022         | the stack it retrieves this message                     |
8023         +---------------------------------------------------------*/
8024         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8025                                   p_count   => x_msg_count,
8026                                   p_data    => x_msg_data
8027                                   );
8028 
8029         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8030           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
8031         END IF;
8032 
8033       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8034         ROLLBACK TO Set_Tax_Security_Context_PVT;
8035         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8036         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8037         FND_MSG_PUB.Add;
8038        /*---------------------------------------------------------+
8039         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8040         | in the message stack. If there is only one message in   |
8041         | the stack it retrieves this message                     |
8042         +---------------------------------------------------------*/
8043         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8044                                   p_count   => x_msg_count,
8045                                   p_data    => x_msg_data
8046                                   );
8047 
8048         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8049           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
8050         END IF;
8051 
8052       WHEN OTHERS THEN
8053          ROLLBACK TO set_tax_security_context_PVT;
8054          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8055          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8056          FND_MSG_PUB.Add;
8057         /*---------------------------------------------------------+
8058          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8059          | in the message stack. If there is only one message in   |
8060          | the stack it retrieves this message                     |
8061          +---------------------------------------------------------*/
8062          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8063                                    p_count   => x_msg_count,
8064                                    p_data    => x_msg_data
8065                                    );
8066          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
8067            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
8068          END IF;
8069   END set_tax_security_context;
8070 
8071 
8072 
8073  /* =======================================================================*
8074  | PROCEDURE  validate_and_default_tax_attr :                              |
8075  | This api supports multiple document processing                          |
8076  * =======================================================================*/
8077  PROCEDURE validate_and_default_tax_attr
8078  (
8079   p_api_version           IN         NUMBER,
8080   p_init_msg_list         IN         VARCHAR2,
8081   p_commit                IN         VARCHAR2,
8082   p_validation_level      IN         NUMBER,
8083   x_return_status         OUT NOCOPY VARCHAR2 ,
8084   x_msg_count             OUT NOCOPY NUMBER ,
8085   x_msg_data              OUT NOCOPY VARCHAR2
8086   ) IS
8087   l_api_name          CONSTANT  VARCHAR2(30) := 'VALIDATE_AND_DEFAULT_TAX_ATTR';
8088   l_api_version       CONSTANT  NUMBER := 1.0;
8089   l_tax_method                  VARCHAR2(30);
8090   l_app_id                      NUMBER;
8091   l_return_status               VARCHAR2(30);
8092   l_context_info_rec            context_info_rec_type;
8093   l_init_msg_list               VARCHAR2(1);
8094   l_internal_organization_id    NUMBER;
8095   l_zx_product_options_rec      ZX_GLOBAL_STRUCTURES_PKG.zx_product_options_rec_type;
8096 
8097  BEGIN
8098   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8099      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
8100    END IF;
8101 
8102   /*--------------------------------------------------+
8103    |   Standard start of API savepoint                |
8104    +--------------------------------------------------*/
8105    SAVEPOINT Validate_And_Default_Tax_Attr;
8106 
8107    /*--------------------------------------------------+
8108     |   Standard call to check for call compatibility  |
8109     +--------------------------------------------------*/
8110     IF NOT FND_API.Compatible_API_Call(l_api_version,
8111                                        p_api_version,
8112                                        l_api_name,
8113                                        G_PKG_NAME
8114                                        ) THEN
8115        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8116     END IF;
8117 
8121     IF p_init_msg_list is null THEN
8118    /*--------------------------------------------------------------+
8119     |   Initialize message list if p_init_msg_list is set to TRUE  |
8120     +--------------------------------------------------------------*/
8122       l_init_msg_list := FND_API.G_FALSE;
8123     ELSE
8124       l_init_msg_list := p_init_msg_list;
8125     END IF;
8126 
8127     IF FND_API.to_Boolean(l_init_msg_list) THEN
8128        FND_MSG_PUB.initialize;
8129     END IF;
8130 
8131    /*-----------------------------------------+
8132     |   Initialize return status to SUCCESS   |
8133     +-----------------------------------------*/
8134     x_return_status := FND_API.G_RET_STS_SUCCESS;
8135 
8136    /*-----------------------------------------+
8137     |   Populate Global Variable              |
8138     +-----------------------------------------*/
8139     G_PUB_SRVC := l_api_name;
8140     G_DATA_TRANSFER_MODE := 'TAB';
8141     G_EXTERNAL_API_CALL  := 'N';
8142 
8143     BEGIN
8144       SELECT internal_organization_id,
8145              application_id
8146         INTO l_internal_organization_id,
8147              l_app_id
8148         FROM ZX_TRX_HEADERS_GT headers
8149        WHERE rownum =1;
8150 
8151     EXCEPTION
8152       WHEN NO_DATA_FOUND THEN
8153  	     l_tax_method := 'EBTAX';
8154     END;
8155 
8156    ZX_GLOBAL_STRUCTURES_PKG.get_product_options_info
8157                    (p_application_id      => l_app_id,
8158                     p_org_id              => l_internal_organization_id,
8159                     x_product_options_rec => l_zx_product_options_rec,
8160                     x_return_status       => x_return_status);
8161 
8162     IF x_return_status = FND_API.G_RET_STS_ERROR then
8163 
8164         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8165            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Incorrect return status after calling '||
8166                           'ZX_GLOBAL_STRUCTURES_PKG.get_product_options_info');
8167         END IF;
8168         l_tax_method := 'EBTAX';
8169     ELSE
8170         -- Bug 7528340
8171         l_tax_method := NVL(l_zx_product_options_rec.tax_method_code,'EBTAX');
8172     END IF;
8173 
8174     IF l_app_id = 200 AND l_tax_method IS NULL THEN
8175       l_tax_method := 'EBTAX';
8176     END IF;
8177 
8178     IF l_tax_method = 'EBTAX' THEN
8179      ZX_VALIDATE_API_PKG.default_and_validate_tax_attr(p_api_version,
8180                                                        l_init_msg_list,
8181                                                        p_commit,
8182                                                        p_validation_level,
8183                                                        l_return_status,
8184                                                        x_msg_count,
8185                                                        x_msg_data
8186                                                       );
8187      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8188        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8189          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');
8190        END IF;
8191        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8192          RAISE FND_API.G_EXC_ERROR;
8193        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8194          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8195        END IF;
8196      END IF;
8197     ELSIF l_tax_method = 'LTE' THEN
8198     JL_ZZ_TAX_VALIDATE_PKG.default_and_validate_tax_attr(p_api_version,
8199                                                          l_init_msg_list,
8200                                                          p_commit,
8201                                                          p_validation_level,
8202                                                          l_return_status,
8203                                                          x_msg_count,
8204                                                          x_msg_data
8205                                                         );
8206     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8207        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8208          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');
8209        END IF;
8210        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8211          RAISE FND_API.G_EXC_ERROR;
8212        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8213          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8214        END IF;
8215      END IF;
8216     END IF;  --l_tax_method
8217 
8218 
8219     EXCEPTION
8220       WHEN FND_API.G_EXC_ERROR THEN
8221         --Since this API only inserts into the errors GT and updates the header and line GTTs
8222         --we shouldnt be rolling back here as that data too will be lost
8223         --ROLLBACK TO Validate_And_Default_Tax_Attr;
8224         x_return_status := FND_API.G_RET_STS_ERROR ;
8225         --Messages are inserted into ZX_VALIDATION_ERRORS_GT for this API
8226         DUMP_MSG;
8227         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8228           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
8229         END IF;
8230 
8231       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8232         ROLLBACK TO Validate_And_Default_Tax_Attr;
8233         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8237         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8234         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8235         FND_MSG_PUB.Add;
8236        /*---------------------------------------------------------+
8238         | in the message stack. If there is only one message in   |
8239         | the stack it retrieves this message                     |
8240         +---------------------------------------------------------*/
8241         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8242                                   p_count   => x_msg_count,
8243                                   p_data    => x_msg_data
8244                                   );
8245 
8246         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8247           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
8248         END IF;
8249 
8250       WHEN OTHERS THEN
8251          ROLLBACK TO Validate_And_Default_Tax_Attr;
8252          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8253          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8254          FND_MSG_PUB.Add;
8255         /*---------------------------------------------------------+
8256          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8257          | in the message stack. If there is only one message in   |
8258          | the stack it retrieves this message                     |
8259          +---------------------------------------------------------*/
8260          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
8261            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
8262          END IF;
8263  END validate_and_default_tax_attr;
8264 
8265 
8266 
8267 /* ==========================================================================*
8268  | PROCEDURE  rollback_for_tax :  Communicate to the Tax Partners to rollback|
8269  |                                transactions in their system               |
8270  * =========================================================================*/
8271  PROCEDURE rollback_for_tax
8272  ( p_api_version           IN         NUMBER,
8273    p_init_msg_list         IN         VARCHAR2,
8274    p_commit                IN         VARCHAR2,
8275    p_validation_level      IN         NUMBER,
8276    x_return_status         OUT NOCOPY VARCHAR2 ,
8277    x_msg_count             OUT NOCOPY NUMBER ,
8278    x_msg_data              OUT NOCOPY VARCHAR2
8279  )IS
8280   l_api_name          CONSTANT  VARCHAR2(30) := 'ROLLBACK_FOR_TAX';
8281   l_api_version       CONSTANT  NUMBER := 1.0;
8282 
8283  BEGIN
8284   IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8285      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
8286   END IF;
8287 
8288  END rollback_for_tax;
8289 
8290 /* ========================================================================*
8291  | PROCEDURE  commit_for_tax :  Communicate to the Tax Partners to commit  |
8292  |                              transactions in their system               |
8293  * =======================================================================*/
8294 
8295  PROCEDURE commit_for_tax
8296  ( p_api_version           IN         NUMBER,
8297    p_init_msg_list         IN         VARCHAR2,
8298    p_commit                IN         VARCHAR2,
8299    p_validation_level      IN         NUMBER ,
8300    x_return_status         OUT NOCOPY VARCHAR2 ,
8301    x_msg_count             OUT NOCOPY NUMBER ,
8302    x_msg_data              OUT NOCOPY VARCHAR2
8303  )IS
8304   l_api_name          CONSTANT  VARCHAR2(30) := 'COMMIT_FOR_TAX';
8305   l_api_version       CONSTANT  NUMBER := 1.0;
8306 
8307  BEGIN
8308     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8309       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
8310     END IF;
8311 
8312  END commit_for_tax;
8313 
8314 /* =======================================================================*
8315  | PROCEDURE  add_msg : Adds the message to the fnd message stack or      |
8316  |                      local plsql table to be dumped later into the     |
8317  |                      errors GT.                                        |
8318  * =======================================================================*/
8319 
8320   PROCEDURE add_msg (p_context_info_rec IN context_info_rec_type)
8321   IS
8322     l_count     BINARY_INTEGER;
8323     l_mesg      VARCHAR2(2000);
8324     l_api_name  CONSTANT VARCHAR2(30) := 'ADD_MSG';
8325   BEGIN
8326     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8327       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
8328     END IF;
8329     --Add unexpected errors to fnd_stack
8330     IF p_context_info_rec.application_id is null THEN
8331       FND_MSG_PUB.Add();
8332     END IF;
8333 
8334     IF G_DATA_TRANSFER_MODE = 'PLS' OR
8335        G_DATA_TRANSFER_MODE = 'WIN' THEN
8336       /*If G_EXTERNAL_API_CALL is 'Y' reset it back to 'N' and no need to add to stack
8337         since message is already in stack.*/
8338       IF G_EXTERNAL_API_CALL  = 'Y' THEN
8339         G_EXTERNAL_API_CALL  := 'N';
8340       ELSE
8341         FND_MSG_PUB.Add();
8342       END IF;
8343     ELSIF G_DATA_TRANSFER_MODE = 'TAB' THEN
8344        l_count:= errors_tbl.application_id.COUNT;
8345        IF G_EXTERNAL_API_CALL  = 'Y' THEN
8346          LOOP
8347            l_mesg := FND_MSG_PUB.Get(FND_MSG_PUB.G_NEXT, FND_API.G_FALSE);
8348            IF  l_mesg IS NULL THEN
8349              EXIT;
8350            ELSE
8354              errors_tbl.trx_id(l_count+1)           := p_context_info_rec.trx_id;
8351              errors_tbl.application_id(l_count+1)   := p_context_info_rec.application_id;
8352              errors_tbl.entity_code(l_count+1)      := p_context_info_rec.entity_code;
8353              errors_tbl.event_class_code(l_count+1) := p_context_info_rec.event_class_code;
8355              errors_tbl.trx_level_type(l_count+1)   := p_context_info_rec.trx_level_type;
8356              errors_tbl.trx_line_id(l_count+1)      := p_context_info_rec.trx_line_id;
8357              errors_tbl.summary_tax_line_number(l_count+1) := p_context_info_rec.summary_tax_line_number;
8358              errors_tbl.tax_line_id(l_count+1)      := p_context_info_rec.tax_line_id;
8359              errors_tbl.trx_line_dist_id(l_count+1) := p_context_info_rec.trx_line_dist_id;
8360              errors_tbl.message_text(l_count+1)     := l_mesg;
8361            END IF;
8362          END LOOP;
8363          G_EXTERNAL_API_CALL := 'N'; -- reset G_EXTERNAL_API_CALL
8364        ELSE --G_EXTERNAL_API_CALL is 'N' then retrieve message from fnd_stack
8365          errors_tbl.application_id(l_count+1)   := p_context_info_rec.application_id;
8366          errors_tbl.entity_code(l_count+1)      := p_context_info_rec.entity_code;
8367          errors_tbl.event_class_code(l_count+1) := p_context_info_rec.event_class_code;
8368          errors_tbl.trx_id(l_count+1)           := p_context_info_rec.trx_id;
8369          errors_tbl.trx_level_type(l_count+1)   := p_context_info_rec.trx_level_type;
8370          errors_tbl.trx_line_id(l_count+1)      := p_context_info_rec.trx_line_id;
8371          errors_tbl.summary_tax_line_number(l_count+1) := p_context_info_rec.summary_tax_line_number;
8372          errors_tbl.tax_line_id(l_count+1)      := p_context_info_rec.tax_line_id;
8373          errors_tbl.trx_line_dist_id(l_count+1) := p_context_info_rec.trx_line_dist_id;
8374          errors_tbl.message_text(l_count+1)     := fnd_message.get();
8375        END IF; --G_EXTERNAL_API_CALL
8376        l_count:=errors_tbl.application_id.COUNT;
8377     END IF; --G_DATA_TRANSFER_MODE
8378 
8379     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8380       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
8381     END IF;
8382   END add_msg;
8383 
8384  /* ============================================================================*
8385  | PROCEDURE  dump_msg : Dump all error messages from pl/sql structure to table |
8386  * ============================================================================*/
8387   PROCEDURE dump_msg
8388   IS
8389      l_api_name   CONSTANT VARCHAR2(30) := 'DUMP_MSG';
8390   BEGIN
8391     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8392       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
8393     END IF;
8394     FORALL i IN 1 .. nvl(errors_tbl.application_id.LAST,-99)
8395         INSERT INTO ZX_ERRORS_GT            (application_id,
8396                                              entity_code,
8397                                              event_class_code,
8398                                              trx_id,
8399                                              trx_line_id,
8400                                              trx_level_type,
8401                                              summary_tax_line_number,
8402                                              tax_line_id,
8403                                              trx_line_dist_id,
8404                                              message_text)
8405                                       values (errors_tbl.application_id(i),
8406                                               errors_tbl.entity_code(i),
8407                                               errors_tbl.event_class_code(i),
8408                                               errors_tbl.trx_id(i),
8409                                               errors_tbl.trx_line_id(i),
8410                                               errors_tbl.trx_level_type(i),
8411                                               errors_tbl.summary_tax_line_number(i),
8412                                               errors_tbl.tax_line_id(i),
8413                                               errors_tbl.trx_line_dist_id(i),
8414                                               NVL(errors_tbl.message_text(i),'UNEXPECTED_ERROR_DUMP_MSG')
8415                                              );
8416    errors_tbl.application_id.delete;
8417    errors_tbl.entity_code.delete;
8418    errors_tbl.event_class_code.delete;
8419    errors_tbl.trx_id.delete;
8420    errors_tbl.trx_line_id.delete;
8421    errors_tbl.trx_level_type.delete;
8422    errors_tbl.summary_tax_line_number.delete;
8423    errors_tbl.tax_line_id.delete;
8424    errors_tbl.trx_line_dist_id.delete;
8425    errors_tbl.message_text.delete;
8426    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8427       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()-');
8428    END IF;
8429   END dump_msg;
8430 
8431 /* =======================================================================*
8432  | FUNCTION  determine_effective_date :                                   |
8433  * =======================================================================*/
8434 
8435  FUNCTION determine_effective_date
8436  ( p_transaction_date      IN  DATE,
8437    p_related_doc_date      IN  DATE,
8438    p_adjusted_doc_date     IN  DATE
8439  ) RETURN DATE IS
8440 
8441  BEGIN
8442    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8443       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||'DETERMINE_EFFECTIVE_DATE.BEGIN','ZX_API_PUB: DETERMINE_EFFECTIVE_DATE()+');
8444    END IF;
8445 
8449       return(p_adjusted_doc_date);
8446    IF p_related_doc_date IS NOT NULL THEN
8447      return(p_related_doc_date);
8448    ELSIF p_adjusted_doc_date IS NOT NULL THEN
8450    ELSIF p_transaction_date IS NOT NULL THEN
8451       return(p_transaction_date);
8452    ELSE
8453       return(SYSDATE);
8454    END IF;
8455 
8456    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8457       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||'DETERMINE_EFFECTIVE_DATE.END','ZX_API_PUB: DETERMINE_EFFECTIVE_DATE()-');
8458    END IF;
8459 
8460  END determine_effective_date;
8461 
8462 
8463 /* =======================================================================*
8464  | Function  Get_Default_Tax_Reg : Returns the Default Registration Number|
8465  |                                 for a Given Party                      |
8466  * =======================================================================*/
8467 
8468  FUNCTION get_default_tax_reg(
8469   p_api_version       IN         NUMBER,
8470   p_init_msg_list     IN         VARCHAR2,
8471   p_commit            IN         VARCHAR2,
8472   p_validation_level  IN         NUMBER,
8473   x_return_status     OUT NOCOPY VARCHAR2,
8474   x_msg_count         OUT NOCOPY NUMBER,
8475   x_msg_data          OUT NOCOPY VARCHAR2,
8476   p_party_id          IN         ZX_PARTY_TAX_PROFILE.party_id%type,
8477   p_party_type        IN         ZX_PARTY_TAX_PROFILE.party_type_code%type,
8478   p_effective_date    IN         ZX_REGISTRATIONS.effective_from%type
8479  ) RETURN Varchar2 IS
8480   l_api_name          CONSTANT  VARCHAR2(30) := 'GET_DEFAULT_TAX_REG';
8481   l_api_version       CONSTANT  NUMBER := 1.0;
8482   l_reg_number                  VARCHAR2(50);
8483   l_return_status               VARCHAR2(1);
8484   l_context_info_rec            context_info_rec_type;
8485   l_init_msg_list               VARCHAR2(1);
8486  BEGIN
8487    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8488      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
8489    END IF;
8490 
8491   /*--------------------------------------------------+
8492    |   Standard start of API savepoint                |
8493    +--------------------------------------------------*/
8494    -- Commenting this save point as per bug# 5395191
8495    --  SAVEPOINT Get_Default_Tax_Reg_PVT;
8496 
8497    /*--------------------------------------------------+
8498     |   Standard call to check for call compatibility  |
8499     +--------------------------------------------------*/
8500     IF NOT FND_API.Compatible_API_Call(l_api_version,
8501                                        p_api_version,
8502                                        l_api_name,
8503                                        G_PKG_NAME
8504                                        ) THEN
8505        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8506     END IF;
8507 
8508    /*--------------------------------------------------------------+
8509     |   Initialize message list if p_init_msg_list is set to TRUE  |
8510     +--------------------------------------------------------------*/
8511     IF p_init_msg_list is null THEN
8512        l_init_msg_list := FND_API.G_FALSE;
8513     ELSE
8514        l_init_msg_list := p_init_msg_list;
8515     END IF;
8516 
8517     IF FND_API.to_Boolean(l_init_msg_list) THEN
8518        FND_MSG_PUB.initialize;
8519     END IF;
8520 
8521    /*-----------------------------------------+
8522     |   Initialize return status to SUCCESS   |
8523     +-----------------------------------------*/
8524     x_return_status := FND_API.G_RET_STS_SUCCESS;
8525 
8526    /*-----------------------------------------+
8527     |   Populate Global Variable              |
8528     +-----------------------------------------*/
8529     G_PUB_SRVC := l_api_name;
8530     G_DATA_TRANSFER_MODE := 'PLS';
8531     G_EXTERNAL_API_CALL  := 'N';
8532 
8533 
8534    /*-----------------------------------------------------+
8535     |   Get the default value for product category        |
8536     +-----------------------------------------------------*/
8537     l_reg_number:= ZX_TCM_EXT_SERVICES_PUB.get_default_tax_reg(p_party_id,
8538                                                                p_party_type,
8539                                                                p_effective_date,
8540                                                                l_return_status
8541                                                                );
8542 
8543     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8544        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8545          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');
8546        END IF;
8547        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8548          RAISE FND_API.G_EXC_ERROR;
8549        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8550          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8551        END IF;
8552     ELSE
8553        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8554          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
8555          'Registration Number: '|| l_reg_number
8556          );
8557        END IF;
8558        RETURN l_reg_number;
8559     END IF;
8560 
8561 
8562     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8566     EXCEPTION
8563       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
8564     END IF;
8565 
8567        WHEN FND_API.G_EXC_ERROR THEN
8568           -- Commented rollback as per bug 5395191
8569           -- ROLLBACK TO Get_Default_Tax_Reg_PVT;
8570           x_return_status := FND_API.G_RET_STS_ERROR ;
8571          /*---------------------------------------------------------+
8572           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8573           | in the message stack. If there is only one message in   |
8574           | the stack it retrieves this message                     |
8575           +---------------------------------------------------------*/
8576           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8577                                     p_count   =>      x_msg_count,
8578                                     p_data    =>      x_msg_data
8579                                     );
8580           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8581              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
8582           END IF;
8583 
8584         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8585           -- Commented rollback as per bug 5395191
8586           -- ROLLBACK TO Get_Default_Tax_Reg_PVT;
8587           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8588           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8589           FND_MSG_PUB.Add;
8590          /*---------------------------------------------------------+
8591           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8592           | in the message stack. If there is only one message in   |
8593           | the stack it retrieves this message                     |
8594           +---------------------------------------------------------*/
8595           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8596                                     p_count   =>      x_msg_count,
8597                                     p_data    =>      x_msg_data
8598                                     );
8599           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8600             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
8601           END IF;
8602 
8603         WHEN OTHERS THEN
8604           -- Commented rollback as per bug 5395191
8605           --  ROLLBACK TO Get_Default_Tax_Reg_PVT;
8606            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8607            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8608            FND_MSG_PUB.Add;
8609           /*---------------------------------------------------------+
8610            | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8611            | in the message stack. If there is only one message in   |
8612            | the stack it retrieves this message                     |
8613            +---------------------------------------------------------*/
8614            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8615                                      p_count  =>      x_msg_count,
8616                                      p_data   =>      x_msg_data
8617                                      );
8618            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
8619              FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
8620            END IF;
8621 
8622   END get_default_tax_reg;
8623 
8624  /* ========================================================================*
8625  | PROCEDURE  insert_line_det_factors : This procedure should be called by |
8626  | products when creating a document or inserting a new transaction line   |
8627  | for existing document. This line will be flagged to be picked up by the |
8628  | tax calculation process                                                 |
8629  * =======================================================================*/
8630 PROCEDURE insert_line_det_factors (
8631   p_api_version        IN         NUMBER,
8632   p_init_msg_list      IN         VARCHAR2,
8633   p_commit             IN         VARCHAR2,
8634   p_validation_level   IN         NUMBER,
8635   x_return_status      OUT NOCOPY VARCHAR2,
8636   x_msg_count          OUT NOCOPY NUMBER,
8637   x_msg_data           OUT NOCOPY VARCHAR2,
8638   p_duplicate_line_rec IN         transaction_line_rec_type
8639  )  IS
8640   l_api_name                  CONSTANT  VARCHAR2(30) := 'INSERT_LINE_DET_FACTORS';
8641   l_api_version               CONSTANT  NUMBER := 1.0;
8642   l_return_status             VARCHAR2(1);
8643   l_event_class_rec           event_class_rec_type;
8644   l_line_det_rec              ZX_LINES_DET_FACTORS%rowtype;
8645   l_line_exists               NUMBER;
8646   l_record_exists             BOOLEAN;
8647   l_init_msg_list             VARCHAR2(1);
8648   l_tax_classification_code   VARCHAR2(50);
8649   l_do_defaulting             BOOLEAN;
8650   l_upg_trx_info_rec          ZX_ON_FLY_TRX_UPGRADE_PKG.zx_upg_trx_info_rec_type;
8651  BEGIN
8652    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8653      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'1()+');
8654    END IF;
8655 
8656   /*--------------------------------------------------+
8657    |   Standard start of API savepoint                |
8658    +--------------------------------------------------*/
8659    SAVEPOINT Insert_Line_Det_Factors_PVT;
8660 
8661    /*--------------------------------------------------+
8662     |   Standard call to check for call compatibility  |
8663     +--------------------------------------------------*/
8664     IF NOT FND_API.Compatible_API_Call(l_api_version,
8665                                        p_api_version,
8669        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8666                                        l_api_name,
8667                                        G_PKG_NAME
8668                                        ) THEN
8670     END IF;
8671 
8672    /*--------------------------------------------------------------+
8673     |   Initialize message list if p_init_msg_list is set to TRUE  |
8674     +--------------------------------------------------------------*/
8675     IF p_init_msg_list is null THEN
8676        l_init_msg_list := FND_API.G_FALSE;
8677     ELSE
8678        l_init_msg_list := p_init_msg_list;
8679     END IF;
8680 
8681     IF FND_API.to_Boolean(l_init_msg_list) THEN
8682        FND_MSG_PUB.initialize;
8683     END IF;
8684 
8685    /*-----------------------------------------+
8686     |   Initialize return status to SUCCESS   |
8687     +-----------------------------------------*/
8688     x_return_status := FND_API.G_RET_STS_SUCCESS;
8689 
8690    /*-----------------------------------------+
8691     |   Populate Global Variable              |
8692     +-----------------------------------------*/
8693     G_PUB_SRVC := l_api_name;
8694     G_PUB_CALLING_SRVC := l_api_name;
8695     G_DATA_TRANSFER_MODE := 'PLS';
8696     G_EXTERNAL_API_CALL  := 'N';
8697 
8698    /*-----------------------------------------+
8699     |Populate the event class record structure|
8700     +-----------------------------------------*/
8701    l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.INTERNAL_ORGANIZATION_ID(1);
8702    l_event_class_rec.LEGAL_ENTITY_ID              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEGAL_ENTITY_ID(1);
8703    l_event_class_rec.LEDGER_ID                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEDGER_ID(1);
8704    l_event_class_rec.APPLICATION_ID               :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.APPLICATION_ID(1);
8705    l_event_class_rec.ENTITY_CODE                  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ENTITY_CODE(1);
8706    l_event_class_rec.EVENT_CLASS_CODE             :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_CLASS_CODE(1);
8707    l_event_class_rec.EVENT_TYPE_CODE              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_TYPE_CODE(1);
8708    l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CTRL_TOTAL_HDR_TX_AMT(1);
8709    l_event_class_rec.TRX_ID                       :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_ID(1);
8710    l_event_class_rec.TRX_DATE                     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_DATE(1);
8711    l_event_class_rec.REL_DOC_DATE                 :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RELATED_DOC_DATE(1);
8712    l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PROVNL_TAX_DETERMINATION_DATE(1);
8713    l_event_class_rec.TRX_CURRENCY_CODE            :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_CURRENCY_CODE(1);
8714    l_event_class_rec.PRECISION                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PRECISION(1);
8715    l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_TYPE(1);
8716    l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_RATE(1);
8717    l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_DATE(1);
8718    l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_TO_PARTY_ID(1);
8719    l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_FROM_PARTY_ID(1);
8720    l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_TO_PARTY_ID(1);
8721    l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_FROM_PARTY_ID(1);
8722    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);
8723    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);
8724    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);
8725    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);
8726 
8727    --Check if need to upgrade
8728    l_record_exists := FALSE;
8729    IF l_event_class_rec.event_type_code = 'INV_UPDATE' THEN
8730       FOR l_line_det_rec in lock_line_det_factors_for_doc(l_event_class_rec)
8731       LOOP
8732         l_record_exists := TRUE;
8733         l_event_class_rec.event_id := l_line_det_rec.event_id;
8734         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.default_taxation_country(1) := l_line_det_rec.default_taxation_country;
8735         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.document_sub_type(1)        := l_line_det_rec.document_sub_type;
8736         EXIT;
8737       END LOOP;
8738       IF NOT(l_record_exists) THEN
8739         --Bugfix 4486946 -Call on the fly upgrade if the transaction if not found
8740         l_upg_trx_info_rec.application_id   := l_event_class_rec.application_id;
8741         l_upg_trx_info_rec.entity_code      := l_event_class_rec.entity_code;
8742         l_upg_trx_info_rec.event_class_code := l_event_class_rec.event_class_code;
8743         l_upg_trx_info_rec.trx_id           := l_event_class_rec.trx_id;
8744         ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(p_upg_trx_info_rec   =>  l_upg_trx_info_rec,
8745                                                      x_return_status      =>  l_return_status
8746                                                     );
8747         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8748           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8749             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');
8750           END IF;
8751           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8752             RAISE FND_API.G_EXC_ERROR;
8753           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8754             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8755           END IF;
8756         END IF;
8757         FOR l_line_det_rec in lock_line_det_factors_for_doc(l_event_class_rec)
8758         LOOP
8759           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8760              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
8761                'Lock the document so that no updates can happen for transaction :' || to_char(l_event_class_rec.trx_id));
8762           END IF;
8763           l_record_exists := TRUE;
8764           l_event_class_rec.event_id := l_line_det_rec.event_id;
8765           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.default_taxation_country(1) := l_line_det_rec.default_taxation_country;
8766           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.document_sub_type(1)        := l_line_det_rec.document_sub_type;
8767           EXIT;
8768         END LOOP;
8769       END IF; --record does not exist so upgrade
8770     --Bugfix 4486946 - on-the-fly upgrade end
8771    END IF;    --event_type_code
8772 
8773    IF NOT(l_record_exists) THEN
8774      SELECT ZX_LINES_DET_FACTORS_S.nextval
8775        INTO l_event_class_rec.event_id
8776        FROM dual;
8777    END IF;
8778 
8779    IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8780       FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
8781             'application_id: '||to_char(l_event_class_rec.application_id)||
8782              ', entity_code: '||l_event_class_rec.entity_code||
8783              ', event_class_code: '||l_event_class_rec.event_class_code||
8784              ', event_type_code: '||l_event_class_rec.event_type_code||
8785              ', trx_id: '||to_char(l_event_class_rec.trx_id)||
8786              ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
8787              ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
8788              ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
8789              ', trx_date: '||to_char(l_event_class_rec.trx_date)||
8790              ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
8791              ', provnl_tax_determination_date: '||to_char(l_event_class_rec.provnl_tax_determination_date)||
8792              ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
8793              ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
8794              ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
8795              ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
8796              ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
8797              ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
8798              ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
8799              ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
8800              ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
8801              ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
8802              ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
8803              ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id)
8804             );
8805    END IF;
8806 
8807    -- Bug 5676960: Set a flag to indicate if currency information passed at header/line
8808    IF l_event_class_rec.trx_currency_code is not null AND
8809       l_event_class_rec.precision is not null THEN
8810       l_event_class_rec.header_level_currency_flag := 'Y';
8811    END IF;
8812 
8813    /*------------------------------------------------------+
8814    |   Validate and Initializate parameters for Inserting |
8815    |   into line_det_factors                              |
8816    +------------------------------------------------------*/
8817    ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors(p_event_class_rec =>l_event_class_rec,
8818                                                     p_trx_line_index  => 1,
8819                                                     x_return_status   =>l_return_status
8820                                                     );
8821 
8822    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8823      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8824        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');
8825      END IF;
8826      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8827        RAISE FND_API.G_EXC_ERROR;
8828      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8829        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8830      END IF;
8831    END IF;
8832 
8833 -- Fix for Bug 5038953
8834    ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TAX_EVENT_CLASS_CODE(1) := l_event_class_rec.TAX_EVENT_CLASS_CODE;
8835 -- End fix for Bug 5038953
8836 
8837  /* ==============================================*
8838    |Determine if we need to default the parameters|
8839    * ============================================*/
8843    /*If the Duplicate Source Document Line identifiers are passed, then derive the values
8840    l_do_defaulting := ZX_SRVC_TYP_PKG.decide_call_redefault_APIs (p_trx_line_index  => 1);
8841 
8842    IF l_do_defaulting THEN
8844      of the tax determining factors from ZX_LINES_DET_FACTORS for the duplicate source document line.*/
8845      IF p_duplicate_line_rec.application_id is not null THEN
8846        --Default determining factors from Duplicated Line
8847        SELECT
8848             default_taxation_country,
8849   	    document_sub_type,
8850 	    trx_business_category,
8851 	    line_intended_use,
8852 	    user_defined_fisc_class,
8853 	    product_fisc_classification,
8854 	    product_category,
8855 	    assessable_value,
8856             product_type,
8857             decode(l_event_class_rec.prod_family_grp_code,'P2P',input_tax_classification_code,
8858                                                           'O2C',output_tax_classification_code)
8859        INTO
8860             ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.default_taxation_country(1),
8861             ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.document_sub_type(1),
8862             ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_business_category(1),
8863 	    ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_intended_use(1),
8864 	    ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.user_defined_fisc_class(1),
8865 	    ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.product_fisc_classification(1),
8866 	    ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.product_category(1),
8867 	    ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.assessable_value(1),
8868 	    ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.product_type(1),
8869             l_tax_classification_code
8870        FROM ZX_LINES_DET_FACTORS
8871        WHERE application_id   = p_duplicate_line_rec.application_id
8872          AND entity_code      = p_duplicate_line_rec.entity_code
8873          AND event_class_code = p_duplicate_line_rec.event_class_code
8874          AND trx_id           = p_duplicate_line_rec.trx_id
8875          AND trx_line_id      = p_duplicate_line_rec.trx_line_id
8876          AND trx_level_type   = p_duplicate_line_rec.trx_level_type;
8877 
8878        --AR always passes the tax classification code so do not override the passed value
8879        IF l_event_class_rec.prod_family_grp_code = 'P2P' THEN
8880            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.input_tax_classification_code(1) := l_tax_classification_code;
8881        ELSIF l_event_class_rec.prod_family_grp_code = 'O2C' AND
8882            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.output_tax_classification_code is null THEN
8883            ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.output_tax_classification_code(1) := l_tax_classification_code;
8884        END IF;
8885      /*If  the applied from, adjusted, source document information is passed with
8886        the transaction line, then derive the values tax determining factors from
8887        ZX_LINES_DET_FACTORS or call TDS defaulting API*/
8888      ELSE ZX_SRVC_TYP_PKG.default_tax_attrs_wrapper (p_trx_line_index  => 1,
8889                                                      p_event_class_rec => l_event_class_rec,
8890                                                      x_return_status   => l_return_status
8891                                                     );
8892         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8893           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8894             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');
8895           END IF;
8896           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8897             RAISE FND_API.G_EXC_ERROR;
8898           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8899             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8900           END IF;
8901         END IF;
8902      END IF; --duplicate check
8903    END IF; --l_do_defaulting
8904 
8905 
8906    /*------------------------------------------+
8907    |Call to insert the lines                   |
8908    +------------------------------------------*/
8909    ZX_SRVC_TYP_PKG.insupd_line_det_factors(p_event_class_rec  => l_event_class_rec,
8910                                            x_return_status    => l_return_status
8911                                           );
8912 
8913    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
8914      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
8915        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');
8916      END IF;
8917      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
8918        RAISE FND_API.G_EXC_ERROR;
8919      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
8920        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
8921      END IF;
8922    END IF;
8923 
8924    --Delete from the global structures so that there are no hanging/redundant
8925    --records sitting there
8926    ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
8927 
8928    --Reset G_PUB_CALLING_SRVC at end of API
8929    ZX_API_PUB.G_PUB_CALLING_SRVC := null;
8930 
8931    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
8932       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
8933    END IF;
8934 
8935    EXCEPTION
8936         WHEN FND_API.G_EXC_ERROR THEN
8937           ROLLBACK TO Insert_Line_Det_Factors_PVT;
8938           x_return_status := FND_API.G_RET_STS_ERROR ;
8939          /*---------------------------------------------------------+
8943           +---------------------------------------------------------*/
8940           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8941           | in the message stack. If there is only one message in   |
8942           | the stack it retrieves this message                     |
8944           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8945                                     p_count  =>      x_msg_count,
8946                                     p_data   =>      x_msg_data
8947                                     );
8948 
8949            IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8950              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
8951            END IF;
8952 
8953         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
8954           ROLLBACK TO Insert_Line_Det_Factors_PVT;
8955           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8956           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8957           FND_MSG_PUB.Add;
8958          /*---------------------------------------------------------+
8959           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8960           | in the message stack. If there is only one message in   |
8961           | the stack it retrieves this message                     |
8962           +---------------------------------------------------------*/
8963           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8964                                     p_count   =>      x_msg_count,
8965                                     p_data    =>      x_msg_data
8966                                     );
8967           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
8968             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
8969           END IF;
8970 
8971         WHEN OTHERS THEN
8972            ROLLBACK TO Insert_Line_Det_Factors_PVT;
8973            IF (SQLCODE = 54) THEN
8974              x_return_status := FND_API.G_RET_STS_ERROR ;
8975              FND_MESSAGE.SET_NAME('ZX','ZX_RESOURCE_BUSY');
8976            ELSE
8977               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
8978               FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
8979            END IF;
8980            FND_MSG_PUB.Add;
8981          /*---------------------------------------------------------+
8982           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
8983           | in the message stack. If there is only one message in   |
8984           | the stack it retrieves this message                     |
8985           +---------------------------------------------------------*/
8986            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
8987                                      p_count  =>      x_msg_count,
8988                                      p_data   =>      x_msg_data
8989                                      );
8990 
8991            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
8992               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
8993            END IF;
8994    END insert_line_det_factors;
8995 
8996  /* ============================================================================*
8997  | PROCEDURE  insert_line_det_factors : This overloaded procedure will be called|
8998  | by iProcurement to insert all the transaction lines with defaulted tax       |
8999  | determining attributes into zx_lines_det_factors after complying with the    |
9000  | validation process                                                           |
9001  * ============================================================================*/
9002 PROCEDURE insert_line_det_factors (
9003   p_api_version        IN         NUMBER,
9004   p_init_msg_list      IN         VARCHAR2,
9005   p_commit             IN         VARCHAR2,
9006   p_validation_level   IN         NUMBER,
9007   x_return_status      OUT NOCOPY VARCHAR2,
9008   x_msg_count          OUT NOCOPY NUMBER,
9009   x_msg_data           OUT NOCOPY VARCHAR2
9010  )  IS
9011   l_api_name          CONSTANT  VARCHAR2(30) := 'INSERT_LINE_DET_FACTORS';
9012   l_api_version       CONSTANT  NUMBER := 1.0;
9013   l_return_status     VARCHAR2(1);
9014   l_event_class_rec   event_class_rec_type;
9015   l_line_det_rec      ZX_LINES_DET_FACTORS%rowtype;
9016   l_line_exists       NUMBER;
9017   l_record_exists     BOOLEAN;
9018   l_init_msg_list     VARCHAR2(1);
9019   l_upg_trx_info_rec  ZX_ON_FLY_TRX_UPGRADE_PKG.zx_upg_trx_info_rec_type;
9020 
9021  BEGIN
9022    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9023      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'2()+');
9024    END IF;
9025 
9026   /*--------------------------------------------------+
9027    |   Standard start of API savepoint                |
9028    +--------------------------------------------------*/
9029    SAVEPOINT Insert_Line_Det_Factors_PVT;
9030 
9031    /*--------------------------------------------------+
9032     |   Standard call to check for call compatibility  |
9033     +--------------------------------------------------*/
9034     IF NOT FND_API.Compatible_API_Call(l_api_version,
9035                                        p_api_version,
9036                                        l_api_name,
9037                                        G_PKG_NAME
9038                                        ) THEN
9039        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9040      END IF;
9041 
9042    /*--------------------------------------------------------------+
9043     |   Initialize message list if p_init_msg_list is set to TRUE  |
9044     +--------------------------------------------------------------*/
9045     IF p_init_msg_list is null THEN
9049     END IF;
9046        l_init_msg_list := FND_API.G_FALSE;
9047     ELSE
9048        l_init_msg_list := p_init_msg_list;
9050 
9051     IF FND_API.to_Boolean(l_init_msg_list) THEN
9052        FND_MSG_PUB.initialize;
9053     END IF;
9054 
9055    /*-----------------------------------------+
9056     |   Initialize return status to SUCCESS   |
9057     +-----------------------------------------*/
9058     x_return_status := FND_API.G_RET_STS_SUCCESS;
9059 
9060    /*-----------------------------------------+
9061     |   Populate Global Variable              |
9062     +-----------------------------------------*/
9063     G_PUB_SRVC := l_api_name;
9064     G_DATA_TRANSFER_MODE := 'PLS';
9065     G_EXTERNAL_API_CALL  := 'N';
9066 
9067 
9068    /*-----------------------------------------+
9069     |Populate the event class record structure|
9070     +-----------------------------------------*/
9071     l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.INTERNAL_ORGANIZATION_ID(1);
9072     l_event_class_rec.LEGAL_ENTITY_ID              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEGAL_ENTITY_ID(1);
9073     l_event_class_rec.LEDGER_ID                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEDGER_ID(1);
9074     l_event_class_rec.APPLICATION_ID               :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.APPLICATION_ID(1);
9075     l_event_class_rec.ENTITY_CODE                  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ENTITY_CODE(1);
9076     l_event_class_rec.EVENT_CLASS_CODE             :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_CLASS_CODE(1);
9077     l_event_class_rec.EVENT_TYPE_CODE              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_TYPE_CODE(1);
9078     l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CTRL_TOTAL_HDR_TX_AMT(1);
9079     l_event_class_rec.TRX_ID                       :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_ID(1);
9080     l_event_class_rec.TRX_DATE                     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_DATE(1);
9081     l_event_class_rec.REL_DOC_DATE                 :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RELATED_DOC_DATE(1);
9082     l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PROVNL_TAX_DETERMINATION_DATE(1);
9083     l_event_class_rec.TRX_CURRENCY_CODE            :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_CURRENCY_CODE(1);
9084     l_event_class_rec.PRECISION                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PRECISION(1);
9085     l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_TYPE(1);
9086     l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_RATE(1);
9087     l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_DATE(1);
9088     l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_TO_PARTY_ID(1);
9089     l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_FROM_PARTY_ID(1);
9090     l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_TO_PARTY_ID(1);
9091     l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_FROM_PARTY_ID(1);
9092     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);
9093     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);
9094     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);
9095     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);
9096 
9097     --Check if need to upgrade
9098     l_record_exists := FALSE;
9099     IF l_event_class_rec.event_type_code = 'INV_UPDATE' THEN
9100       FOR l_line_det_rec in lock_line_det_factors_for_doc(l_event_class_rec)
9101       LOOP
9102         l_record_exists := TRUE;
9103         l_event_class_rec.event_id := l_line_det_rec.event_id;
9104         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.default_taxation_country(1) := l_line_det_rec.default_taxation_country;
9105         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.document_sub_type(1)        := l_line_det_rec.document_sub_type;
9106         EXIT;
9107       END LOOP;
9108       IF NOT(l_record_exists) THEN
9109         --Bugfix 4486946 -Call on the fly upgrade if the transaction if not found
9110         l_upg_trx_info_rec.application_id   := l_event_class_rec.application_id;
9111         l_upg_trx_info_rec.entity_code      := l_event_class_rec.entity_code;
9112         l_upg_trx_info_rec.event_class_code := l_event_class_rec.event_class_code;
9113         l_upg_trx_info_rec.trx_id           := l_event_class_rec.trx_id;
9114         ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(p_upg_trx_info_rec   =>  l_upg_trx_info_rec,
9115                                                      x_return_status      =>  l_return_status
9116                                                     );
9117         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9118           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9119             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');
9120           END IF;
9121           IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9122             RAISE FND_API.G_EXC_ERROR;
9123           ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9127         FOR l_line_det_rec in lock_line_det_factors_for_doc(l_event_class_rec)
9124             RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9125           END IF;
9126         END IF;
9128         LOOP
9129           l_record_exists := TRUE;
9130           l_event_class_rec.event_id := l_line_det_rec.event_id;
9131           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.default_taxation_country(1) := l_line_det_rec.default_taxation_country;
9132           ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.document_sub_type(1)        := l_line_det_rec.document_sub_type;
9133           EXIT;
9134         END LOOP;
9135       END IF; --record does not exist so upgrade
9136     --Bugfix 4486946 - on-the-fly upgrade end
9137     END IF;    --event_type_code
9138 
9139    /*------------------------------------------------------------------------------------------+
9140     | Set the event id for the whole document- Since this API is called for each transaction   |
9141     | line, the event id needs to be generated from the sequence only for the first transaction|
9142     | line. For other lines, we need to retrieve the event id from the table.                  |
9143     +-----------------------------------------------------------------------------------------*/
9144     IF NOT(l_record_exists) THEN
9145       SELECT ZX_LINES_DET_FACTORS_S.nextval
9146        INTO l_event_class_rec.event_id
9147        FROM dual;
9148     END IF;
9149 
9150     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9151       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,
9152             'application_id: '||to_char(l_event_class_rec.application_id)||
9153              ', entity_code: '||l_event_class_rec.entity_code||
9154              ', event_class_code: '||l_event_class_rec.event_class_code||
9155              ', event_type_code: '||l_event_class_rec.event_type_code||
9156              ', trx_id: '||to_char(l_event_class_rec.trx_id)||
9157              ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
9158              ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
9159              ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
9160              ', trx_date: '||to_char(l_event_class_rec.trx_date)||
9161              ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
9162              ', provnl_tax_determination_date: '||to_char(l_event_class_rec.provnl_tax_determination_date)||
9163              ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
9164              ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
9165              ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
9166              ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
9167              ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
9168              ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
9169              ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
9170              ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
9171              ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
9172              ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
9173              ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
9174              ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id)
9175             );
9176     END IF;
9177 
9178     /*------------------------------------------------------+
9179     |   Validate and Initializate parameters for Inserting |
9180     |   into line_det_factors                              |
9181     +------------------------------------------------------*/
9182     ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors(p_event_class_rec =>l_event_class_rec,
9183                                                      p_trx_line_index  =>1,
9184                                                      x_return_status   =>l_return_status
9185                                                     );
9186 
9187     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9188       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9189         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');
9190       END IF;
9191       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9192         RAISE FND_API.G_EXC_ERROR;
9193       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9194         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9195       END IF;
9196     END IF;
9197 
9198     /*------------------------------------------+
9199     |Call to insert the lines                   |
9200     +------------------------------------------*/
9201     ZX_SRVC_TYP_PKG.insupd_line_det_factors(p_event_class_rec  => l_event_class_rec,
9202                                             x_return_status    => l_return_status
9203                                            );
9204 
9205     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9206       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9207         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');
9208       END IF;
9209       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9210         RAISE FND_API.G_EXC_ERROR;
9211       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9212         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9213       END IF;
9217     --records sitting there
9214     END IF;
9215 
9216     --Delete from the global structures so that there are no hanging/redundant
9218     ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
9219 
9220     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9221       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
9222     END IF;
9223 
9224     EXCEPTION
9225         WHEN FND_API.G_EXC_ERROR THEN
9226           ROLLBACK TO Insert_Line_Det_Factors_PVT;
9227           x_return_status := FND_API.G_RET_STS_ERROR ;
9228          /*---------------------------------------------------------+
9229           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
9230           | in the message stack. If there is only one message in   |
9231           | the stack it retrieves this message                     |
9232           +---------------------------------------------------------*/
9233           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
9234                                     p_count  =>      x_msg_count,
9235                                     p_data   =>      x_msg_data
9236                                     );
9237 
9238            IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
9239              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
9240            END IF;
9241 
9242         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
9243           ROLLBACK TO Insert_Line_Det_Factors_PVT;
9244           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9245           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
9246           FND_MSG_PUB.Add;
9247          /*---------------------------------------------------------+
9248           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
9249           | in the message stack. If there is only one message in   |
9250           | the stack it retrieves this message                     |
9251           +---------------------------------------------------------*/
9252           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
9253                                     p_count   =>      x_msg_count,
9254                                     p_data    =>      x_msg_data
9255                                     );
9256           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
9257             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
9258           END IF;
9259 
9260         WHEN OTHERS THEN
9261           /*-------------------------------------------------------+
9262            |  Handle application errors that result from trapable  |
9263            |  error conditions. The error messages have already    |
9264            |  been put on the error stack.                         |
9265            +-------------------------------------------------------*/
9266            ROLLBACK TO Insert_Line_Det_Factors_PVT;
9267            IF (SQLCODE = 54) THEN
9268              x_return_status := FND_API.G_RET_STS_ERROR ;
9269              FND_MESSAGE.SET_NAME('ZX','ZX_RESOURCE_BUSY');
9270            ELSE
9271               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
9272               FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
9273            END IF;
9274            FND_MSG_PUB.Add;
9275          /*---------------------------------------------------------+
9276           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
9277           | in the message stack. If there is only one message in   |
9278           | the stack it retrieves this message                     |
9279           +---------------------------------------------------------*/
9280            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
9281                                      p_count  =>      x_msg_count,
9282                                      p_data   =>      x_msg_data
9283                                      );
9284 
9285            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
9286               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
9287            END IF;
9288   END insert_line_det_factors;
9289 
9290 
9291 /* ========================================================================*
9292  | PROCEDURE  update_det_factors_hdr: This procedure should be called by   |
9293  | products when updating any of the header attributes on the transaction  |
9294  | so that the tax repository is also in sync with the header level updates|
9295  |                                                                         |
9296  | NOTES: Products will pass intended nullable values as null while they   |
9297  | will pass G_MISS_NUM/G_MISS_DATE/G_MISS_CHAR for the attributes where   |
9298  | intention is to retain the original values as stored in tax repository  |
9299  * =======================================================================*/
9300 
9301  PROCEDURE update_det_factors_hdr
9302  (
9303   p_api_version         IN  NUMBER,
9304   p_init_msg_list       IN  VARCHAR2,
9305   p_commit              IN  VARCHAR2,
9306   p_validation_level    IN  NUMBER,
9307   x_return_status       OUT NOCOPY VARCHAR2,
9308   x_msg_count           OUT NOCOPY NUMBER,
9309   x_msg_data            OUT NOCOPY VARCHAR2,
9310   p_hdr_det_factors_rec IN  header_det_factors_rec_type
9311  )IS
9312   l_api_name                   CONSTANT  VARCHAR2(30) := 'UPDATE_DET_FACTORS_HDR';
9313   l_api_version                CONSTANT  NUMBER := 1.0;
9314   l_return_status              VARCHAR2(1);
9315   l_event_class_rec            event_class_rec_type;
9316   l_init_msg_list              VARCHAR2(1);
9317   l_rdng_ship_to_ptp_id        NUMBER;
9318   l_rdng_bill_to_ptp_id        NUMBER;
9319   l_rdng_ship_from_ptp_id      NUMBER;
9323   l_rdng_ship_to_ptp_st_id     NUMBER;
9320   l_rdng_bill_from_ptp_id      NUMBER;
9321   l_rdng_bill_to_ptp_st_id     NUMBER;
9322   l_rdng_bill_from_ptp_st_id   NUMBER;
9324   l_rdng_ship_from_ptp_st_id   NUMBER;
9325   l_ship_to_ptp_id             NUMBER;
9326   l_ship_from_ptp_id           NUMBER;
9327   l_bill_to_ptp_id             NUMBER;
9328   l_bill_from_ptp_id           NUMBER;
9329   l_ship_to_ptp_site_id        NUMBER;
9330   l_ship_from_ptp_site_id      NUMBER;
9331   l_bill_to_ptp_site_id        NUMBER;
9332   l_bill_from_ptp_site_id      NUMBER;
9333   l_poa_ptp_id                 NUMBER;
9334   l_poo_ptp_id                 NUMBER;
9335   l_poo_ptp_site_id            NUMBER;
9336   l_poa_ptp_site_id            NUMBER;
9337   l_hq_estb_ptp_id             NUMBER;
9338   l_party_type                 VARCHAR2(30);
9339   l_transaction_rec            transaction_rec_type;
9340   l_upg_trx_info_rec           ZX_ON_FLY_TRX_UPGRADE_PKG.zx_upg_trx_info_rec_type;
9341   l_incomplete_scenario        number;
9342 
9343  BEGIN
9344    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
9345      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
9346    END IF;
9347 
9348   /*--------------------------------------------------+
9349    |   Standard start of API savepoint                |
9350    +--------------------------------------------------*/
9351    SAVEPOINT Update_Det_Factors_Hdr_PVT;
9352 
9353    /*--------------------------------------------------+
9354     |   Standard call to check for call compatibility  |
9355     +--------------------------------------------------*/
9356     IF NOT FND_API.Compatible_API_Call(l_api_version,
9357                                        p_api_version,
9358                                        l_api_name,
9359                                        G_PKG_NAME
9360                                        ) THEN
9361        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9362     END IF;
9363 
9364    /*--------------------------------------------------------------+
9365     |   Initialize message list if p_init_msg_list is set to TRUE  |
9366     +--------------------------------------------------------------*/
9367     IF p_init_msg_list is null THEN
9368        l_init_msg_list := FND_API.G_FALSE;
9369     ELSE
9370        l_init_msg_list := p_init_msg_list;
9371     END IF;
9372 
9373     IF FND_API.to_Boolean(l_init_msg_list) THEN
9374        FND_MSG_PUB.initialize;
9375     END IF;
9376 
9377    /*-----------------------------------------+
9378     |   Initialize return status to SUCCESS   |
9379     +-----------------------------------------*/
9380     x_return_status := FND_API.G_RET_STS_SUCCESS;
9381 
9382    /*-----------------------------------------+
9383     |   Populate Global Variable              |
9384     +-----------------------------------------*/
9385     G_PUB_SRVC := 'UPDATE_DET_FACTORS_HDR';
9386     G_DATA_TRANSFER_MODE := 'PLS';
9387     G_EXTERNAL_API_CALL  := 'N';
9388     /*
9389     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9390        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)||
9391               ', ENTITY_CODE: '||p_hdr_det_factors_rec.entity_code||
9392               ', EVENT_CLASS_CODE: '||p_hdr_det_factors_rec.event_class_code||
9393 	      ', EVENT_TYPE_CODE: '||p_hdr_det_factors_rec.event_type_code||
9394               ', TRX_ID: '||to_char(p_hdr_det_factors_rec.trx_id)||
9395               ', INTERNAL_ORGANIZATION_ID: '|| to_char(p_hdr_det_factors_rec.internal_organization_id)||
9396 	      ', INTERNAL_ORG_LOCATION_ID : '|| to_char(p_hdr_det_factors_rec.internal_org_location_id)||
9397 	      ', LEGAL_ENTITY_ID :'||to_char(p_hdr_det_factors_rec.legal_entity_id)||
9398               ', LEDGER_ID :' ||to_char(p_hdr_det_factors_rec.ledger_id)||
9399               ', TRX_DATE :' ||to_char(p_hdr_det_factors_rec.trx_date)||
9400               ', TRX_DOC_REVISION :' ||p_hdr_det_factors_rec.trx_doc_revision||
9401               ', TRX_CURRENCY_CODE :' ||p_hdr_det_factors_rec.trx_currency_code ||
9402               ', CURRENCY_CONVERSION_TYPE  :' ||p_hdr_det_factors_rec.currency_conversion_type ||
9403               ', CURRENCY_CONVERSION_RATE :' ||to_char(p_hdr_det_factors_rec.currency_conversion_rate) ||
9404               ', CURRENCY_CONVERSION_DATE :' ||to_char(p_hdr_det_factors_rec.currency_conversion_date) ||
9405               ', MINIMUM_ACCOUNTABLE_UNIT: ' ||to_char(p_hdr_det_factors_rec.minimum_accountable_unit)||
9406               ', PRECISION:' ||to_char(p_hdr_det_factors_rec.precision) ||
9407               ', ROUNDING_SHIP_TO_PARTY_ID : '||to_char(p_hdr_det_factors_rec.rounding_ship_to_party_id)||
9408               ', ROUNDING_SHIP_FROM_PARTY_ID: '||to_char(p_hdr_det_factors_rec.rounding_ship_from_party_id)||
9409               ', ROUNDING_BILL_TO_PARTY_ID: '||to_char(p_hdr_det_factors_rec.rounding_bill_to_party_id)||
9410               ', ROUNDING_BILL_FROM_PARTY_ID :'||to_char(p_hdr_det_factors_rec.rounding_bill_from_party_id)||
9411               ', RNDG_SHIP_TO_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.rndg_ship_to_party_site_id)||
9412               ', RNDG_SHIP_FROM_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.rndg_ship_from_party_site_id)||
9413               ', RNDG_BILL_TO_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.rndg_bill_to_party_site_id)||
9414               ', RNDG_BILL_FROM_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.rndg_bill_from_party_site_id)||
9415               ', QUOTE_FLAG :'||p_hdr_det_factors_rec.quote_flag||
9416               ', ESTABLISHMENT_ID :'||to_char(p_hdr_det_factors_rec.establishment_id)||
9420               ', RELATED_DOC_EVENT_CLASS_CODE :'||p_hdr_det_factors_rec.related_doc_event_class_code||
9417               ', RECEIVABLES_TRX_TYPE_ID :'||to_char(p_hdr_det_factors_rec.receivables_trx_type_id)||
9418               ', RELATED_DOC_APPLICATION_ID :'||to_char(p_hdr_det_factors_rec.related_doc_application_id)||
9419               ', RELATED_DOC_ENTITY_CODE :'||p_hdr_det_factors_rec.related_doc_entity_code||
9421               ', RELATED_DOC_TRX_ID :'||to_char(p_hdr_det_factors_rec.related_doc_trx_id)||
9422               ', RELATED_DOC_NUMBER :'||to_char(p_hdr_det_factors_rec.related_doc_number)||
9423               ', RELATED_DOC_DATE :'||to_char(p_hdr_det_factors_rec.related_doc_date)||
9424               ', DEFAULT_TAXATION_COUNTRY :'||p_hdr_det_factors_rec.default_taxation_country||
9425               ', CTRL_TOTAL_HDR_TX_AMT :'||to_char(p_hdr_det_factors_rec.ctrl_total_hdr_tx_amt)||
9426               ', TRX_NUMBER :'||p_hdr_det_factors_rec.trx_number||
9427               ', TRX_DESCRIPTION :'||p_hdr_det_factors_rec.trx_description||
9428               ', TRX_COMMUNICATED_DATE :'||to_char(p_hdr_det_factors_rec.trx_communicated_date)||
9429               ', BATCH_SOURCE_ID :'||to_char(p_hdr_det_factors_rec.batch_source_id)||
9430               ', BATCH_SOURCE_NAME :'||p_hdr_det_factors_rec.batch_source_name||
9431               ', DOC_SEQ_ID :'||to_char(p_hdr_det_factors_rec.doc_seq_id)||
9432               ', DOC_SEQ_NAME :'||p_hdr_det_factors_rec.doc_seq_id||
9433               ', DOC_SEQ_VALUE :'||p_hdr_det_factors_rec.doc_seq_value||
9434               ', TRX_DUE_DATE :'||to_char(p_hdr_det_factors_rec.trx_due_date)||
9435               ', TRX_TYPE_DESCRIPTION :'||p_hdr_det_factors_rec.trx_type_description
9436               );
9437     END IF;
9438     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9439        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
9440               ', DOCUMENT_SUB_TYPE :'||p_hdr_det_factors_rec.document_sub_type||
9441               ', SUPPLIER_TAX_INVOICE_NUMBER :'||p_hdr_det_factors_rec.supplier_tax_invoice_number||
9442               ', SUPPLIER_TAX_INVOICE_DATE :'||to_char(p_hdr_det_factors_rec.supplier_tax_invoice_date)||
9443               ', SUPPLIER_EXCHANGE_RATE :'||to_char(p_hdr_det_factors_rec.supplier_exchange_rate)||
9444               ', TAX_INVOICE_DATE :'||to_char(p_hdr_det_factors_rec.tax_invoice_date)||
9445               ', TAX_INVOICE_NUMBER :'||p_hdr_det_factors_rec.tax_invoice_date||
9446               ', FIRST_PTY_ORG_ID :'||to_char(p_hdr_det_factors_rec.first_pty_org_id)||
9447               ', TAX_EVENT_CLASS_CODE :'||p_hdr_det_factors_rec.tax_event_class_code||
9448               ', TAX_EVENT_TYPE_CODE :'||p_hdr_det_factors_rec.tax_event_type_code||
9449               ', DOC_EVENT_STATUS :'||p_hdr_det_factors_rec.doc_event_status||
9450               ', PORT_OF_ENTRY_CODE :'||p_hdr_det_factors_rec.port_of_entry_code||
9451               ', TAX_REPORTING_FLAG :'||p_hdr_det_factors_rec.tax_reporting_flag||
9452               ', PROVNL_TAX_DETERMINATION_DATE :'||to_char(p_hdr_det_factors_rec.provnl_tax_determination_date)||
9453               ', SHIP_THIRD_PTY_ACCT_ID :'||to_char(p_hdr_det_factors_rec.ship_third_pty_acct_id)||
9454               ', BILL_THIRD_PTY_ACCT_ID :'||to_char(p_hdr_det_factors_rec.bill_third_pty_acct_id)||
9455               ', SHIP_THIRD_PTY_ACCT_SITE_ID :'||to_char(p_hdr_det_factors_rec.ship_third_pty_acct_site_id)||
9456               ', BILL_THIRD_PTY_ACCT_SITE_ID :'||to_char(p_hdr_det_factors_rec.bill_third_pty_acct_site_id)||
9457               ', SHIP_TO_CUST_ACCT_SITE_USE_ID :'||to_char(p_hdr_det_factors_rec.ship_to_cust_acct_site_use_id)||
9458               ', BILL_TO_CUST_ACCT_SITE_USE_ID :'||to_char(p_hdr_det_factors_rec.bill_to_cust_acct_site_use_id)||
9459               ', TRX_BATCH_ID :'||to_char(p_hdr_det_factors_rec.trx_batch_id)||
9460               ', APPLIED_TO_TRX_NUMBER :'||p_hdr_det_factors_rec.applied_to_trx_number||
9461               ', APPLICATION_DOC_STATUS :'||p_hdr_det_factors_rec.application_doc_status||
9462               ', SHIP_TO_PARTY_ID :'||to_char(p_hdr_det_factors_rec.ship_to_party_id)||
9463               ', SHIP_FROM_PARTY_ID :'||to_char(p_hdr_det_factors_rec.ship_from_party_id)||
9464               ', POA_PARTY_ID :'||to_char(p_hdr_det_factors_rec.poa_party_id)||
9465               ', POO_PARTY_ID :'||to_char(p_hdr_det_factors_rec.poo_party_id)||
9466               ', BILL_TO_PARTY_ID :'||to_char(p_hdr_det_factors_rec.bill_to_party_id)||
9467               ', BILL_FROM_PARTY_ID :'||to_char(p_hdr_det_factors_rec.bill_from_party_id)||
9468               ', MERCHANT_PARTY_ID :'||to_char(p_hdr_det_factors_rec.merchant_party_id)||
9469               ', SHIP_TO_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.ship_to_party_site_id)||
9470               ', SHIP_FROM_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.ship_from_party_site_id)||
9471               ', POA_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.poa_party_site_id)||
9472               ', POO_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.poo_party_site_id)||
9473               ', BILL_TO_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.bill_to_party_site_id)||
9474               ', BILL_FROM_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.bill_from_party_site_id)||
9475               ', SHIP_TO_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.ship_to_location_id)||
9476               ', SHIP_FROM_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.ship_from_location_id)||
9477               ', POA_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.poa_location_id)||
9478               ', POO_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.poo_location_id)||
9479               ', BILL_TO_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.bill_to_location_id)||
9480               ', BILL_FROM_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.bill_from_location_id)||
9481               ', PAYING_PARTY_ID :'||to_char(p_hdr_det_factors_rec.paying_party_id)||
9482               ', OWN_HQ_PARTY_ID :'||to_char(p_hdr_det_factors_rec.own_hq_party_id)||
9486     END IF;
9483               ', TRADING_HQ_PARTY_ID :'||to_char(p_hdr_det_factors_rec.trading_hq_party_id)||
9484               ', POI_PARTY_ID :'||to_char(p_hdr_det_factors_rec.poi_party_id)
9485               );
9487     IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9488        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
9489               ', POD_PARTY_ID :'||to_char(p_hdr_det_factors_rec.pod_party_id)||
9490               ', TITLE_TRANSFER_PARTY_ID :'||to_char(p_hdr_det_factors_rec.title_transfer_party_id)||
9491               ', PAYING_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.paying_party_site_id)||
9492               ', OWN_HQ_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.own_hq_party_site_id)||
9493               ', TRADING_HQ_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.trading_hq_party_site_id)||
9494               ', POI_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.poi_party_site_id)||
9495               ', POD_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.pod_party_site_id)||
9496               ', TITLE_TRANSFER_PARTY_SITE_ID :'||to_char(p_hdr_det_factors_rec.title_transfer_party_site_id)||
9497               ', PAYING_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.paying_location_id)||
9498               ', OWN_HQ_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.own_hq_location_id)||
9499               ', TRADING_HQ_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.trading_hq_location_id)||
9500               ', POC_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.poc_location_id)||
9501               ', POI_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.poi_location_id)||
9502               ', POD_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.pod_location_id)||
9503               ', TITLE_TRANSFER_LOCATION_ID :'||to_char(p_hdr_det_factors_rec.title_transfer_location_id)
9504               );
9505      END IF;
9506      */
9507    /*------------------------------------------------------+
9508     |   Populate the event class record structure          |
9509     +------------------------------------------------------*/
9510     l_event_class_rec.application_id               :=  p_hdr_det_factors_rec.application_id;
9511     l_event_class_rec.entity_code                  :=  p_hdr_det_factors_rec.entity_code;
9512     l_event_class_rec.event_class_code             :=  p_hdr_det_factors_rec.event_class_code;
9513     l_event_class_rec.event_type_code              :=  p_hdr_det_factors_rec.event_type_code;
9514     l_event_class_rec.trx_id                       :=  p_hdr_det_factors_rec.trx_id;
9515     l_event_class_rec.trx_date                     :=  p_hdr_det_factors_rec.trx_date;
9516     l_event_class_rec.internal_organization_id     :=  p_hdr_det_factors_rec.internal_organization_id;
9517     l_event_class_rec.legal_entity_id              :=  p_hdr_det_factors_rec.legal_entity_id;
9518     l_event_class_rec.rel_doc_date                 :=  p_hdr_det_factors_rec.related_doc_date;
9519     l_event_class_rec.trx_currency_code            :=  p_hdr_det_factors_rec.trx_currency_code;
9520     l_event_class_rec.precision                    :=  p_hdr_det_factors_rec.precision;
9521     l_event_class_rec.currency_conversion_type     :=  p_hdr_det_factors_rec.currency_conversion_type;
9522     l_event_class_rec.currency_conversion_rate     :=  p_hdr_det_factors_rec.currency_conversion_rate;
9523     l_event_class_rec.currency_conversion_date     :=  p_hdr_det_factors_rec.currency_conversion_date;
9524     l_event_class_rec.rounding_ship_to_party_id    :=  p_hdr_det_factors_rec.rounding_ship_to_party_id;
9525     l_event_class_rec.rounding_ship_from_party_id  :=  p_hdr_det_factors_rec.rounding_ship_from_party_id;
9526     l_event_class_rec.rounding_bill_to_party_id    :=  p_hdr_det_factors_rec.rounding_bill_to_party_id;
9527     l_event_class_rec.rounding_bill_from_party_id  :=  p_hdr_det_factors_rec.rounding_bill_from_party_id;
9528     l_event_class_rec.rndg_ship_to_party_site_id   :=  p_hdr_det_factors_rec.rndg_ship_to_party_site_id;
9529     l_event_class_rec.rndg_ship_from_party_site_id :=  p_hdr_det_factors_rec.rndg_ship_from_party_site_id;
9530     l_event_class_rec.rndg_bill_to_party_site_id   :=  p_hdr_det_factors_rec.rndg_bill_to_party_site_id;
9531     l_event_class_rec.rndg_bill_from_party_site_id :=  p_hdr_det_factors_rec.rndg_bill_from_party_site_id;
9532 
9533     OPEN lock_line_det_factors_for_doc(l_event_class_rec);
9534     CLOSE lock_line_det_factors_for_doc;
9535 
9536    /*------------------------------------------------------+
9537     |   Bug 5371288: Check if AR has called this API       |
9538     |   to incomplete the transaction                      |
9539     +------------------------------------------------------*/
9540 
9541     IF p_hdr_det_factors_rec.application_id = 222 THEN
9542        l_incomplete_scenario := 0;
9543        BEGIN
9544           SELECT 1
9545             INTO l_incomplete_scenario
9546             FROM zx_lines_det_factors
9547           WHERE  event_class_code    = p_hdr_det_factors_rec.event_class_code
9548             AND  application_id      = p_hdr_det_factors_rec.application_id
9549             AND  entity_code         = p_hdr_det_factors_rec.entity_code
9550             AND  trx_id              = p_hdr_det_factors_rec.trx_id
9551             AND  tax_event_type_code = 'VALIDATE_FOR_TAX'
9552             AND  rownum              = 1;
9553        EXCEPTION
9554           WHEN OTHERS THEN
9555                  l_incomplete_scenario := 0;
9556        END;
9557 
9558        IF l_incomplete_scenario = 1 THEN
9559           BEGIN
9560              SELECT zxevnttyp.tax_event_type_code,
9561                     zxevnttyp.status_code
9562                INTO l_event_class_rec.tax_event_type_code,
9563                     l_event_class_rec.doc_status_code
9564                FROM ZX_EVNT_TYP_MAPPINGS zxevntmap,
9565                     ZX_EVNT_CLS_TYPS zxevnttyp
9569                AND  zxevntmap.event_type_code      = p_hdr_det_factors_rec.event_type_code
9566              WHERE  zxevntmap.event_class_code     = p_hdr_det_factors_rec.event_class_code
9567                AND  zxevntmap.application_id       = p_hdr_det_factors_rec.application_id
9568                AND  zxevntmap.entity_code          = p_hdr_det_factors_rec.entity_code
9570                AND  zxevnttyp.tax_event_type_code  = zxevntmap.tax_event_type_code
9571                AND  zxevnttyp.tax_event_class_code = zxevntmap.tax_event_class_code
9572                AND  zxevntmap.enabled_flag = 'Y';
9573           EXCEPTION
9574              WHEN NO_DATA_FOUND THEN
9575                  x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
9576                  IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9577                     FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
9578                     ' Incorrect event information passed in for event type :' ||p_hdr_det_factors_rec.event_type_code ||' Please Check!');
9579                  END IF;
9580           END;
9581           BEGIN
9582              UPDATE ZX_LINES_DET_FACTORS
9583                SET TAX_EVENT_TYPE_CODE = l_event_class_rec.tax_event_type_code,
9584                    DOC_EVENT_STATUS    = l_event_class_rec.doc_status_code
9585              WHERE APPLICATION_ID   = p_hdr_det_factors_rec.APPLICATION_ID
9586               AND ENTITY_CODE       = p_hdr_det_factors_rec.ENTITY_CODE
9587               AND EVENT_CLASS_CODE  = p_hdr_det_factors_rec.EVENT_CLASS_CODE
9588               AND TRX_ID            = p_hdr_det_factors_rec.TRX_ID;
9589           END;
9590           RETURN;
9591        END IF;
9592     END IF;
9593 
9594    /*------------------------------------------------------+
9595     |   Validate and Initializate parameters for Inserting |
9596     |   into line_det_factors                              |
9597     +------------------------------------------------------*/
9598     ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors(p_event_class_rec =>l_event_class_rec,
9599                                                      p_trx_line_index  => NULL,
9600                                                      x_return_status   =>l_return_status
9601                                                     );
9602 
9603     IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9604       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9605          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');
9606       END IF;
9607       IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9608          RAISE FND_API.G_EXC_ERROR;
9609       ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9610          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9611       END IF;
9612     END IF;
9613 
9614    /*-----------------------------------------+
9615     |Derive the PTPs                          |
9616     +-----------------------------------------*/
9617     IF p_hdr_det_factors_rec.rounding_ship_to_party_id is NOT NULL AND
9618        p_hdr_det_factors_rec.rounding_ship_to_party_id <> FND_API.G_MISS_NUM THEN
9619        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9620           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Call TCM API to get ptp for rounding_ship_to_party_id: '||
9621                                                                        to_char(p_hdr_det_factors_rec.rounding_ship_to_party_id));
9622        END IF;
9623        ZX_TCM_PTP_PKG.get_ptp(p_hdr_det_factors_rec.rounding_ship_to_party_id
9624                              ,ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_to_party_type
9625                              ,p_hdr_det_factors_rec.legal_entity_id
9626                              ,p_hdr_det_factors_rec.ship_to_location_id
9627                              ,l_rdng_ship_to_ptp_id
9628                              ,l_return_status
9629                              );
9630 
9631         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9632            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9633              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9634              ':ZX_TCM_PTP_PKG.get_ptp for rounding_ship_to_party_id returned errors');
9635            END IF;
9636            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9637              RAISE FND_API.G_EXC_ERROR;
9638            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9639              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9640            END IF;
9641          END IF;
9642     END IF;
9643 
9644     IF p_hdr_det_factors_rec.rounding_ship_from_party_id is NOT NULL AND
9645        p_hdr_det_factors_rec.rounding_ship_from_party_id <> FND_API.G_MISS_NUM THEN
9646        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9647           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Call TCM API to get ptp for rounding_ship_from_party_id: '||
9648                                                                        to_char(p_hdr_det_factors_rec.rounding_ship_from_party_id));
9649        END IF;
9650        ZX_TCM_PTP_PKG.get_ptp(p_hdr_det_factors_rec.rounding_ship_from_party_id
9651                              ,ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_from_party_type
9652                              ,p_hdr_det_factors_rec.legal_entity_id
9653                              ,p_hdr_det_factors_rec.ship_from_location_id
9654                              ,l_rdng_ship_from_ptp_id
9655                              ,l_return_status
9656                              );
9657 
9658         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9662            END IF;
9659            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9660              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9661              ':ZX_TCM_PTP_PKG.get_ptp for rounding_ship_from_party_id returned errors');
9663            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9664              RAISE FND_API.G_EXC_ERROR;
9665            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9666              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9667            END IF;
9668          END IF;
9669     END IF;
9670 
9671     IF p_hdr_det_factors_rec.rndg_ship_to_party_site_id is NOT NULL AND
9672        p_hdr_det_factors_rec.rndg_ship_to_party_site_id <> FND_API.G_MISS_NUM THEN
9673        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9674           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: '||
9675                                                                        to_char(p_hdr_det_factors_rec.rndg_ship_to_party_site_id));
9676        END IF;
9677        ZX_TCM_PTP_PKG.get_ptp( p_hdr_det_factors_rec.rndg_ship_to_party_site_id
9678                               ,ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_to_pty_site_type
9679                               ,p_hdr_det_factors_rec.legal_entity_id
9680                               ,null
9681                               ,l_rdng_ship_to_ptp_st_id
9682                               ,l_return_status
9683                               );
9684 
9685         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9686            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9687              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9688              ':ZX_TCM_PTP_PKG.get_ptp for rndg_ship_to_party_site_id returned errors');
9689            END IF;
9690            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9691              RAISE FND_API.G_EXC_ERROR;
9692            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9693              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9694            END IF;
9695          END IF;
9696     END IF;
9697 
9698     IF p_hdr_det_factors_rec.rndg_ship_from_party_site_id is NOT NULL AND
9699        p_hdr_det_factors_rec.rndg_ship_from_party_site_id <> FND_API.G_MISS_NUM THEN
9700        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9701           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: '||
9702                                                                        to_char(p_hdr_det_factors_rec.rndg_ship_from_party_site_id));
9703        END IF;
9704        ZX_TCM_PTP_PKG.get_ptp( p_hdr_det_factors_rec.rndg_ship_from_party_site_id
9705                                ,ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_from_pty_site_type
9706                                ,p_hdr_det_factors_rec.legal_entity_id
9707                                ,null
9708                                ,l_rdng_ship_from_ptp_st_id
9709                                ,l_return_status
9710                                );
9711 
9712         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9713            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9714              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9715              ':ZX_TCM_PTP_PKG.get_ptp for rndg_ship_from_party_site_id returned errors');
9716            END IF;
9717            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9718              RAISE FND_API.G_EXC_ERROR;
9719            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9720              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9721            END IF;
9722          END IF;
9723       END IF;
9724 
9725       IF p_hdr_det_factors_rec.rounding_bill_to_party_id is NOT NULL  AND
9726        p_hdr_det_factors_rec.rounding_bill_to_party_id <> FND_API.G_MISS_NUM THEN
9727         IF (p_hdr_det_factors_rec.rounding_bill_to_party_id <> p_hdr_det_factors_rec.rounding_ship_to_party_id)
9728            OR (ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_to_party_type <> ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_to_party_type)
9729 		   OR  p_hdr_det_factors_rec.rounding_ship_to_party_id is null THEN
9730            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9731              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Call TCM API to get ptp for rounding_bill_to_party_id: '||
9732                                                                        to_char(p_hdr_det_factors_rec.rounding_bill_to_party_id));
9733            END IF;
9734            ZX_TCM_PTP_PKG.get_ptp(p_hdr_det_factors_rec.rounding_bill_to_party_id
9735                                  ,ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_to_party_type
9736                                  ,p_hdr_det_factors_rec.legal_entity_id
9737                                  ,p_hdr_det_factors_rec.bill_to_location_id
9738                                  ,l_rdng_bill_to_ptp_id
9739                                  ,l_return_status
9740                                  );
9741 
9742            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9743              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9744                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9745                 ':ZX_TCM_PTP_PKG.get_ptp for rounding_bill_to_party_id returned errors');
9746              END IF;
9747              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9748                RAISE FND_API.G_EXC_ERROR;
9749              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9750                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9754           l_rdng_bill_to_ptp_id := l_rdng_ship_to_ptp_id;
9751              END IF;
9752            END IF;
9753         ELSE
9755         END IF;
9756       END IF;
9757 
9758       IF p_hdr_det_factors_rec.rounding_bill_from_party_id is NOT NULL AND
9759          p_hdr_det_factors_rec.rounding_bill_from_party_id <> FND_API.G_MISS_NUM THEN
9760          IF (p_hdr_det_factors_rec.rounding_bill_from_party_id <> p_hdr_det_factors_rec.rounding_ship_from_party_id)
9761            OR (ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_from_party_type <> ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_from_party_type)
9762 		   OR  p_hdr_det_factors_rec.rounding_ship_from_party_id is null THEN
9763            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9764              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,' Call TCM API to get ptp for rounding_bill_from_party_id: '||
9765                                                                        to_char(p_hdr_det_factors_rec.rounding_bill_from_party_id));
9766            END IF;
9767            ZX_TCM_PTP_PKG.get_ptp(p_hdr_det_factors_rec.rounding_bill_from_party_id
9768                                  ,ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_from_party_type
9769                                  ,p_hdr_det_factors_rec.legal_entity_id
9770                                  ,p_hdr_det_factors_rec.bill_from_location_id
9771                                  ,l_rdng_bill_from_ptp_id
9772                                  ,l_return_status
9773                                  );
9774 
9775            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9776              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9777                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9778                 ':ZX_TCM_PTP_PKG.get_ptp for rounding_bill_from_party_id returned errors');
9779              END IF;
9780              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9781                RAISE FND_API.G_EXC_ERROR;
9782              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9783                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9784              END IF;
9785            END IF;
9786         ELSE
9787           l_rdng_bill_from_ptp_id := l_rdng_ship_from_ptp_id;
9788         END IF;
9789       END IF;
9790 
9791       IF p_hdr_det_factors_rec.rndg_bill_to_party_site_id is NOT NULL AND
9792          p_hdr_det_factors_rec.rndg_bill_to_party_site_id <> FND_API.G_MISS_NUM THEN
9793          IF (p_hdr_det_factors_rec.rndg_bill_to_party_site_id <> p_hdr_det_factors_rec.rndg_ship_to_party_site_id)
9794            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)
9795 		   OR  p_hdr_det_factors_rec.rndg_ship_to_party_site_id is null THEN
9796            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9797              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: '||
9798                                                                        to_char(p_hdr_det_factors_rec.rndg_bill_to_party_site_id));
9799            END IF;
9800            ZX_TCM_PTP_PKG.get_ptp(p_hdr_det_factors_rec.rndg_bill_to_party_site_id
9801                                  ,ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_to_pty_site_type
9802                                  ,p_hdr_det_factors_rec.legal_entity_id
9803                                  ,null
9804                                  ,l_rdng_bill_to_ptp_st_id
9805                                  ,l_return_status
9806                                 );
9807 
9808            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9809              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9810                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9811                 ':ZX_TCM_PTP_PKG.get_ptp for rndg_bill_to_party_site_id returned errors');
9812              END IF;
9813              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9814                RAISE FND_API.G_EXC_ERROR;
9815              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9816                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9817              END IF;
9818            END IF;
9819         ELSE
9820           l_rdng_bill_to_ptp_st_id := l_rdng_ship_to_ptp_st_id;
9821         END IF;
9822       END IF;
9823 
9824       IF p_hdr_det_factors_rec.rndg_bill_from_party_site_id is NOT NULL AND
9825          p_hdr_det_factors_rec.rndg_bill_to_party_site_id <> FND_API.G_MISS_NUM THEN
9826         IF p_hdr_det_factors_rec.rndg_bill_from_party_site_id <> p_hdr_det_factors_rec.rndg_ship_from_party_site_id
9827            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)
9828 		   OR  p_hdr_det_factors_rec.rndg_ship_from_party_site_id is null THEN
9829            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9830              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: '||
9831                                                                        to_char(p_hdr_det_factors_rec.rndg_bill_from_party_site_id));
9832            END IF;
9833            ZX_TCM_PTP_PKG.get_ptp(p_hdr_det_factors_rec.rndg_bill_from_party_site_id
9834                                  ,ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_from_pty_site_type
9835                                  ,p_hdr_det_factors_rec.legal_entity_id
9836                                  ,null
9837                                  ,l_rdng_bill_from_ptp_st_id
9838                                  ,l_return_status
9839                                  );
9840 
9841            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9842              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9843                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9844                 ':ZX_TCM_PTP_PKG.get_ptp for rndg_bill_from_party_site_id returned errors');
9845              END IF;
9846              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9847                RAISE FND_API.G_EXC_ERROR;
9848              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9849                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9850              END IF;
9851            END IF;
9852         ELSE
9853           l_rdng_bill_from_ptp_st_id := l_rdng_ship_from_ptp_st_id;
9854         END IF;
9855       END IF;
9856 
9857       --get_tax_profile_ids expects the following data legal entity id in zx_global_structures table.
9858       zx_global_structures_pkg.trx_line_dist_tbl.LEGAL_ENTITY_ID(1) := p_hdr_det_factors_rec.legal_entity_id;
9859 
9860       IF p_hdr_det_factors_rec.ship_to_party_id is not NULL AND
9861          p_hdr_det_factors_rec.ship_to_party_id <> FND_API.G_MISS_NUM THEN
9862         IF ((p_hdr_det_factors_rec.rounding_ship_to_party_id is NULL)
9863           OR ((p_hdr_det_factors_rec.rounding_ship_to_party_id is NOT NULL)
9864           AND (p_hdr_det_factors_rec.ship_to_party_id <>
9865               p_hdr_det_factors_rec.rounding_ship_to_party_id))) THEN
9866           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9867             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Ship To Party Id: '||
9868                                                                         to_char(p_hdr_det_factors_rec.ship_to_party_id));
9869           END IF;
9870           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_to_party_type;
9871           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
9872                                                l_party_type,
9873                                                p_hdr_det_factors_rec.ship_to_party_id,
9874                                                p_hdr_det_factors_rec.ship_to_location_id,
9875                                                NULL,
9876                                                l_ship_to_ptp_id
9877                                               );
9878 
9879            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9880              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9881                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9882                 ':ZX_TCM_PTP_PKG.get_ptp for ship_to_party_id returned errors');
9883              END IF;
9884              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9885                RAISE FND_API.G_EXC_ERROR;
9886              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9887                RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9888              END IF;
9889            END IF;
9890         ELSE /* Ship To Party is same as Rounding Ship To Party */
9891           l_ship_to_ptp_id := l_rdng_ship_to_ptp_id;
9892         END IF;
9893       END IF; /* Completed Condition Check for Ship To Party */
9894 
9895 
9896       IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9897         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Call TCM API to get ptp for Legal Entity: '||
9898                                                                     to_char(p_hdr_det_factors_rec.legal_entity_id));
9899       END IF;
9900 
9901       ZX_TCM_PTP_PKG.get_ptp_hq(p_hdr_det_factors_rec.legal_entity_id,
9902                                 l_hq_estb_ptp_id,
9903                                 l_return_status
9904                                 );
9905 
9906       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9907         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9908             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9909              ':ZX_TCM_PTP_PKG.get_ptp for legal_entity_id 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       IF p_hdr_det_factors_rec.ship_from_party_id is NOT NULL AND
9919          p_hdr_det_factors_rec.ship_from_party_id <> FND_API.G_MISS_NUM THEN
9920          IF ((p_hdr_det_factors_rec.rounding_ship_from_party_id is NULL)
9921           OR ((p_hdr_det_factors_rec.rounding_ship_from_party_id is NOT NULL)
9922           AND (p_hdr_det_factors_rec.ship_from_party_id  <> p_hdr_det_factors_rec.rounding_ship_from_party_id))) THEN
9923           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9924             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Ship From Party Id: '||
9925                                                                        to_char(p_hdr_det_factors_rec.ship_from_party_id));
9926           END IF;
9927           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_from_party_type;
9928           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
9929                                               l_party_type,
9930                                               p_hdr_det_factors_rec.ship_from_party_id,
9931                                               p_hdr_det_factors_rec.ship_from_location_id,
9932                                               NULL,
9933                                               l_ship_from_ptp_id
9934                                              );
9935 
9939                 ':ZX_TCM_PTP_PKG.get_ptp for ship_from_party_id returned errors');
9936           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9937             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9938               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9940             END IF;
9941             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9942               RAISE FND_API.G_EXC_ERROR;
9943             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9944               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9945             END IF;
9946           END IF;
9947         ELSE /* Ship from party is same as rounding ship from party */
9948           l_ship_from_ptp_id := l_rdng_ship_from_ptp_id;
9949         END IF;
9950      END IF; /* Completed condition check for ship from party */
9951 
9952     IF p_hdr_det_factors_rec.poa_party_tax_prof_id is NOT NULL  AND
9953        p_hdr_det_factors_rec.poa_party_tax_prof_id <> FND_API.G_MISS_NUM THEN
9954        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9955           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for POA Party Id: '
9956                                                                      || to_char(p_hdr_det_factors_rec.poa_party_id));
9957        END IF;
9958 
9959        l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.poa_party_type;
9960        ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
9961                                            l_party_type ,
9962                                            p_hdr_det_factors_rec.poa_party_id,
9963                                            p_hdr_det_factors_rec.poa_location_id,
9964                                            NULL,
9965                                            l_poa_ptp_id
9966                                           );
9967 
9968        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
9969          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9970            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
9971              ':ZX_TCM_PTP_PKG.get_ptp for poa_party_id returned errors');
9972          END IF;
9973          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
9974            RAISE FND_API.G_EXC_ERROR;
9975          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
9976            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
9977          END IF;
9978         END IF;
9979       END IF; /* Completed condition check for poa party */
9980 
9981 
9982       IF p_hdr_det_factors_rec.poo_party_id is NOT NULL AND
9983         p_hdr_det_factors_rec.poa_party_tax_prof_id <> FND_API.G_MISS_NUM THEN
9984         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
9985           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for POO Party Id: '||
9986                                                                       to_char(p_hdr_det_factors_rec.poo_party_id));
9987         END IF;
9988 
9989         l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.poo_party_type;
9990         ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
9991                                             l_party_type,
9992                                             p_hdr_det_factors_rec.poo_party_id,
9993                                             p_hdr_det_factors_rec.poo_location_id,
9994                                             NULL,
9995                                             l_poo_ptp_id
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||
10001              ':ZX_TCM_PTP_PKG.get_ptp for poo_party_id returned errors');
10002          END IF;
10003          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10004            RAISE FND_API.G_EXC_ERROR;
10005          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10006            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10007          END IF;
10008         END IF;
10009       END IF; /* Completed condition check for poo party */
10010 
10011       IF p_hdr_det_factors_rec.bill_to_party_id is NOT NULL AND
10012         p_hdr_det_factors_rec.bill_to_party_id <> FND_API.G_MISS_NUM THEN
10013         IF ((p_hdr_det_factors_rec.rounding_bill_to_party_id is NULL)
10014         OR ((p_hdr_det_factors_rec.rounding_bill_to_party_id is NOT NULL)
10015         AND (p_hdr_det_factors_rec.bill_to_party_id
10016          <> p_hdr_det_factors_rec.rounding_bill_to_party_id))) THEN
10017 
10018           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10019            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Bill To Party Id: '||
10020                                                                        to_char(p_hdr_det_factors_rec.bill_to_party_id));
10021           END IF;
10022 
10023           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_to_party_type;
10024           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
10025                                               l_party_type,
10026                                               p_hdr_det_factors_rec.bill_to_party_id,
10027                                               p_hdr_det_factors_rec.bill_to_location_id,
10028                                               NULL,
10029                                              l_bill_to_ptp_id
10030                                              );
10031 
10032           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10033             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10037             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10034               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10035                 ':ZX_TCM_PTP_PKG.get_ptp for bill_to_party_id returned errors');
10036             END IF;
10038               RAISE FND_API.G_EXC_ERROR;
10039             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10040               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10041             END IF;
10042           END IF;
10043         ELSE /* Bill to party is same as rounding bill to party */
10044           l_bill_to_ptp_id := l_rdng_bill_to_ptp_id;
10045         END IF;
10046       END IF; /* Completed condition check for bill to party */
10047 
10048 
10049       IF p_hdr_det_factors_rec.bill_from_party_id is NOT NULL AND
10050         p_hdr_det_factors_rec.bill_from_party_id <> FND_API.G_MISS_NUM THEN
10051         IF ((p_hdr_det_factors_rec.rounding_bill_from_party_id is NULL)
10052         OR ((p_hdr_det_factors_rec.rounding_bill_from_party_id is NOT NULL)
10053         AND (p_hdr_det_factors_rec.bill_from_party_id
10054           <> p_hdr_det_factors_rec.rounding_bill_from_party_id))) THEN
10055 
10056           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10057             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Bill From Party Id: '||
10058                                                                         to_char(p_hdr_det_factors_rec.bill_from_party_id));
10059           END IF;
10060 
10061           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_from_party_type;
10062           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
10063                                               l_party_type,
10064                                               p_hdr_det_factors_rec.bill_from_party_id,
10065                                               p_hdr_det_factors_rec.bill_from_location_id ,
10066                                               NULL,
10067                                               l_bill_from_ptp_id
10068                                              );
10069 
10070           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10071             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10072               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10073                 ':ZX_TCM_PTP_PKG.get_ptp for bill_from_party_id returned errors');
10074             END IF;
10075             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10076               RAISE FND_API.G_EXC_ERROR;
10077             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10078               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10079             END IF;
10080           END IF;
10081         ELSE /* Bill from party is same as rounding bill from party */
10082           l_bill_from_ptp_id := l_rdng_bill_from_ptp_id;
10083         END IF;
10084       END IF; /* Completed condition check for bill from party */
10085 
10086       IF p_hdr_det_factors_rec.ship_to_party_site_id is NOT NULL AND
10087         p_hdr_det_factors_rec.ship_to_party_site_id <> FND_API.G_MISS_NUM THEN
10088         IF ((p_hdr_det_factors_rec.rndg_ship_to_party_site_id is NULL)
10089         OR ((p_hdr_det_factors_rec.rndg_ship_to_party_site_id is NOT NULL)
10090         AND (p_hdr_det_factors_rec.ship_to_party_site_id
10091           <> p_hdr_det_factors_rec.rndg_ship_to_party_site_id))) THEN
10092 
10093           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10094             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Ship To Party Site Id: '||
10095                                                                        to_char(p_hdr_det_factors_rec.ship_to_party_site_id));
10096           END IF;
10097           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_to_pty_site_type;
10098           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
10099                                               l_party_type,
10100                                               NULL,
10101                                               NULL,
10102                                               p_hdr_det_factors_rec.ship_to_party_site_id ,
10103                                               l_ship_to_ptp_site_id
10104                                               );
10105 
10106           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10107             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10108               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10109                 ':ZX_TCM_PTP_PKG.get_ptp for ship_to_party_site_id returned errors');
10110             END IF;
10111             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10112               RAISE FND_API.G_EXC_ERROR;
10113             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10114               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10115             END IF;
10116           END IF;
10117         ELSE /* Ship to site is same as rounding ship to site */
10118           l_ship_to_ptp_site_id := l_rdng_ship_to_ptp_st_id;
10119         END IF;
10120       END IF; /* Completed condition check for ship to party site */
10121 
10122       IF p_hdr_det_factors_rec.ship_from_party_site_id is NOT NULL AND
10123         p_hdr_det_factors_rec.ship_to_party_site_id <> FND_API.G_MISS_NUM THEN
10124         IF ((p_hdr_det_factors_rec.rndg_ship_from_party_site_id is NULL)
10125         OR ((p_hdr_det_factors_rec.rndg_ship_from_party_site_id is NOT NULL)
10126         AND (p_hdr_det_factors_rec.ship_from_party_site_id
10127           <> p_hdr_det_factors_rec.rndg_ship_from_party_site_id))) THEN
10128 
10132           END IF;
10129           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10130             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Ship From Party Site Id: '||
10131                                                                         to_char(p_hdr_det_factors_rec.ship_from_party_site_id));
10133 
10134           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.ship_from_pty_site_type;
10135           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
10136                                               l_party_type,
10137                                               NULL,
10138                                               NULL,
10139                                               p_hdr_det_factors_rec.ship_from_party_site_id,
10140                                               l_ship_from_ptp_site_id
10141                                              );
10142 
10143           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10144             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10145               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10146                 ':ZX_TCM_PTP_PKG.get_ptp for ship_from_party_site_id returned errors');
10147             END IF;
10148             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10149               RAISE FND_API.G_EXC_ERROR;
10150             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10151               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10152             END IF;
10153           END IF;
10154         ELSE /* Ship from site is same as rounding ship from site */
10155           l_ship_from_ptp_site_id := l_rdng_ship_from_ptp_st_id;
10156         END IF;
10157       END IF; /* Completed condition check for ship from site*/
10158 
10159       IF p_hdr_det_factors_rec.poa_party_site_id is NOT NULL AND
10160         p_hdr_det_factors_rec.poa_party_site_id <> FND_API.G_MISS_NUM THEN
10161 
10162         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10163           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for POA Party Site Id: '||
10164                                                                       to_char(p_hdr_det_factors_rec.poa_party_site_id));
10165         END IF;
10166         l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.poa_pty_site_type;
10167         ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
10168                                             l_party_type,
10169                                             NULL,
10170                                             NULL,
10171                                             p_hdr_det_factors_rec.poa_party_site_id,
10172                                             l_poa_ptp_site_id
10173                                            );
10174 
10175           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10176             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10177               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10178                 ':ZX_TCM_PTP_PKG.get_ptp for poa_party_site_id returned errors');
10179             END IF;
10180             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10181               RAISE FND_API.G_EXC_ERROR;
10182             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10183               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10184             END IF;
10185           END IF;
10186       END IF; /* Completed condition check for poa party site */
10187 
10188 
10189       IF p_hdr_det_factors_rec.poo_party_site_id is NOT NULL AND
10190         p_hdr_det_factors_rec.poo_party_site_id <> FND_API.G_MISS_NUM THEN
10191         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10192            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for POO Party Site Id: '||
10193                                                                       to_char(p_hdr_det_factors_rec.poo_party_site_id));
10194         END IF;
10195         l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.poo_pty_site_type;
10196         ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
10197                                             l_party_type,
10198                                             NULL,
10199                                             NULL,
10200                                             p_hdr_det_factors_rec.poo_party_site_id,
10201                                             l_poo_ptp_site_id
10202                                            );
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||
10207                 ':ZX_TCM_PTP_PKG.get_ptp for poo_party_site_id returned errors');
10208             END IF;
10209             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10210               RAISE FND_API.G_EXC_ERROR;
10211             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10212               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10213             END IF;
10214           END IF;
10215       END IF; /* Completed condition check for poo party site */
10216 
10217       IF p_hdr_det_factors_rec.bill_to_party_site_id is NOT NULL AND
10218         p_hdr_det_factors_rec.bill_to_party_site_id <> FND_API.G_MISS_NUM THEN
10219       IF ((p_hdr_det_factors_rec.rndg_bill_to_party_site_id is NULL)
10220       OR ((p_hdr_det_factors_rec.rndg_bill_to_party_site_id is NOT NULL)
10221        AND (p_hdr_det_factors_rec.bill_to_party_site_id
10222          <> p_hdr_det_factors_rec.rndg_bill_to_party_site_id))) THEN
10223 
10227           END IF;
10224           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10225             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Bill To Party Site Id: '||
10226                                                                         to_char(p_hdr_det_factors_rec.bill_to_party_site_id));
10228           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_to_pty_site_type;
10229           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
10230                                               l_party_type,
10231                                               NULL,
10232                                               NULL,
10233                                               p_hdr_det_factors_rec.bill_to_party_site_id,
10234                                               l_bill_to_ptp_site_id
10235                                              );
10236 
10237           IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10238             IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10239               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
10240                 ':ZX_TCM_PTP_PKG.get_ptp for bill_to_party_site_id returned errors');
10241             END IF;
10242             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10243               RAISE FND_API.G_EXC_ERROR;
10244             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10245               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10246             END IF;
10247           END IF;
10248         ELSE  /* Bill to site is same as rounding bill to site */
10249           l_bill_to_ptp_site_id := l_rdng_bill_to_ptp_st_id;
10250         END IF;
10251       END IF; /* Completed condition check for bill to site */
10252 
10253 
10254       IF p_hdr_det_factors_rec.bill_from_party_site_id is NOT NULL AND
10255         p_hdr_det_factors_rec.bill_from_party_site_id <> FND_API.G_MISS_NUM THEN
10256         IF ((p_hdr_det_factors_rec.rndg_bill_from_party_site_id is NULL)
10257         OR ((p_hdr_det_factors_rec.rndg_bill_from_party_site_id is NOT NULL)
10258         AND (p_hdr_det_factors_rec.bill_from_party_site_id
10259           <> p_hdr_det_factors_rec.rndg_bill_from_party_site_id))) THEN
10260 
10261           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10262              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,'Get PTP Id for Bill From Party Site Id: '||
10263                                                                          to_char(p_hdr_det_factors_rec.bill_from_party_site_id));
10264           END IF;
10265           l_party_type := ZX_VALID_INIT_PARAMS_PKG.source_rec.bill_from_pty_site_type;
10266           ZX_SRVC_TYP_PKG.get_tax_profile_ids(l_return_status,
10267                                               l_party_type,
10268                                               NULL,
10269                                               NULL,
10270                                               p_hdr_det_factors_rec.bill_from_party_site_id,
10271                                               l_bill_from_ptp_site_id
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||
10277                 ':ZX_TCM_PTP_PKG.get_ptp for bill_from_party_site_id returned errors');
10278             END IF;
10279             IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10280               RAISE FND_API.G_EXC_ERROR;
10281             ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10282               RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10283             END IF;
10284           END IF;
10285         ELSE /* Bill from site is same as rounding bill from site */
10286           l_bill_from_ptp_site_id := l_rdng_bill_from_ptp_st_id;
10287         END IF;
10288       END IF; /* Completed condition check for rounding bill from site */
10289 
10290       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10291           x_return_status := l_return_status;
10292           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10293             FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
10294                    ' RETURN_STATUS = ' || x_return_status);
10295           END IF;
10296           RETURN;
10297       END IF;
10298 
10299       ZX_R11I_TAX_PARTNER_PKG.copy_trx_line_for_ptnr_bef_upd(NULL,
10300                                                             l_event_class_rec,
10301                                                             NULL,
10302                                                             'N',
10303                                                             NULL,
10304             	   		                            NULL,
10305                                                             l_return_status
10306                                                             );
10307       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10308          x_return_status := l_return_status ;
10309          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10310             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');
10311          END IF;
10312          RETURN;
10313       END IF;
10314 
10315    /*-----------------------------------------------+
10316     |Update the headers only in zx_line_det_factors |
10317     +----------------------------------------------*/
10321          EVENT_CLASS_CODE                  = p_hdr_det_factors_rec.EVENT_CLASS_CODE,
10318    UPDATE ZX_LINES_DET_FACTORS SET
10319          APPLICATION_ID                    = p_hdr_det_factors_rec.APPLICATION_ID,
10320          ENTITY_CODE                       = p_hdr_det_factors_rec.ENTITY_CODE,
10322          EVENT_TYPE_CODE                   = p_hdr_det_factors_rec.EVENT_TYPE_CODE,
10323          INTERNAL_ORGANIZATION_ID          = p_hdr_det_factors_rec.INTERNAL_ORGANIZATION_ID,
10324          LEGAL_ENTITY_ID                   = p_hdr_det_factors_rec.LEGAL_ENTITY_ID,
10325          TRX_ID                            = p_hdr_det_factors_rec.TRX_ID,
10326          TRX_DOC_REVISION	           = decode(p_hdr_det_factors_rec.TRX_DOC_REVISION,FND_API.G_MISS_CHAR,
10327                                                                                                    TRX_DOC_REVISION,
10328                                                                                                    p_hdr_det_factors_rec.TRX_DOC_REVISION),
10329          TRX_DATE                          = decode(p_hdr_det_factors_rec.TRX_DATE,FND_API.G_MISS_DATE,
10330                                                                                                    TRX_DATE,
10331                                                                                                    p_hdr_det_factors_rec.TRX_DATE),
10332          LEDGER_ID                         = decode(p_hdr_det_factors_rec.LEDGER_ID,FND_API.G_MISS_NUM,
10333                                                                                                    LEDGER_ID,
10334                                                                                                    p_hdr_det_factors_rec.LEDGER_ID),
10335          INTERNAL_ORG_LOCATION_ID          = decode(p_hdr_det_factors_rec.INTERNAL_ORG_LOCATION_ID,FND_API.G_MISS_NUM,
10336                                                                                                    INTERNAL_ORG_LOCATION_ID,
10337                                                                                                    p_hdr_det_factors_rec.INTERNAL_ORG_LOCATION_ID),
10338          TRX_CURRENCY_CODE                 = decode(p_hdr_det_factors_rec.TRX_CURRENCY_CODE,FND_API.G_MISS_CHAR,
10339                                                                                                    TRX_CURRENCY_CODE,
10340                                                                                                    p_hdr_det_factors_rec.TRX_CURRENCY_CODE),
10341          CURRENCY_CONVERSION_TYPE          = decode(p_hdr_det_factors_rec.CURRENCY_CONVERSION_TYPE,FND_API.G_MISS_CHAR,
10342                                                                                                    CURRENCY_CONVERSION_TYPE,
10343                                                                                                    p_hdr_det_factors_rec.CURRENCY_CONVERSION_TYPE),
10344          CURRENCY_CONVERSION_RATE          = decode(p_hdr_det_factors_rec.CURRENCY_CONVERSION_RATE,FND_API.G_MISS_NUM,
10345                                                                                                    CURRENCY_CONVERSION_RATE,
10346                                                                                                    p_hdr_det_factors_rec.CURRENCY_CONVERSION_RATE),
10347          CURRENCY_CONVERSION_DATE          = decode(p_hdr_det_factors_rec.CURRENCY_CONVERSION_DATE,FND_API.G_MISS_DATE,
10348                                                                                                    CURRENCY_CONVERSION_DATE,
10349                                                                                                    p_hdr_det_factors_rec.CURRENCY_CONVERSION_DATE),
10350          MINIMUM_ACCOUNTABLE_UNIT	   = decode(p_hdr_det_factors_rec.MINIMUM_ACCOUNTABLE_UNIT,FND_API.G_MISS_NUM,
10351                                                                                                    MINIMUM_ACCOUNTABLE_UNIT,
10352                                                                                                    p_hdr_det_factors_rec.MINIMUM_ACCOUNTABLE_UNIT),
10353          PRECISION                         =  decode(p_hdr_det_factors_rec.PRECISION,FND_API.G_MISS_NUM,
10354                                                                                                    PRECISION,
10355                                                                                                    p_hdr_det_factors_rec.PRECISION),
10356          ESTABLISHMENT_ID                  = decode(p_hdr_det_factors_rec.ESTABLISHMENT_ID,FND_API.G_MISS_NUM,
10357                                                                                                     ESTABLISHMENT_ID,
10358                                                                                                     p_hdr_det_factors_rec.ESTABLISHMENT_ID),
10359          RECEIVABLES_TRX_TYPE_ID	   = decode(p_hdr_det_factors_rec.RECEIVABLES_TRX_TYPE_ID,FND_API.G_MISS_NUM,
10360                                                                                                     RECEIVABLES_TRX_TYPE_ID,
10361                                                                                                     p_hdr_det_factors_rec.RECEIVABLES_TRX_TYPE_ID),
10362          RELATED_DOC_APPLICATION_ID	   = decode(p_hdr_det_factors_rec.RELATED_DOC_APPLICATION_ID,FND_API.G_MISS_NUM,
10363                                                                                                     RELATED_DOC_APPLICATION_ID,
10364                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_APPLICATION_ID),
10365          RELATED_DOC_ENTITY_CODE	   = decode(p_hdr_det_factors_rec.RELATED_DOC_ENTITY_CODE,FND_API.G_MISS_CHAR,
10366                                                                                                     RELATED_DOC_ENTITY_CODE,
10367                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_ENTITY_CODE),
10371          RELATED_DOC_TRX_ID	           = decode(p_hdr_det_factors_rec.RELATED_DOC_TRX_ID,FND_API.G_MISS_NUM,
10368          RELATED_DOC_EVENT_CLASS_CODE	   = decode(p_hdr_det_factors_rec.RELATED_DOC_EVENT_CLASS_CODE,FND_API.G_MISS_CHAR,
10369                                                                                                     RELATED_DOC_EVENT_CLASS_CODE,
10370                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_EVENT_CLASS_CODE),
10372                                                                                                     RELATED_DOC_TRX_ID,
10373                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_TRX_ID),
10374          RELATED_DOC_NUMBER	           = decode(p_hdr_det_factors_rec.RELATED_DOC_NUMBER,FND_API.G_MISS_CHAR,
10375                                                                                                     RELATED_DOC_NUMBER,
10376                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_NUMBER),
10377          RELATED_DOC_DATE                  = decode(p_hdr_det_factors_rec.RELATED_DOC_DATE,FND_API.G_MISS_DATE,
10378                                                                                                     RELATED_DOC_DATE,
10379                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_DATE),
10380          DEFAULT_TAXATION_COUNTRY	   = decode(p_hdr_det_factors_rec.DEFAULT_TAXATION_COUNTRY,FND_API.G_MISS_CHAR,
10381                                                                                                     DEFAULT_TAXATION_COUNTRY,
10382                                                                                                     p_hdr_det_factors_rec.DEFAULT_TAXATION_COUNTRY),
10383          TRX_NUMBER	                   = decode(p_hdr_det_factors_rec.TRX_NUMBER,FND_API.G_MISS_CHAR,
10384                                                                                                     TRX_NUMBER,
10385                                                                                                     p_hdr_det_factors_rec.TRX_NUMBER),
10386          TRX_DESCRIPTION	           = decode(p_hdr_det_factors_rec.TRX_DESCRIPTION,FND_API.G_MISS_CHAR,
10387                                                                                                    TRX_DESCRIPTION,
10388                                                                                                    p_hdr_det_factors_rec.TRX_DESCRIPTION),
10389          TRX_COMMUNICATED_DATE	           = decode(p_hdr_det_factors_rec.TRX_COMMUNICATED_DATE,FND_API.G_MISS_DATE,
10390                                                                                                    TRX_COMMUNICATED_DATE,
10391                                                                                                    p_hdr_det_factors_rec.TRX_COMMUNICATED_DATE),
10392          BATCH_SOURCE_ID	           = decode(p_hdr_det_factors_rec.BATCH_SOURCE_ID,FND_API.G_MISS_NUM,
10393                                                                                                    BATCH_SOURCE_ID,
10394                                                                                                    p_hdr_det_factors_rec.BATCH_SOURCE_ID),
10395          BATCH_SOURCE_NAME	           = decode(p_hdr_det_factors_rec.BATCH_SOURCE_NAME,FND_API.G_MISS_CHAR,
10396                                                                                                    BATCH_SOURCE_NAME,
10397                                                                                                    p_hdr_det_factors_rec.BATCH_SOURCE_NAME),
10398          DOC_SEQ_ID	                   = decode(p_hdr_det_factors_rec.DOC_SEQ_ID,FND_API.G_MISS_NUM,
10399                                                                                                    DOC_SEQ_ID,
10400                                                                                                    p_hdr_det_factors_rec.DOC_SEQ_ID),
10401          DOC_SEQ_NAME	                   = decode(p_hdr_det_factors_rec.DOC_SEQ_NAME,FND_API.G_MISS_CHAR,
10402                                                                                                    DOC_SEQ_NAME,
10403                                                                                                    p_hdr_det_factors_rec.DOC_SEQ_NAME),
10404          DOC_SEQ_VALUE	                   = decode(p_hdr_det_factors_rec.DOC_SEQ_VALUE,FND_API.G_MISS_CHAR,
10405                                                                                                    DOC_SEQ_VALUE,
10406                                                                                                    p_hdr_det_factors_rec.DOC_SEQ_VALUE),
10407          TRX_DUE_DATE	                   = decode(p_hdr_det_factors_rec.TRX_DUE_DATE,FND_API.G_MISS_DATE,
10408                                                                                                    TRX_DUE_DATE,
10409                                                                                                    p_hdr_det_factors_rec.TRX_DUE_DATE),
10410          TRX_TYPE_DESCRIPTION	           = decode(p_hdr_det_factors_rec.TRX_TYPE_DESCRIPTION,FND_API.G_MISS_CHAR,
10411                                                                                                    TRX_TYPE_DESCRIPTION,
10412                                                                                                    p_hdr_det_factors_rec.TRX_TYPE_DESCRIPTION),
10413          DOCUMENT_SUB_TYPE	           = decode(p_hdr_det_factors_rec.DOCUMENT_SUB_TYPE,FND_API.G_MISS_CHAR,
10414                                                                                                    DOCUMENT_SUB_TYPE,
10415                                                                                                    p_hdr_det_factors_rec.DOCUMENT_SUB_TYPE),
10416          SUPPLIER_TAX_INVOICE_NUMBER	   = decode(p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_NUMBER,FND_API.G_MISS_CHAR,
10420                                                                                                    SUPPLIER_TAX_INVOICE_DATE,
10417                                                                                                    SUPPLIER_TAX_INVOICE_NUMBER,
10418                                                                                                    p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_NUMBER),
10419          SUPPLIER_TAX_INVOICE_DATE	   = decode(p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_DATE,FND_API.G_MISS_DATE,
10421                                                                                                    p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_DATE),
10422          SUPPLIER_EXCHANGE_RATE	           = decode(p_hdr_det_factors_rec.SUPPLIER_EXCHANGE_RATE,FND_API.G_MISS_NUM,
10423                                                                                                    SUPPLIER_EXCHANGE_RATE,
10424                                                                                                    p_hdr_det_factors_rec.SUPPLIER_EXCHANGE_RATE),
10425          TAX_INVOICE_DATE	           = decode(p_hdr_det_factors_rec.TAX_INVOICE_DATE,FND_API.G_MISS_DATE,
10426                                                                                                    TAX_INVOICE_DATE,
10427                                                                                                    p_hdr_det_factors_rec.TAX_INVOICE_DATE),
10428          TAX_INVOICE_NUMBER	           = decode(p_hdr_det_factors_rec.TAX_INVOICE_NUMBER,FND_API.G_MISS_CHAR,
10429                                                                                                    TAX_INVOICE_NUMBER,
10430                                                                                                    p_hdr_det_factors_rec.TAX_INVOICE_NUMBER),
10431          CTRL_TOTAL_HDR_TX_AMT             = decode(p_hdr_det_factors_rec.CTRL_TOTAL_HDR_TX_AMT,FND_API.G_MISS_NUM,
10432                                                                                                    ctrl_total_hdr_tx_amt,
10433                                                                                                    p_hdr_det_factors_rec.CTRL_TOTAL_HDR_TX_AMT),
10434          FIRST_PTY_ORG_ID	           = l_event_class_rec.first_pty_org_id,
10435          TAX_EVENT_CLASS_CODE	           = l_event_class_rec.TAX_EVENT_CLASS_CODE,
10436          TAX_EVENT_TYPE_CODE	           = l_event_class_rec.TAX_EVENT_TYPE_CODE,
10437          DOC_EVENT_STATUS	           = l_event_class_rec.DOC_STATUS_CODE,
10438          TRX_BATCH_ID                      = decode(p_hdr_det_factors_rec.TRX_BATCH_ID,FND_API.G_MISS_NUM,
10439                                                                                                    TRX_BATCH_ID,
10440                                                                                                    p_hdr_det_factors_rec.TRX_BATCH_ID),
10441          APPLIED_TO_TRX_NUMBER             = decode(p_hdr_det_factors_rec.APPLIED_TO_TRX_NUMBER,FND_API.G_MISS_CHAR,
10442                                                                                                    APPLIED_TO_TRX_NUMBER,
10443                                                                                                    p_hdr_det_factors_rec.APPLIED_TO_TRX_NUMBER),
10444          APPLICATION_DOC_STATUS            = decode(p_hdr_det_factors_rec.APPLICATION_DOC_STATUS,FND_API.G_MISS_CHAR,
10445                                                                                                    APPLICATION_DOC_STATUS,
10446                                                                                                    p_hdr_det_factors_rec.APPLICATION_DOC_STATUS),
10447          RDNG_SHIP_TO_PTY_TX_PROF_ID	   = decode(p_hdr_det_factors_rec.ROUNDING_SHIP_TO_PARTY_ID,FND_API.G_MISS_NUM,
10448                                                                                                    RDNG_SHIP_TO_PTY_TX_PROF_ID,
10449                                                                                                    l_rdng_ship_to_ptp_id),
10450          RDNG_SHIP_FROM_PTY_TX_PROF_ID	   = decode(p_hdr_det_factors_rec.ROUNDING_SHIP_FROM_PARTY_ID,FND_API.G_MISS_NUM,
10451                                                                                                    RDNG_SHIP_FROM_PTY_TX_PROF_ID,
10452                                                                                                    l_rdng_ship_from_ptp_id),
10453          RDNG_BILL_TO_PTY_TX_PROF_ID	   = decode(p_hdr_det_factors_rec.ROUNDING_BILL_TO_PARTY_ID,FND_API.G_MISS_NUM,
10454                                                                                                    RDNG_BILL_TO_PTY_TX_PROF_ID,
10455                                                                                                    l_rdng_bill_to_ptp_id),
10456          RDNG_BILL_FROM_PTY_TX_PROF_ID	   = decode(p_hdr_det_factors_rec.ROUNDING_BILL_FROM_PARTY_ID,FND_API.G_MISS_NUM,
10457                                                                                                    RDNG_BILL_FROM_PTY_TX_PROF_ID,
10458                                                                                                    l_rdng_bill_from_ptp_id),
10459          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,
10460                                                                                                    RDNG_SHIP_TO_PTY_TX_P_ST_ID,
10461                                                                                                    l_rdng_ship_to_ptp_st_id),
10462          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,
10463                                                                                                    RDNG_SHIP_FROM_PTY_TX_P_ST_ID,
10464                                                                                                    l_rdng_ship_from_ptp_st_id),
10465          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,
10469                                                                                                    RDNG_BILL_FROM_PTY_TX_P_ST_ID,
10466                                                                                                    RDNG_BILL_TO_PTY_TX_P_ST_ID,
10467                                                                                                    l_rdng_bill_to_ptp_st_id),
10468          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,
10470                                                                                                    l_rdng_bill_from_ptp_st_id),
10471          PORT_OF_ENTRY_CODE                =  decode(p_hdr_det_factors_rec.PORT_OF_ENTRY_CODE,FND_API.G_MISS_CHAR,
10472                                                                                                    PORT_OF_ENTRY_CODE,
10473                                                                                                    p_hdr_det_factors_rec.PORT_OF_ENTRY_CODE),
10474          TAX_REPORTING_FLAG                = decode(p_hdr_det_factors_rec.TAX_REPORTING_FLAG,FND_API.G_MISS_CHAR,
10475                                                                                                    TAX_REPORTING_FLAG,
10476                                                                                                    p_hdr_det_factors_rec.TAX_REPORTING_FLAG),
10477          PROVNL_TAX_DETERMINATION_DATE     = decode(p_hdr_det_factors_rec.PROVNL_TAX_DETERMINATION_DATE,FND_API.G_MISS_DATE,
10478                                                                                                    PROVNL_TAX_DETERMINATION_DATE,
10479                                                                                                    p_hdr_det_factors_rec.PROVNL_TAX_DETERMINATION_DATE),
10480          SHIP_THIRD_PTY_ACCT_ID            = decode(p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_ID,FND_API.G_MISS_NUM,
10481                                                                                                    SHIP_THIRD_PTY_ACCT_ID,
10482                                                                                                    p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_ID),
10483          BILL_THIRD_PTY_ACCT_ID            = decode(p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_ID,FND_API.G_MISS_NUM,
10484                                                                                                    BILL_THIRD_PTY_ACCT_ID,
10485                                                                                                    p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_ID),
10486          SHIP_THIRD_PTY_ACCT_SITE_ID       = decode(p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_SITE_ID,FND_API.G_MISS_NUM,
10487                                                                                                    SHIP_THIRD_PTY_ACCT_SITE_ID,
10488                                                                                                    p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_SITE_ID),
10489          BILL_THIRD_PTY_ACCT_SITE_ID       = decode(p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_SITE_ID,FND_API.G_MISS_NUM,
10490                                                                                                    BILL_THIRD_PTY_ACCT_SITE_ID,
10491                                                                                                    p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_SITE_ID),
10492          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,
10493                                                                                                    SHIP_TO_CUST_ACCT_SITE_USE_ID,
10494                                                                                                    p_hdr_det_factors_rec.SHIP_TO_CUST_ACCT_SITE_USE_ID),
10495          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,
10496                                                                                                    BILL_TO_CUST_ACCT_SITE_USE_ID,
10497                                                                                                    p_hdr_det_factors_rec.BILL_TO_CUST_ACCT_SITE_USE_ID),
10498          SHIP_TO_LOCATION_ID               = decode(p_hdr_det_factors_rec.SHIP_TO_LOCATION_ID,FND_API.G_MISS_NUM,
10499                                                                                                    SHIP_TO_LOCATION_ID,
10500                                                                                                    p_hdr_det_factors_rec.SHIP_TO_LOCATION_ID),
10501          SHIP_FROM_LOCATION_ID             = decode(p_hdr_det_factors_rec.SHIP_FROM_LOCATION_ID,FND_API.G_MISS_NUM,
10502                                                                                                    SHIP_FROM_LOCATION_ID,
10503                                                                                                    p_hdr_det_factors_rec.SHIP_FROM_LOCATION_ID),
10504          BILL_TO_LOCATION_ID               = decode(p_hdr_det_factors_rec.BILL_TO_LOCATION_ID,FND_API.G_MISS_NUM,
10505                                                                                                    BILL_TO_LOCATION_ID,
10506                                                                                                    p_hdr_det_factors_rec.BILL_TO_LOCATION_ID),
10507          BILL_FROM_LOCATION_ID             = decode(p_hdr_det_factors_rec.BILL_FROM_LOCATION_ID,FND_API.G_MISS_NUM,
10508                                                                                                    BILL_FROM_LOCATION_ID,
10509                                                                                                    p_hdr_det_factors_rec.BILL_FROM_LOCATION_ID),
10510          POA_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POA_LOCATION_ID,FND_API.G_MISS_NUM,
10511                                                                                                    POA_LOCATION_ID,
10515                                                                                                    p_hdr_det_factors_rec.POO_LOCATION_ID),
10512                                                                                                    p_hdr_det_factors_rec.POA_LOCATION_ID),
10513          POO_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POO_LOCATION_ID,FND_API.G_MISS_NUM,
10514                                                                                                    POO_LOCATION_ID,
10516          PAYING_LOCATION_ID                = decode(p_hdr_det_factors_rec.PAYING_LOCATION_ID,FND_API.G_MISS_NUM,
10517                                                                                                    PAYING_LOCATION_ID,
10518                                                                                                    p_hdr_det_factors_rec.PAYING_LOCATION_ID),
10519          OWN_HQ_LOCATION_ID                = decode(p_hdr_det_factors_rec.OWN_HQ_LOCATION_ID,FND_API.G_MISS_NUM,
10520                                                                                                    OWN_HQ_LOCATION_ID,
10521                                                                                                    p_hdr_det_factors_rec.OWN_HQ_LOCATION_ID),
10522          TRADING_HQ_LOCATION_ID            = decode(p_hdr_det_factors_rec.TRADING_HQ_LOCATION_ID,FND_API.G_MISS_NUM,
10523                                                                                                    TRADING_HQ_LOCATION_ID,
10524                                                                                                    p_hdr_det_factors_rec.TRADING_HQ_LOCATION_ID),
10525          POC_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POC_LOCATION_ID,FND_API.G_MISS_NUM,
10526                                                                                                    POC_LOCATION_ID,
10527                                                                                                    p_hdr_det_factors_rec.POC_LOCATION_ID),
10528          POI_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POI_LOCATION_ID,FND_API.G_MISS_NUM,
10529                                                                                                    POI_LOCATION_ID,
10530                                                                                                    p_hdr_det_factors_rec.POI_LOCATION_ID),
10531          POD_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POD_LOCATION_ID,FND_API.G_MISS_NUM,
10532                                                                                                    POD_LOCATION_ID,
10533                                                                                                    p_hdr_det_factors_rec.POD_LOCATION_ID),
10534          TITLE_TRANSFER_LOCATION_ID        = decode(p_hdr_det_factors_rec.TITLE_TRANSFER_LOCATION_ID,FND_API.G_MISS_NUM,
10535                                                                                                    TITLE_TRANSFER_LOCATION_ID,
10536                                                                                                    p_hdr_det_factors_rec.TITLE_TRANSFER_LOCATION_ID),
10537          SHIP_TO_PARTY_TAX_PROF_ID         = decode(p_hdr_det_factors_rec.SHIP_TO_PARTY_ID,FND_API.G_MISS_NUM,
10538                                                                                                    SHIP_TO_PARTY_TAX_PROF_ID,
10539                                                                                                    l_ship_to_ptp_id),
10540          SHIP_FROM_PARTY_TAX_PROF_ID       = decode(p_hdr_det_factors_rec.SHIP_FROM_PARTY_ID,FND_API.G_MISS_NUM,
10541                                                                                                    SHIP_FROM_PARTY_TAX_PROF_ID,
10542                                                                                                    l_ship_from_ptp_id),
10543          POA_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POA_PARTY_ID,FND_API.G_MISS_NUM,
10544                                                                                                    POA_PARTY_TAX_PROF_ID,
10545                                                                                                    l_poa_ptp_id),
10546          POO_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POO_PARTY_ID,FND_API.G_MISS_NUM,
10547                                                                                                    POO_PARTY_TAX_PROF_ID,
10548                                                                                                    l_poo_ptp_id),
10549          PAYING_PARTY_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.PAYING_PARTY_ID,FND_API.G_MISS_NUM,
10550                                                                                                    PAYING_PARTY_TAX_PROF_ID,
10551                                                                                                    p_hdr_det_factors_rec.PAYING_PARTY_TAX_PROF_ID),
10552          OWN_HQ_PARTY_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.OWN_HQ_PARTY_ID,FND_API.G_MISS_NUM,
10553                                                                                                    OWN_HQ_PARTY_TAX_PROF_ID,
10554                                                                                                    p_hdr_det_factors_rec.OWN_HQ_PARTY_TAX_PROF_ID),
10555          TRADING_HQ_PARTY_TAX_PROF_ID      = decode(p_hdr_det_factors_rec.TRADING_HQ_PARTY_ID,FND_API.G_MISS_NUM,
10556                                                                                                    TRADING_HQ_PARTY_TAX_PROF_ID,
10557                                                                                                    p_hdr_det_factors_rec.TRADING_HQ_PARTY_TAX_PROF_ID),
10558          POI_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POI_PARTY_ID,FND_API.G_MISS_NUM,
10559                                                                                                    POI_PARTY_TAX_PROF_ID,
10563                                                                                                    p_hdr_det_factors_rec.POD_PARTY_TAX_PROF_ID),
10560                                                                                                    p_hdr_det_factors_rec.POI_PARTY_TAX_PROF_ID),
10561          POD_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POD_PARTY_ID,FND_API.G_MISS_NUM,
10562                                                                                                    POD_PARTY_TAX_PROF_ID,
10564          BILL_TO_PARTY_TAX_PROF_ID         = decode(p_hdr_det_factors_rec.BILL_TO_PARTY_ID,FND_API.G_MISS_NUM,
10565                                                                                                    BILL_TO_PARTY_TAX_PROF_ID,
10566                                                                                                    l_bill_to_ptp_id),
10567          BILL_FROM_PARTY_TAX_PROF_ID       = decode(p_hdr_det_factors_rec.BILL_FROM_PARTY_ID,FND_API.G_MISS_NUM,
10568                                                                                                    BILL_FROM_PARTY_TAX_PROF_ID,
10569                                                                                                    l_bill_from_ptp_id),
10570          TITLE_TRANS_PARTY_TAX_PROF_ID     = decode(p_hdr_det_factors_rec.TITLE_TRANSFER_PARTY_ID,FND_API.G_MISS_NUM,
10571                                                                                                    TITLE_TRANS_PARTY_TAX_PROF_ID,
10572                                                                                                    p_hdr_det_factors_rec.TITLE_TRANS_PARTY_TAX_PROF_ID),
10573          SHIP_TO_SITE_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.SHIP_TO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10574                                                                                                    SHIP_TO_SITE_TAX_PROF_ID,
10575                                                                                                    l_ship_to_ptp_site_id),
10576          SHIP_FROM_SITE_TAX_PROF_ID        = decode(p_hdr_det_factors_rec.SHIP_FROM_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10577                                                                                                    SHIP_FROM_SITE_TAX_PROF_ID,
10578                                                                                                    l_ship_from_ptp_site_id),
10579          BILL_TO_SITE_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.BILL_TO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10580                                                                                                    BILL_TO_SITE_TAX_PROF_ID,
10581                                                                                                    l_bill_to_ptp_site_id),
10582          BILL_FROM_SITE_TAX_PROF_ID        = decode(p_hdr_det_factors_rec.BILL_FROM_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10583                                                                                                    BILL_FROM_SITE_TAX_PROF_ID,
10584                                                                                                    l_bill_from_ptp_site_id),
10585          POA_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POA_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10586                                                                                                    POA_SITE_TAX_PROF_ID,
10587                                                                                                    l_poa_ptp_site_id),
10588          POO_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10589                                                                                                    POO_SITE_TAX_PROF_ID,
10590                                                                                                    l_poo_ptp_site_id),
10591          PAYING_SITE_TAX_PROF_ID           = decode(p_hdr_det_factors_rec.PAYING_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10592                                                                                                    PAYING_SITE_TAX_PROF_ID,
10593                                                                                                    p_hdr_det_factors_rec.PAYING_SITE_TAX_PROF_ID),
10594          OWN_HQ_SITE_TAX_PROF_ID           = decode(p_hdr_det_factors_rec.OWN_HQ_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10595                                                                                                    OWN_HQ_SITE_TAX_PROF_ID,
10596                                                                                                    p_hdr_det_factors_rec.OWN_HQ_SITE_TAX_PROF_ID),
10597          POI_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POI_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10598                                                                                                    POI_SITE_TAX_PROF_ID,
10599                                                                                                    p_hdr_det_factors_rec.POI_SITE_TAX_PROF_ID),
10600          POD_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POD_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10601                                                                                                    POD_SITE_TAX_PROF_ID,
10602                                                                                                    p_hdr_det_factors_rec.POD_SITE_TAX_PROF_ID),
10603          TITLE_TRANS_SITE_TAX_PROF_ID      = decode(p_hdr_det_factors_rec.TITLE_TRANSFER_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10604                                                                                                    TITLE_TRANS_SITE_TAX_PROF_ID,
10605                                                                                                    p_hdr_det_factors_rec.TITLE_TRANS_SITE_TAX_PROF_ID),
10606          HQ_ESTB_PARTY_TAX_PROF_ID         = l_hq_estb_ptp_id,
10607          LINE_LEVEL_ACTION                 = decode(LINE_LEVEL_ACTION, 'CREATE','UPDATE',
10608                                                                        'SYNCHRONIZE','UPDATE',
10612          LAST_UPDATED_BY                   = fnd_global.user_id,
10609                                                                        LINE_LEVEL_ACTION),
10610          TAX_PROCESSING_COMPLETED_FLAG     = 'N',
10611          LAST_UPDATE_DATE                  = sysdate,
10613          LAST_UPDATE_LOGIN                 = fnd_global.conc_login_id
10614     WHERE APPLICATION_ID   = p_hdr_det_factors_rec.APPLICATION_ID
10615       AND ENTITY_CODE      = p_hdr_det_factors_rec.ENTITY_CODE
10616       AND EVENT_CLASS_CODE = p_hdr_det_factors_rec.EVENT_CLASS_CODE
10617       AND TRX_ID           = p_hdr_det_factors_rec.TRX_ID;
10618      --Bugfix 4486946 -Call on the fly upgrade if the transaction if not found
10619     IF sql%NOTFOUND THEN
10620        l_upg_trx_info_rec.application_id   := l_event_class_rec.application_id;
10621        l_upg_trx_info_rec.entity_code      := l_event_class_rec.entity_code;
10622        l_upg_trx_info_rec.event_class_code := l_event_class_rec.event_class_code;
10623        l_upg_trx_info_rec.trx_id           := l_event_class_rec.trx_id;
10624        ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(p_upg_trx_info_rec   =>  l_upg_trx_info_rec,
10625                                                     x_return_status      =>  l_return_status
10626                                                    );
10627        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10628          IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10629            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');
10630          END IF;
10631          IF l_return_status = FND_API.G_RET_STS_ERROR THEN
10632            RAISE FND_API.G_EXC_ERROR;
10633          ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
10634            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
10635          END IF;
10636        END IF;
10637 
10638        ZX_R11I_TAX_PARTNER_PKG.copy_trx_line_for_ptnr_bef_upd(NULL,
10639                                                             l_event_class_rec,
10640                                                             NULL,
10641                                                             'N',
10642                                                             NULL,
10643             	   		                            NULL,
10644                                                             l_return_status
10645                                                             );
10646        IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
10647           x_return_status := l_return_status ;
10648           IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
10649              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');
10650           END IF;
10651           RETURN;
10652        END IF;
10653 
10654       /*-----------------------------------------------+
10655        |Update the headers only in zx_line_det_factors |
10656        +----------------------------------------------*/
10657        UPDATE ZX_LINES_DET_FACTORS SET
10658          APPLICATION_ID                    = p_hdr_det_factors_rec.APPLICATION_ID,
10659          ENTITY_CODE                       = p_hdr_det_factors_rec.ENTITY_CODE,
10660          EVENT_CLASS_CODE                  = p_hdr_det_factors_rec.EVENT_CLASS_CODE,
10661          EVENT_TYPE_CODE                   = p_hdr_det_factors_rec.EVENT_TYPE_CODE,
10662          INTERNAL_ORGANIZATION_ID          = p_hdr_det_factors_rec.INTERNAL_ORGANIZATION_ID,
10663          LEGAL_ENTITY_ID                   = p_hdr_det_factors_rec.LEGAL_ENTITY_ID,
10664          TRX_ID                            = p_hdr_det_factors_rec.TRX_ID,
10665          TRX_DOC_REVISION	           = decode(p_hdr_det_factors_rec.TRX_DOC_REVISION,FND_API.G_MISS_CHAR,
10666                                                                                                    TRX_DOC_REVISION,
10667                                                                                                    p_hdr_det_factors_rec.TRX_DOC_REVISION),
10668          TRX_DATE                          = decode(p_hdr_det_factors_rec.TRX_DATE,FND_API.G_MISS_DATE,
10669                                                                                                    TRX_DATE,
10670                                                                                                    p_hdr_det_factors_rec.TRX_DATE),
10671          LEDGER_ID                         = decode(p_hdr_det_factors_rec.LEDGER_ID,FND_API.G_MISS_NUM,
10672                                                                                                    LEDGER_ID,
10673                                                                                                    p_hdr_det_factors_rec.LEDGER_ID),
10674          INTERNAL_ORG_LOCATION_ID          = decode(p_hdr_det_factors_rec.INTERNAL_ORG_LOCATION_ID,FND_API.G_MISS_NUM,
10675                                                                                                    INTERNAL_ORG_LOCATION_ID,
10676                                                                                                    p_hdr_det_factors_rec.INTERNAL_ORG_LOCATION_ID),
10677          TRX_CURRENCY_CODE                 = decode(p_hdr_det_factors_rec.TRX_CURRENCY_CODE,FND_API.G_MISS_CHAR,
10678                                                                                                    TRX_CURRENCY_CODE,
10679                                                                                                    p_hdr_det_factors_rec.TRX_CURRENCY_CODE),
10680          CURRENCY_CONVERSION_TYPE          = decode(p_hdr_det_factors_rec.CURRENCY_CONVERSION_TYPE,FND_API.G_MISS_CHAR,
10681                                                                                                    CURRENCY_CONVERSION_TYPE,
10685                                                                                                    p_hdr_det_factors_rec.CURRENCY_CONVERSION_RATE),
10682                                                                                                    p_hdr_det_factors_rec.CURRENCY_CONVERSION_TYPE),
10683          CURRENCY_CONVERSION_RATE          = decode(p_hdr_det_factors_rec.CURRENCY_CONVERSION_RATE,FND_API.G_MISS_NUM,
10684                                                                                                    CURRENCY_CONVERSION_RATE,
10686          CURRENCY_CONVERSION_DATE          = decode(p_hdr_det_factors_rec.CURRENCY_CONVERSION_DATE,FND_API.G_MISS_DATE,
10687                                                                                                    CURRENCY_CONVERSION_DATE,
10688                                                                                                    p_hdr_det_factors_rec.CURRENCY_CONVERSION_DATE),
10689          MINIMUM_ACCOUNTABLE_UNIT	   = decode(p_hdr_det_factors_rec.MINIMUM_ACCOUNTABLE_UNIT,FND_API.G_MISS_NUM,
10690                                                                                                    MINIMUM_ACCOUNTABLE_UNIT,
10691                                                                                                    p_hdr_det_factors_rec.MINIMUM_ACCOUNTABLE_UNIT),
10692          PRECISION                         =  decode(p_hdr_det_factors_rec.PRECISION,FND_API.G_MISS_NUM,
10693                                                                                                    PRECISION,
10694                                                                                                    p_hdr_det_factors_rec.PRECISION),
10695          ESTABLISHMENT_ID                  = decode(p_hdr_det_factors_rec.ESTABLISHMENT_ID,FND_API.G_MISS_NUM,
10696                                                                                                     ESTABLISHMENT_ID,
10697                                                                                                     p_hdr_det_factors_rec.ESTABLISHMENT_ID),
10698          RECEIVABLES_TRX_TYPE_ID	   = decode(p_hdr_det_factors_rec.RECEIVABLES_TRX_TYPE_ID,FND_API.G_MISS_NUM,
10699                                                                                                     RECEIVABLES_TRX_TYPE_ID,
10700                                                                                                     p_hdr_det_factors_rec.RECEIVABLES_TRX_TYPE_ID),
10701          RELATED_DOC_APPLICATION_ID	   = decode(p_hdr_det_factors_rec.RELATED_DOC_APPLICATION_ID,FND_API.G_MISS_NUM,
10702                                                                                                     RELATED_DOC_APPLICATION_ID,
10703                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_APPLICATION_ID),
10704          RELATED_DOC_ENTITY_CODE	   = decode(p_hdr_det_factors_rec.RELATED_DOC_ENTITY_CODE,FND_API.G_MISS_CHAR,
10705                                                                                                     RELATED_DOC_ENTITY_CODE,
10706                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_ENTITY_CODE),
10707          RELATED_DOC_EVENT_CLASS_CODE	   = decode(p_hdr_det_factors_rec.RELATED_DOC_EVENT_CLASS_CODE,FND_API.G_MISS_CHAR,
10708                                                                                                     RELATED_DOC_EVENT_CLASS_CODE,
10709                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_EVENT_CLASS_CODE),
10710          RELATED_DOC_TRX_ID	           = decode(p_hdr_det_factors_rec.RELATED_DOC_TRX_ID,FND_API.G_MISS_NUM,
10711                                                                                                     RELATED_DOC_TRX_ID,
10712                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_TRX_ID),
10713          RELATED_DOC_NUMBER	           = decode(p_hdr_det_factors_rec.RELATED_DOC_NUMBER,FND_API.G_MISS_CHAR,
10714                                                                                                     RELATED_DOC_NUMBER,
10715                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_NUMBER),
10716          RELATED_DOC_DATE                  = decode(p_hdr_det_factors_rec.RELATED_DOC_DATE,FND_API.G_MISS_DATE,
10717                                                                                                     RELATED_DOC_DATE,
10718                                                                                                     p_hdr_det_factors_rec.RELATED_DOC_DATE),
10719          DEFAULT_TAXATION_COUNTRY	   = decode(p_hdr_det_factors_rec.DEFAULT_TAXATION_COUNTRY,FND_API.G_MISS_CHAR,
10720                                                                                                     DEFAULT_TAXATION_COUNTRY,
10721                                                                                                     p_hdr_det_factors_rec.DEFAULT_TAXATION_COUNTRY),
10722          TRX_NUMBER	                   = decode(p_hdr_det_factors_rec.TRX_NUMBER,FND_API.G_MISS_CHAR,
10723                                                                                                     TRX_NUMBER,
10724                                                                                                     p_hdr_det_factors_rec.TRX_NUMBER),
10725          TRX_DESCRIPTION	           = decode(p_hdr_det_factors_rec.TRX_DESCRIPTION,FND_API.G_MISS_CHAR,
10726                                                                                                    TRX_DESCRIPTION,
10727                                                                                                    p_hdr_det_factors_rec.TRX_DESCRIPTION),
10728          TRX_COMMUNICATED_DATE	           = decode(p_hdr_det_factors_rec.TRX_COMMUNICATED_DATE,FND_API.G_MISS_DATE,
10729                                                                                                    TRX_COMMUNICATED_DATE,
10733                                                                                                    p_hdr_det_factors_rec.BATCH_SOURCE_ID),
10730                                                                                                    p_hdr_det_factors_rec.TRX_COMMUNICATED_DATE),
10731          BATCH_SOURCE_ID	           = decode(p_hdr_det_factors_rec.BATCH_SOURCE_ID,FND_API.G_MISS_NUM,
10732                                                                                                    BATCH_SOURCE_ID,
10734          BATCH_SOURCE_NAME	           =  decode(p_hdr_det_factors_rec.BATCH_SOURCE_NAME,FND_API.G_MISS_CHAR,
10735                                                                                                    BATCH_SOURCE_NAME,
10736                                                                                                    p_hdr_det_factors_rec.BATCH_SOURCE_NAME),
10737          DOC_SEQ_ID	                   = decode(p_hdr_det_factors_rec.DOC_SEQ_ID,FND_API.G_MISS_NUM,
10738                                                                                                    DOC_SEQ_ID,
10739                                                                                                    p_hdr_det_factors_rec.DOC_SEQ_ID),
10740          DOC_SEQ_NAME	                   = decode(p_hdr_det_factors_rec.DOC_SEQ_NAME,FND_API.G_MISS_CHAR,
10741                                                                                                    DOC_SEQ_NAME,
10742                                                                                                    p_hdr_det_factors_rec.DOC_SEQ_NAME),
10743          DOC_SEQ_VALUE	                   = decode(p_hdr_det_factors_rec.DOC_SEQ_VALUE,FND_API.G_MISS_CHAR,
10744                                                                                                    DOC_SEQ_VALUE,
10745                                                                                                    p_hdr_det_factors_rec.DOC_SEQ_VALUE),
10746          TRX_DUE_DATE	                   = decode(p_hdr_det_factors_rec.TRX_DUE_DATE,FND_API.G_MISS_DATE,
10747                                                                                                    TRX_DUE_DATE,
10748                                                                                                    p_hdr_det_factors_rec.TRX_DUE_DATE),
10749          TRX_TYPE_DESCRIPTION	           = decode(p_hdr_det_factors_rec.TRX_TYPE_DESCRIPTION,FND_API.G_MISS_CHAR,
10750                                                                                                    TRX_TYPE_DESCRIPTION,
10751                                                                                                    p_hdr_det_factors_rec.TRX_TYPE_DESCRIPTION),
10752          DOCUMENT_SUB_TYPE	           = decode(p_hdr_det_factors_rec.DOCUMENT_SUB_TYPE,FND_API.G_MISS_CHAR,
10753                                                                                                    DOCUMENT_SUB_TYPE,
10754                                                                                                    p_hdr_det_factors_rec.DOCUMENT_SUB_TYPE),
10755          SUPPLIER_TAX_INVOICE_NUMBER	   = decode(p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_NUMBER,FND_API.G_MISS_CHAR,
10756                                                                                                    SUPPLIER_TAX_INVOICE_NUMBER,
10757                                                                                                    p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_NUMBER),
10758          SUPPLIER_TAX_INVOICE_DATE	   = decode(p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_DATE,FND_API.G_MISS_DATE,
10759                                                                                                    SUPPLIER_TAX_INVOICE_DATE,
10760                                                                                                    p_hdr_det_factors_rec.SUPPLIER_TAX_INVOICE_DATE),
10761          SUPPLIER_EXCHANGE_RATE	           = decode(p_hdr_det_factors_rec.SUPPLIER_EXCHANGE_RATE,FND_API.G_MISS_NUM,
10762                                                                                                    SUPPLIER_EXCHANGE_RATE,
10763                                                                                                    p_hdr_det_factors_rec.SUPPLIER_EXCHANGE_RATE),
10764          TAX_INVOICE_DATE	           = decode(p_hdr_det_factors_rec.TAX_INVOICE_DATE,FND_API.G_MISS_DATE,
10765                                                                                                    TAX_INVOICE_DATE,
10766                                                                                                    p_hdr_det_factors_rec.TAX_INVOICE_DATE),
10767          TAX_INVOICE_NUMBER	           = decode(p_hdr_det_factors_rec.TAX_INVOICE_NUMBER,FND_API.G_MISS_CHAR,
10768                                                                                                    TAX_INVOICE_NUMBER,
10769                                                                                                    p_hdr_det_factors_rec.TAX_INVOICE_NUMBER),
10770          CTRL_TOTAL_HDR_TX_AMT             = decode(p_hdr_det_factors_rec.CTRL_TOTAL_HDR_TX_AMT,FND_API.G_MISS_NUM,
10771                                                                                                    ctrl_total_hdr_tx_amt,
10772                                                                                                    p_hdr_det_factors_rec.CTRL_TOTAL_HDR_TX_AMT),
10773          FIRST_PTY_ORG_ID	           = l_event_class_rec.first_pty_org_id,
10774          TAX_EVENT_CLASS_CODE	           = l_event_class_rec.TAX_EVENT_CLASS_CODE,
10775          TAX_EVENT_TYPE_CODE	           = l_event_class_rec.TAX_EVENT_TYPE_CODE,
10776          DOC_EVENT_STATUS	           = l_event_class_rec.DOC_STATUS_CODE,
10777          TRX_BATCH_ID                      = decode(p_hdr_det_factors_rec.TRX_BATCH_ID,FND_API.G_MISS_NUM,
10778                                                                                                    TRX_BATCH_ID,
10779                                                                                                    p_hdr_det_factors_rec.TRX_BATCH_ID),
10783          APPLICATION_DOC_STATUS            = decode(p_hdr_det_factors_rec.APPLICATION_DOC_STATUS,FND_API.G_MISS_CHAR,
10780          APPLIED_TO_TRX_NUMBER             = decode(p_hdr_det_factors_rec.APPLIED_TO_TRX_NUMBER,FND_API.G_MISS_CHAR,
10781                                                                                                    APPLIED_TO_TRX_NUMBER,
10782                                                                                                    p_hdr_det_factors_rec.APPLIED_TO_TRX_NUMBER),
10784                                                                                                    APPLICATION_DOC_STATUS,
10785                                                                                                    p_hdr_det_factors_rec.APPLICATION_DOC_STATUS),
10786          RDNG_SHIP_TO_PTY_TX_PROF_ID	   = decode(p_hdr_det_factors_rec.ROUNDING_SHIP_TO_PARTY_ID,FND_API.G_MISS_NUM,
10787                                                                                                    RDNG_SHIP_TO_PTY_TX_PROF_ID,
10788                                                                                                    l_rdng_ship_to_ptp_id),
10789          RDNG_SHIP_FROM_PTY_TX_PROF_ID	   = decode(p_hdr_det_factors_rec.ROUNDING_SHIP_FROM_PARTY_ID,FND_API.G_MISS_NUM,
10790                                                                                                    RDNG_SHIP_FROM_PTY_TX_PROF_ID,
10791                                                                                                    l_rdng_ship_from_ptp_id),
10792          RDNG_BILL_TO_PTY_TX_PROF_ID	   = decode(p_hdr_det_factors_rec.ROUNDING_BILL_TO_PARTY_ID,FND_API.G_MISS_NUM,
10793                                                                                                    RDNG_BILL_TO_PTY_TX_PROF_ID,
10794                                                                                                    l_rdng_bill_to_ptp_id),
10795          RDNG_BILL_FROM_PTY_TX_PROF_ID	   = decode(p_hdr_det_factors_rec.ROUNDING_BILL_FROM_PARTY_ID,FND_API.G_MISS_NUM,
10796                                                                                                    RDNG_BILL_FROM_PTY_TX_PROF_ID,
10797                                                                                                    l_rdng_bill_from_ptp_id),
10798          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,
10799                                                                                                    RDNG_SHIP_TO_PTY_TX_P_ST_ID,
10800                                                                                                    l_rdng_ship_to_ptp_st_id),
10801          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,
10802                                                                                                    RDNG_SHIP_FROM_PTY_TX_P_ST_ID,
10803                                                                                                    l_rdng_ship_from_ptp_st_id),
10804          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,
10805                                                                                                    RDNG_BILL_TO_PTY_TX_P_ST_ID,
10806                                                                                                    l_rdng_bill_to_ptp_st_id),
10807          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,
10808                                                                                                    RDNG_BILL_FROM_PTY_TX_P_ST_ID,
10809                                                                                                    l_rdng_bill_from_ptp_st_id),
10810          PORT_OF_ENTRY_CODE                =  decode(p_hdr_det_factors_rec.PORT_OF_ENTRY_CODE,FND_API.G_MISS_CHAR,
10811                                                                                                    PORT_OF_ENTRY_CODE,
10812                                                                                                    p_hdr_det_factors_rec.PORT_OF_ENTRY_CODE),
10813          TAX_REPORTING_FLAG                = decode(p_hdr_det_factors_rec.TAX_REPORTING_FLAG,FND_API.G_MISS_CHAR,
10814                                                                                                    TAX_REPORTING_FLAG,
10815                                                                                                    p_hdr_det_factors_rec.TAX_REPORTING_FLAG),
10816          PROVNL_TAX_DETERMINATION_DATE     = decode(p_hdr_det_factors_rec.PROVNL_TAX_DETERMINATION_DATE,FND_API.G_MISS_DATE,
10817                                                                                                    PROVNL_TAX_DETERMINATION_DATE,
10818                                                                                                    p_hdr_det_factors_rec.PROVNL_TAX_DETERMINATION_DATE),
10819          SHIP_THIRD_PTY_ACCT_ID            = decode(p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_ID,FND_API.G_MISS_NUM,
10820                                                                                                    SHIP_THIRD_PTY_ACCT_ID,
10821                                                                                                    p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_ID),
10822          BILL_THIRD_PTY_ACCT_ID            = decode(p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_ID,FND_API.G_MISS_NUM,
10823                                                                                                    BILL_THIRD_PTY_ACCT_ID,
10824                                                                                                    p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_ID),
10825          SHIP_THIRD_PTY_ACCT_SITE_ID       = decode(p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_SITE_ID,FND_API.G_MISS_NUM,
10826                                                                                                    SHIP_THIRD_PTY_ACCT_SITE_ID,
10830                                                                                                    p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_SITE_ID),
10827                                                                                                    p_hdr_det_factors_rec.SHIP_THIRD_PTY_ACCT_SITE_ID),
10828          BILL_THIRD_PTY_ACCT_SITE_ID       = decode(p_hdr_det_factors_rec.BILL_THIRD_PTY_ACCT_SITE_ID,FND_API.G_MISS_NUM,
10829                                                                                                    BILL_THIRD_PTY_ACCT_SITE_ID,
10831          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,
10832                                                                                                    SHIP_TO_CUST_ACCT_SITE_USE_ID,
10833                                                                                                    p_hdr_det_factors_rec.SHIP_TO_CUST_ACCT_SITE_USE_ID),
10834          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,
10835                                                                                                    BILL_TO_CUST_ACCT_SITE_USE_ID,
10836                                                                                                    p_hdr_det_factors_rec.BILL_TO_CUST_ACCT_SITE_USE_ID),
10837          SHIP_TO_LOCATION_ID               = decode(p_hdr_det_factors_rec.SHIP_TO_LOCATION_ID,FND_API.G_MISS_NUM,
10838                                                                                                    SHIP_TO_LOCATION_ID,
10839                                                                                                    p_hdr_det_factors_rec.SHIP_TO_LOCATION_ID),
10840          SHIP_FROM_LOCATION_ID             = decode(p_hdr_det_factors_rec.SHIP_FROM_LOCATION_ID,FND_API.G_MISS_NUM,
10841                                                                                                    SHIP_FROM_LOCATION_ID,
10842                                                                                                    p_hdr_det_factors_rec.SHIP_FROM_LOCATION_ID),
10843          BILL_TO_LOCATION_ID               = decode(p_hdr_det_factors_rec.BILL_TO_LOCATION_ID,FND_API.G_MISS_NUM,
10844                                                                                                    BILL_TO_LOCATION_ID,
10845                                                                                                    p_hdr_det_factors_rec.BILL_TO_LOCATION_ID),
10846          BILL_FROM_LOCATION_ID             = decode(p_hdr_det_factors_rec.BILL_FROM_LOCATION_ID,FND_API.G_MISS_NUM,
10847                                                                                                    BILL_FROM_LOCATION_ID,
10848                                                                                                    p_hdr_det_factors_rec.BILL_FROM_LOCATION_ID),
10849          POA_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POA_LOCATION_ID,FND_API.G_MISS_NUM,
10850                                                                                                    POA_LOCATION_ID,
10851                                                                                                    p_hdr_det_factors_rec.POA_LOCATION_ID),
10852          POO_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POO_LOCATION_ID,FND_API.G_MISS_NUM,
10853                                                                                                    POO_LOCATION_ID,
10854                                                                                                    p_hdr_det_factors_rec.POO_LOCATION_ID),
10855          PAYING_LOCATION_ID                = decode(p_hdr_det_factors_rec.PAYING_LOCATION_ID,FND_API.G_MISS_NUM,
10856                                                                                                    PAYING_LOCATION_ID,
10857                                                                                                    p_hdr_det_factors_rec.PAYING_LOCATION_ID),
10858          OWN_HQ_LOCATION_ID                = decode(p_hdr_det_factors_rec.OWN_HQ_LOCATION_ID,FND_API.G_MISS_NUM,
10859                                                                                                    OWN_HQ_LOCATION_ID,
10860                                                                                                    p_hdr_det_factors_rec.OWN_HQ_LOCATION_ID),
10861          TRADING_HQ_LOCATION_ID            = decode(p_hdr_det_factors_rec.TRADING_HQ_LOCATION_ID,FND_API.G_MISS_NUM,
10862                                                                                                    TRADING_HQ_LOCATION_ID,
10863                                                                                                    p_hdr_det_factors_rec.TRADING_HQ_LOCATION_ID),
10864          POC_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POC_LOCATION_ID,FND_API.G_MISS_NUM,
10865                                                                                                    POC_LOCATION_ID,
10866                                                                                                    p_hdr_det_factors_rec.POC_LOCATION_ID),
10867          POI_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POI_LOCATION_ID,FND_API.G_MISS_NUM,
10868                                                                                                    POI_LOCATION_ID,
10869                                                                                                    p_hdr_det_factors_rec.POI_LOCATION_ID),
10870          POD_LOCATION_ID                   = decode(p_hdr_det_factors_rec.POD_LOCATION_ID,FND_API.G_MISS_NUM,
10871                                                                                                    POD_LOCATION_ID,
10872                                                                                                    p_hdr_det_factors_rec.POD_LOCATION_ID),
10873          TITLE_TRANSFER_LOCATION_ID        = decode(p_hdr_det_factors_rec.TITLE_TRANSFER_LOCATION_ID,FND_API.G_MISS_NUM,
10877                                                                                                    SHIP_TO_PARTY_TAX_PROF_ID,
10874                                                                                                    TITLE_TRANSFER_LOCATION_ID,
10875                                                                                                    p_hdr_det_factors_rec.TITLE_TRANSFER_LOCATION_ID),
10876          SHIP_TO_PARTY_TAX_PROF_ID         = decode(p_hdr_det_factors_rec.SHIP_TO_PARTY_ID,FND_API.G_MISS_NUM,
10878                                                                                                    l_ship_to_ptp_id),
10879          SHIP_FROM_PARTY_TAX_PROF_ID       = decode(p_hdr_det_factors_rec.SHIP_FROM_PARTY_ID,FND_API.G_MISS_NUM,
10880                                                                                                    SHIP_FROM_PARTY_TAX_PROF_ID,
10881                                                                                                    l_ship_from_ptp_id),
10882          POA_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POA_PARTY_ID,FND_API.G_MISS_NUM,
10883                                                                                                    POA_PARTY_TAX_PROF_ID,
10884                                                                                                    l_poa_ptp_id),
10885          POO_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POO_PARTY_ID,FND_API.G_MISS_NUM,
10886                                                                                                    POO_PARTY_TAX_PROF_ID,
10887                                                                                                    l_poo_ptp_id),
10888          PAYING_PARTY_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.PAYING_PARTY_ID,FND_API.G_MISS_NUM,
10889                                                                                                    PAYING_PARTY_TAX_PROF_ID,
10890                                                                                                    p_hdr_det_factors_rec.PAYING_PARTY_TAX_PROF_ID),
10891          OWN_HQ_PARTY_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.OWN_HQ_PARTY_ID,FND_API.G_MISS_NUM,
10892                                                                                                    OWN_HQ_PARTY_TAX_PROF_ID,
10893                                                                                                    p_hdr_det_factors_rec.OWN_HQ_PARTY_TAX_PROF_ID),
10894          TRADING_HQ_PARTY_TAX_PROF_ID      = decode(p_hdr_det_factors_rec.TRADING_HQ_PARTY_ID,FND_API.G_MISS_NUM,
10895                                                                                                    TRADING_HQ_PARTY_TAX_PROF_ID,
10896                                                                                                    p_hdr_det_factors_rec.TRADING_HQ_PARTY_TAX_PROF_ID),
10897          POI_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POI_PARTY_ID,FND_API.G_MISS_NUM,
10898                                                                                                    POI_PARTY_TAX_PROF_ID,
10899                                                                                                    p_hdr_det_factors_rec.POI_PARTY_TAX_PROF_ID),
10900          POD_PARTY_TAX_PROF_ID             = decode(p_hdr_det_factors_rec.POD_PARTY_ID,FND_API.G_MISS_NUM,
10901                                                                                                    POD_PARTY_TAX_PROF_ID,
10902                                                                                                    p_hdr_det_factors_rec.POD_PARTY_TAX_PROF_ID),
10903          BILL_TO_PARTY_TAX_PROF_ID         = decode(p_hdr_det_factors_rec.BILL_TO_PARTY_ID,FND_API.G_MISS_NUM,
10904                                                                                                    BILL_TO_PARTY_TAX_PROF_ID,
10905                                                                                                    l_bill_to_ptp_id),
10906          BILL_FROM_PARTY_TAX_PROF_ID       = decode(p_hdr_det_factors_rec.BILL_FROM_PARTY_ID,FND_API.G_MISS_NUM,
10907                                                                                                    BILL_FROM_PARTY_TAX_PROF_ID,
10908                                                                                                    l_bill_from_ptp_id),
10909          TITLE_TRANS_PARTY_TAX_PROF_ID     = decode(p_hdr_det_factors_rec.TITLE_TRANSFER_PARTY_ID,FND_API.G_MISS_NUM,
10910                                                                                                    TITLE_TRANS_PARTY_TAX_PROF_ID,
10911                                                                                                    p_hdr_det_factors_rec.TITLE_TRANS_PARTY_TAX_PROF_ID),
10912          SHIP_TO_SITE_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.SHIP_TO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10913                                                                                                    SHIP_TO_SITE_TAX_PROF_ID,
10914                                                                                                    l_ship_to_ptp_site_id),
10915          SHIP_FROM_SITE_TAX_PROF_ID        = decode(p_hdr_det_factors_rec.SHIP_FROM_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10916                                                                                                    SHIP_FROM_SITE_TAX_PROF_ID,
10917                                                                                                    l_ship_from_ptp_site_id),
10918          BILL_TO_SITE_TAX_PROF_ID          = decode(p_hdr_det_factors_rec.BILL_TO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10919                                                                                                    BILL_TO_SITE_TAX_PROF_ID,
10920                                                                                                    l_bill_to_ptp_site_id),
10921          BILL_FROM_SITE_TAX_PROF_ID        = decode(p_hdr_det_factors_rec.BILL_FROM_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10922                                                                                                    BILL_FROM_SITE_TAX_PROF_ID,
10926                                                                                                    l_poa_ptp_site_id),
10923                                                                                                    l_bill_from_ptp_site_id),
10924          POA_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POA_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10925                                                                                                    POA_SITE_TAX_PROF_ID,
10927          POO_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POO_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10928                                                                                                    POO_SITE_TAX_PROF_ID,
10929                                                                                                    l_poo_ptp_site_id),
10930          PAYING_SITE_TAX_PROF_ID           = decode(p_hdr_det_factors_rec.PAYING_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10931                                                                                                    PAYING_SITE_TAX_PROF_ID,
10932                                                                                                    p_hdr_det_factors_rec.PAYING_SITE_TAX_PROF_ID),
10933          OWN_HQ_SITE_TAX_PROF_ID           = decode(p_hdr_det_factors_rec.OWN_HQ_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10934                                                                                                    OWN_HQ_SITE_TAX_PROF_ID,
10935                                                                                                    p_hdr_det_factors_rec.OWN_HQ_SITE_TAX_PROF_ID),
10936          POI_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POI_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10937                                                                                                    POI_SITE_TAX_PROF_ID,
10938                                                                                                    p_hdr_det_factors_rec.POI_SITE_TAX_PROF_ID),
10939          POD_SITE_TAX_PROF_ID              = decode(p_hdr_det_factors_rec.POD_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10940                                                                                                    POD_SITE_TAX_PROF_ID,
10941                                                                                                    p_hdr_det_factors_rec.POD_SITE_TAX_PROF_ID),
10942          TITLE_TRANS_SITE_TAX_PROF_ID      = decode(p_hdr_det_factors_rec.TITLE_TRANSFER_PARTY_SITE_ID,FND_API.G_MISS_NUM,
10943                                                                                                    TITLE_TRANS_SITE_TAX_PROF_ID,
10944                                                                                                    p_hdr_det_factors_rec.TITLE_TRANS_SITE_TAX_PROF_ID),
10945          HQ_ESTB_PARTY_TAX_PROF_ID         = l_hq_estb_ptp_id,
10946          LINE_LEVEL_ACTION                 = decode(LINE_LEVEL_ACTION, 'CREATE','UPDATE',
10947                                                                        'SYNCHRONIZE','UPDATE',
10948                                                                         LINE_LEVEL_ACTION),
10949          TAX_PROCESSING_COMPLETED_FLAG     = 'N',
10950          LAST_UPDATE_DATE                  = sysdate,
10951          LAST_UPDATED_BY                   = fnd_global.user_id,
10952          LAST_UPDATE_LOGIN                 = fnd_global.conc_login_id
10953        WHERE APPLICATION_ID   = p_hdr_det_factors_rec.APPLICATION_ID
10954          AND ENTITY_CODE      = p_hdr_det_factors_rec.ENTITY_CODE
10955          AND EVENT_CLASS_CODE = p_hdr_det_factors_rec.EVENT_CLASS_CODE
10956          AND TRX_ID           = p_hdr_det_factors_rec.TRX_ID;
10957       END IF;
10958     --Bugfix 4486946 - on-the-fly upgrade end
10959 
10960     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
10961       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
10962     END IF;
10963 
10964     EXCEPTION
10965         WHEN FND_API.G_EXC_ERROR THEN
10966           ROLLBACK TO Update_Det_Factors_Hdr_PVT;
10967           x_return_status := FND_API.G_RET_STS_ERROR ;
10968         /*---------------------------------------------------------+
10969           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
10970           | in the message stack. If there is only one message in   |
10971           | the stack it retrieves this message                     |
10972           +---------------------------------------------------------*/
10973           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
10974                                     p_count  =>      x_msg_count,
10975                                     p_data   =>      x_msg_data
10976                                     );
10977 
10978            IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
10979              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
10980            END IF;
10981 
10982         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
10983           ROLLBACK TO Update_Det_Factors_Hdr_PVT;
10984           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
10985           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
10986           FND_MSG_PUB.Add;
10987          /*---------------------------------------------------------+
10988           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
10989           | in the message stack. If there is only one message in   |
10990           | the stack it retrieves this message                     |
10991           +---------------------------------------------------------*/
10992           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
10993                                     p_count   =>      x_msg_count,
10994                                     p_data    =>      x_msg_data
10995                                     );
10996           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
11000            ROLLBACK TO Update_Det_Factors_Hdr_PVT;
10997             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
10998           END IF;
10999         WHEN OTHERS THEN
11001            x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
11002            FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
11003            FND_MSG_PUB.Add;
11004          /*---------------------------------------------------------+
11005           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11006           | in the message stack. If there is only one message in   |
11007           | the stack it retrieves this message                     |
11008           +---------------------------------------------------------*/
11009            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11010                                      p_count  =>      x_msg_count,
11011                                      p_data   =>      x_msg_data
11012                                      );
11013 
11014            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
11015               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
11016            END IF;
11017  END update_det_factors_hdr;
11018 
11019 
11020 /* ========================================================================*
11021  | PROCEDURE  update_line_det_factors : This procedure should be called by |
11022  | products when updating any of the line attributes on the transaction    |
11023  | so that the tax repository is also in sync with the line level updates  |
11024  | This line will be flagged to be picked up by the tax calculation process|
11025  * =======================================================================*/
11026 
11027 PROCEDURE update_line_det_factors (
11028   p_api_version        IN  NUMBER,
11029   p_init_msg_list      IN  VARCHAR2,
11030   p_commit             IN  VARCHAR2,
11031   p_validation_level   IN  NUMBER,
11032   x_return_status      OUT NOCOPY VARCHAR2,
11033   x_msg_count          OUT NOCOPY NUMBER,
11034   x_msg_data           OUT NOCOPY VARCHAR2
11035  )  IS
11036   l_api_name           CONSTANT  VARCHAR2(30) := 'UPDATE_LINE_DET_FACTORS';
11037   l_api_version        CONSTANT  NUMBER := 1.0;
11038   l_return_status      VARCHAR2(1);
11039   l_init_msg_list      VARCHAR2(1);
11040   l_user_updated_flag  VARCHAR2(1);
11041   l_call_default_APIs  BOOLEAN;
11042   l_upg_trx_info_rec   ZX_ON_FLY_TRX_UPGRADE_PKG.zx_upg_trx_info_rec_type;
11043   l_event_class_rec    event_class_rec_type;
11044 
11045  BEGIN
11046    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11047      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
11048    END IF;
11049 
11050   /*--------------------------------------------------+
11051    |   Standard start of API savepoint                |
11052    +--------------------------------------------------*/
11053    SAVEPOINT Update_Line_Det_Factors_PVT;
11054 
11055    /*--------------------------------------------------+
11056     |   Standard call to check for call compatibility  |
11057     +--------------------------------------------------*/
11058     IF NOT FND_API.Compatible_API_Call(l_api_version,
11059                                        p_api_version,
11060                                        l_api_name,
11061                                        G_PKG_NAME
11062                                        ) THEN
11063        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11064      END IF;
11065 
11066     /*--------------------------------------------------------------+
11067      |   Initialize message list if p_init_msg_list is set to TRUE  |
11068      +--------------------------------------------------------------*/
11069      IF p_init_msg_list is null THEN
11070        l_init_msg_list := FND_API.G_FALSE;
11071      ELSE
11072        l_init_msg_list := p_init_msg_list;
11073      END IF;
11074 
11075      IF FND_API.to_Boolean(l_init_msg_list) THEN
11076        FND_MSG_PUB.initialize;
11077      END IF;
11078 
11079   /*-----------------------------------------+
11080    |   Initialize return status to SUCCESS   |
11081    +-----------------------------------------*/
11082    x_return_status := FND_API.G_RET_STS_SUCCESS;
11083 
11084   /*-----------------------------------------+
11085    |   Populate Global Variable              |
11086    +-----------------------------------------*/
11087    G_PUB_SRVC := l_api_name;
11088    G_DATA_TRANSFER_MODE := 'PLS';
11089    G_EXTERNAL_API_CALL  := 'N';
11090 
11091    l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.INTERNAL_ORGANIZATION_ID(1);
11092    l_event_class_rec.LEGAL_ENTITY_ID              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEGAL_ENTITY_ID(1);
11093    l_event_class_rec.LEDGER_ID                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEDGER_ID(1);
11094    l_event_class_rec.APPLICATION_ID               :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.APPLICATION_ID(1);
11095    l_event_class_rec.ENTITY_CODE                  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ENTITY_CODE(1);
11096    l_event_class_rec.EVENT_CLASS_CODE             :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_CLASS_CODE(1);
11097    l_event_class_rec.EVENT_TYPE_CODE              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_TYPE_CODE(1);
11098    l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CTRL_TOTAL_HDR_TX_AMT(1);
11099    l_event_class_rec.TRX_ID                       :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_ID(1);
11103    l_event_class_rec.TRX_CURRENCY_CODE            :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_CURRENCY_CODE(1);
11100    l_event_class_rec.TRX_DATE                     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_DATE(1);
11101    l_event_class_rec.REL_DOC_DATE                 :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RELATED_DOC_DATE(1);
11102    l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PROVNL_TAX_DETERMINATION_DATE(1);
11104    l_event_class_rec.PRECISION                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PRECISION(1);
11105    l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_TYPE(1);
11106    l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_RATE(1);
11107    l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_DATE(1);
11108    l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_TO_PARTY_ID(1);
11109    l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_FROM_PARTY_ID(1);
11110    l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_TO_PARTY_ID(1);
11111    l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_FROM_PARTY_ID(1);
11112    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);
11113    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);
11114    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);
11115    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);
11116 
11117 
11118    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11119       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,
11120             'application_id: '||to_char(l_event_class_rec.application_id)||
11121              ', entity_code: '||l_event_class_rec.entity_code||
11122              ', event_class_code: '||l_event_class_rec.event_class_code||
11123              ', event_type_code: '||l_event_class_rec.event_type_code||
11124              ', trx_id: '||to_char(l_event_class_rec.trx_id)||
11125              ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
11126              ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
11127              ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
11128              ', trx_date: '||to_char(l_event_class_rec.trx_date)||
11129              ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
11130              ', provnl_tax_determination_date: '||to_char(l_event_class_rec.provnl_tax_determination_date)||
11131              ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
11132              ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
11133              ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
11134              ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
11135              ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
11136              ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
11137              ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
11138              ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
11139              ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
11140              ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
11141              ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
11142              ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id)
11143             );
11144    END IF;
11145 
11146 
11147    /*Lock the line so no updates by another user can happen*/
11148    BEGIN
11149      SELECT event_id,
11150             nvl(user_upd_det_factors_flag,'N')
11151       INTO l_event_class_rec.event_id,
11152            l_user_updated_flag
11153       FROM ZX_LINES_DET_FACTORS
11154      WHERE application_id   = l_event_class_rec.application_id
11155        AND entity_code      = l_event_class_rec.entity_code
11156        AND event_class_code = l_event_class_rec.event_class_code
11157        AND trx_id           = l_event_class_rec.trx_id
11158        AND trx_line_id      = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(1)
11159        AND trx_level_type   = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(1)
11160      FOR UPDATE NOWAIT; --locks the line
11161 
11162      EXCEPTION
11163        WHEN NO_DATA_FOUND THEN
11164          l_upg_trx_info_rec.application_id   := l_event_class_rec.application_id;
11165          l_upg_trx_info_rec.entity_code      := l_event_class_rec.entity_code;
11166          l_upg_trx_info_rec.event_class_code := l_event_class_rec.event_class_code;
11167          l_upg_trx_info_rec.trx_id           := l_event_class_rec.trx_id;
11168          ZX_ON_FLY_TRX_UPGRADE_PKG.upgrade_trx_on_fly(p_upg_trx_info_rec   =>  l_upg_trx_info_rec,
11169                                                       x_return_status      =>  l_return_status
11170                                                      );
11171          IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11172            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11176              RAISE FND_API.G_EXC_ERROR;
11173              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');
11174            END IF;
11175            IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11177            ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11178              RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11179            END IF;
11180          END IF;
11181          /*Lock the line so no updates by another user can happen*/
11182          SELECT event_id,
11183                 nvl(user_upd_det_factors_flag,'N')
11184            INTO l_event_class_rec.event_id,
11185                 l_user_updated_flag
11186            FROM ZX_LINES_DET_FACTORS
11187           WHERE application_id   = l_event_class_rec.application_id
11188             AND entity_code      = l_event_class_rec.entity_code
11189             AND event_class_code = l_event_class_rec.event_class_code
11190             AND trx_id           = l_event_class_rec.trx_id
11191             AND trx_line_id      = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_id(1)
11192             AND trx_level_type   = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_level_type(1)
11193           FOR UPDATE NOWAIT; --locks the line
11194    END;
11195 
11196      /*------------------------------------------------------+
11197       |   Validate and Initializate parameters for Inserting |
11198       |   into line_det_factors                              |
11199       +------------------------------------------------------*/
11200 
11201    IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11202       FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
11203               'Validating Transaction: '||
11204               to_char(l_event_class_rec.trx_id)||
11205               ' of Application: '||
11206               to_char(l_event_class_rec.application_id) ||
11207               ' and Event Class: '||
11208               l_event_class_rec.event_class_code
11209             );
11210    END IF;
11211 
11212    ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors(p_event_class_rec =>l_event_class_rec,
11213                                                     p_trx_line_index  => 1,
11214                                                     x_return_status   =>l_return_status
11215                                                     );
11216 
11217    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11218      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11219         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11220           ':ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors returned errors');
11221      END IF;
11222      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11223         RAISE FND_API.G_EXC_ERROR;
11224      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11225         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11226      END IF;
11227    END IF;
11228 
11229 -- Fix for Bug 5038953
11230    ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TAX_EVENT_CLASS_CODE(1) := l_event_class_rec.TAX_EVENT_CLASS_CODE;
11231 -- End fix for Bug 5038953
11232 
11233    /*----------------------------------------------------------------------------+
11234    |Call the defaulting API to default the determining attributes if user has not|
11235    |already overridden them in the determining factors window in which case we   |
11236    |need to honor the overridden values                                          |
11237    +----------------------------------------------------------------------------*/
11238    IF l_user_updated_flag = 'N' THEN
11239       --Call the redefaulting APIs only if all tax determining attributes passed as null
11240       l_call_default_APIs := ZX_SRVC_TYP_PKG.decide_call_redefault_APIs (p_trx_line_index  => 1);
11241 
11242       IF l_call_default_APIs THEN
11243         IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_level_action(1) = 'UPDATE' THEN
11244            ZX_SRVC_TYP_PKG.call_redefaulting_APIs(p_event_class_rec  => l_event_class_rec,
11245                                                   p_trx_line_index   => 1,
11246                                                   x_return_status    => l_return_status
11247                                                  );
11248         END IF;
11249       END IF;
11250 
11251       IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11252         IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11253           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11254             ':ZX_SRVC_TYP_PKG.call_redefaulting_APIs returned errors');
11255         END IF;
11256         IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11257            RAISE FND_API.G_EXC_ERROR;
11258         ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11259            RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11260         END IF;
11261       END IF;
11262    END IF;
11263 
11264    /*------------------------------------------+
11265    |Call to update the lines                   |
11266    +------------------------------------------*/
11267    ZX_SRVC_TYP_PKG.insupd_line_det_factors(p_event_class_rec => l_event_class_rec,
11268                                            x_return_status   => l_return_status
11269                                           );
11270 
11271    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11272      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11273         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11274           ':ZX_SRVC_TYP_PKG.insupd_line_det_factors returned errors');
11275      END IF;
11276      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11277         RAISE FND_API.G_EXC_ERROR;
11281    END IF;
11278      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11279         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11280      END IF;
11282 
11283    --Delete from the global structures so that there are no hanging/redundant
11284    --records sitting there
11285    ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
11286 
11287    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11288       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
11289    END IF;
11290 
11291    EXCEPTION
11292      WHEN FND_API.G_EXC_ERROR THEN
11293        ROLLBACK TO Update_Line_Det_Factors_PVT;
11294        x_return_status := FND_API.G_RET_STS_ERROR ;
11295       /*---------------------------------------------------------+
11296        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11297        | in the message stack. If there is only one message in   |
11298        | the stack it retrieves this message                     |
11299        +---------------------------------------------------------*/
11300        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11301                                  p_count  =>      x_msg_count,
11302                                  p_data   =>      x_msg_data
11303                                  );
11304 
11305        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
11306           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
11307        END IF;
11308 
11309      WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11310        ROLLBACK TO Update_Line_Det_Factors_PVT;
11311        x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
11312        FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
11313        FND_MSG_PUB.Add;
11314       /*---------------------------------------------------------+
11315        | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11316        | in the message stack. If there is only one message in   |
11317        | the stack it retrieves this message                     |
11318        +---------------------------------------------------------*/
11319        FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11320                                  p_count   =>      x_msg_count,
11321                                  p_data    =>      x_msg_data
11322                                 );
11323        IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
11324          FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
11325        END IF;
11326 
11327        WHEN OTHERS THEN
11328           /*-------------------------------------------------------+
11329            |  Handle application errors that result from trapable  |
11330            |  error conditions. The error messages have already    |
11331            |  been put on the error stack.                         |
11332            +-------------------------------------------------------*/
11333           ROLLBACK TO Update_Line_Det_Factors_PVT;
11334           IF (SQLCODE = 54) THEN
11335              x_return_status := FND_API.G_RET_STS_ERROR ;
11336              FND_MESSAGE.SET_NAME('ZX','ZX_RESOURCE_BUSY');
11337           ELSE
11338              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
11339              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
11340           END IF;
11341           FND_MSG_PUB.Add;
11342          /*---------------------------------------------------------+
11343           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11344           | in the message stack. If there is only one message in   |
11345           | the stack it retrieves this message                     |
11346           +---------------------------------------------------------*/
11347           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11348                                     p_count  =>      x_msg_count,
11349                                     p_data   =>      x_msg_data
11350                                     );
11351 
11352           IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
11353              FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
11354           END IF;
11355    END update_line_det_factors;
11356 
11357 /* ============================================================================*
11358  | PROCEDURE  copy_insert_line_det_factors : This procedure will be called      |
11359  | by iProcurement to insert all the transaction lines into zx_lines_det_factors|
11360  | after copying the tax determining attributes from the source document        |
11361  | information passed in. All lines thus inserted will be flagged to be picked  |
11362  | up by the tax calculation process                                            |
11363  * ============================================================================*/
11364 
11365  PROCEDURE copy_insert_line_det_factors(
11366   p_api_version        IN  NUMBER,
11367   p_init_msg_list      IN  VARCHAR2,
11368   p_commit             IN  VARCHAR2,
11369   p_validation_level   IN  NUMBER,
11370   x_return_status      OUT NOCOPY VARCHAR2,
11371   x_msg_count          OUT NOCOPY NUMBER,
11372   x_msg_data           OUT NOCOPY VARCHAR2
11373   )IS
11374   l_api_name                  CONSTANT  VARCHAR2(30) := 'COPY_INSERT_LINE_DET_FACTORS';
11375   l_api_version               CONSTANT  NUMBER := 1.0;
11376   l_return_status             VARCHAR2(1);
11377   l_event_class_rec           event_class_rec_type;
11378   l_line_det_rec              ZX_LINES_DET_FACTORS%rowtype;
11379   l_line_exists               NUMBER;
11380   l_record_exists             BOOLEAN;
11381   l_init_msg_list             VARCHAR2(1);
11382   l_tax_classification_code   VARCHAR2(50);
11383  BEGIN
11384    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11388   /*--------------------------------------------------+
11385      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
11386    END IF;
11387 
11389    |   Standard start of API savepoint                |
11390    +--------------------------------------------------*/
11391    SAVEPOINT Copy_Ins_Line_Det_Factors_PVT;
11392 
11393    /*--------------------------------------------------+
11394     |   Standard call to check for call compatibility  |
11395     +--------------------------------------------------*/
11396     IF NOT FND_API.Compatible_API_Call(l_api_version,
11397                                        p_api_version,
11398                                        l_api_name,
11399                                        G_PKG_NAME
11400                                        ) THEN
11401        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11402      END IF;
11403 
11404     /*--------------------------------------------------------------+
11405      |   Initialize message list if p_init_msg_list is set to TRUE  |
11406      +--------------------------------------------------------------*/
11407      IF p_init_msg_list is null THEN
11408        l_init_msg_list := FND_API.G_FALSE;
11409      ELSE
11410        l_init_msg_list := p_init_msg_list;
11411      END IF;
11412 
11413      IF FND_API.to_Boolean(l_init_msg_list) THEN
11414        FND_MSG_PUB.initialize;
11415      END IF;
11416 
11417   /*-----------------------------------------+
11418    |   Initialize return status to SUCCESS   |
11419    +-----------------------------------------*/
11420    x_return_status := FND_API.G_RET_STS_SUCCESS;
11421 
11422   /*-----------------------------------------+
11423    |   Populate Global Variable              |
11424    +-----------------------------------------*/
11425    G_PUB_SRVC := l_api_name;
11426    G_DATA_TRANSFER_MODE := 'PLS';
11427    G_EXTERNAL_API_CALL  := 'N';
11428 
11429 
11430    /*-----------------------------------------+
11431     |Populate the event class record structure|
11432     +-----------------------------------------*/
11433    l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.INTERNAL_ORGANIZATION_ID(1);
11434    l_event_class_rec.LEGAL_ENTITY_ID              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEGAL_ENTITY_ID(1);
11435    l_event_class_rec.LEDGER_ID                    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.LEDGER_ID(1);
11436    l_event_class_rec.APPLICATION_ID               :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.APPLICATION_ID(1);
11437    l_event_class_rec.ENTITY_CODE                  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ENTITY_CODE(1);
11438    l_event_class_rec.EVENT_CLASS_CODE             :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_CLASS_CODE(1);
11439    l_event_class_rec.EVENT_TYPE_CODE              :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.EVENT_TYPE_CODE(1);
11440    l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CTRL_TOTAL_HDR_TX_AMT(1);
11441    l_event_class_rec.TRX_ID                       :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_ID(1);
11442    l_event_class_rec.TRX_DATE                     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_DATE(1);
11443    l_event_class_rec.REL_DOC_DATE                 :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.RELATED_DOC_DATE(1);
11444    l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.PROVNL_TAX_DETERMINATION_DATE(1);
11445    l_event_class_rec.TRX_CURRENCY_CODE            :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.TRX_CURRENCY_CODE(1);
11446    l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_TYPE(1);
11447    l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_RATE(1);
11448    l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.CURRENCY_CONVERSION_DATE(1);
11449    l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_TO_PARTY_ID(1);
11450    l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_SHIP_FROM_PARTY_ID(1);
11451    l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_TO_PARTY_ID(1);
11452    l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ROUNDING_BILL_FROM_PARTY_ID(1);
11453    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);
11454    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);
11455    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);
11456    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);
11457 
11458 
11459    /*------------------------------------------------------------------------------------------+
11460     | Set the event id for the whole document- Since this API is called for each transaction   |
11461     | line, the event id needs to be generated from the sequence only for the first transaction|
11462     | line. For other lines, we need to retrieve the event id from the table.                  |
11463     | Also store the taxation country, document sub type from the line to be passed to         |
11464     | defaulting API which will honor these header attributes of the line instead of trying to |
11465     | redefault them again                                                                     |
11469     LOOP
11466     +-----------------------------------------------------------------------------------------*/
11467     l_record_exists := FALSE;
11468     FOR l_line_det_rec in lock_line_det_factors_for_doc(l_event_class_rec)
11470       l_record_exists := TRUE;
11471       l_event_class_rec.event_id := l_line_det_rec.event_id;
11472       exit;
11473     END LOOP;
11474 
11475 
11476     IF NOT(l_record_exists) THEN
11477       SELECT zx_lines_det_factors_s.nextval
11478         INTO l_event_class_rec.event_id
11479         FROM dual;
11480     END IF;
11481 
11482     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11483       FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name,
11484              'application_id: '||to_char(l_event_class_rec.application_id)||
11485              ', entity_code: '||l_event_class_rec.entity_code||
11486              ', event_class_code: '||l_event_class_rec.event_class_code||
11487              ', event_type_code: '||l_event_class_rec.event_type_code||
11488              ', trx_id: '||to_char(l_event_class_rec.trx_id)||
11489              ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
11490              ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
11491              ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
11492              ', trx_date: '||to_char(l_event_class_rec.trx_date)||
11493              ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
11494              ', provnl_tax_determination_date: '||to_char(l_event_class_rec.provnl_tax_determination_date)||
11495              ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
11496              ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
11497              ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
11498              ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
11499              ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
11500              ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
11501              ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
11502              ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
11503              ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
11504              ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
11505              ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
11506              ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id)
11507             );
11508    END IF;
11509 
11510    /*------------------------------------------------------+
11511    |   Validate and Initializate parameters for Inserting |
11512    |   into line_det_factors                              |
11513    +------------------------------------------------------*/
11514    ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors(p_event_class_rec =>l_event_class_rec,
11515                                                      p_trx_line_index  => 1,
11516                                                      x_return_status   =>l_return_status
11517                                                     );
11518 
11519    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11520      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11521         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11522           ':ZX_VALID_INIT_PARAMS_PKG.insupd_line_det_factors returned errors');
11523      END IF;
11524      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11525         RAISE FND_API.G_EXC_ERROR;
11526      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11527         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11528      END IF;
11529    END IF;
11530 
11531  /* =============================================*
11532    |Default the tax determining attributes        |
11533    * ============================================*/
11534    /*If the Source Document Line identifiers are passed, then derive the values
11535      of the tax determining factors from ZX_LINES_DET_FACTORS for the source document line.*/
11536    FOR i in 1 .. nvl(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.application_id.LAST,-99)
11537    LOOP
11538      SELECT
11539        default_taxation_country,
11540        document_sub_type,
11541        trx_business_category,
11542        line_intended_use,
11543        user_defined_fisc_class,
11544        product_fisc_classification,
11545        product_category,
11546        assessable_value,
11547        product_type,
11548        decode(l_event_class_rec.prod_family_grp_code,'P2P',input_tax_classification_code,
11549                                                      'O2C',output_tax_classification_code)
11550      INTO
11551         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.default_taxation_country(i),
11552         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.document_sub_type(i),
11553         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_business_category(i),
11554         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_intended_use(i),
11555         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.user_defined_fisc_class(i),
11556         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.product_fisc_classification(i),
11557         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.product_category(i),
11558         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.assessable_value(i),
11559         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.product_type(i),
11563       AND entity_code = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_entity_code(i)
11560         l_tax_classification_code
11561      FROM ZX_LINES_DET_FACTORS
11562     WHERE application_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_application_id(i)
11564       AND event_class_code = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_event_class_code(i)
11565       AND trx_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_trx_id(i)
11566       AND trx_line_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_line_id(i)
11567       AND trx_level_type = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.source_trx_level_type(i);
11568 
11569      IF l_event_class_rec.prod_family_grp_code = 'P2P' THEN
11570         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.input_tax_classification_code(i) := l_tax_classification_code;
11571      ELSIF l_event_class_rec.prod_family_grp_code = 'O2C' AND --AR passes the tax classification code so do not override
11572         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.output_tax_classification_code(i) is null  THEN
11573         ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.output_tax_classification_code(i) := l_tax_classification_code;
11574      END IF;
11575    END LOOP;
11576    /*------------------------------------------+
11577    |Call to insert the lines                   |
11578    +------------------------------------------*/
11579    ZX_SRVC_TYP_PKG.insupd_line_det_factors(p_event_class_rec  => l_event_class_rec,
11580                                            x_return_status    => l_return_status
11581                                           );
11582 
11583    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11584      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11585         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11586           ':ZX_SRVC_TYP_PKG.insupd_line_det_factors returned errors');
11587      END IF;
11588      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11589         RAISE FND_API.G_EXC_ERROR;
11590      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11591         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11592      END IF;
11593    END IF;
11594 
11595    --Delete from the global structures so that there are no hanging/redundant
11596    --records sitting there
11597    ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
11598 
11599    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11600      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
11601    END IF;
11602 
11603    EXCEPTION
11604         WHEN FND_API.G_EXC_ERROR THEN
11605           ROLLBACK TO Copy_Ins_Line_Det_Factors_PVT;
11606           x_return_status := FND_API.G_RET_STS_ERROR ;
11607          /*---------------------------------------------------------+
11608           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11609           | in the message stack. If there is only one message in   |
11610           | the stack it retrieves this message                     |
11611           +---------------------------------------------------------*/
11612           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11613                                     p_count  =>      x_msg_count,
11614                                     p_data   =>      x_msg_data
11615                                     );
11616 
11617            IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
11618              FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
11619            END IF;
11620 
11621         WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11622           ROLLBACK TO Copy_Ins_Line_Det_Factors_PVT;
11623           x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
11624           FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
11625           FND_MSG_PUB.Add;
11626          /*---------------------------------------------------------+
11627           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11628           | in the message stack. If there is only one message in   |
11629           | the stack it retrieves this message                     |
11630           +---------------------------------------------------------*/
11631           FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11632                                     p_count   =>      x_msg_count,
11633                                     p_data    =>      x_msg_data
11634                                     );
11635           IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
11636             FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
11637           END IF;
11638 
11639         WHEN OTHERS THEN
11640           /*-------------------------------------------------------+
11641            |  Handle application errors that result from trapable  |
11642            |  error conditions. The error messages have already    |
11643            |  been put on the error stack.                         |
11644            +-------------------------------------------------------*/
11645            ROLLBACK TO Copy_Ins_Line_Det_Factors_PVT;
11646            IF (SQLCODE = 54) THEN
11647              x_return_status := FND_API.G_RET_STS_ERROR ;
11648              FND_MESSAGE.SET_NAME('ZX','ZX_RESOURCE_BUSY');
11649            ELSE
11650               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
11651               FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
11652            END IF;
11653            FND_MSG_PUB.Add;
11654          /*---------------------------------------------------------+
11655           | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11656           | in the message stack. If there is only one message in   |
11657           | the stack it retrieves this message                     |
11661                                      p_data   =>      x_msg_data
11658           +---------------------------------------------------------*/
11659            FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11660                                      p_count  =>      x_msg_count,
11662                                      );
11663 
11664            IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
11665               FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
11666            END IF;
11667  END copy_insert_line_det_factors;
11668 
11669 
11670 /* ============================================================================*
11671  | PROCEDURE  is_recoverability_affected : This procedure will determine       |
11672  | whether some accounting related information can be modified on the item     |
11673  | distribution from tax point of view.                                        |
11674  * ============================================================================*/
11675  PROCEDURE is_recoverability_affected(
11676   p_api_version        IN  NUMBER,
11677   p_init_msg_list      IN  VARCHAR2,
11678   p_commit             IN  VARCHAR2,
11679   p_validation_level   IN  NUMBER,
11680   x_return_status      OUT NOCOPY     VARCHAR2,
11681   x_msg_count          OUT NOCOPY     NUMBER,
11682   x_msg_data           OUT NOCOPY     VARCHAR2,
11683   p_pa_item_info_tbl   IN  OUT NOCOPY pa_item_info_tbl_type
11684   )IS
11685   l_api_name                  CONSTANT  VARCHAR2(30) := 'IS_RECOVERABILITY_AFFECTED';
11686   l_api_version               CONSTANT  NUMBER := 1.0;
11687   l_return_status             VARCHAR2(1);
11688   l_init_msg_list             VARCHAR2(1);
11689 
11690  BEGIN
11691    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11692      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
11693    END IF;
11694 
11695   /*--------------------------------------------------+
11696    |   Standard start of API savepoint                |
11697    +--------------------------------------------------*/
11698    SAVEPOINT Is_Recoverability_Affected_PVT;
11699 
11700    /*--------------------------------------------------+
11701     |   Standard call to check for call compatibility  |
11702     +--------------------------------------------------*/
11703     IF NOT FND_API.Compatible_API_Call(l_api_version,
11704                                        p_api_version,
11705                                        l_api_name,
11706                                        G_PKG_NAME
11707                                        ) THEN
11708        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11709      END IF;
11710 
11711     /*--------------------------------------------------------------+
11712      |   Initialize message list if p_init_msg_list is set to TRUE  |
11713      +--------------------------------------------------------------*/
11714      IF p_init_msg_list is null THEN
11715        l_init_msg_list := FND_API.G_FALSE;
11716      ELSE
11717        l_init_msg_list := p_init_msg_list;
11718      END IF;
11719 
11720      IF FND_API.to_Boolean(l_init_msg_list) THEN
11721        FND_MSG_PUB.initialize;
11722      END IF;
11723 
11724   /*-----------------------------------------+
11725    |   Initialize return status to SUCCESS   |
11726    +-----------------------------------------*/
11727    x_return_status := FND_API.G_RET_STS_SUCCESS;
11728 
11729   /*-----------------------------------------+
11730    |   Populate Global Variable              |
11731    +-----------------------------------------*/
11732    G_PUB_SRVC := l_api_name;
11733    G_DATA_TRANSFER_MODE := 'PLS';
11734    G_EXTERNAL_API_CALL  := 'N';
11735 
11736    IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11737       FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
11738       'Call TRD service to determine if accouting info on distributions can be modified'
11739        );
11740    END IF;
11741 
11742    ZX_TRD_SERVICES_PUB_PKG.is_recoverability_affected(p_pa_item_info_tbl => p_pa_item_info_tbl,
11743                                                       x_return_status    => l_return_status
11744                                                      );
11745 
11746    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11747      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11748         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11749           ':ZX_TRD_SERVICES_PUB_PKG.is_recoverability_affected returned errors');
11750      END IF;
11751      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11752         RAISE FND_API.G_EXC_ERROR;
11753      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11754         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11755      END IF;
11756    END IF;
11757 
11758    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11759      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
11760    END IF;
11761 
11762    EXCEPTION
11763       WHEN FND_API.G_EXC_ERROR THEN
11764         ROLLBACK TO Is_Recoverability_Affected_PVT;
11765         x_return_status := FND_API.G_RET_STS_ERROR ;
11766        /*---------------------------------------------------------+
11767         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11768         | in the message stack. If there is only one message in   |
11769         | the stack it retrieves this message                     |
11773                                   p_data    => x_msg_data
11770         +---------------------------------------------------------*/
11771         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11772                                   p_count   => x_msg_count,
11774                                   );
11775 
11776         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
11777           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
11778         END IF;
11779 
11780       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11781         ROLLBACK TO Is_Recoverability_Affected_PVT;
11782         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
11783         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
11784         FND_MSG_PUB.Add;
11785        /*---------------------------------------------------------+
11786         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11787         | in the message stack. If there is only one message in   |
11788         | the stack it retrieves this message                     |
11789         +---------------------------------------------------------*/
11790         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11791                                   p_count   => x_msg_count,
11792                                   p_data    => x_msg_data
11793                                   );
11794 
11795         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
11796           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
11797         END IF;
11798 
11799       WHEN OTHERS THEN
11800          ROLLBACK TO Is_Recoverability_Affected_PVT;
11801          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
11802          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
11803          FND_MSG_PUB.Add;
11804         /*---------------------------------------------------------+
11805          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11806          | in the message stack. If there is only one message in   |
11807          | the stack it retrieves this message                     |
11808          +---------------------------------------------------------*/
11809          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11810                                    p_count   => x_msg_count,
11811                                    p_data    => x_msg_data
11812                                    );
11813          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
11814            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
11815          END IF;
11816 
11817  END is_recoverability_affected;
11818 
11819 /* ======================================================================*
11820  | PROCEDURE delete_tax_line_and_distributions:                          |
11821  * ======================================================================*/
11822 
11823  PROCEDURE del_tax_line_and_distributions(
11824   p_api_version           IN            NUMBER,
11825   p_init_msg_list         IN            VARCHAR2,
11826   p_commit                IN            VARCHAR2,
11827   p_validation_level      IN            NUMBER,
11828   x_return_status         OUT NOCOPY    VARCHAR2 ,
11829   x_msg_count             OUT NOCOPY    NUMBER ,
11830   x_msg_data              OUT NOCOPY    VARCHAR2 ,
11831   p_transaction_line_rec  IN OUT NOCOPY transaction_line_rec_type
11832   )IS
11833   l_api_name                  CONSTANT  VARCHAR2(30) := 'DEL_TAX_LINE_AND_DISTRIBUTIONS';
11834   l_api_version               CONSTANT  NUMBER := 1.0;
11835   l_return_status             VARCHAR2(1);
11836   l_init_msg_list             VARCHAR2(1);
11837 
11838  BEGIN
11839    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11840      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
11841    END IF;
11842 
11843   /*--------------------------------------------------+
11844    |   Standard start of API savepoint                |
11845    +--------------------------------------------------*/
11846    SAVEPOINT Del_Tax_Line_And_Dists_PVT;
11847 
11848    /*--------------------------------------------------+
11849     |   Standard call to check for call compatibility  |
11850     +--------------------------------------------------*/
11851     IF NOT FND_API.Compatible_API_Call(l_api_version,
11852                                        p_api_version,
11853                                        l_api_name,
11854                                        G_PKG_NAME
11855                                        ) THEN
11856        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11857      END IF;
11858 
11859     /*--------------------------------------------------------------+
11860      |   Initialize message list if p_init_msg_list is set to TRUE  |
11861      +--------------------------------------------------------------*/
11862      IF p_init_msg_list is null THEN
11863        l_init_msg_list := FND_API.G_FALSE;
11864      ELSE
11865        l_init_msg_list := p_init_msg_list;
11866      END IF;
11867 
11868      IF FND_API.to_Boolean(l_init_msg_list) THEN
11869        FND_MSG_PUB.initialize;
11870      END IF;
11871 
11872     /*-----------------------------------------+
11873      |   Initialize return status to SUCCESS   |
11874      +-----------------------------------------*/
11875      x_return_status := FND_API.G_RET_STS_SUCCESS;
11876 
11877     /*-----------------------------------------+
11878      |   Populate Global Variable              |
11879      +-----------------------------------------*/
11880      G_PUB_SRVC := l_api_name;
11881      G_DATA_TRANSFER_MODE := 'PLS';
11882      G_EXTERNAL_API_CALL  := 'N';
11886      +-----------------------------------------*/
11883 
11884     /*-----------------------------------------+
11885      |   Delete transaction line               |
11887 
11888      DELETE from ZX_LINES_DET_FACTORS
11889        WHERE application_id = p_transaction_line_rec.application_id
11890          AND entity_code = p_transaction_line_rec.entity_code
11891          AND event_class_code = p_transaction_line_rec.event_class_code
11892          AND trx_id = p_transaction_line_rec.trx_id
11893          AND trx_line_id = p_transaction_line_rec.trx_line_id
11894          AND trx_level_type = p_transaction_line_rec.trx_level_type;
11895 
11896 
11897     /*-----------------------------------------+
11898      |   Delete tax line and distributions     |
11899      +-----------------------------------------*/
11900      ZX_TRL_PUB_PKG.delete_tax_lines_and_dists(p_application_id    => p_transaction_line_rec.application_id,
11901                                                p_entity_code       => p_transaction_line_rec.entity_code,
11902                                                p_event_class_code  => p_transaction_line_rec.event_class_code,
11903                                                p_trx_id            => p_transaction_line_rec.trx_id,
11904                                                p_trx_line_id       => p_transaction_line_rec.trx_line_id,
11905                                                p_trx_level_type    => p_transaction_line_rec.trx_level_type,
11906                                                x_return_status     => l_return_status
11907                                               );
11908      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11909        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
11910           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
11911            ':ZX_TRL_PUB_PKG.delete_tax_lines_and_dists returned errors');
11912        END IF;
11913        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
11914           RAISE FND_API.G_EXC_ERROR;
11915        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
11916           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
11917        END IF;
11918      END IF;
11919 
11920      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
11921         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
11922      END IF;
11923 
11924      EXCEPTION
11925       WHEN FND_API.G_EXC_ERROR THEN
11926         ROLLBACK TO Del_Tax_Line_And_Dists_PVT;
11927         x_return_status := FND_API.G_RET_STS_ERROR ;
11928        /*---------------------------------------------------------+
11929         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11930         | in the message stack. If there is only one message in   |
11931         | the stack it retrieves this message                     |
11932         +---------------------------------------------------------*/
11933         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11934                                   p_count   => x_msg_count,
11935                                   p_data    => x_msg_data
11936                                   );
11937 
11938         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
11939           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
11940         END IF;
11941 
11942       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
11943         ROLLBACK TO Del_Tax_Line_And_Dists_PVT;
11944         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
11945         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
11946         FND_MSG_PUB.Add;
11947        /*---------------------------------------------------------+
11948         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11949         | in the message stack. If there is only one message in   |
11950         | the stack it retrieves this message                     |
11951         +---------------------------------------------------------*/
11952         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11953                                   p_count   => x_msg_count,
11954                                   p_data    => x_msg_data
11955                                   );
11956 
11957         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
11958           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
11959         END IF;
11960 
11961       WHEN OTHERS THEN
11962          ROLLBACK TO Del_Tax_Line_And_Dists_PVT;
11963          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
11964          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
11965          FND_MSG_PUB.Add;
11966         /*---------------------------------------------------------+
11967          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
11968          | in the message stack. If there is only one message in   |
11969          | the stack it retrieves this message                     |
11970          +---------------------------------------------------------*/
11971          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
11972                                    p_count   => x_msg_count,
11973                                    p_data    => x_msg_data
11974                                    );
11975          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
11976            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
11977          END IF;
11978 
11979  END del_tax_line_and_distributions;
11980 
11981 /* ======================================================================*
11982  | PROCEDURE delete_tax_distributions:                                   |
11983  * ======================================================================*/
11987   p_init_msg_list         IN            VARCHAR2,
11984 
11985  PROCEDURE delete_tax_distributions(
11986   p_api_version           IN            NUMBER,
11988   p_commit                IN            VARCHAR2,
11989   p_validation_level      IN            NUMBER,
11990   x_return_status         OUT NOCOPY    VARCHAR2 ,
11991   x_msg_count             OUT NOCOPY    NUMBER ,
11992   x_msg_data              OUT NOCOPY    VARCHAR2 ,
11993   p_transaction_line_rec  IN OUT NOCOPY transaction_line_rec_type
11994   )IS
11995   l_api_name                  CONSTANT  VARCHAR2(30) := 'DEL_TAX_DISTRIBUTIONS';
11996   l_api_version               CONSTANT  NUMBER := 1.0;
11997   l_return_status             VARCHAR2(1);
11998   l_init_msg_list             VARCHAR2(1);
11999 
12000  BEGIN
12001    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12002      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
12003    END IF;
12004 
12005   /*--------------------------------------------------+
12006    |   Standard start of API savepoint                |
12007    +--------------------------------------------------*/
12008    SAVEPOINT Del_Tax_Distributions_PVT;
12009 
12010    /*--------------------------------------------------+
12011     |   Standard call to check for call compatibility  |
12012     +--------------------------------------------------*/
12013     IF NOT FND_API.Compatible_API_Call(l_api_version,
12014                                        p_api_version,
12015                                        l_api_name,
12016                                        G_PKG_NAME
12017                                        ) THEN
12018        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12019      END IF;
12020 
12021     /*--------------------------------------------------------------+
12022      |   Initialize message list if p_init_msg_list is set to TRUE  |
12023      +--------------------------------------------------------------*/
12024      IF p_init_msg_list is null THEN
12025        l_init_msg_list := FND_API.G_FALSE;
12026      ELSE
12027        l_init_msg_list := p_init_msg_list;
12028      END IF;
12029 
12030      IF FND_API.to_Boolean(l_init_msg_list) THEN
12031        FND_MSG_PUB.initialize;
12032      END IF;
12033 
12034     /*-----------------------------------------+
12035      |   Initialize return status to SUCCESS   |
12036      +-----------------------------------------*/
12037      x_return_status := FND_API.G_RET_STS_SUCCESS;
12038 
12039     /*-----------------------------------------+
12040      |   Populate Global Variable              |
12041      +-----------------------------------------*/
12042      G_PUB_SRVC := l_api_name;
12043      G_DATA_TRANSFER_MODE := 'PLS';
12044      G_EXTERNAL_API_CALL  := 'N';
12045 
12046     /*-----------------------------------------+
12047      |   Delete tax distributions              |
12048      +-----------------------------------------*/
12049      IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12050         FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
12051         'Call TRL service to delete tax distributions'
12052         );
12053      END IF;
12054 
12055      ZX_TRL_PUB_PKG.delete_tax_dists (p_application_id    => p_transaction_line_rec.application_id,
12056                                       p_entity_code       => p_transaction_line_rec.entity_code,
12057                                       p_event_class_code  => p_transaction_line_rec.event_class_code,
12058                                       p_trx_id            => p_transaction_line_rec.trx_id,
12059                                       p_trx_line_id       => p_transaction_line_rec.trx_line_id,
12060                                       p_trx_level_type    => p_transaction_line_rec.trx_level_type,
12061                                       x_return_status     => l_return_status
12062                                       );
12063      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12064        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12065           FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12066            ':ZX_TRL_PUB_PKG.delete_tax_dists returned errors');
12067        END IF;
12068        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12069           RAISE FND_API.G_EXC_ERROR;
12070        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12071           RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12072        END IF;
12073      END IF;
12074 
12075      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12076         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
12077      END IF;
12078 
12079      EXCEPTION
12080       WHEN FND_API.G_EXC_ERROR THEN
12081         ROLLBACK TO Del_Tax_Distributions_PVT;
12082         x_return_status := FND_API.G_RET_STS_ERROR ;
12083        /*---------------------------------------------------------+
12084         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12085         | in the message stack. If there is only one message in   |
12086         | the stack it retrieves this message                     |
12087         +---------------------------------------------------------*/
12088         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12089                                   p_count   => x_msg_count,
12090                                   p_data    => x_msg_data
12091                                   );
12092 
12093         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12094           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12098         ROLLBACK TO Del_Tax_Distributions_PVT;
12095         END IF;
12096 
12097       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
12099         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12100         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12101         FND_MSG_PUB.Add;
12102        /*---------------------------------------------------------+
12103         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12104         | in the message stack. If there is only one message in   |
12105         | the stack it retrieves this message                     |
12106         +---------------------------------------------------------*/
12107         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12108                                   p_count   => x_msg_count,
12109                                   p_data    => x_msg_data
12110                                   );
12111 
12112         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12113           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12114         END IF;
12115 
12116       WHEN OTHERS THEN
12117          ROLLBACK TO Del_Tax_Distributions_PVT;
12118          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12119          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12120          FND_MSG_PUB.Add;
12121        /*---------------------------------------------------------+
12122         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12123         | in the message stack. If there is only one message in   |
12124         | the stack it retrieves this message                     |
12125         +---------------------------------------------------------*/
12126         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12127                                    p_count   => x_msg_count,
12128                                    p_data    => x_msg_data
12129                                    );
12130          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
12131            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
12132          END IF;
12133 
12134  END delete_tax_distributions;
12135 
12136  -----------------------------------------------------------------------
12137  --  PUBLIC PROCEDURE
12138  --  get_default_tax_det_attrs
12139  --
12140  --  DESCRIPTION
12141  --  This overloaded procedure acts as a wrapper on TDS default_tax_attribs
12142  --  procedure to default the tax determining attributes. It follows the
12143  --  following logic defaulting the determining attributes.
12144  --
12145  --  Fetch from zx_trx_headers_gt and zx_trx_transaction_lines_gt into
12146  --  global structure zx_global_structures_pkg.trx_line_dist_tbl
12147  --  For records in trx_line_dist_tbl
12148  --  Loop
12149  --    If line_level_action is UPDATE
12150  --      If all tax determining attributes are passed null
12151  --        Fetch all attributes from zx_lines_det_factors
12152  --        if item/item_org_id/country has changed
12153  --           call RE-defaulting API for intended_use, product_fiscal_classification
12154  --        if item/item_org_id/assessable value has changed
12155  --           call redefaulting API for assessable value
12156  --        Always call the tax classification defaulting API
12157  --    ELSIF line level action is CREATE
12158  --       IF historical_tax_code_id/global_attribute_category/global_Attribute1 passed
12159  --          redefault the tax attributes for PO (on the fly migration)
12160  --       elsif historical tax code id/global_attribute_category/global_attribute1 null
12161  --          If adjusted_doc informaiton passed
12162  --            default from adjusted_doc
12163  --          elsif applied_from information passed
12164  --            default from applied_from
12165  --          elsif soure_doc information passed
12166  --            default from source
12167  --          else
12168  --            call the TDM default API
12169  --  End loop
12170  --  Update the GTTs with the defaulting attributes derived here.
12171 
12172  --  CALLED BY
12173  --    populateTaxAttributes java method given to iP/PO
12174  --    directly from forms
12175  ----------------------------------------------------------------------
12176  PROCEDURE get_default_tax_det_attribs(
12177   p_api_version           IN            NUMBER,
12178   p_init_msg_list         IN            VARCHAR2,
12179   p_commit                IN            VARCHAR2,
12180   p_validation_level      IN            NUMBER,
12181   x_return_status         OUT NOCOPY    VARCHAR2,
12182   x_msg_count             OUT NOCOPY    NUMBER,
12183   x_msg_data              OUT NOCOPY    VARCHAR2
12184  )IS
12185   l_api_name                      CONSTANT  VARCHAR2(30) := 'GET_DEFAULT_TAX_DET_ATTRIBS';
12186   l_api_version                   CONSTANT  NUMBER := 1.0;
12187   l_return_status                 VARCHAR2(1);
12188   l_init_msg_list                 VARCHAR2(1);
12189   l_event_class_rec               event_class_rec_type;
12190   l_context_info_rec              context_info_rec_type;
12191   l_transaction_header_rec        transaction_header_rec_type;
12192 
12193    CURSOR headers_doc IS
12194      SELECT INTERNAL_ORGANIZATION_ID,
12195             LEGAL_ENTITY_ID,
12196             LEDGER_ID,
12197             APPLICATION_ID,
12198             ENTITY_CODE,
12199             EVENT_CLASS_CODE,
12200             EVENT_TYPE_CODE,
12201             CTRL_TOTAL_HDR_TX_AMT,
12202             TRX_ID,
12203             TRX_DATE,
12204             RELATED_DOC_DATE,
12205             PROVNL_TAX_DETERMINATION_DATE,
12206             TRX_CURRENCY_CODE,
12207             PRECISION,
12208             CURRENCY_CONVERSION_TYPE,
12212             ROUNDING_SHIP_FROM_PARTY_ID,
12209             CURRENCY_CONVERSION_RATE,
12210             CURRENCY_CONVERSION_DATE,
12211             ROUNDING_SHIP_TO_PARTY_ID,
12213             ROUNDING_BILL_TO_PARTY_ID,
12214             ROUNDING_BILL_FROM_PARTY_ID,
12215             RNDG_SHIP_TO_PARTY_SITE_ID,
12216             RNDG_SHIP_FROM_PARTY_SITE_ID,
12217             RNDG_BILL_TO_PARTY_SITE_ID,
12218             RNDG_BILL_FROM_PARTY_SITE_ID,
12219             QUOTE_FLAG,
12220             ESTABLISHMENT_ID
12221        FROM ZX_TRX_HEADERS_GT;
12222 
12223  BEGIN
12224    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12225      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
12226    END IF;
12227 
12228   /*--------------------------------------------------+
12229    |   Standard start of API savepoint                |
12230    +--------------------------------------------------*/
12231    SAVEPOINT Get_Default_Tax_Det_Attrs_PVT;
12232 
12233    /*--------------------------------------------------+
12234     |   Standard call to check for call compatibility  |
12235     +--------------------------------------------------*/
12236     IF NOT FND_API.Compatible_API_Call(l_api_version,
12237                                        p_api_version,
12238                                        l_api_name,
12239                                        G_PKG_NAME
12240                                        ) THEN
12241        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12242      END IF;
12243 
12244     /*--------------------------------------------------------------+
12245      |   Initialize message list if p_init_msg_list is set to TRUE  |
12246      +--------------------------------------------------------------*/
12247      IF p_init_msg_list is null THEN
12248        l_init_msg_list := FND_API.G_FALSE;
12249      ELSE
12250        l_init_msg_list := p_init_msg_list;
12251      END IF;
12252 
12253      IF FND_API.to_Boolean(l_init_msg_list) THEN
12254        FND_MSG_PUB.initialize;
12255      END IF;
12256 
12257     /*-----------------------------------------+
12258      |   Initialize return status to SUCCESS   |
12259      +-----------------------------------------*/
12260      x_return_status := FND_API.G_RET_STS_SUCCESS;
12261 
12262     /*-----------------------------------------+
12263      |   Populate Global Variable              |
12264      +-----------------------------------------*/
12265      G_PUB_SRVC := l_api_name;
12266      G_DATA_TRANSFER_MODE := 'TAB';
12267      G_EXTERNAL_API_CALL  := 'N';
12268 
12269      OPEN headers_doc;
12270      LOOP
12271        FETCH headers_doc BULK COLLECT INTO
12272              l_transaction_header_rec.INTERNAL_ORGANIZATION_ID,
12273              l_transaction_header_rec.LEGAL_ENTITY_ID,
12274              l_transaction_header_rec.LEDGER_ID,
12275              l_transaction_header_rec.APPLICATION_ID,
12276              l_transaction_header_rec.ENTITY_CODE,
12277              l_transaction_header_rec.EVENT_CLASS_CODE,
12278              l_transaction_header_rec.EVENT_TYPE_CODE,
12279              l_transaction_header_rec.CTRL_TOTAL_HDR_TX_AMT,
12280              l_transaction_header_rec.TRX_ID,
12281              l_transaction_header_rec.TRX_DATE,
12282              l_transaction_header_rec.REL_DOC_DATE,
12283              l_transaction_header_rec.PROVNL_TAX_DETERMINATION_DATE,
12284              l_transaction_header_rec.TRX_CURRENCY_CODE,
12285              l_transaction_header_rec.PRECISION,
12286              l_transaction_header_rec.CURRENCY_CONVERSION_TYPE,
12287              l_transaction_header_rec.CURRENCY_CONVERSION_RATE,
12288              l_transaction_header_rec.CURRENCY_CONVERSION_DATE,
12289              l_transaction_header_rec.ROUNDING_SHIP_TO_PARTY_ID,
12290              l_transaction_header_rec.ROUNDING_SHIP_FROM_PARTY_ID,
12291              l_transaction_header_rec.ROUNDING_BILL_TO_PARTY_ID,
12292              l_transaction_header_rec.ROUNDING_BILL_FROM_PARTY_ID,
12293              l_transaction_header_rec.RNDG_SHIP_TO_PARTY_SITE_ID,
12294              l_transaction_header_rec.RNDG_SHIP_FROM_PARTY_SITE_ID,
12295              l_transaction_header_rec.RNDG_BILL_TO_PARTY_SITE_ID,
12296              l_transaction_header_rec.RNDG_BILL_FROM_PARTY_SITE_ID,
12297              l_transaction_header_rec.QUOTE_FLAG,
12298              l_transaction_header_rec.ESTABLISHMENT_ID
12299        LIMIT G_LINES_PER_FETCH;
12300 
12301        FOR l_index IN 1..nvl(l_transaction_header_rec.application_id.LAST,0)
12302        LOOP
12303          BEGIN
12304            SAVEPOINT Get_Def_Tax_Det_Attrs_Doc_PVT;
12305            l_event_class_rec.INTERNAL_ORGANIZATION_ID     :=  l_transaction_header_rec.INTERNAL_ORGANIZATION_ID(l_index);
12306            l_event_class_rec.LEGAL_ENTITY_ID              :=  l_transaction_header_rec.LEGAL_ENTITY_ID(l_index);
12307            l_event_class_rec.LEDGER_ID                    :=  l_transaction_header_rec.LEDGER_ID(l_index);
12308            l_event_class_rec.APPLICATION_ID               :=  l_transaction_header_rec.APPLICATION_ID(l_index);
12309            l_event_class_rec.ENTITY_CODE                  :=  l_transaction_header_rec.ENTITY_CODE(l_index);
12310            l_event_class_rec.EVENT_CLASS_CODE             :=  l_transaction_header_rec.EVENT_CLASS_CODE(l_index);
12311            l_event_class_rec.EVENT_TYPE_CODE              :=  l_transaction_header_rec.EVENT_TYPE_CODE(l_index);
12312            l_event_class_rec.CTRL_TOTAL_HDR_TX_AMT        :=  l_transaction_header_rec.CTRL_TOTAL_HDR_TX_AMT(l_index);
12313            l_event_class_rec.TRX_ID                       :=  l_transaction_header_rec.TRX_ID(l_index);
12317            l_event_class_rec.TRX_CURRENCY_CODE            :=  l_transaction_header_rec.TRX_CURRENCY_CODE(l_index);
12314            l_event_class_rec.TRX_DATE                     :=  l_transaction_header_rec.TRX_DATE(l_index);
12315            l_event_class_rec.REL_DOC_DATE                 :=  l_transaction_header_rec.REL_DOC_DATE(l_index);
12316            l_event_class_rec.PROVNL_TAX_DETERMINATION_DATE:=  l_transaction_header_rec.PROVNL_TAX_DETERMINATION_DATE(l_index);
12318            l_event_class_rec.PRECISION                    :=  l_transaction_header_rec.PRECISION(l_index);
12319            l_event_class_rec.CURRENCY_CONVERSION_TYPE     :=  l_transaction_header_rec.CURRENCY_CONVERSION_TYPE(l_index);
12320            l_event_class_rec.CURRENCY_CONVERSION_RATE     :=  l_transaction_header_rec.CURRENCY_CONVERSION_RATE(l_index);
12321            l_event_class_rec.CURRENCY_CONVERSION_DATE     :=  l_transaction_header_rec.CURRENCY_CONVERSION_DATE(l_index);
12322            l_event_class_rec.ROUNDING_SHIP_TO_PARTY_ID    :=  l_transaction_header_rec.ROUNDING_SHIP_TO_PARTY_ID(l_index);
12323            l_event_class_rec.ROUNDING_SHIP_FROM_PARTY_ID  :=  l_transaction_header_rec.ROUNDING_SHIP_FROM_PARTY_ID(l_index);
12324            l_event_class_rec.ROUNDING_BILL_TO_PARTY_ID    :=  l_transaction_header_rec.ROUNDING_BILL_TO_PARTY_ID(l_index);
12325            l_event_class_rec.ROUNDING_BILL_FROM_PARTY_ID  :=  l_transaction_header_rec.ROUNDING_BILL_FROM_PARTY_ID(l_index);
12326            l_event_class_rec.RNDG_SHIP_TO_PARTY_SITE_ID   :=  l_transaction_header_rec.RNDG_SHIP_TO_PARTY_SITE_ID(l_index);
12327            l_event_class_rec.RNDG_SHIP_FROM_PARTY_SITE_ID :=  l_transaction_header_rec.RNDG_SHIP_FROM_PARTY_SITE_ID(l_index);
12328            l_event_class_rec.RNDG_BILL_TO_PARTY_SITE_ID   :=  l_transaction_header_rec.RNDG_BILL_TO_PARTY_SITE_ID(l_index);
12329            l_event_class_rec.RNDG_BILL_FROM_PARTY_SITE_ID :=  l_transaction_header_rec.RNDG_BILL_FROM_PARTY_SITE_ID(l_index);
12330            l_event_class_rec.QUOTE_FLAG                   :=  nvl(l_transaction_header_rec.QUOTE_FLAG(l_index),'N');
12331 
12332            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12333                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
12334                'application_id: '||to_char(l_event_class_rec.application_id)||
12335                ', entity_code: '||l_event_class_rec.entity_code||
12336                ', event_class_code: '||l_event_class_rec.event_class_code||
12337                ', event_type_code: '||l_event_class_rec.event_type_code||
12338                ', trx_id: '||to_char(l_event_class_rec.trx_id)||
12339                ', internal_organization_id: '||to_char(l_event_class_rec.internal_organization_id)||
12340                ', ledger_id: '||to_char(l_event_class_rec.ledger_id)||
12341                ', legal_entity_id: '||to_char(l_event_class_rec.legal_entity_id)||
12342                ', trx_date: '||to_char(l_event_class_rec.trx_date)||
12343                ', related_document_date: '||to_char(l_event_class_rec.rel_doc_date)||
12344                ', provnl_tax_determination_date: '||to_char(l_event_class_rec.provnl_tax_determination_date)||
12345                ', trx_currency_code: '||l_event_class_rec.trx_currency_code||
12346                ', currency_conversion_type: '||l_event_class_rec.currency_conversion_type||
12347                ', currency_conversion_rate: '||to_char(l_event_class_rec.currency_conversion_rate)||
12348                ', currency_conversion_date: '||to_char(l_event_class_rec.currency_conversion_date)||
12349                ', rounding_ship_to_party_id: '||to_char(l_event_class_rec.rounding_ship_to_party_id)||
12350                ', rounding_ship_from_party_id: '||to_char(l_event_class_rec.rounding_ship_from_party_id)||
12351                ', rounding_bill_to_party_id: '||to_char(l_event_class_rec.rounding_bill_to_party_id)||
12352                ', rounding_bill_from_party_id: '||to_char(l_event_class_rec.rounding_bill_from_party_id)||
12353                ', rndg_ship_to_party_site_id: '||to_char(l_event_class_rec.rndg_ship_to_party_site_id)||
12354                ', rndg_ship_from_party_site_id: '||to_char(l_event_class_rec.rndg_ship_from_party_site_id)||
12355                ', rndg_bill_to_party_site_id: '||to_char(l_event_class_rec.rndg_bill_to_party_site_id)||
12356                ', rndg_bill_from_party_site_id: '||to_char(l_event_class_rec.rndg_bill_from_party_site_id));
12357            END IF;
12358 
12359           /*------------------------------------------------------+
12360            |   Validate and Initializate parameters for Calculate |
12361            |   tax                                                |
12362            +------------------------------------------------------*/
12363            ZX_VALID_INIT_PARAMS_PKG.get_default_tax_det_attrs(p_event_class_rec => l_event_class_rec,
12364                                                               x_return_status   => l_return_status
12365                                                              );
12366 
12367            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12368              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12369                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12370                 ':ZX_VALID_INIT_PARAMS_PKG.get_default_tax_det_attrs returned errors');
12371              END IF;
12372              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12373                 RAISE FND_API.G_EXC_ERROR;
12374              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12375                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12376              END IF;
12377            END IF;
12378 
12379           /*------------------------------------------------------+
12380            |   Call the redefaulting APIs                         |
12381            +------------------------------------------------------*/
12382            ZX_SRVC_TYP_PKG.get_default_tax_det_attrs(p_event_class_rec => l_event_class_rec,
12386            IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12383                                                      x_return_status   => l_return_status
12384                                                     );
12385 
12387              IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12388                FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12389                 ':ZX_SRVC_TYP_PKG.get_default_tax_det_attrs returned errors');
12390              END IF;
12391              IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12392                 RAISE FND_API.G_EXC_ERROR;
12393              ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12394                 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12395              END IF;
12396            END IF;
12397 
12398            --Delete from the global structure for every loop on header
12399            --so that there are no hanging/redundant records sitting there
12400            IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12401               FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
12402                'Calling routine to delete the global structures ');
12403            END IF;
12404            ZX_GLOBAL_STRUCTURES_PKG.delete_trx_line_dist_tbl;
12405 
12406            EXCEPTION
12407              WHEN FND_API.G_EXC_ERROR THEN
12408                ROLLBACK TO Get_Def_Tax_Det_Attrs_Doc_PVT;
12409                x_return_status := FND_API.G_RET_STS_ERROR ;
12410 	             --Call API to dump into zx_errors_gt
12411                DUMP_MSG;
12412                IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12413                  FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12414                END IF;
12415          END;
12416        END LOOP;--for headers_doc
12417        EXIT WHEN headers_doc%NOTFOUND;
12418     END LOOP;
12419     CLOSE headers_doc;
12420 
12421     IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12422         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
12423     END IF;
12424 
12425     EXCEPTION
12426           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
12427             ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
12428             --Close all open cursors
12429             IF headers_doc%ISOPEN THEN CLOSE headers_doc; END IF;
12430             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12431             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12432             FND_MSG_PUB.Add;
12433            /*---------------------------------------------------------+
12434             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12435             | in the message stack. If there is only one message in   |
12436             | the stack it retrieves this message                     |
12437             +---------------------------------------------------------*/
12438             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12439                                       p_count   =>      x_msg_count,
12440                                       p_data    =>      x_msg_data
12441                                       );
12442             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12443               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12444             END IF;
12445 
12446           WHEN OTHERS THEN
12447              ROLLBACK TO Get_Default_Tax_Det_Attrs_PVT;
12448              --Close all open cursors
12449              IF headers_doc%ISOPEN THEN CLOSE headers_doc; END IF;
12450              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12451              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12452              FND_MSG_PUB.Add;
12453             /*---------------------------------------------------------+
12454              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12455              | in the message stack. If there is only one message in   |
12456              | the stack it retrieves this message                     |
12457              +---------------------------------------------------------*/
12458              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
12459                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
12460              END IF;
12461  END get_default_tax_det_attribs;
12462 
12463 /* ======================================================================*
12464  | PROCEDURE redefault_intended_use: Redefault intended use              |
12465  * ======================================================================*/
12466 
12467  PROCEDURE redefault_intended_use(
12468   p_api_version          IN            NUMBER,
12469   p_init_msg_list        IN            VARCHAR2,
12470   p_commit               IN            VARCHAR2,
12471   p_validation_level     IN            NUMBER,
12472   x_return_status        OUT NOCOPY    VARCHAR2,
12473   x_msg_count            OUT NOCOPY    NUMBER ,
12474   x_msg_data             OUT NOCOPY    VARCHAR2,
12475   p_application_id       IN            NUMBER,
12476   p_entity_code          IN            VARCHAR2,
12477   p_event_class_code     IN            VARCHAR2,
12478   p_internal_org_id      IN            NUMBER,
12479   p_country_code         IN            VARCHAR2,
12480   p_item_id              IN            NUMBER,
12481   p_item_org_id          IN            NUMBER,
12482   x_intended_use         OUT NOCOPY    VARCHAR2
12483   )IS
12484   l_api_name                  CONSTANT  VARCHAR2(30) := 'REDEFAULT_INTENDED_USE';
12485   l_api_version               CONSTANT  NUMBER := 1.0;
12486   l_return_status             VARCHAR2(1);
12487   l_init_msg_list             VARCHAR2(1);
12488 
12489  BEGIN
12490    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12494   /*--------------------------------------------------+
12491      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
12492    END IF;
12493 
12495    |   Standard start of API savepoint                |
12496    +--------------------------------------------------*/
12497    SAVEPOINT Redefault_Intended_Use_PVT;
12498 
12499    /*--------------------------------------------------+
12500     |   Standard call to check for call compatibility  |
12501     +--------------------------------------------------*/
12502     IF NOT FND_API.Compatible_API_Call(l_api_version,
12503                                        p_api_version,
12504                                        l_api_name,
12505                                        G_PKG_NAME
12506                                        ) THEN
12507        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12508      END IF;
12509 
12510     /*--------------------------------------------------------------+
12511      |   Initialize message list if p_init_msg_list is set to TRUE  |
12512      +--------------------------------------------------------------*/
12513      IF p_init_msg_list is null THEN
12514        l_init_msg_list := FND_API.G_FALSE;
12515      ELSE
12516        l_init_msg_list := p_init_msg_list;
12517      END IF;
12518 
12519      IF FND_API.to_Boolean(l_init_msg_list) THEN
12520        FND_MSG_PUB.initialize;
12521      END IF;
12522 
12523     /*-----------------------------------------+
12524      |   Initialize return status to SUCCESS   |
12525      +-----------------------------------------*/
12526      x_return_status := FND_API.G_RET_STS_SUCCESS;
12527 
12528     /*-----------------------------------------+
12529      |   Populate Global Variable              |
12530      +-----------------------------------------*/
12531      G_PUB_SRVC := l_api_name;
12532      G_DATA_TRANSFER_MODE := 'PLS';
12533      G_EXTERNAL_API_CALL  := 'N';
12534 
12535      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12536        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
12537        'application_id: ' || to_char(p_application_id)||
12538        ', entity_code: ' || p_entity_code||
12539        ', event_class_code: ' || p_event_class_code||
12540        ', country_code: ' || p_country_code||
12541        ', org_id: ' || to_char(p_internal_org_id)||
12542        ', product_id: ' || to_char(p_item_id)||
12543        ', product_org_id: ' || to_char(p_item_org_id));
12544      END IF;
12545 
12546      ZX_DEFAULT_AUTOMATION_PKG.redefault_intended_use(p_application_id,
12547                                                       p_entity_code,
12548                                                       p_event_class_code,
12549                                                       p_internal_org_id,
12550                                                       p_country_code,
12551                                                       p_item_id,
12552                                                       p_item_org_id,
12553                                                       x_intended_use,
12554                                                       x_return_status
12555                                                       );
12556 
12557      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12558        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12559          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12560            ':ZX_DEFAULT_AUTOMATION_PKG.redefault_intended_use returned errors');
12561        END IF;
12562        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12563          RAISE FND_API.G_EXC_ERROR;
12564        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12565          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12566        END IF;
12567      ELSE
12568        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12569          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12570            ':Intended Use :' || x_intended_use);
12571        END IF;
12572      END IF;
12573 
12574      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12575        FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
12576      END IF;
12577 
12578      EXCEPTION
12579           WHEN FND_API.G_EXC_ERROR THEN
12580             ROLLBACK TO Redefault_Intended_Use_PVT;
12581             x_return_status := FND_API.G_RET_STS_ERROR ;
12582            /*---------------------------------------------------------+
12583             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12584             | in the message stack. If there is only one message in   |
12585             | the stack it retrieves this message                     |
12586             +---------------------------------------------------------*/
12587             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12588                                       p_count   =>      x_msg_count,
12589                                       p_data    =>      x_msg_data
12590                                       );
12591             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12592                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12593             END IF;
12594 
12595           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
12596             ROLLBACK TO Redefault_Intended_Use_PVT;
12597             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12598             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12599             FND_MSG_PUB.Add;
12603             | the stack it retrieves this message                     |
12600            /*---------------------------------------------------------+
12601             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12602             | in the message stack. If there is only one message in   |
12604             +---------------------------------------------------------*/
12605             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12606                                       p_count   =>      x_msg_count,
12607                                       p_data    =>      x_msg_data
12608                                       );
12609             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12610               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12611             END IF;
12612 
12613           WHEN OTHERS THEN
12614              ROLLBACK TO Redefault_Intended_Use_PVT;
12615              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12616              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12617              FND_MSG_PUB.Add;
12618             /*---------------------------------------------------------+
12619              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12620              | in the message stack. If there is only one message in   |
12621              | the stack it retrieves this message                     |
12622              +---------------------------------------------------------*/
12623              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12624                                        p_count  =>      x_msg_count,
12625                                        p_data   =>      x_msg_data
12626                                       );
12627              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
12628                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
12629              END IF;
12630  END redefault_intended_use;
12631 
12632 /* ======================================================================*
12633  | PROCEDURE redefault_prod_fisc_class_code: Redefault product fiscal    |
12634  |                                           classification              |
12635  * ======================================================================*/
12636  PROCEDURE redefault_prod_fisc_class_code(
12637   p_api_version          IN            NUMBER,
12638   p_init_msg_list        IN            VARCHAR2,
12639   p_commit               IN            VARCHAR2,
12640   p_validation_level     IN            NUMBER,
12641   x_return_status        OUT NOCOPY    VARCHAR2,
12642   x_msg_count            OUT NOCOPY    NUMBER ,
12643   x_msg_data             OUT NOCOPY    VARCHAR2,
12644   p_application_id       IN            NUMBER,
12645   p_entity_code          IN            VARCHAR2,
12646   p_event_class_code     IN            VARCHAR2,
12647   p_internal_org_id      IN            NUMBER,
12648   p_country_code         IN            VARCHAR2,
12649   p_item_id              IN            NUMBER,
12650   p_item_org_id          IN            NUMBER,
12651   x_prod_fisc_class_code OUT NOCOPY    VARCHAR2
12652   )IS
12653   l_api_name                  CONSTANT  VARCHAR2(30) := 'REDEFAULT_PROD_FISC_CLASS_CODE';
12654   l_api_version               CONSTANT  NUMBER := 1.0;
12655   l_return_status             VARCHAR2(1);
12656   l_init_msg_list             VARCHAR2(1);
12657 
12658  BEGIN
12659    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12660      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
12661    END IF;
12662 
12663   /*--------------------------------------------------+
12664    |   Standard start of API savepoint                |
12665    +--------------------------------------------------*/
12666    SAVEPOINT Redef_Prod_Fisc_Class_Code_PVT;
12667 
12668    /*--------------------------------------------------+
12669     |   Standard call to check for call compatibility  |
12670     +--------------------------------------------------*/
12671     IF NOT FND_API.Compatible_API_Call(l_api_version,
12672                                        p_api_version,
12673                                        l_api_name,
12674                                        G_PKG_NAME
12675                                        ) THEN
12676        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12677      END IF;
12678 
12679     /*--------------------------------------------------------------+
12680      |   Initialize message list if p_init_msg_list is set to TRUE  |
12681      +--------------------------------------------------------------*/
12682      IF p_init_msg_list is null THEN
12683        l_init_msg_list := FND_API.G_FALSE;
12684      ELSE
12685        l_init_msg_list := p_init_msg_list;
12686      END IF;
12687 
12688      IF FND_API.to_Boolean(l_init_msg_list) THEN
12689        FND_MSG_PUB.initialize;
12690      END IF;
12691 
12692     /*-----------------------------------------+
12693      |   Initialize return status to SUCCESS   |
12694      +-----------------------------------------*/
12695      x_return_status := FND_API.G_RET_STS_SUCCESS;
12696 
12697     /*-----------------------------------------+
12698      |   Populate Global Variable              |
12699      +-----------------------------------------*/
12700      G_PUB_SRVC := l_api_name;
12701      G_DATA_TRANSFER_MODE := 'PLS';
12702      G_EXTERNAL_API_CALL  := 'N';
12703 
12704      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12705        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
12706        'application_id: ' || to_char(p_application_id)||
12710        ', org_id: ' || to_char(p_internal_org_id)||
12707        ', entity_code: ' || p_entity_code||
12708        ', event_class_code: ' || p_event_class_code||
12709        ', country_code: ' || p_country_code||
12711        ', product_id: ' || to_char(p_item_id)||
12712        ', product_org_id: ' || to_char(p_item_org_id));
12713      END IF;
12714 
12715      ZX_DEFAULT_AUTOMATION_PKG.redefault_prod_fisc_class_code(p_application_id,
12716                                                               p_entity_code,
12717                                                               p_event_class_code,
12718                                                               p_internal_org_id,
12719                                                               p_country_code,
12720                                                               p_item_id,
12721                                                               p_item_org_id,
12722                                                               x_prod_fisc_class_code,
12723                                                               x_return_status
12724                                                               );
12725      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12726        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12727          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12728            ':ZX_DEFAULT_AUTOMATION_PKG.redefault_prod_fisc_class_code returned errors');
12729        END IF;
12730        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12731          RAISE FND_API.G_EXC_ERROR;
12732        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12733          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12734        END IF;
12735      ELSE
12736        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12737          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12738            ':Product Fiscal Classification Code :' || x_prod_fisc_class_code);
12739        END IF;
12740      END IF;
12741 
12742      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12743         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
12744      END IF;
12745 
12746      EXCEPTION
12747           WHEN FND_API.G_EXC_ERROR THEN
12748             ROLLBACK TO Redef_Prod_Fisc_Class_Code_PVT;
12749             x_return_status := FND_API.G_RET_STS_ERROR ;
12750             /*---------------------------------------------------------+
12751              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12752              | in the message stack. If there is only one message in   |
12753              | the stack it retrieves this message                     |
12754              +---------------------------------------------------------*/
12755              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12756                                        p_count  =>      x_msg_count,
12757                                        p_data   =>      x_msg_data
12758                                        );
12759 
12760             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12761                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12762             END IF;
12763 
12764           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
12765             ROLLBACK TO Redef_Prod_Fisc_Class_Code_PVT;
12766             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12767             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12768             FND_MSG_PUB.Add;
12769            /*---------------------------------------------------------+
12770             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12771             | in the message stack. If there is only one message in   |
12772             | the stack it retrieves this message                     |
12773             +---------------------------------------------------------*/
12774             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12775                                       p_count   =>      x_msg_count,
12776                                       p_data    =>      x_msg_data
12777                                       );
12778             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12779               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12780             END IF;
12781 
12782           WHEN OTHERS THEN
12783              ROLLBACK TO Redef_Prod_Fisc_Class_Code_PVT;
12784              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12785              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12786              FND_MSG_PUB.Add;
12787             /*---------------------------------------------------------+
12788              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12789              | in the message stack. If there is only one message in   |
12790              | the stack it retrieves this message                     |
12791              +---------------------------------------------------------*/
12792              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12793                                        p_count  =>      x_msg_count,
12794                                        p_data   =>      x_msg_data
12795                                        );
12796              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
12797                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
12798              END IF;
12799  END redefault_prod_fisc_class_code;
12800 
12801 
12802 /* ======================================================================*
12806  PROCEDURE redefault_assessable_value(
12803  | PROCEDURE redefault_assessable_value: Redefault assessable value      |
12804  * ======================================================================*/
12805 
12807   p_api_version          IN            NUMBER,
12808   p_init_msg_list        IN            VARCHAR2,
12809   p_commit               IN            VARCHAR2,
12810   p_validation_level     IN            NUMBER,
12811   x_return_status        OUT NOCOPY    VARCHAR2,
12812   x_msg_count            OUT NOCOPY    NUMBER ,
12813   x_msg_data             OUT NOCOPY    VARCHAR2,
12814   p_application_id       IN            NUMBER,
12815   p_entity_code          IN            VARCHAR2,
12816   p_event_class_code     IN            VARCHAR2,
12817   p_internal_org_id      IN            NUMBER,
12818   p_trx_id               IN            NUMBER,
12819   p_trx_line_id          IN            NUMBER,
12820   p_trx_level_type       IN            VARCHAR2,
12821   p_item_id              IN            NUMBER,
12822   p_item_org_id          IN            NUMBER,
12823   p_line_amt             IN            NUMBER,
12824   x_assessable_value     OUT NOCOPY    NUMBER
12825   )IS
12826   l_api_name                  CONSTANT  VARCHAR2(30) := 'REDEFAULT_ASSESSABLE_VALUE';
12827   l_api_version               CONSTANT  NUMBER := 1.0;
12828   l_return_status             VARCHAR2(1);
12829   l_init_msg_list             VARCHAR2(1);
12830 
12831  BEGIN
12832    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12833      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
12834    END IF;
12835 
12836   /*--------------------------------------------------+
12837    |   Standard start of API savepoint                |
12838    +--------------------------------------------------*/
12839    SAVEPOINT Redefault_Assessable_Value_PVT;
12840 
12841    /*--------------------------------------------------+
12842     |   Standard call to check for call compatibility  |
12843     +--------------------------------------------------*/
12844     IF NOT FND_API.Compatible_API_Call(l_api_version,
12845                                        p_api_version,
12846                                        l_api_name,
12847                                        G_PKG_NAME
12848                                        ) THEN
12849        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12850      END IF;
12851 
12852     /*--------------------------------------------------------------+
12853      |   Initialize message list if p_init_msg_list is set to TRUE  |
12854      +--------------------------------------------------------------*/
12855      IF p_init_msg_list is null THEN
12856        l_init_msg_list := FND_API.G_FALSE;
12857      ELSE
12858        l_init_msg_list := p_init_msg_list;
12859      END IF;
12860 
12861      IF FND_API.to_Boolean(l_init_msg_list) THEN
12862        FND_MSG_PUB.initialize;
12863      END IF;
12864 
12865     /*-----------------------------------------+
12866      |   Initialize return status to SUCCESS   |
12867      +-----------------------------------------*/
12868      x_return_status := FND_API.G_RET_STS_SUCCESS;
12869 
12870     /*-----------------------------------------+
12871      |   Populate Global Variable              |
12872      +-----------------------------------------*/
12873      G_PUB_SRVC := l_api_name;
12874      G_DATA_TRANSFER_MODE := 'PLS';
12875      G_EXTERNAL_API_CALL  := 'N';
12876 
12877      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12878        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
12879        'application_id: ' || to_char(p_application_id)||
12880        ', entity_code: ' || p_entity_code||
12881        ', event_class_code: ' || p_event_class_code||
12882        ', org_id: ' || to_char(p_internal_org_id)||
12883        ', product_id: ' || to_char(p_item_id)||
12884        ', product_org_id: ' || to_char(p_item_org_id)||
12885        ', trx_id: ' || to_char(p_trx_id)||
12886        ', trx_line_id: ' || to_char(p_trx_line_id)||
12887        ', trx_level_type: ' || to_char(p_trx_level_type)||
12888        ', line_amount: ' || to_char(p_line_amt));
12889      END IF;
12890 
12891      ZX_DEFAULT_AUTOMATION_PKG.redefault_assessable_value(p_application_id,
12892                                                           p_entity_code,
12893                                                           p_event_class_code,
12894                                                           p_internal_org_id,
12895                                                           p_trx_id,
12896                                                           p_trx_line_id,
12897                                                           p_trx_level_type,
12898                                                           p_item_id,
12899                                                           p_item_org_id,
12900                                                           p_line_amt,
12901                                                           x_assessable_value,
12902                                                           x_return_status
12903                                                           );
12904 
12905      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
12906        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12907          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12908            ':ZX_DEFAULT_AUTOMATION_PKG.redefault_assessable_value returned errors');
12909        END IF;
12910        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
12914        END IF;
12911          RAISE FND_API.G_EXC_ERROR;
12912        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
12913          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
12915      ELSE
12916        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
12917          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
12918            'Reassessable Value :' || to_char(x_assessable_value));
12919        END IF;
12920      END IF;
12921 
12922      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
12923         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
12924      END IF;
12925 
12926      EXCEPTION
12927           WHEN FND_API.G_EXC_ERROR THEN
12928             ROLLBACK TO Redefault_Assessable_Value_PVT;
12929             x_return_status := FND_API.G_RET_STS_ERROR ;
12930            /*---------------------------------------------------------+
12931             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12932             | in the message stack. If there is only one message in   |
12933             | the stack it retrieves this message                     |
12934             +---------------------------------------------------------*/
12935             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12936                                       p_count   =>      x_msg_count,
12937                                       p_data    =>      x_msg_data
12938                                       );
12939             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12940                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12941             END IF;
12942 
12943           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
12944             ROLLBACK TO Redefault_Assessable_Value_PVT;
12945             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12946             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12947             FND_MSG_PUB.Add;
12948            /*---------------------------------------------------------+
12949             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12950             | in the message stack. If there is only one message in   |
12951             | the stack it retrieves this message                     |
12952             +---------------------------------------------------------*/
12953             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12954                                       p_count   =>      x_msg_count,
12955                                       p_data    =>      x_msg_data
12956                                       );
12957             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
12958               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
12959             END IF;
12960 
12961           WHEN OTHERS THEN
12962              ROLLBACK TO Redefault_Assessable_Value_PVT;
12963              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
12964              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
12965              FND_MSG_PUB.Add;
12966            /*---------------------------------------------------------+
12967             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
12968             | in the message stack. If there is only one message in   |
12969             | the stack it retrieves this message                     |
12970             +---------------------------------------------------------*/
12971             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
12972                                        p_count  =>      x_msg_count,
12973                                        p_data   =>      x_msg_data
12974                                       );
12975              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
12976                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
12977              END IF;
12978  END redefault_assessable_value;
12979 
12980 /* ======================================================================*
12981  | PROCEDURE redefault_product_type: Redefault product type              |
12982  * ======================================================================*/
12983 
12984  PROCEDURE redefault_product_type(
12985   p_api_version          IN            NUMBER,
12986   p_init_msg_list        IN            VARCHAR2,
12987   p_commit               IN            VARCHAR2,
12988   p_validation_level     IN            NUMBER,
12989   x_return_status        OUT NOCOPY    VARCHAR2,
12990   x_msg_count            OUT NOCOPY    NUMBER ,
12991   x_msg_data             OUT NOCOPY    VARCHAR2,
12992   p_application_id       IN            NUMBER,
12993   p_entity_code          IN            VARCHAR2,
12994   p_event_class_code     IN            VARCHAR2,
12995   p_country_code         IN            VARCHAR2,
12996   p_item_id              IN            NUMBER,
12997   p_org_id               IN            NUMBER,
12998   x_product_type         OUT NOCOPY    VARCHAR2
12999   )IS
13000   l_api_name                  CONSTANT  VARCHAR2(30) := 'REDEFAULT_ASSESSABLE_VALUE';
13001   l_api_version               CONSTANT  NUMBER := 1.0;
13002   l_return_status             VARCHAR2(1);
13003   l_init_msg_list             VARCHAR2(1);
13004 
13005  BEGIN
13006    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13007      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
13008    END IF;
13009 
13010   /*--------------------------------------------------+
13011    |   Standard start of API savepoint                |
13012    +--------------------------------------------------*/
13013    SAVEPOINT Redefault_Assessable_Value_PVT;
13014 
13015    /*--------------------------------------------------+
13016     |   Standard call to check for call compatibility  |
13017     +--------------------------------------------------*/
13018     IF NOT FND_API.Compatible_API_Call(l_api_version,
13019                                        p_api_version,
13020                                        l_api_name,
13021                                        G_PKG_NAME
13022                                        ) THEN
13023        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13024      END IF;
13025 
13026     /*--------------------------------------------------------------+
13027      |   Initialize message list if p_init_msg_list is set to TRUE  |
13028      +--------------------------------------------------------------*/
13029      IF p_init_msg_list is null THEN
13030        l_init_msg_list := FND_API.G_FALSE;
13031      ELSE
13032        l_init_msg_list := p_init_msg_list;
13033      END IF;
13034 
13035      IF FND_API.to_Boolean(l_init_msg_list) THEN
13036        FND_MSG_PUB.initialize;
13037      END IF;
13038 
13039     /*-----------------------------------------+
13040      |   Initialize return status to SUCCESS   |
13041      +-----------------------------------------*/
13042      x_return_status := FND_API.G_RET_STS_SUCCESS;
13043 
13044     /*-----------------------------------------+
13045      |   Populate Global Variable              |
13046      +-----------------------------------------*/
13047      G_PUB_SRVC := l_api_name;
13048      G_DATA_TRANSFER_MODE := 'PLS';
13049      G_EXTERNAL_API_CALL  := 'N';
13050 
13051 
13052      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13053        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
13054        'application_id: ' || to_char(p_application_id)||
13055        ', entity_code: ' || p_entity_code||
13056        ', event_class_code: ' || p_event_class_code||
13057        ', country_code: ' || p_country_code||
13058        ', org_id: ' || to_char(p_org_id)||
13059        ', product_id: ' || to_char(p_item_id));
13060      END IF;
13061 
13062      ZX_TCM_EXT_SERVICES_PUB.get_default_classif_code(p_fiscal_type_code  =>  'PRODUCT_TYPE',
13063                                                       p_country_code      =>  p_country_code,
13064                                                       p_application_id    =>  p_application_id,
13065                                                       p_entity_code       =>  p_entity_code,
13066                                                       p_event_class_code  =>  p_event_class_code,
13067                                                       p_source_event_class_code  =>  null,
13068                                                       p_item_id           =>  p_item_id,
13069                                                       p_org_id            =>  p_org_id,
13070                                                       p_default_code      =>  x_product_type ,
13071                                                       p_return_status     =>  l_return_status
13072                                                       );
13073 
13074      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13075        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13076          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13077            ':ZX_DEFAULT_AUTOMATION_PKG.redefault_assessable_value returned errors');
13078        END IF;
13079        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
13080          RAISE FND_API.G_EXC_ERROR;
13081        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
13082          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13083        END IF;
13084      ELSE
13085        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13086          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13087            'Product Type :' || x_product_type);
13088        END IF;
13089      END IF;
13090 
13091      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13092         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
13093      END IF;
13094 
13095      EXCEPTION
13096           WHEN FND_API.G_EXC_ERROR THEN
13097             ROLLBACK TO Redefault_Assessable_Value_PVT;
13098             x_return_status := FND_API.G_RET_STS_ERROR ;
13099            /*---------------------------------------------------------+
13100             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13101             | in the message stack. If there is only one message in   |
13102             | the stack it retrieves this message                     |
13103             +---------------------------------------------------------*/
13104             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13105                                       p_count   =>      x_msg_count,
13106                                       p_data    =>      x_msg_data
13107                                       );
13108             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13109                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13110             END IF;
13111 
13112           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13113             ROLLBACK TO Redefault_Assessable_Value_PVT;
13114             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13115             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13116             FND_MSG_PUB.Add;
13120             | the stack it retrieves this message                     |
13117            /*---------------------------------------------------------+
13118             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13119             | in the message stack. If there is only one message in   |
13121             +---------------------------------------------------------*/
13122             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13123                                       p_count   =>      x_msg_count,
13124                                       p_data    =>      x_msg_data
13125                                       );
13126             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13127               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13128             END IF;
13129 
13130           WHEN OTHERS THEN
13131              ROLLBACK TO Redefault_Assessable_Value_PVT;
13132              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13133              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13134              FND_MSG_PUB.Add;
13135            /*---------------------------------------------------------+
13136             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13137             | in the message stack. If there is only one message in   |
13138             | the stack it retrieves this message                     |
13139             +---------------------------------------------------------*/
13140             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13141                                        p_count  =>      x_msg_count,
13142                                        p_data   =>      x_msg_data
13143                                       );
13144              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
13145                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
13146              END IF;
13147  END redefault_product_type;
13148  /* ======================================================================*
13149  | PROCEDURE redef_tax_classification_code: ReDefault tax classification  |
13150  * ======================================================================*/
13151  PROCEDURE redef_tax_classification_code(
13152   p_api_version                  IN               NUMBER,
13153   p_init_msg_list                IN               VARCHAR2,
13154   p_commit                       IN               VARCHAR2,
13155   p_validation_level             IN               NUMBER,
13156   x_msg_count                    OUT    NOCOPY    NUMBER ,
13157   x_msg_data                     OUT    NOCOPY    VARCHAR2,
13158   x_return_status                OUT    NOCOPY    VARCHAR2,
13159   p_redef_tax_cls_code_info_rec  IN OUT NOCOPY    def_tax_cls_code_info_rec_type
13160   ) IS
13161   l_api_name                  CONSTANT  VARCHAR2(30) := 'REDEF_TAX_CLASSIFICATION_CODE';
13162   l_api_version               CONSTANT  NUMBER := 1.0;
13163   l_return_status             VARCHAR2(1);
13164   l_init_msg_list             VARCHAR2(1);
13165   l_error_buffer              VARCHAR2(1000);
13166 
13167  BEGIN
13168    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13169      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
13170    END IF;
13171 
13172   /*--------------------------------------------------+
13173    |   Standard start of API savepoint                |
13174    +--------------------------------------------------*/
13175    SAVEPOINT Redef_Tax_Class_Code_PVT;
13176 
13177    /*--------------------------------------------------+
13178     |   Standard call to check for call compatibility  |
13179     +--------------------------------------------------*/
13180     IF NOT FND_API.Compatible_API_Call(l_api_version,
13181                                        p_api_version,
13182                                        l_api_name,
13183                                        G_PKG_NAME
13184                                        ) THEN
13185        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13186      END IF;
13187 
13188     /*--------------------------------------------------------------+
13189      |   Initialize message list if p_init_msg_list is set to TRUE  |
13190      +--------------------------------------------------------------*/
13191      IF p_init_msg_list is null THEN
13192        l_init_msg_list := FND_API.G_FALSE;
13193      ELSE
13194        l_init_msg_list := p_init_msg_list;
13195      END IF;
13196 
13197      IF FND_API.to_Boolean(l_init_msg_list) THEN
13198        FND_MSG_PUB.initialize;
13199      END IF;
13200 
13201     /*-----------------------------------------+
13202      |   Initialize return status to SUCCESS   |
13203      +-----------------------------------------*/
13204      x_return_status := FND_API.G_RET_STS_SUCCESS;
13205 
13206     /*-----------------------------------------+
13207      |   Populate Global Variable              |
13208      +-----------------------------------------*/
13209      G_PUB_SRVC := l_api_name;
13210      G_DATA_TRANSFER_MODE := 'PLS';
13211      G_EXTERNAL_API_CALL  := 'N';
13212 
13213 
13214      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13215        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
13216        'application_id: ' || to_char(p_redef_tax_cls_code_info_rec.application_id)||
13217        ', entity_code: ' || p_redef_tax_cls_code_info_rec.entity_code||
13218        ', event_class_code: ' || p_redef_tax_cls_code_info_rec.event_class_code||
13219        ', org_id: ' || to_char(p_redef_tax_cls_code_info_rec.internal_organization_id)||
13220        ', product_id: ' || to_char(p_redef_tax_cls_code_info_rec.product_id)||
13224        ', trx_line_id: ' || to_char(p_redef_tax_cls_code_info_rec.trx_line_id)||
13221        ', product_org_id: ' || to_char(p_redef_tax_cls_code_info_rec.product_org_id)||
13222        ', trx_date: ' || to_char(p_redef_tax_cls_code_info_rec.trx_date)||
13223        ', trx_id: ' || to_char(p_redef_tax_cls_code_info_rec.trx_id)||
13225        ', trx_level_type: ' || p_redef_tax_cls_code_info_rec.trx_level_type||
13226        ', trx_date: ' || to_char(p_redef_tax_cls_code_info_rec.trx_date)||
13227        ', ledger_id: ' || to_char(p_redef_tax_cls_code_info_rec.ledger_id)||
13228        ', ship_third_pty_acct_id: ' || to_char(p_redef_tax_cls_code_info_rec.ship_third_pty_acct_id)||
13229        ', ship_third_pty_acct_site_id: ' || to_char(p_redef_tax_cls_code_info_rec.ship_third_pty_acct_site_id)||
13230        ', bill_third_pty_acct_id: ' || to_char(p_redef_tax_cls_code_info_rec.bill_third_pty_acct_id)||
13231        ', bill_third_pty_acct_site_id: ' || to_char(p_redef_tax_cls_code_info_rec.bill_third_pty_acct_site_id)||
13232        ', ship_to_cust_acct_site_use_id: ' || to_char(p_redef_tax_cls_code_info_rec.ship_to_cust_acct_site_use_id)||
13233        ', bill_to_cust_acct_site_use_id: ' || to_char(p_redef_tax_cls_code_info_rec.bill_to_cust_acct_site_use_id)||
13234        ', ship_to_location_id: ' || to_char(p_redef_tax_cls_code_info_rec.ship_to_location_id)||
13235        ', account_ccid: ' || to_char(p_redef_tax_cls_code_info_rec.account_ccid)||
13236        ', account_string: ' || p_redef_tax_cls_code_info_rec.account_string||
13237        ', ref_doc_application_id: ' || to_char(p_redef_tax_cls_code_info_rec.application_id)||
13238        ', ref_doc_entity_code: ' || p_redef_tax_cls_code_info_rec.ref_doc_entity_code||
13239        ', ref_doc_event_class_code: ' || p_redef_tax_cls_code_info_rec.ref_doc_event_class_code||
13240        ', ref_doc_trx_id: ' || to_char(p_redef_tax_cls_code_info_rec.ref_doc_trx_id)||
13241        ', ref_doc_line_id: ' || to_char(p_redef_tax_cls_code_info_rec.ref_doc_line_id)||
13242        ', ref_doc_trx_level_type: ' || p_redef_tax_cls_code_info_rec.ref_doc_trx_level_type||
13243        ', tax_user_override_flag: ' || p_redef_tax_cls_code_info_rec.tax_user_override_flag||
13244        ', overridden_tax_cls_code : ' || p_redef_tax_cls_code_info_rec.overridden_tax_cls_code ||
13245        ', defaulting_attribute10: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute10||
13246        ', defaulting_attribute1: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute1||
13247        ', defaulting_attribute2: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute2||
13248        ', defaulting_attribute3: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute3||
13249        ', defaulting_attribute4: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute4||
13250        ', defaulting_attribute5: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute5||
13251        ', defaulting_attribute6: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute6||
13252        ', defaulting_attribute7: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute7||
13253        ', defaulting_attribute8: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute8||
13254        ', defaulting_attribute9: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute9||
13255        ', defaulting_attribute10: ' || p_redef_tax_cls_code_info_rec.defaulting_attribute10);
13256      END IF;
13257 
13258 
13259     /*-------------------------------------------------+
13260      |   Call TDM API to default the tax classification|
13261      +-------------------------------------------------*/
13262      ZX_TAX_DEFAULT_PKG.get_default_tax_classification (p_definfo            =>  p_redef_tax_cls_code_info_rec,
13263                                                         p_return_status      =>  l_return_status,
13264                                                         p_error_buffer       =>  l_error_buffer
13265                                                         );
13266      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13267        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13268          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13269            ':ZX_TAX_DEFAULT_PKG.get_default_tax_classification returned errors');
13270        END IF;
13271        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
13272          RAISE FND_API.G_EXC_ERROR;
13273        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
13274          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13275        END IF;
13276      ELSE
13277        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13278          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13279          'Tax Classification: ' || p_redef_tax_cls_code_info_rec.x_tax_classification_code
13280          );
13281        END IF;
13282      END IF;
13283 
13284      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13285         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
13286      END IF;
13287 
13288      EXCEPTION
13289           WHEN FND_API.G_EXC_ERROR THEN
13290             ROLLBACK TO Redef_Tax_Class_Code_PVT;
13291             x_return_status := FND_API.G_RET_STS_ERROR ;
13292            /*---------------------------------------------------------+
13293             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13294             | in the message stack. If there is only one message in   |
13295             | the stack it retrieves this message                     |
13296             +---------------------------------------------------------*/
13297             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13298                                       p_count   =>      x_msg_count,
13299                                       p_data    =>      x_msg_data
13303             END IF;
13300                                       );
13301             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13302                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13304 
13305           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13306             ROLLBACK TO Redef_Tax_Class_Code_PVT;
13307             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13308             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13309             FND_MSG_PUB.Add;
13310            /*---------------------------------------------------------+
13311             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13312             | in the message stack. If there is only one message in   |
13313             | the stack it retrieves this message                     |
13314             +---------------------------------------------------------*/
13315             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13316                                       p_count   =>      x_msg_count,
13317                                       p_data    =>      x_msg_data
13318                                       );
13319             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13320               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13321             END IF;
13322 
13323           WHEN OTHERS THEN
13324              ROLLBACK TO Redef_Tax_Class_Code_PVT;
13325              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13326              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13327              FND_MSG_PUB.Add;
13328             /*---------------------------------------------------------+
13329              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13330              | in the message stack. If there is only one message in   |
13331              | the stack it retrieves this message                     |
13332              +---------------------------------------------------------*/
13333              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13334                                        p_count  =>      x_msg_count,
13335                                        p_data   =>      x_msg_data
13336                                        );
13337              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
13338                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
13339              END IF;
13340  END redef_tax_classification_code;
13341 
13342 /* =========================================================================*
13343  | PROCEDURE purge_tax_repository: Purges the transaction lines and tax data|
13344  | GTT : ZX_PURGE_TRANSACTIONS_GT                                           |
13345  * ========================================================================*/
13346  PROCEDURE purge_tax_repository(
13347   p_api_version                  IN               NUMBER,
13348   p_init_msg_list                IN               VARCHAR2,
13349   p_commit                       IN               VARCHAR2,
13350   p_validation_level             IN               NUMBER,
13351   x_msg_count                    OUT    NOCOPY    NUMBER ,
13352   x_msg_data                     OUT    NOCOPY    VARCHAR2,
13353   x_return_status                OUT    NOCOPY    VARCHAR2
13354   )IS
13355   l_api_name                  CONSTANT  VARCHAR2(30) := 'PURGE_TAX_REPOSITORY';
13356   l_api_version               CONSTANT  NUMBER := 1.0;
13357   l_init_msg_list             VARCHAR2(1);
13358   l_summarization_flag        VARCHAR2(1);
13359   l_tax_recovery_flag         VARCHAR2(1);
13360   l_tax_reporting_flag        VARCHAR2(1);
13361   l_row_count                 NUMBER;
13362   l_context_info_rec          context_info_rec_type;
13363   l_application_id            NUMBER;
13364   l_entity_code               VARCHAR2(30);
13365   l_event_class_code          VARCHAR2(30);
13366 
13367  BEGIN
13368    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13369      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
13370    END IF;
13371 
13372   /*--------------------------------------------------+
13373    |   Standard start of API savepoint                |
13374    +--------------------------------------------------*/
13375    SAVEPOINT Purge_Tax_Repository_PVT;
13376 
13377    /*--------------------------------------------------+
13378     |   Standard call to check for call compatibility  |
13379     +--------------------------------------------------*/
13380     IF NOT FND_API.Compatible_API_Call(l_api_version,
13381                                        p_api_version,
13382                                        l_api_name,
13383                                        G_PKG_NAME
13384                                        ) THEN
13385        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13386      END IF;
13387 
13388     /*--------------------------------------------------------------+
13389      |   Initialize message list if p_init_msg_list is set to TRUE  |
13390      +--------------------------------------------------------------*/
13391      IF p_init_msg_list is null THEN
13392        l_init_msg_list := FND_API.G_FALSE;
13393      ELSE
13394        l_init_msg_list := p_init_msg_list;
13395      END IF;
13396 
13397      IF FND_API.to_Boolean(l_init_msg_list) THEN
13398        FND_MSG_PUB.initialize;
13399      END IF;
13400 
13401     /*-----------------------------------------+
13402      |   Initialize return status to SUCCESS   |
13403      +-----------------------------------------*/
13404      x_return_status := FND_API.G_RET_STS_SUCCESS;
13405 
13406     /*-----------------------------------------+
13407      |   Populate Global Variable              |
13411      G_EXTERNAL_API_CALL  := 'N';
13408      +------ -----------------------------------*/
13409      G_PUB_SRVC := l_api_name;
13410      G_DATA_TRANSFER_MODE := 'TAB';
13412 
13413     SELECT application_id,
13414            entity_code,
13415            event_class_code
13416       INTO l_application_id,
13417            l_entity_code,
13418            l_event_class_code
13419       FROM ZX_PURGE_TRANSACTIONS_GT
13420      WHERE rownum=1;
13421 
13422     IF l_event_class_code = 'SALES_TRANSACTION_TAX_QUOTE' THEN
13423         SELECT summarization_flag,
13424                tax_reporting_flag,
13425                tax_recovery_flag
13426           INTO l_summarization_flag,
13427                l_tax_reporting_flag,
13428                l_tax_recovery_flag
13429           FROM ZX_EVNT_CLS_MAPPINGS
13430          WHERE APPLICATION_ID    = 222
13431            AND ENTITY_CODE       = 'TRANSACTIONS'
13432            AND EVENT_CLASS_CODE  = 'INVOICE';
13433      ELSIF l_event_class_code = 'PURCHASE_TRANSACTION_TAX_QUOTE' THEN
13434        SELECT summarization_flag,
13435               tax_reporting_flag,
13436               tax_recovery_flag
13437          INTO l_summarization_flag,
13438               l_tax_reporting_flag,
13439               l_tax_recovery_flag
13440          FROM ZX_EVNT_CLS_MAPPINGS
13441         WHERE APPLICATION_ID    = 200
13442           AND ENTITY_CODE       = 'AP_INVOICES'
13443           AND EVENT_CLASS_CODE  = 'STANDARD INVOICE';
13444      ELSE
13445        SELECT summarization_flag,
13446               tax_reporting_flag,
13447               tax_recovery_flag
13448          INTO l_summarization_flag,
13449               l_tax_reporting_flag,
13450               l_tax_recovery_flag
13451          FROM ZX_EVNT_CLS_MAPPINGS
13452         WHERE APPLICATION_ID    = l_application_id
13453           AND ENTITY_CODE       = l_entity_code
13454           AND EVENT_CLASS_CODE  = l_event_class_code;
13455      END IF;
13456 
13457      --PO does not report taxes so go ahead and delete the tax repository
13458      IF l_tax_reporting_flag = 'N' THEN
13459         DELETE
13460         FROM ZX_LINES tax
13461        WHERE (APPLICATION_ID, ENTITY_CODE,EVENT_CLASS_CODE, TRX_ID)
13462           IN (SELECT  /*+ INDEX (ZX_PURGE_TRANSACTIONS_GT ZX_PURGE_TRANSACTIONS_GT_U1)*/
13463                    APPLICATION_ID,
13464                    ENTITY_CODE,
13465                    EVENT_CLASS_CODE,
13466                    TRX_ID
13467               FROM ZX_PURGE_TRANSACTIONS_GT purge);
13468 
13469        IF SQL%FOUND THEN
13470          l_row_count := SQL%ROWCOUNT;
13471          IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
13472            FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name ,
13473                           'Number of rows deleted from ZX_LINES = '|| to_char(l_row_count));
13474          END IF;
13475        END IF;
13476 
13477        IF l_summarization_flag = 'Y' THEN
13478           DELETE
13479           FROM ZX_LINES_SUMMARY summ
13480          WHERE (APPLICATION_ID, ENTITY_CODE,EVENT_CLASS_CODE,TRX_ID)
13481             IN (SELECT  /*+ INDEX (ZX_PURGE_TRANSACTIONS_GT ZX_PURGE_TRANSACTIONS_GT_U1)*/
13482                      APPLICATION_ID,
13483                      ENTITY_CODE,
13484                      EVENT_CLASS_CODE,
13485                      TRX_ID
13486                 FROM ZX_PURGE_TRANSACTIONS_GT purge);
13487 
13488          IF SQL%FOUND THEN
13489            l_row_count := SQL%ROWCOUNT;
13490            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
13491              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name ,
13492                             'Number of rows deleted from ZX_LINES_SUMMARY = '||to_char(l_row_count));
13493            END IF;
13494          END IF;
13495        END IF; --summarization_flag is Y
13496 
13497        IF l_tax_recovery_flag ='Y' THEN
13498          DELETE
13499           FROM ZX_REC_NREC_DIST dist
13500          WHERE (APPLICATION_ID, ENTITY_CODE,EVENT_CLASS_CODE,TRX_ID)
13501             IN (SELECT  /*+ INDEX (ZX_PURGE_TRANSACTIONS_GT ZX_PURGE_TRANSACTIONS_GT_U1)*/
13502                      APPLICATION_ID,
13503                      ENTITY_CODE,
13504                      EVENT_CLASS_CODE,
13505                      TRX_ID
13506                 FROM ZX_PURGE_TRANSACTIONS_GT purge);
13507 
13508 
13509          IF SQL%FOUND THEN
13510            l_row_count := SQL%ROWCOUNT;
13511            IF (G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL ) THEN
13512              FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name ,
13513                             'Number of rows deleted from ZX_REC_NREC_DIST = '||to_char(l_row_count));
13514            END IF;
13515          END IF;
13516        END IF; --tax recovery is Y
13517 
13518        DELETE
13519         FROM ZX_LINES_DET_FACTORS lines
13520        WHERE (APPLICATION_ID, ENTITY_CODE,EVENT_CLASS_CODE, TRX_ID)
13521           IN (SELECT  /*+ INDEX (ZX_PURGE_TRANSACTIONS_GT ZX_PURGE_TRANSACTIONS_GT_U1)*/
13522                    APPLICATION_ID,
13523                    ENTITY_CODE,
13524                    EVENT_CLASS_CODE,
13525                    TRX_ID
13526               FROM ZX_PURGE_TRANSACTIONS_GT purge);
13527 
13528        IF SQL%FOUND THEN
13529          l_row_count := SQL%ROWCOUNT;
13530          IF (G_LEVEL_PROCEDURE >= g_current_runtime_level ) THEN
13531            FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name ,
13532                           'Number of rows deleted from ZX_LINES_DET_FACTORS = '||to_char(l_row_count));
13533          END IF;
13537 
13534        END IF;
13535      --ELSIF tax_reporting_flag = 'Y' --AR/AP cases wherein we need to purge only if tax lines are frozen --TBD on requirement basis
13536      END IF; --tax reporting flag is N
13538 
13539      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13540         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
13541      END IF;
13542 
13543      EXCEPTION
13544           WHEN FND_API.G_EXC_ERROR THEN
13545             ROLLBACK TO Purge_Tax_Repository_PVT;
13546             x_return_status := FND_API.G_RET_STS_ERROR ;
13547             --Call API to dump into zx_errors_gt
13548             DUMP_MSG;
13549             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13550                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13551             END IF;
13552 
13553           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13554             ROLLBACK TO Purge_Tax_Repository_PVT;
13555             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13556             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13557             FND_MSG_PUB.Add;
13558            /*---------------------------------------------------------+
13559             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13560             | in the message stack. If there is only one message in   |
13561             | the stack it retrieves this message                     |
13562             +---------------------------------------------------------*/
13563             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13564                                       p_count   =>      x_msg_count,
13565                                       p_data    =>      x_msg_data
13566                                       );
13567             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13568               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13569             END IF;
13570 
13571           WHEN OTHERS THEN
13572              ROLLBACK TO Purge_Tax_Repository_PVT;
13573              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13574              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13575              FND_MSG_PUB.Add;
13576             /*---------------------------------------------------------+
13577              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13578              | in the message stack. If there is only one message in   |
13579              | the stack it retrieves this message                     |
13580              +---------------------------------------------------------*/
13581              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13582                                       p_count   =>      x_msg_count,
13583                                       p_data    =>      x_msg_data
13584                                       );
13585              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
13586                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
13587              END IF;
13588 
13589  END purge_tax_repository;
13590 
13591 /* ======================================================================*
13592  | API TO GET  LE FOR AP IMPORT TRANSACTIONS                             |
13593  * ======================================================================*/
13594 FUNCTION get_le_from_tax_registration(
13595    p_api_version       IN         NUMBER,
13596    p_init_msg_list     IN         VARCHAR2,
13597    p_commit            IN         VARCHAR2,
13598    p_validation_level  IN         NUMBER,
13599    x_return_status     OUT NOCOPY VARCHAR2,
13600    x_msg_count         OUT NOCOPY NUMBER,
13601    x_msg_data          OUT NOCOPY VARCHAR2,
13602    p_registration_num  IN         ZX_REGISTRATIONS.Registration_Number%type,
13603    p_effective_date    IN         ZX_REGISTRATIONS.effective_from%type,
13604    p_country           IN         ZX_PARTY_TAX_PROFILE.Country_code%type
13605   ) RETURN Number IS
13606   l_api_name           CONSTANT VARCHAR2(30) := 'GET_LE_FROM_TAX_REGISTRATION';
13607   l_api_version        CONSTANT  NUMBER := 1.0;
13608   l_init_msg_list      VARCHAR2(1);
13609   l_legal_entity_id    NUMBER;
13610   l_return_status      VARCHAR2(1);
13611 
13612  BEGIN
13613    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13614      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
13615    END IF;
13616 
13617   /*--------------------------------------------------+
13618    |   Standard start of API savepoint                |
13619    +--------------------------------------------------*/
13620    SAVEPOINT GET_LE_FROM_TAX_REGISTRATN_PVT;
13621 
13622    /*--------------------------------------------------+
13623     |   Standard call to check for call compatibility  |
13624     +--------------------------------------------------*/
13625     IF NOT FND_API.Compatible_API_Call(l_api_version,
13626                                        p_api_version,
13627                                        l_api_name,
13628                                        G_PKG_NAME
13629                                        ) THEN
13630        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13631      END IF;
13632 
13633     /*--------------------------------------------------------------+
13634      |   Initialize message list if p_init_msg_list is set to TRUE  |
13635      +--------------------------------------------------------------*/
13636      IF p_init_msg_list is null THEN
13637        l_init_msg_list := FND_API.G_FALSE;
13638      ELSE
13639        l_init_msg_list := p_init_msg_list;
13640      END IF;
13641 
13642      IF FND_API.to_Boolean(l_init_msg_list) THEN
13646     /*-----------------------------------------+
13643        FND_MSG_PUB.initialize;
13644      END IF;
13645 
13647      |   Initialize return status to SUCCESS   |
13648      +-----------------------------------------*/
13649      x_return_status := FND_API.G_RET_STS_SUCCESS;
13650 
13651     /*-----------------------------------------+
13652      |   Populate Global Variable              |
13653      +-----------------------------------------*/
13654      G_PUB_SRVC := l_api_name;
13655      G_DATA_TRANSFER_MODE := 'PLS';
13656      G_EXTERNAL_API_CALL  := 'N';
13657 
13658 
13659      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13660        FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,
13661          'Registration Number: ' || to_char(p_registration_num)||
13662          ', Country Code: ' || p_country ||
13663          ', Effective_date: ' || to_char(p_effective_date));
13664      END IF;
13665 
13666 
13667     /*-------------------------------------------------+
13668      |   Call TDM API to default the tax classification|
13669      +-------------------------------------------------*/
13670 
13671     l_legal_entity_id :=  ZX_TCM_EXT_SERVICES_PUB.get_le_from_tax_registration (x_return_status,
13672                                                                                 p_registration_num,
13673                                                                                 p_effective_date,
13674                                                                                 p_country
13675                                                                                );
13676      IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13677        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13678          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13679            ':ZX_TCM_EXT_SERVICES.get_le_from_tax_registration returned errors');
13680        END IF;
13681        IF l_return_status = FND_API.G_RET_STS_ERROR THEN
13682          RAISE FND_API.G_EXC_ERROR;
13683        ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
13684          RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13685        END IF;
13686      ELSE
13687        IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13688          FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13689          'Legal Entity : ' || to_char(l_legal_entity_id)
13690          );
13691        END IF;
13692        RETURN l_legal_entity_id;
13693      END IF;
13694 
13695      IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13696         FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
13697      END IF;
13698      EXCEPTION
13699           WHEN FND_API.G_EXC_ERROR THEN
13700             ROLLBACK TO GET_LE_FROM_TAX_REGISTRATN_PVT;
13701             x_return_status := FND_API.G_RET_STS_ERROR ;
13702            /*---------------------------------------------------------+
13703             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13704             | in the message stack. If there is only one message in   |
13705             | the stack it retrieves this message                     |
13706             +---------------------------------------------------------*/
13707             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13708                                       p_count   =>      x_msg_count,
13709                                       p_data    =>      x_msg_data
13710                                       );
13711             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13712                FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13713             END IF;
13714 
13715           WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13716             ROLLBACK TO GET_LE_FROM_TAX_REGISTRATN_PVT;
13717             x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13718             FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13719             FND_MSG_PUB.Add;
13720            /*---------------------------------------------------------+
13721             | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13722             | in the message stack. If there is only one message in   |
13723             | the stack it retrieves this message                     |
13724             +---------------------------------------------------------*/
13725             FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13726                                       p_count   =>      x_msg_count,
13727                                       p_data    =>      x_msg_data
13728                                       );
13729             IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13730               FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13731             END IF;
13732 
13733           WHEN OTHERS THEN
13734              ROLLBACK TO GET_LE_FROM_TAX_REGISTRATN_PVT;
13735              x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13736              FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13737              FND_MSG_PUB.Add;
13738             /*---------------------------------------------------------+
13739              | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13740              | in the message stack. If there is only one message in   |
13741              | the stack it retrieves this message                     |
13742              +---------------------------------------------------------*/
13743              FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13744                                        p_count  =>      x_msg_count,
13745                                        p_data   =>      x_msg_data
13749              END IF;
13746                                        );
13747              IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
13748                FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
13750 END get_le_from_tax_registration;
13751 
13752  /* ============================================================================*
13753  | PROCEDURE  update_posting_flag : This procedure will update the posting_flag|
13754  | for the tax distribution ids that are passed in from product.               |
13755  * ============================================================================*/
13756  PROCEDURE update_posting_flag(
13757   p_api_version        IN  NUMBER,
13758   p_init_msg_list      IN  VARCHAR2,
13759   p_commit             IN  VARCHAR2,
13760   p_validation_level   IN  NUMBER,
13761   x_return_status      OUT NOCOPY     VARCHAR2,
13762   x_msg_count          OUT NOCOPY     NUMBER,
13763   x_msg_data           OUT NOCOPY     VARCHAR2,
13764   p_tax_dist_id_tbl    IN  tax_dist_id_tbl_type
13765   )IS
13766   l_api_name                  CONSTANT  VARCHAR2(30) := 'UPDATE_POSTING_FLAG';
13767   l_api_version               CONSTANT  NUMBER := 1.0;
13768   l_return_status             VARCHAR2(1);
13769   l_init_msg_list             VARCHAR2(1);
13770 
13771  BEGIN
13772    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13773      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.BEGIN','ZX_API_PUB: '||l_api_name||'()+');
13774    END IF;
13775 
13776   /*--------------------------------------------------+
13777    |   Standard start of API savepoint                |
13778    +--------------------------------------------------*/
13779    SAVEPOINT update_posting_flag_PVT;
13780 
13781    /*--------------------------------------------------+
13782     |   Standard call to check for call compatibility  |
13783     +--------------------------------------------------*/
13784     IF NOT FND_API.Compatible_API_Call(l_api_version,
13785                                        p_api_version,
13786                                        l_api_name,
13787                                        G_PKG_NAME
13788                                        ) THEN
13789        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13790      END IF;
13791 
13792     /*--------------------------------------------------------------+
13793      |   Initialize message list if p_init_msg_list is set to TRUE  |
13794      +--------------------------------------------------------------*/
13795      IF p_init_msg_list is null THEN
13796        l_init_msg_list := FND_API.G_FALSE;
13797      ELSE
13798        l_init_msg_list := p_init_msg_list;
13799      END IF;
13800 
13801      IF FND_API.to_Boolean(l_init_msg_list) THEN
13802        FND_MSG_PUB.initialize;
13803      END IF;
13804 
13805   /*-----------------------------------------+
13806    |   Initialize return status to SUCCESS   |
13807    +-----------------------------------------*/
13808    x_return_status := FND_API.G_RET_STS_SUCCESS;
13809 
13810   /*-----------------------------------------+
13811    |   Populate Global Variable              |
13812    +-----------------------------------------*/
13813    G_PUB_SRVC := l_api_name;
13814    G_DATA_TRANSFER_MODE := 'PLS';
13815    G_EXTERNAL_API_CALL  := 'N';
13816 
13817    IF ( G_LEVEL_EVENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13818       FND_LOG.STRING(G_LEVEL_EVENT,G_MODULE_NAME||l_api_name,
13819       'Call TRD service to update posting flag'
13820        );
13821    END IF;
13822 
13823    ZX_TRD_SERVICES_PUB_PKG.update_posting_flag(p_tax_dist_id_tbl => p_tax_dist_id_tbl,
13824                                                       x_return_status    => l_return_status
13825                                                      );
13826 
13827    IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
13828      IF ( G_LEVEL_STATEMENT >= G_CURRENT_RUNTIME_LEVEL) THEN
13829         FND_LOG.STRING(G_LEVEL_STATEMENT,G_MODULE_NAME||l_api_name,G_PKG_NAME||': '||l_api_name||
13830           ':ZX_TRD_SERVICES_PUB_PKG.update_posting_flag returned errors');
13831      END IF;
13832      IF l_return_status = FND_API.G_RET_STS_ERROR THEN
13833         RAISE FND_API.G_EXC_ERROR;
13834      ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
13835         RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
13836      END IF;
13837    END IF;
13838 
13839    IF ( G_LEVEL_PROCEDURE >= G_CURRENT_RUNTIME_LEVEL) THEN
13840      FND_LOG.STRING(G_LEVEL_PROCEDURE,G_MODULE_NAME||l_api_name||'.END','ZX_API_PUB: '||l_api_name||'()-');
13841    END IF;
13842 
13843    EXCEPTION
13844       WHEN FND_API.G_EXC_ERROR THEN
13845         ROLLBACK TO update_posting_flag_PVT;
13846         x_return_status := FND_API.G_RET_STS_ERROR ;
13847        /*---------------------------------------------------------+
13848         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13849         | in the message stack. If there is only one message in   |
13850         | the stack it retrieves this message                     |
13851         +---------------------------------------------------------*/
13852         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13853                                   p_count   => x_msg_count,
13854                                   p_data    => x_msg_data
13855                                   );
13856 
13857         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13858           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13859         END IF;
13860 
13864         FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13861       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
13862         ROLLBACK TO update_posting_flag_PVT;
13863         x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13865         FND_MSG_PUB.Add;
13866        /*---------------------------------------------------------+
13867         | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13868         | in the message stack. If there is only one message in   |
13869         | the stack it retrieves this message                     |
13870         +---------------------------------------------------------*/
13871         FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13872                                   p_count   => x_msg_count,
13873                                   p_data    => x_msg_data
13874                                   );
13875 
13876         IF ( G_LEVEL_ERROR >= G_CURRENT_RUNTIME_LEVEL) THEN
13877           FND_LOG.STRING(G_LEVEL_ERROR,G_MODULE_NAME||l_api_name,'');
13878         END IF;
13879 
13880       WHEN OTHERS THEN
13881          ROLLBACK TO update_posting_flag_PVT;
13882          x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
13883          FND_MESSAGE.SET_NAME ('ZX','ZX_UNEXPECTED_ERROR');
13884          FND_MSG_PUB.Add;
13885         /*---------------------------------------------------------+
13886          | FND_MSG_PUB.Count_And_Get used to get the count of mesg.|
13887          | in the message stack. If there is only one message in   |
13888          | the stack it retrieves this message                     |
13889          +---------------------------------------------------------*/
13890          FND_MSG_PUB.Count_And_Get(p_encoded => FND_API.G_FALSE,
13891                                    p_count   => x_msg_count,
13892                                    p_data    => x_msg_data
13893                                    );
13894          IF ( G_LEVEL_UNEXPECTED >= G_CURRENT_RUNTIME_LEVEL) THEN
13895            FND_LOG.STRING(G_LEVEL_UNEXPECTED,G_MODULE_NAME||l_api_name,SQLERRM);
13896          END IF;
13897 
13898  END update_posting_flag;
13899 
13900 END ZX_API_PUB;