DBA Data[Home] [Help]

PACKAGE BODY: APPS.ZX_TRL_PUB_PKG

Source


1 PACKAGE BODY ZX_TRL_PUB_PKG AS
2 /* $Header: zxrwlnrepsrvpubb.pls 120.44.12020000.5 2013/02/19 15:43:22 ssohal ship $ */
3 
4   g_current_runtime_level           NUMBER;
5   g_level_statement       CONSTANT  NUMBER  := FND_LOG.LEVEL_STATEMENT;
6   g_level_procedure       CONSTANT  NUMBER  := FND_LOG.LEVEL_PROCEDURE;
7   g_level_event           CONSTANT  NUMBER  := FND_LOG.LEVEL_EVENT;
8   g_level_unexpected      CONSTANT  NUMBER  := FND_LOG.LEVEL_UNEXPECTED;
9   g_level_error           CONSTANT  NUMBER  := FND_LOG.LEVEL_ERROR;
10 
11   -- Added procedure to run the Frozen tax dist deleted validation --
12   PROCEDURE Check_Frozen_Tax_Dists
13        (x_return_status     OUT NOCOPY VARCHAR2,
14         p_event_class_rec   IN  ZX_API_PUB.EVENT_CLASS_REC_TYPE);
15 
16 /* ===========================================================================*
17  | PROCEDURE Manage_TaxLines: It will Create, update, delete and cancel tax   |
18  |                            lines and summary  tax lines in the tax         |
19  |                            repository                                      |
20  * ===========================================================================*/
21 
22   PROCEDURE Manage_TaxLines
23        (x_return_status      OUT NOCOPY VARCHAR2,
24         p_event_class_rec IN            ZX_API_PUB.EVENT_CLASS_REC_TYPE) IS
25 
26     l_error_buffer                 VARCHAR2(100);
27     l_msg_context_info_rec         ZX_API_PUB.CONTEXT_INFO_REC_TYPE;
28 
29   BEGIN
30     g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
31 
32     IF (g_level_procedure >= g_current_runtime_level ) THEN
33       FND_LOG.STRING(g_level_procedure,
34                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.BEGIN',
35                      'ZX_TRL_PUB_PKG: Manage_TaxLines (+)');
36     END IF;
37 
38     --  Initialize API return status to success
39     x_return_status := FND_API.G_RET_STS_SUCCESS;
40 
41     --
42     -- bug#4893261- populate message structure
43     --
44     l_msg_context_info_rec.application_id :=
45               p_event_class_rec.application_id;
46     l_msg_context_info_rec.entity_code :=
47               p_event_class_rec.entity_code;
48     l_msg_context_info_rec.event_class_code :=
49               p_event_class_rec.event_class_code;
50     l_msg_context_info_rec.trx_id :=
51               p_event_class_rec.trx_id;
52     l_msg_context_info_rec.trx_line_id := NULL;
53     l_msg_context_info_rec.trx_level_type := NULL;
54     l_msg_context_info_rec.summary_tax_line_number := NULL;
55     l_msg_context_info_rec.tax_line_id := NULL;
56     l_msg_context_info_rec.trx_line_dist_id := NULL;
57 
58 
59     -- p_event_class_rec.TAX_EVENT_TYPE_CODE can be null if there is a transaction with only
60     -- header and no lines (e.g. where all tax lines for the document need to be deleted) or
61     -- when a transaction in the batch has errors and so the transaction was not selected in
62     -- c_lines loop of service types pkg. Hence we should not raise error if the
63     -- p_event_class_rec.TAX_EVENT_TYPE_CODE IS NULL.
64     /*
65     IF p_event_class_rec.TAX_EVENT_TYPE_CODE IS NULL THEN
66       x_return_status := FND_API.G_RET_STS_ERROR;
67       FND_MESSAGE.SET_NAME('ZX','ZX_TRL_NULL_VALUES');
68       ZX_API_PUB.add_msg(l_msg_context_info_rec);
69       RETURN;
70     END IF;
71     */
72 
73     -- bug fix 5417887:
74     -- g_update_event_process_flag being Y means it is either a single update
75     -- document or a update batch process.
76     --
77     -- during the summary tax line creation, still make use of the
78     -- following flags in the p_event_class_rec:
79     -- summarization_flag,  retain_summ_tax_line_id_flag
80     -- the ASSUMPTION here is:
81     -- NO CROSS EVENT_CLASS_CODE DOCUMENTS EXISTS IN THE BATCH!!!
82     -- When situation changes in the future, need to revisit the code and make
83     -- necessary changes.
84 
85     IF ZX_GLOBAL_STRUCTURES_PKG.g_update_event_process_flag = 'Y' THEN
86 
87         /*
88          * no longer needed for UPDATE case
89          *
90          * ZX_TRL_MANAGE_TAX_PKG.Update_Synchronize_Taxlines
91          *                   (x_return_status => x_return_status);
92          *
93          */
94 
95       ZX_TRL_MANAGE_TAX_PKG.Delete_Detail_Lines
96                             (x_return_status   => x_return_status ,
97                              p_event_class_rec => p_event_class_rec);
98 
99       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
100         IF (g_level_error >= g_current_runtime_level ) THEN
101           FND_LOG.STRING(g_level_error,
102                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
103                  'Incorrect return_status after calling ' ||
104                  'ZX_TRL_MANAGE_TAX_PKG.Delete_Detail_Lines()');
105           FND_LOG.STRING(g_level_error,
106                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
107                  'RETURN_STATUS = ' || x_return_status);
108           FND_LOG.STRING(g_level_error,
109                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
110                  'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
111         END IF;
112         RETURN;
113       END IF;
114 
115       -- for summarization_flag <>'Y', only recreate the detail tax lines
116       IF p_event_class_rec.summarization_flag <> 'Y' THEN
117 
118         ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines (
119             p_event_class_rec => p_event_class_rec,
120             x_return_status => x_return_status);
121 
122         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
123           IF (g_level_error >= g_current_runtime_level ) THEN
124             FND_LOG.STRING(g_level_error,
125                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
126                    'Incorrect return_status after calling ' ||
127                    'ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines()');
128             FND_LOG.STRING(g_level_error,
129                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
130                    'RETURN_STATUS = ' || x_return_status);
131             FND_LOG.STRING(g_level_error,
132                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
133                    'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
134           END IF;
135           RETURN;
136         END IF;
137 
138       ELSE --p_event_class_rec.summarization_flag = 'Y'
139 
140         -- Preserve old summary_tax_line_id in g_detail_tax_lines_gt (for UPDATE
141         -- case) if the same summarization criteria exist in zx_lines_summary
142         --
143         IF p_event_class_rec.retain_summ_tax_line_id_flag = 'Y' THEN
144 
145           ZX_TRL_MANAGE_TAX_PKG.update_exist_summary_line_id (
146                             p_event_class_rec => p_event_class_rec,
147                             x_return_status   => x_return_status);
148 
149           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
150             IF (g_level_error >= g_current_runtime_level ) THEN
151               FND_LOG.STRING(g_level_error,
152                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
153                      'Incorrect return_status after calling ' ||
154                      'ZX_TRL_MANAGE_TAX_PKG.update_exist_summary_line_id()');
155               FND_LOG.STRING(g_level_error,
156                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
157                      'RETURN_STATUS = ' || x_return_status);
158               FND_LOG.STRING(g_level_error,
159                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
160                      'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
161             END IF;
162             RETURN;
163           END IF;
164         END IF;
165 
166         ZX_TRL_MANAGE_TAX_PKG.Delete_Summary_Lines
167                           (x_return_status   => x_return_status,
168                            p_event_class_rec => p_event_class_rec);
169 
170         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
171           IF (g_level_error >= g_current_runtime_level ) THEN
172             FND_LOG.STRING(g_level_error,
173                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
174                    'Incorrect return_status after calling ' ||
175                    'ZX_TRL_MANAGE_TAX_PKG.Delete_Summary_Lines()');
176             FND_LOG.STRING(g_level_error,
177                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
178                    'RETURN_STATUS = ' || x_return_status);
179             FND_LOG.STRING(g_level_error,
180                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
181                    'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
182           END IF;
183           RETURN;
184         END IF;
185 
186         -- recreate the summary tax lines and detail tax lines
187 
188         IF p_event_class_rec.retain_summ_tax_line_id_flag = 'N' THEN
189 
190         -- for update tax event, AP will pass in all the trx lines,
191         -- that is, all the tax lines will be in the zx_detail_tax_lines_gt.
192         -- so if not retain summary_tax_line_id, it is treated same as
193         -- created case.
194 
195           ZX_TRL_MANAGE_TAX_PKG.create_summary_lines_crt_evnt (
196               p_event_class_rec => p_event_class_rec,
197               x_return_status   => x_return_status );
198 
199           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
200             IF (g_level_error >= g_current_runtime_level ) THEN
201               FND_LOG.STRING(g_level_error,
202                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
203                      'Incorrect return_status after calling ' ||
204                      'ZX_TRL_MANAGE_TAX_PKG.create_summary_lines_crt_evnt()');
205               FND_LOG.STRING(g_level_error,
206                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
207                      'RETURN_STATUS = ' || x_return_status);
208               FND_LOG.STRING(g_level_error,
209                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
210                      'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
211             END IF;
212             RETURN;
213           END IF;
214 
215 
216           ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines (
217               p_event_class_rec => p_event_class_rec,
218               x_return_status => x_return_status);
219 
220           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
221             IF (g_level_error >= g_current_runtime_level ) THEN
222               FND_LOG.STRING(g_level_error,
223                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
224                      'Incorrect return_status after calling ' ||
225                      'ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines()');
226               FND_LOG.STRING(g_level_error,
227                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
228                      'RETURN_STATUS = ' || x_return_status);
229               FND_LOG.STRING(g_level_error,
230                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
231                      'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
232             END IF;
233             RETURN;
234           END IF;
235 
236         ELSE
237         -- For retain_summary_tax_line_id ='Y'
238 
239           ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines (
240               p_event_class_rec => p_event_class_rec,
241               x_return_status => x_return_status);
242 
243           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
244             IF (g_level_error >= g_current_runtime_level ) THEN
245               FND_LOG.STRING(g_level_error,
246                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
247                      'Incorrect return_status after calling ' ||
248                      'ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines()');
249               FND_LOG.STRING(g_level_error,
250                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
251                      'RETURN_STATUS = ' || x_return_status);
252               FND_LOG.STRING(g_level_error,
253                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
254                      'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
255             END IF;
256             RETURN;
257           END IF;
258 
259           ZX_TRL_MANAGE_TAX_PKG.create_summary_lines_upd_evnt (
260               p_event_class_rec => p_event_class_rec,
261               x_return_status   => x_return_status );
262 
263           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
264             IF (g_level_error >= g_current_runtime_level ) THEN
265               FND_LOG.STRING(g_level_error,
266                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
267                      'Incorrect return_status after calling ' ||
268                      'ZX_TRL_MANAGE_TAX_PKG.create_summary_lines_crt_evnt()');
269               FND_LOG.STRING(g_level_error,
270                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
271                      'RETURN_STATUS = ' || x_return_status);
272               FND_LOG.STRING(g_level_error,
273                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
274                      'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
275             END IF;
276             RETURN;
277           END IF;
278 
279         END IF; -- p_event_class_rec.retain_summ_tax_line_id_flag = 'N'
280 
281       END IF; -- p_event_class_rec.summarization_flag <> 'Y'
282 
283 
284       ZX_TRL_MANAGE_TAX_PKG.Delete_Loose_Tax_Distributions
285                           (x_return_status   => x_return_status,
286                            p_event_class_rec => p_event_class_rec);
287 
288       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
289         IF (g_level_error >= g_current_runtime_level ) THEN
290           FND_LOG.STRING(g_level_error,
291                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
292                  'Incorrect return_status after calling ' ||
293                  'ZX_TRL_MANAGE_TAX_PKG.Delete_Loose_Tax_Distributions()');
294           FND_LOG.STRING(g_level_error,
295                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
296                  'RETURN_STATUS = ' || x_return_status);
297           FND_LOG.STRING(g_level_error,
298                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
299                  'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
300         END IF;
301         RETURN;
302       END IF;
303 
304     ELSIF (p_event_class_rec.TAX_EVENT_TYPE_CODE = 'CREATE') THEN
305 
306       IF p_event_class_rec.summarization_flag = 'Y' THEN
307 
308         -- for create tax event, summary tax line created based on
309         -- zx_detail_tax_lines_gt, dump detail tax lines from gt to zx_lines
310         -- called after summary lines created for performance consideration.
311         --
312         ZX_TRL_MANAGE_TAX_PKG.create_summary_lines_crt_evnt (
313             p_event_class_rec => p_event_class_rec,
314             x_return_status   => x_return_status );
315 
316         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
317           IF (g_level_error >= g_current_runtime_level ) THEN
318             FND_LOG.STRING(g_level_error,
319                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
320                    'Incorrect return_status after calling ' ||
321                    'ZX_TRL_MANAGE_TAX_PKG.create_summary_lines_crt_evnt()');
322             FND_LOG.STRING(g_level_error,
323                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
324                    'RETURN_STATUS = ' || x_return_status);
325             FND_LOG.STRING(g_level_error,
326                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
327                    'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
328           END IF;
329           RETURN;
330         END IF;
331 
332       END IF;
333 
334       -- Dump detail tax lines from gt to zx_lines
335       ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines (
336         p_event_class_rec => p_event_class_rec,
337         x_return_status => x_return_status);
338 
339       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
340         IF (g_level_error >= g_current_runtime_level ) THEN
341           FND_LOG.STRING(g_level_error,
342                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
343                  'Incorrect return_status after calling ' ||
344                  'ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines()');
345           FND_LOG.STRING(g_level_error,
346                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
347                  'RETURN_STATUS = ' || x_return_status);
348           FND_LOG.STRING(g_level_error,
349                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
350                  'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
351         END IF;
352         RETURN;
353       END IF;
354 
355     -- bug fix 5417887
356     --ELSIF (p_event_class_rec.tax_event_type_code ='UPDATE' OR
357     --       p_event_class_rec.tax_event_type_code ='OVERRIDE_TAX' ) THEN
358     ELSIF  p_event_class_rec.tax_event_type_code ='OVERRIDE_TAX' THEN
359 
360         /*
361          * no longer needed for UPDATE case
362          *
363          * ZX_TRL_MANAGE_TAX_PKG.Update_Synchronize_Taxlines
364          *                   (x_return_status => x_return_status);
365          *
366          */
367 
368       ZX_TRL_MANAGE_TAX_PKG.Delete_Detail_Lines
369                             (x_return_status   => x_return_status ,
370                              p_event_class_rec => p_event_class_rec);
371 
372       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
373         IF (g_level_error >= g_current_runtime_level ) THEN
374           FND_LOG.STRING(g_level_error,
375                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
376                  'Incorrect return_status after calling ' ||
377                  'ZX_TRL_MANAGE_TAX_PKG.Delete_Detail_Lines()');
378           FND_LOG.STRING(g_level_error,
379                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
380                  'RETURN_STATUS = ' || x_return_status);
381           FND_LOG.STRING(g_level_error,
382                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
383                  'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
384         END IF;
385         RETURN;
386       END IF;
387 
388       -- for summarization_flag <>'Y', only recreate the detail tax lines
389       IF p_event_class_rec.summarization_flag <> 'Y' THEN
390 
391         ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines (
392             p_event_class_rec => p_event_class_rec,
393             x_return_status => x_return_status);
394 
395         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
396           IF (g_level_error >= g_current_runtime_level ) THEN
397             FND_LOG.STRING(g_level_error,
398                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
399                    'Incorrect return_status after calling ' ||
400                    'ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines()');
401             FND_LOG.STRING(g_level_error,
402                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
403                    'RETURN_STATUS = ' || x_return_status);
404             FND_LOG.STRING(g_level_error,
405                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
406                    'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
407           END IF;
408           RETURN;
409         END IF;
410 
411       ELSE --p_event_class_rec.summarization_flag = 'Y'
412 
413         -- Preserve old summary_tax_line_id in g_detail_tax_lines_gt (for UPDATE
414         -- case) if the same summarization criteria exist in zx_lines_summary
415         --
416         IF p_event_class_rec.retain_summ_tax_line_id_flag = 'Y' THEN
417 
418           ZX_TRL_MANAGE_TAX_PKG.update_exist_summary_line_id (
419                             p_event_class_rec => p_event_class_rec,
420                             x_return_status   => x_return_status);
421 
422           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
423             IF (g_level_error >= g_current_runtime_level ) THEN
424               FND_LOG.STRING(g_level_error,
425                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
426                      'Incorrect return_status after calling ' ||
427                      'ZX_TRL_MANAGE_TAX_PKG.update_exist_summary_line_id()');
428               FND_LOG.STRING(g_level_error,
429                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
430                      'RETURN_STATUS = ' || x_return_status);
431               FND_LOG.STRING(g_level_error,
432                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
433                      'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
434             END IF;
435             RETURN;
436           END IF;
437         END IF;
438 
439         ZX_TRL_MANAGE_TAX_PKG.Delete_Summary_Lines
440                           (x_return_status   => x_return_status,
441                            p_event_class_rec => p_event_class_rec);
442 
443         IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
444           IF (g_level_error >= g_current_runtime_level ) THEN
445             FND_LOG.STRING(g_level_error,
446                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
447                    'Incorrect return_status after calling ' ||
448                    'ZX_TRL_MANAGE_TAX_PKG.Delete_Summary_Lines()');
449             FND_LOG.STRING(g_level_error,
450                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
451                    'RETURN_STATUS = ' || x_return_status);
452             FND_LOG.STRING(g_level_error,
453                    'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
454                    'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
455           END IF;
456           RETURN;
457         END IF;
458 
459        /* -- commented out for bug fix 5417887
460         -- recreate the summary tax lines and detail tax lines
461 
462         IF p_event_class_rec.tax_event_type_code = 'UPDATE'
463           AND p_event_class_rec.retain_summ_tax_line_id_flag = 'N'
464         THEN
465         -- for update tax event, AP will pass in all the trx lines,
466         -- that is, all the tax lines will be in the zx_detail_tax_lines_gt.
467         -- so if not retain summary_tax_line_id, it is treated same as
468         -- created case.
469 
470           ZX_TRL_MANAGE_TAX_PKG.create_summary_lines_crt_evnt (
471               p_event_class_rec => p_event_class_rec,
472               x_return_status   => x_return_status );
473 
474           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
475             IF (g_level_error >= g_current_runtime_level ) THEN
476               FND_LOG.STRING(g_level_error,
477                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
478                      'Incorrect return_status after calling ' ||
479                      'ZX_TRL_MANAGE_TAX_PKG.create_summary_lines_crt_evnt()');
480               FND_LOG.STRING(g_level_error,
481                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
482                      'RETURN_STATUS = ' || x_return_status);
483               FND_LOG.STRING(g_level_error,
484                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
485                      'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
486             END IF;
487             RETURN;
488           END IF;
489 
490 
491           ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines (
492               p_event_class_rec => p_event_class_rec,
493               x_return_status => x_return_status);
494 
495           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
496             IF (g_level_error >= g_current_runtime_level ) THEN
497               FND_LOG.STRING(g_level_error,
498                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
499                      'Incorrect return_status after calling ' ||
500                      'ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines()');
501               FND_LOG.STRING(g_level_error,
502                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
503                      'RETURN_STATUS = ' || x_return_status);
504               FND_LOG.STRING(g_level_error,
505                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
506                      'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
507             END IF;
508             RETURN;
509           END IF;
510 
511         ELSE
512         -- For tax_event_type of UPDATE and retain_summary_tax_line_id ='Y'
513         -- or tax_event_type of OVERRIDE_TAX
514 
515         -- commented out for bug fix 5417887 end */
516 
517           ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines (
518               p_event_class_rec => p_event_class_rec,
519               x_return_status => x_return_status);
520 
521           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
522             IF (g_level_error >= g_current_runtime_level ) THEN
523               FND_LOG.STRING(g_level_error,
524                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
525                      'Incorrect return_status after calling ' ||
526                      'ZX_TRL_MANAGE_TAX_PKG.Create_Detail_Lines()');
527               FND_LOG.STRING(g_level_error,
528                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
529                      'RETURN_STATUS = ' || x_return_status);
530               FND_LOG.STRING(g_level_error,
531                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
532                      'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
533             END IF;
534             RETURN;
535           END IF;
536 
537           ZX_TRL_MANAGE_TAX_PKG.create_summary_lines_upd_evnt (
538               p_event_class_rec => p_event_class_rec,
539               x_return_status   => x_return_status );
540 
541           IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
542             IF (g_level_error >= g_current_runtime_level ) THEN
543               FND_LOG.STRING(g_level_error,
544                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
545                      'Incorrect return_status after calling ' ||
546                      'ZX_TRL_MANAGE_TAX_PKG.create_summary_lines_crt_evnt()');
547               FND_LOG.STRING(g_level_error,
548                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
549                      'RETURN_STATUS = ' || x_return_status);
550               FND_LOG.STRING(g_level_error,
551                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
552                      'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
553             END IF;
554             RETURN;
555           END IF;
556 
557        -- bug fix 5417887
558        -- END IF; -- p_event_class_rec.tax_event_type_code = 'UPDATE'
559 
560       END IF; -- p_event_class_rec.summarization_flag <> 'Y'
561 
562 
563       ZX_TRL_MANAGE_TAX_PKG.Delete_Loose_Tax_Distributions
564                           (x_return_status   => x_return_status,
565                            p_event_class_rec => p_event_class_rec);
566 
567       IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
568         IF (g_level_error >= g_current_runtime_level ) THEN
569           FND_LOG.STRING(g_level_error,
570                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
571                  'Incorrect return_status after calling ' ||
572                  'ZX_TRL_MANAGE_TAX_PKG.Delete_Loose_Tax_Distributions()');
573           FND_LOG.STRING(g_level_error,
574                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
575                  'RETURN_STATUS = ' || x_return_status);
576           FND_LOG.STRING(g_level_error,
577                  'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
578                  'ZX_TRL_PUB_PKG.Manage_TaxLines(-)');
579         END IF;
580         RETURN;
581       END IF;
582 
583     END IF;      -- tax_event_type_code
584 
585     IF (g_level_procedure >= g_current_runtime_level ) THEN
586 
587       FND_LOG.STRING(g_level_procedure,
588                     'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines.END',
589                     'ZX_TRL_PUB_PKG: Manage_TaxLines (-)'||x_return_status);
590     END IF;
591 
592   EXCEPTION
593     WHEN OTHERS THEN
594       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
595       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
596 
597       IF (g_level_unexpected >= g_current_runtime_level ) THEN
598         FND_LOG.STRING(g_level_unexpected,
599                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxLines',
600                         l_error_buffer);
601       END IF;
602 
603   END Manage_TaxLines;
604 
605 
606 /*============================================================================*
607  | PROCEDURE Document_Level_Changes: It will Delete / Cancel / Purge tax lines |
608  |                                   from the tax repository                   |
609  *============================================================================*/
610 
611   PROCEDURE Document_Level_Changes
612        (x_return_status             OUT NOCOPY VARCHAR2,
613         p_event_class_rec        IN     ZX_API_PUB.EVENT_CLASS_REC_TYPE,
614         p_tax_hold_released_code IN     ZX_API_PUB.VALIDATION_STATUS_TBL_TYPE) IS
615 
616     l_return_status VARCHAR2(1);
617 
618     --TRANSACTION TABLE HAS A NUMBER OF TRANSACTIONS TO BE PROCESSED. BASED ON THE EVENTS ,
619     --APPROPRIATE PROCEDURES WOULD BE CALLED. ZX_LINES TABLE MUST HAVE
620     --TRANSACTION LINES FOR THE GIVEN TRANSACTION FOR FURTHER PROCESSING.
621     l_error_buffer   VARCHAR2(100);
622 
623   BEGIN
624     g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
625 
626     IF (g_level_procedure >= g_current_runtime_level ) THEN
627       FND_LOG.STRING(g_level_procedure,
628                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Document_Level_Changes.BEGIN',
629                      'ZX_TRL_PUB_PKG: Document_Level_Changes (+)');
630     END IF;
631 
632     --  Initialize API return status to success
633     x_return_status := FND_API.G_RET_STS_SUCCESS;
634 
635     IF (p_event_class_rec.TAX_EVENT_TYPE_CODE = 'DELETE') THEN
636 
637       ZX_TRL_MANAGE_TAX_PKG.DELETE_TRANSACTION
638                         (x_return_status   => l_return_status    ,
639                          p_event_class_rec => p_event_class_rec);
640 
641     ELSIF (p_event_class_rec.TAX_EVENT_TYPE_CODE = 'PURGE') THEN
642 
643       ZX_TRL_MANAGE_TAX_PKG.PURGE_TRANSACTION
644                         (x_return_status   => l_return_status,
645                          p_event_class_rec => p_event_class_rec);
646 
647     ELSIF (p_event_class_rec.TAX_EVENT_TYPE_CODE = 'CANCEL') THEN
648 
649       ZX_TRL_MANAGE_TAX_PKG.CANCEL_TRANSACTION
650                         (x_return_status   => l_return_status,
651                          p_event_class_rec => p_event_class_rec);
652 
653     -- begin bug fix 3339364
654     ELSIF (p_event_class_rec.TAX_EVENT_TYPE_CODE = 'RELEASE_TAX_HOLD') THEN
655 
656       ZX_TRL_MANAGE_TAX_PKG.RELEASE_DOCUMENT_TAX_HOLD
657                         (x_return_status   => l_return_status,
658                          p_event_class_rec => p_event_class_rec,
659                          p_tax_hold_released_code => p_tax_hold_released_code
660                          );
661 
662     -- end bug fix 3339364
663     END IF;
664 
665     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
666       RAISE FND_API.G_EXC_ERROR;
667     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
668       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
669     END IF;
670 
671     IF (g_level_procedure >= g_current_runtime_level ) THEN
672       FND_LOG.STRING(g_level_procedure,
673                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Document_Level_Changes.END',
674                      'ZX_TRL_PUB_PKG: Document_Level_Changes (-)'||x_return_status);
675     END IF;
676 
677   EXCEPTION
678     WHEN FND_API.G_EXC_ERROR THEN
679       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
680       IF (g_level_unexpected >= g_current_runtime_level ) THEN
681         FND_LOG.STRING(g_level_unexpected,
682                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Document_Level_Changes',
683                        'Return Status = ' || x_return_status);
684       END IF;
685 
686     WHEN OTHERS THEN
687       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
688       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
689 
690       IF (g_level_unexpected >= g_current_runtime_level ) THEN
691         FND_LOG.STRING(g_level_unexpected,
692                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Document_Level_Changes',
693                         l_error_buffer);
694       END IF;
695 
696   END Document_Level_Changes;
697 
698 /* ===========================================================================*
699  | PROCEDURE Synchronize_TaxLines : updates transaction information in the tax|
700  |                                  repository                                |
701  * ===========================================================================*/
702 
703   PROCEDURE Synchronize_TaxLines
704        (x_return_status    OUT   NOCOPY VARCHAR2) IS
705 
706     l_return_status  VARCHAR2(1);
707     l_error_buffer   VARCHAR2(100);
708 
709   BEGIN
710     g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
711 
712     IF (g_level_procedure >= g_current_runtime_level ) THEN
713       FND_LOG.STRING(g_level_procedure,
714                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Synchronize_TaxLines.BEGIN',
715                      'ZX_TRL_PUB_PKG: Synchronize_TaxLines (+)');
716     END IF;
717 
718     --  Initialize API return status to success
719     x_return_status := FND_API.G_RET_STS_SUCCESS;
720 
721     /****** no longer needed  ***********
722      *ZX_TRL_MANAGE_TAX_PKG.Update_Transaction_Info
723      *                  (x_return_status    =>  l_return_status);
724      *
725      *************************************/
726 
727 
728     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
729       RAISE FND_API.G_EXC_ERROR;
730     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
731       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
732     END IF;
733 
734     IF (g_level_procedure >= g_current_runtime_level ) THEN
735       FND_LOG.STRING(g_level_procedure,
736                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Synchronize_TaxLines.END',
737                      'ZX_TRL_PUB_PKG: Synchronize_TaxLines (-)'||x_return_status);
738     END IF;
739 
740   EXCEPTION
741     WHEN FND_API.G_EXC_ERROR THEN
742       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
743       IF (g_level_unexpected >= g_current_runtime_level ) THEN
744         FND_LOG.STRING(g_level_unexpected,
745                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Synchronize_TaxLines',
746                        'Return Status = ' || x_return_status);
747       END IF;
748 
749     WHEN OTHERS THEN
750       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
751       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
752 
753       IF (g_level_unexpected >= g_current_runtime_level ) THEN
754         FND_LOG.STRING(g_level_unexpected,
755                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Synchronize_TaxLines',
756                         l_error_buffer);
757       END IF;
758 
759   END Synchronize_TaxLines;
760 
761 /* ===========================================================================*
762  | PROCEDURE Mark_Tax_Lines_Delete  : Marks the tax lines as delete.          |
763  * ===========================================================================*/
764 
765   PROCEDURE Mark_Tax_Lines_Delete
766        (x_return_status           OUT NOCOPY VARCHAR2,
767         p_transaction_line_rec IN            ZX_API_PUB.TRANSACTION_LINE_REC_TYPE) IS
768 
769     l_return_status VARCHAR2(1);
770     l_error_buffer  VARCHAR2(100);
771 
772   BEGIN
773     g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
774 
775     IF (g_level_procedure >= g_current_runtime_level ) THEN
776       FND_LOG.STRING(g_level_procedure,
777                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Mark_Tax_Lines_Delete.BEGIN',
778                      'ZX_TRL_PUB_PKG: Mark_Tax_Lines_Delete (+)');
779     END IF;
780 
781     --  Initialize API return status to success
782     x_return_status := FND_API.G_RET_STS_SUCCESS;
783 
784     ZX_TRL_MANAGE_TAX_PKG.Mark_Detail_Tax_Lines_Delete
785                       (x_return_status        => l_return_status ,
786                        p_transaction_line_rec => p_transaction_line_rec);
787 
788 
789     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
790       RAISE FND_API.G_EXC_ERROR;
791     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
792       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
793     END IF;
794 
795     IF (g_level_procedure >= g_current_runtime_level ) THEN
796       FND_LOG.STRING(g_level_procedure,
797                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Mark_Tax_Lines_Delete.END',
798                      'ZX_TRL_PUB_PKG.Mark_Tax_Lines_Delete (-)'||x_return_status);
799     END IF;
800 
801   EXCEPTION
802     WHEN FND_API.G_EXC_ERROR THEN
803       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
804       IF (g_level_unexpected >= g_current_runtime_level ) THEN
805         FND_LOG.STRING(g_level_unexpected,
806                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Mark_Tax_Lines_Delete',
807                        'Return Status = ' || x_return_status);
808       END IF;
809 
810     WHEN OTHERS THEN
811       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
812       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
813 
814       IF (g_level_unexpected >= g_current_runtime_level ) THEN
815         FND_LOG.STRING(g_level_unexpected,
816                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Mark_Tax_Lines_Delete',
817                         l_error_buffer);
818       END IF;
819 
820   END Mark_Tax_Lines_Delete;
821 
822 /*============================================================================*
823  | PROCEDURE Manage_TaxDistributions: It will create, update, delete tax      |
824  |                                    distributions lines and update tax lines|
825  |                                    and summary tax lines in the            |
826  |                                    tax repository.                         |
827  |============================================================================*/
828 
829   PROCEDURE Manage_TaxDistributions
830        (x_return_status      OUT NOCOPY VARCHAR2,
831         p_event_class_rec IN            ZX_API_PUB.EVENT_CLASS_REC_TYPE) IS
832 
833     l_return_status           VARCHAR2(1);
834     l_error_buffer            VARCHAR2(200);
835     l_msg_context_info_rec    ZX_API_PUB.CONTEXT_INFO_REC_TYPE;
836 
837   BEGIN
838     g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
839 
840     IF (g_level_procedure >= g_current_runtime_level ) THEN
841       FND_LOG.STRING(g_level_procedure,
842                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxDistributions.BEGIN',
843                      'ZX_TRL_PUB_PKG: Manage_TaxDistributions (+)');
844     END IF;
845 
846     --  Initialize API return status to success
847     x_return_status := FND_API.G_RET_STS_SUCCESS;
848 
849     --
850     -- bug#4893261- populate message structure
851     --
852     l_msg_context_info_rec.application_id :=
853               p_event_class_rec.application_id;
854     l_msg_context_info_rec.entity_code :=
855               p_event_class_rec.entity_code;
856     l_msg_context_info_rec.event_class_code :=
857               p_event_class_rec.event_class_code;
858     l_msg_context_info_rec.trx_id := NULL;
859    --         p_event_class_rec.trx_id;
860     l_msg_context_info_rec.trx_line_id := NULL;
861     l_msg_context_info_rec.trx_level_type := NULL;
862     l_msg_context_info_rec.summary_tax_line_number := NULL;
863     l_msg_context_info_rec.tax_line_id := NULL;
864     l_msg_context_info_rec.trx_line_dist_id := NULL;
865 
866 
867     IF (p_event_class_rec.tax_event_type_code <> 'OVERRIDE_TAX_DISTRIBUTIONS') THEN
868     -- bugfix 5551973
869     -- this part handles the tax event type of DISTRIBUTE and RE-DISTRIBUTE
870     -- If separate logic is required for any other events, it should be handled separetely.
871 
872       -- the call to ZX_TRL_MANAGE_TAX_PKG.Delete_dist_Marked_For_Delete is needed
873       -- only for re-distribute event. make this call conditional later on
874       ZX_TRL_MANAGE_TAX_PKG.Delete_dist_Marked_For_Delete
875                           (x_return_status   => l_return_status ,
876                            p_event_class_rec => p_event_class_rec);
877 
878 
879       IF (l_return_status= FND_API.G_RET_STS_SUCCESS) THEN
880         ZX_TRL_MANAGE_TAX_PKG.Create_Tax_Distributions
881                             (x_return_status => l_return_status);
882 
883       END IF;
884 
885       --IF l_return_status = FND_API.G_RET_STS_ERROR THEN
886       --  FND_MESSAGE.SET_NAME('ZX','ZX_TRL_RECORD_ALREADY_EXISTS');
887       --  ZX_API_PUB.add_msg(l_msg_context_info_rec);
888       --END IF;
889 
890       IF (l_return_status= FND_API.G_RET_STS_SUCCESS) THEN
891         ZX_TRL_MANAGE_TAX_PKG.Update_Taxline_Rec_Nrec_amt
892                             (x_return_status   => l_return_status ,
893                              p_event_class_rec => p_event_class_rec);
894 
895       END IF;
896 
897     ELSIF p_event_class_rec.tax_event_type_code = 'OVERRIDE_TAX_DISTRIBUTIONS' THEN
898 
899       -- confirm that  tax_event_type_code = 'OVERRIDE_TAX_DISTRIBUTIONS'
900       -- will not be there in the bulk call to determine recovery. Otherwise these API
901       -- calls need a change for bulk processing of override deistributions
902 
903       ZX_TRL_MANAGE_TAX_PKG.delete_tax_distributions(
904                            x_return_status   => l_return_status,
905                            p_event_class_rec => p_event_class_rec);
906 
907       IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
908         ZX_TRL_MANAGE_TAX_PKG.Create_Tax_Distributions
909                             (x_return_status => l_return_status);
910 
911       END IF;
912 
913       IF l_return_status = FND_API.G_RET_STS_SUCCESS THEN
914         ZX_TRL_MANAGE_TAX_PKG.update_taxline_rec_nrec_amt(
915                              x_return_status   => l_return_status,
916                              p_event_class_rec => p_event_class_rec);
917 
918       END IF;
919     END IF;
920 
921     -- Added preventive check to find deleted frozen tax dists --
922     -- Start --
923     IF (l_return_status= FND_API.G_RET_STS_SUCCESS) THEN
924       IF p_event_class_rec.application_id = 200 THEN
925         ZX_TRL_PUB_PKG.Check_Frozen_Tax_Dists
926            (x_return_status => l_return_status,
927             p_event_class_rec => p_event_class_rec);
928 
929         IF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
930           RAISE FND_API.G_EXC_ERROR;
931         END IF;
932       END IF;
933     END IF;
934     -- End --
935 
936     IF l_return_status = FND_API.G_RET_STS_ERROR THEN
937       RAISE FND_API.G_EXC_ERROR;
938     ELSIF l_return_status = FND_API.G_RET_STS_UNEXP_ERROR THEN
939       RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
940     END IF;
941 
942     IF (g_level_procedure >= g_current_runtime_level ) THEN
943       FND_LOG.STRING(g_level_procedure,
944                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxDistributions.END',
945                      'ZX_TRL_PUB_PKG: Manage_TaxDistributions (-)'||x_return_status);
946     END IF;
947 
948   EXCEPTION
949     WHEN FND_API.G_EXC_ERROR THEN
950       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
951       IF (g_level_unexpected >= g_current_runtime_level ) THEN
952         FND_LOG.STRING(g_level_unexpected,
953                'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxDistributions',
954                'Unexpected Error. Return_Status = '||x_return_status);
955         FND_LOG.STRING(g_level_unexpected,
956                'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxDistributions.END',
957                'ZX_TRL_PUB_PKG: Manage_TaxDistributions (-)');
958       END IF;
959 
960     WHEN OTHERS THEN
961       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
962       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
963 
964       IF (g_level_unexpected >= g_current_runtime_level ) THEN
965         FND_LOG.STRING(g_level_unexpected,
966                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Manage_TaxDistributions',
967                         l_error_buffer);
968       END IF;
969   END Manage_TaxDistributions;
970 
971 /*=====================================================================================*
972  | PROCEDURE Freeze_TaxDistributions: This recording service is used to freeze tax     |
973  |                                    distributions whenever user freezes transaction  |
974  |                                    distribution lines                               |
975  |=====================================================================================*/
976 
977   PROCEDURE Freeze_TaxDistributions
978        (x_return_status      OUT NOCOPY VARCHAR2,
979         p_event_class_rec    IN         ZX_API_PUB.EVENT_CLASS_REC_TYPE) IS
980 
981     l_error_buffer  VARCHAR2(100);
982 
983   BEGIN
984     g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
985 
986     IF (g_level_procedure >= g_current_runtime_level ) THEN
987       FND_LOG.STRING(g_level_procedure,
988                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Freeze_TaxDistributions.BEGIN',
989                      'ZX_TRL_PUB_PKG: Freeze_TaxDistributions (+)');
990     END IF;
991 
992     ZX_TRL_MANAGE_TAX_PKG.Update_Freeze_Flag
993                       (x_return_status         =>      x_return_status,
994                        p_event_class_rec       =>      p_event_class_rec);
995 
996 
997     IF (g_level_procedure >= g_current_runtime_level ) THEN
998       FND_LOG.STRING(g_level_procedure,
999                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Freeze_TaxDistributions.END',
1000                      'ZX_TRL_PUB_PKG: Freeze_TaxDistributions (-)'||x_return_status);
1001     END IF;
1002 
1003   EXCEPTION
1004     WHEN FND_API.G_EXC_ERROR THEN
1005       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1006       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1007         FND_LOG.STRING(g_level_unexpected,
1008                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Freeze_TaxDistributions',
1009                        'Return Status = ' || x_return_status);
1010       END IF;
1011 
1012     WHEN OTHERS THEN
1013       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1014       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1015 
1016       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1017         FND_LOG.STRING(g_level_unexpected,
1018                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Freeze_TaxDistributions',
1019                         l_error_buffer);
1020       END IF;
1021   END Freeze_TaxDistributions;
1022 
1023 /*============================================================================*
1024  | PROCEDURE Update_Taxlines: This recording service is used to update tax    |
1025  |                            lines (ZX_LINES) with changed status for given  |
1026  |                            transaction line distributions.                 |
1027  |============================================================================*/
1028   PROCEDURE Update_Taxlines
1029        (x_return_status      OUT NOCOPY VARCHAR2,
1030         p_event_class_rec IN            ZX_API_PUB.EVENT_CLASS_REC_TYPE) IS
1031 
1032     l_error_buffer  VARCHAR2(100);
1033 
1034   BEGIN
1035     g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1036 
1037     IF (g_level_procedure >= g_current_runtime_level ) THEN
1038       FND_LOG.STRING(g_level_procedure,
1039                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Update_Taxlines.BEGIN',
1040                      'ZX_TRL_PUB_PKG: Update_Taxlines (+)');
1041     END IF;
1042 
1043     ZX_TRL_MANAGE_TAX_PKG.Update_Item_Dist_Changed_Flag
1044                       (x_return_status   => x_return_status,
1045                        p_event_class_rec => p_event_class_rec);
1046 
1047     IF (g_level_procedure >= g_current_runtime_level ) THEN
1048       FND_LOG.STRING(g_level_procedure,
1049                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Update_Taxlines.END',
1050                      'ZX_TRL_PUB_PKG: Update_Taxlines (-)'||x_return_status);
1051     END IF;
1052 
1053   EXCEPTION
1054     WHEN FND_API.G_EXC_ERROR THEN
1055       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1056       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1057         FND_LOG.STRING(g_level_unexpected,
1058                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Update_Taxlines',
1059                        'Return Status = ' || x_return_status);
1060       END IF;
1061 
1062     WHEN OTHERS THEN
1063       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1064       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1065 
1066       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1067         FND_LOG.STRING(g_level_unexpected,
1068                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Update_Taxlines',
1069                         l_error_buffer);
1070       END IF;
1071   END Update_Taxlines;
1072 
1073   PROCEDURE Discard_Tax_Only_Lines
1074        (x_return_status      OUT NOCOPY VARCHAR2,
1075         p_event_class_rec IN            ZX_API_PUB.EVENT_CLASS_REC_TYPE) IS
1076 
1077     l_error_buffer  VARCHAR2(100);
1078 
1079   BEGIN
1080     g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1081 
1082     IF (g_level_procedure >= g_current_runtime_level ) THEN
1083       FND_LOG.STRING(g_level_procedure,
1084                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Discard_Tax_Only_Lines.BEGIN',
1085                      'ZX_TRL_PUB_PKG: Discard_Tax_Only_Lines (+)');
1086     END IF;
1087 
1088     ZX_TRL_MANAGE_TAX_PKG.Discard_Tax_Only_Lines (x_return_status, p_event_class_rec);
1089 
1090     IF (g_level_procedure >= g_current_runtime_level ) THEN
1091       FND_LOG.STRING(g_level_procedure,
1092                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Discard_Tax_Only_Lines.END',
1093                      'ZX_TRL_PUB_PKG: Discard_Tax_Only_Lines (-)'||x_return_status);
1094     END IF;
1095 
1096   EXCEPTION
1097     WHEN FND_API.G_EXC_ERROR THEN
1098       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1099       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1100         FND_LOG.STRING(g_level_unexpected,
1101                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Discard_Tax_Only_Lines',
1102                        'Return Status = ' || x_return_status);
1103       END IF;
1104 
1105     WHEN OTHERS THEN
1106       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1107       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1108 
1109       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1110         FND_LOG.STRING(g_level_unexpected,
1111                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Discard_Tax_Only_Lines',
1112                         l_error_buffer);
1113       END IF;
1114 
1115   END Discard_Tax_Only_Lines;
1116 
1117   PROCEDURE Update_GL_Date
1118        (p_gl_date       IN            DATE,
1119         x_return_status    OUT NOCOPY VARCHAR2) IS
1120 
1121     l_error_buffer  VARCHAR2(100);
1122 
1123   BEGIN
1124     g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1125 
1126     IF (g_level_procedure >= g_current_runtime_level ) THEN
1127       FND_LOG.STRING(g_level_procedure,
1128                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Update_GL_Date.BEGIN',
1129                      'ZX_TRL_PUB_PKG: Update_GL_Date (+)');
1130     END IF;
1131 
1132     ZX_TRL_MANAGE_TAX_PKG.Update_GL_Date (p_gl_date, x_return_status);
1133 
1134 
1135     IF (g_level_procedure >= g_current_runtime_level ) THEN
1136       FND_LOG.STRING(g_level_procedure,
1137                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Update_GL_Date.END',
1138                      'ZX_TRL_PUB_PKG: Update_GL_Date (-)'||x_return_status);
1139     END IF;
1140 
1141   EXCEPTION
1142     WHEN FND_API.G_EXC_ERROR THEN
1143       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1144       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1145         FND_LOG.STRING(g_level_unexpected,
1146                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Update_GL_Date',
1147                        'Return Status = ' || x_return_status);
1148       END IF;
1149 
1150     WHEN OTHERS THEN
1151       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1152       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1153 
1154       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1155         FND_LOG.STRING(g_level_unexpected,
1156                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Update_GL_Date',
1157                         l_error_buffer);
1158       END IF;
1159 
1160   END Update_GL_Date;
1161 
1162   PROCEDURE Update_Exchange_Rate
1163        (p_event_class_rec         IN            ZX_API_PUB.EVENT_CLASS_REC_TYPE,
1164         x_return_status              OUT NOCOPY VARCHAR2) IS
1165 
1166     l_error_buffer  VARCHAR2(100);
1167 
1168   BEGIN
1169     g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1170 
1171     IF (g_level_procedure >= g_current_runtime_level ) THEN
1172       FND_LOG.STRING(g_level_procedure,
1173                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Update_Exchange_Rate.BEGIN',
1174                      'ZX_TRL_PUB_PKG: Update_Exchange_Rate (+)');
1175     END IF;
1176 
1177     ZX_TRL_MANAGE_TAX_PKG.Update_Exchange_Rate (p_event_class_rec,
1178                                                   x_return_status);
1179 
1180 
1181     IF (g_level_procedure >= g_current_runtime_level ) THEN
1182       FND_LOG.STRING(g_level_procedure,
1183                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Update_Exchange_Rate.END',
1184                      'ZX_TRL_PUB_PKG: Update_Exchange_Rate (-)'||x_return_status);
1185     END IF;
1186 
1187   EXCEPTION
1188     WHEN FND_API.G_EXC_ERROR THEN
1189       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1190       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1191         FND_LOG.STRING(g_level_unexpected,
1192                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Update_Exchange_Rate',
1193                        'Return Status = ' || x_return_status);
1194       END IF;
1195 
1196     WHEN OTHERS THEN
1197       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1198       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1199 
1200       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1201         FND_LOG.STRING(g_level_unexpected,
1202                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Update_Exchange_Rate',
1203                         l_error_buffer);
1204       END IF;
1205 
1206   END Update_Exchange_Rate;
1207 
1208 ------------------------------------------------------------------------------
1209 --  PUBLIC PROCEDURE
1210 --  delete_tax_lines_and_dists
1211 --
1212 --  DESCRIPTION
1213 --  Delete all the detail tax lines and distributions of the passed-in
1214 --  transaction line from zx_lines and zx_rec_nrec_dist.
1215 ------------------------------------------------------------------------------
1216 
1217 PROCEDURE delete_tax_lines_and_dists
1218 (
1219     p_application_id       IN           NUMBER,
1220     p_entity_code          IN           VARCHAR2,
1221     p_event_class_code     IN           VARCHAR2,
1222     p_trx_id               IN           NUMBER,
1223     p_trx_line_id          IN           NUMBER,
1224     p_trx_level_type       IN           VARCHAR2,
1225     x_return_status        OUT NOCOPY   VARCHAR2
1226 ) IS
1227 
1228  CURSOR c_get_summary_flags IS
1229    SELECT summarization_flag,
1230           retain_summ_tax_line_id_flag
1231      FROM zx_evnt_cls_mappings
1232     WHERE event_class_code = p_event_class_code
1233       AND application_id   = p_application_id
1234       AND entity_code      = p_entity_code;
1235 
1236  l_summarization_flag            VARCHAR2(1);
1237  l_retain_summ_tax_line_id_flag  VARCHAR2(1);
1238 
1239  l_error_buffer VARCHAR2(100);
1240 
1241 BEGIN
1242   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1243 
1244   IF (g_level_procedure >= g_current_runtime_level ) THEN
1245     FND_LOG.STRING(g_level_procedure,
1246                    'ZX.PLSQL.ZX_TRL_PUB_PKG.delete_tax_lines_and_dists.BEGIN',
1247                    'ZX_TRL_PUB_PKG: delete_tax_lines_and_dists (+)');
1248   END IF;
1249   x_return_status := FND_API.G_RET_STS_SUCCESS;
1250 
1251   -- delete the distributions
1252   DELETE FROM zx_rec_nrec_dist
1253         WHERE application_id     = p_application_id
1254           AND entity_code        = p_entity_code
1255           AND event_class_code   = p_event_class_code
1256           AND trx_id             = p_trx_id
1257           AND trx_line_id        = p_trx_line_id
1258           AND trx_level_type     = p_trx_level_type;
1259 
1260   OPEN c_get_summary_flags;
1261   FETCH c_get_summary_flags into l_summarization_flag, l_retain_summ_tax_line_id_flag;
1262   CLOSE c_get_summary_flags;
1263 
1264   -- delete the tax detail lines
1265   DELETE FROM zx_lines
1266         WHERE application_id     = p_application_id
1267           AND entity_code        = p_entity_code
1268           AND event_class_code   = p_event_class_code
1269           AND trx_id             = p_trx_id
1270           AND trx_line_id        = p_trx_line_id
1271           AND trx_level_type     = p_trx_level_type;
1272 
1273   IF l_summarization_flag = 'Y' THEN
1274 
1275     -- for current phase, just delete all the summary tax lines
1276     -- for this transaction and recreate
1277 
1278     -- delete the summary tax lines for the transaction
1279     DELETE FROM zx_lines_summary
1280       WHERE application_id     = p_application_id
1281         AND entity_code        = p_entity_code
1282         AND event_class_code   = p_event_class_code
1283         AND trx_id             = p_trx_id;
1284 
1285     ZX_TRL_MANAGE_TAX_PKG.create_summary_lines_del_evnt(
1286       p_application_id    => p_application_id,
1287       p_entity_code       => p_entity_code,
1288       p_event_class_code  => p_event_class_code,
1289       p_trx_id            => p_trx_id,
1290       p_trx_line_id       => p_trx_line_id,
1291       p_trx_level_type    => p_trx_level_type,
1292       p_retain_summ_tax_line_id_flag
1293                           => l_retain_summ_tax_line_id_flag,
1294       x_return_status     => x_return_status
1295     );
1296     IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1297       IF (g_level_error >= g_current_runtime_level ) THEN
1298         FND_LOG.STRING(g_level_error,
1299                'ZX.PLSQL.ZX_TRL_PUB_PKG.delete_tax_lines_and_dists',
1300                'MRC Lines: Incorrect return_status after calling ' ||
1301                'ZX_TRL_MANAGE_TAX_PKG.create_summary_from_zx_liness()');
1302         FND_LOG.STRING(g_level_error,
1303                'ZX.PLSQL.ZX_TRL_PUB_PKG.delete_tax_lines_and_dists',
1304                'RETURN_STATUS = ' || x_return_status);
1305         FND_LOG.STRING(g_level_error,
1306                'ZX.PLSQL.ZX_TRL_PUB_PKG.delete_tax_lines_and_dists.END',
1307                'ZX_TRL_PUB_PKG.delete_tax_lines_and_dists(-)');
1308       END IF;
1309       RETURN;
1310     END IF;
1311 
1312   END IF;
1313 
1314   IF (g_level_procedure >= g_current_runtime_level ) THEN
1315     FND_LOG.STRING(g_level_procedure,
1316                    'ZX.PLSQL.ZX_TRL_PUB_PKG.delete_tax_lines_and_dists.END',
1317                    'ZX_TRL_PUB_PKG: delete_tax_lines_and_dists (-)'||x_return_status);
1318   END IF;
1319 
1320   EXCEPTION
1321     WHEN FND_API.G_EXC_ERROR THEN
1322       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1323       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1324         FND_LOG.STRING(g_level_unexpected,
1325                        'ZX.PLSQL.ZX_TRL_PUB_PKG.delete_tax_lines_and_dists',
1326                        'Return Status = ' || x_return_status);
1327       END IF;
1328 
1329     WHEN OTHERS THEN
1330       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1331       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1332 
1333       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1334         FND_LOG.STRING(g_level_unexpected,
1335                        'ZX.PLSQL.ZX_TRL_PUB_PKG.delete_tax_lines_and_dists',
1336                         l_error_buffer);
1337       END IF;
1338 
1339 END delete_tax_lines_and_dists;
1340 
1341 ------------------------------------------------------------------------------
1342 --  PUBLIC PROCEDURE
1343 --  delete_tax_dists
1344 --
1345 --  DESCRIPTION
1346 --  Delete all the detail tax distributions of the passed-in transaction
1347 --  line from zx_rec_nrec_dist.
1348 ------------------------------------------------------------------------------
1349 
1350 PROCEDURE delete_tax_dists
1351 (
1352     p_application_id       IN           NUMBER,
1353     p_entity_code          IN           VARCHAR2,
1354     p_event_class_code     IN           VARCHAR2,
1355     p_trx_id               IN           NUMBER,
1356     p_trx_line_id          IN           NUMBER,
1357     p_trx_level_type       IN           VARCHAR2,
1358     x_return_status        OUT NOCOPY   VARCHAR2
1359 ) IS
1360 
1361  l_error_buffer VARCHAR2(100);
1362 
1363 BEGIN
1364   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1365 
1366   IF (g_level_procedure >= g_current_runtime_level ) THEN
1367     FND_LOG.STRING(g_level_procedure,
1368                    'ZX.PLSQL.ZX_TRL_PUB_PKG.delete_tax_dists.BEGIN',
1369                    'ZX_TRL_PUB_PKG: delete_tax_dists (+)');
1370   END IF;
1371   x_return_status := FND_API.G_RET_STS_SUCCESS;
1372 
1373   DELETE FROM zx_rec_nrec_dist
1374         WHERE application_id     = p_application_id
1375           AND entity_code        = p_entity_code
1376           AND event_class_code   = p_event_class_code
1377           AND trx_id             = p_trx_id
1378           AND trx_line_id        = p_trx_line_id
1379           AND trx_level_type     = p_trx_level_type;
1380 
1381   IF SQL%ROWCOUNT > 0 THEN
1382     UPDATE zx_lines
1383        SET process_for_recovery_flag   = 'Y',  -- DECODE(L.Reporting_Only_Flag, 'N', 'Y', 'N')
1384            rec_tax_amt                 = NULL,
1385            rec_tax_amt_tax_curr        = NULL,
1386            rec_tax_amt_funcl_curr      = NULL,
1387            nrec_tax_amt                = NULL,
1388            nrec_tax_amt_tax_curr       = NULL,
1389            nrec_tax_amt_funcl_curr     = NULL
1390      WHERE application_id     = p_application_id
1391        AND entity_code        = p_entity_code
1392        AND event_class_code   = p_event_class_code
1393        AND trx_id             = p_trx_id
1394        AND trx_line_id        = p_trx_line_id
1395        AND trx_level_type     = p_trx_level_type;
1396   END IF;
1397 
1398   IF (g_level_procedure >= g_current_runtime_level ) THEN
1399     FND_LOG.STRING(g_level_procedure,
1400                    'ZX.PLSQL.ZX_TRL_PUB_PKG.delete_tax_dists.END',
1401                    'ZX_TRL_PUB_PKG: delete_tax_dists (-)'||x_return_status);
1402   END IF;
1403 
1404   EXCEPTION
1405     WHEN FND_API.G_EXC_ERROR THEN
1406       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1407       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1408         FND_LOG.STRING(g_level_unexpected,
1409                        'ZX.PLSQL.ZX_TRL_PUB_PKG.delete_tax_dists',
1410                        'Return Status = ' || x_return_status);
1411       END IF;
1412 
1413     WHEN OTHERS THEN
1414       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1415       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1416 
1417       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1418         FND_LOG.STRING(g_level_unexpected,
1419                        'ZX.PLSQL.ZX_TRL_PUB_PKG.delete_tax_dists',
1420                         l_error_buffer);
1421       END IF;
1422 
1423 END delete_tax_dists;
1424 
1425 
1426 ------------------------------------------------------------------------------
1427 --  PRIVATE PROCEDURE
1428 --  Check_Frozen_Tax_Dists
1429 --
1430 --  DESCRIPTION
1431 --  To run a validation to find if any frozen tax distribution is deleted
1432 --  from ZX_REC_NREC_DIST while tax processing
1433 ------------------------------------------------------------------------------
1434 
1435   PROCEDURE Check_Frozen_Tax_Dists
1436        (x_return_status     OUT NOCOPY VARCHAR2,
1437         p_event_class_rec   IN  ZX_API_PUB.EVENT_CLASS_REC_TYPE) IS
1438 
1439     l_return_status           VARCHAR2(1);
1440     l_error_buffer            VARCHAR2(200);
1441     l_msg_context_info_rec    ZX_API_PUB.CONTEXT_INFO_REC_TYPE;
1442     l_prev_trx_id             NUMBER;
1443 
1444     -- Cursors added for Frozen Tax Deleted Check --
1445     -- bug 14198788 driving queries from zx_trx_headers_gt
1446     CURSOR get_deleted_frzn_dist IS
1447     SELECT /*+ leading(headers_gt) use_nl(AID) */
1448            DISTINCT
1449            aid.invoice_id           trx_id,
1450            aid.detail_tax_dist_id   tax_dist_id,
1451            aid.summary_tax_line_id  summary_tax_line_id
1452       FROM ap_invoice_distributions_all aid,
1453            zx_trx_headers_gt headers_gt
1454      WHERE headers_gt.event_class_code = p_event_class_rec.event_class_code
1455        AND headers_gt.entity_code = p_event_class_rec.entity_code
1456        AND headers_gt.application_id = p_event_class_rec.application_id
1457        AND aid.invoice_id = headers_gt.trx_id
1458        AND aid.line_type_lookup_code IN ('NONREC_TAX','REC_TAX','TRV','TERV','TIPV')
1459        AND (aid.accounting_event_id IS NOT NULL
1460             OR NVL(aid.match_status_flag,'N') IN ('A','T')
1461             OR NVL(aid.posted_flag,'N') = 'Y'
1462             OR NVL(aid.encumbered_flag, 'N') IN ('Y','D','W','X'))
1463        AND NOT EXISTS(SELECT /*+ NO_UNNEST  */ 'Tax Distributions'
1464                         FROM zx_rec_nrec_dist zd
1465                        WHERE zd.rec_nrec_tax_dist_id = aid.detail_tax_dist_id
1466                          AND NVL(zd.self_assessed_flag, 'N') = 'N');
1467 
1468     -- bug 14198788 driving queries from zx_trx_headers_gt
1469     CURSOR get_deleted_frzn_sa_dist IS
1470     SELECT /*+ leading(headers_gt) use_nl(ASAD) */
1471            DISTINCT
1472            asad.invoice_id           trx_id,
1473            asad.detail_tax_dist_id   tax_dist_id,
1474            asad.summary_tax_line_id  summary_tax_line_id
1475       FROM ap_self_assessed_tax_dist_all asad,
1476            zx_trx_headers_gt headers_gt
1477      WHERE headers_gt.event_class_code = p_event_class_rec.event_class_code
1478        AND headers_gt.entity_code = p_event_class_rec.entity_code
1479        AND headers_gt.application_id = p_event_class_rec.application_id
1480        AND asad.invoice_id = headers_gt.trx_id
1481        AND asad.line_type_lookup_code IN ('NONREC_TAX','REC_TAX')
1482        AND (asad.accounting_event_id IS NOT NULL
1483             OR NVL(asad.match_status_flag,'N') IN ('A','T')
1484             OR NVL(asad.posted_flag,'N') = 'Y'
1485             OR NVL(asad.encumbered_flag, 'N') IN ('Y','D','W','X'))
1486        AND NOT EXISTS(SELECT /*+ NO_UNNEST */ 'Tax Distributions'
1487                         FROM zx_rec_nrec_dist zd
1488                        WHERE zd.rec_nrec_tax_dist_id = asad.detail_tax_dist_id
1489                          AND NVL(zd.self_assessed_flag, 'N') = 'Y');
1490 
1491     TYPE num_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
1492     l_trx_id_tbl               num_tbl_type;
1493     l_tax_dist_id_tbl          num_tbl_type;
1494     l_summary_tax_line_id_tbl  num_tbl_type;
1495 
1496   BEGIN
1497     g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1498 
1499     IF (g_level_procedure >= g_current_runtime_level ) THEN
1500       FND_LOG.STRING(g_level_procedure,
1501                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Check_Frozen_Tax_Dists.BEGIN',
1502                      'ZX_TRL_PUB_PKG: Check_Frozen_Tax_Dists (+)');
1503     END IF;
1504 
1505     --  Initialize API return status to success
1506     x_return_status := FND_API.G_RET_STS_SUCCESS;
1507 
1508     l_msg_context_info_rec.application_id := p_event_class_rec.application_id;
1509     l_msg_context_info_rec.entity_code := p_event_class_rec.entity_code;
1510     l_msg_context_info_rec.event_class_code := p_event_class_rec.event_class_code;
1511     l_msg_context_info_rec.trx_id := NULL;
1512     l_msg_context_info_rec.trx_line_id := NULL;
1513     l_msg_context_info_rec.trx_level_type := NULL;
1514     l_msg_context_info_rec.summary_tax_line_number := NULL;
1515     l_msg_context_info_rec.tax_line_id := NULL;
1516     l_msg_context_info_rec.trx_line_dist_id := NULL;
1517 
1518     -- Preventive check to find deleted frozen tax dists --
1519     IF (g_level_procedure >= g_current_runtime_level ) THEN
1520       FND_LOG.STRING(g_level_procedure,
1521            'ZX.PLSQL.ZX_TRL_PUB_PKG.Check_Frozen_Tax_Dists',
1522            'Start : Frozen Tax Distributions deleted Validation : '||TO_CHAR(SYSDATE,'DD-MM-YYYY HH24:MI:SS'));
1523     END IF;
1524 
1525     l_prev_trx_id := -99;
1526     l_trx_id_tbl.DELETE;
1527     l_tax_dist_id_tbl.DELETE;
1528     l_summary_tax_line_id_tbl.DELETE;
1529 
1530     -- Frozen dist deleted check for Normal Tax Distributions
1531     OPEN get_deleted_frzn_dist;
1532     FETCH get_deleted_frzn_dist BULK COLLECT
1533      INTO l_trx_id_tbl,
1534           l_tax_dist_id_tbl,
1535           l_summary_tax_line_id_tbl;
1536     CLOSE get_deleted_frzn_dist;
1537 
1538     IF l_trx_id_tbl.COUNT > 0 THEN
1539       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1540       l_error_buffer := 'System is trying to delete frozen tax distributions. '||
1541                         'Unable to complete Tax Processing.';
1542 
1543       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1544         FND_LOG.STRING(g_level_unexpected,
1545                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Check_Frozen_Tax_Dists',
1546                        'ERROR: '||l_error_buffer);
1547         FND_LOG.STRING(g_level_unexpected,
1548                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Check_Frozen_Tax_Dists',
1549                        'Following frozen tax distributions deleted from ZX_REC_NREC_DIST:');
1550       END IF;
1551 
1552       FOR i IN NVL(l_trx_id_tbl.FIRST,0)..NVL(l_trx_id_tbl.LAST,-99) LOOP
1553         IF l_prev_trx_id <> l_trx_id_tbl(i) THEN
1554           l_msg_context_info_rec.trx_id := l_trx_id_tbl(i);
1555 
1556           FND_MESSAGE.SET_NAME('ZX','ZX_GENERIC_TEXT');
1557           FND_MESSAGE.SET_TOKEN('GENERIC_TEXT',l_error_buffer);
1558           ZX_API_PUB.Add_Msg(l_msg_context_info_rec);
1559         END IF;
1560         l_prev_trx_id := l_trx_id_tbl(i);
1561 
1562         IF (g_level_unexpected >= g_current_runtime_level ) THEN
1563            FND_LOG.STRING(g_level_unexpected,
1564                           'ZX.PLSQL.ZX_TRL_PUB_PKG.Check_Frozen_Tax_Dists',
1565                           TO_CHAR(i)||'. Trx_Id: '||TO_CHAR(l_trx_id_tbl(i))||
1566                           ', Rec_Nrec_Tax_Dist_Id: '||TO_CHAR(l_tax_dist_id_tbl(i))||
1567                           ', Summary_Tax_Line_Id: '||TO_CHAR(l_summary_tax_line_id_tbl(i)));
1568         END IF;
1569 
1570       END LOOP;
1571     END IF;
1572 
1573     l_prev_trx_id := -99;
1574     l_trx_id_tbl.DELETE;
1575     l_tax_dist_id_tbl.DELETE;
1576     l_summary_tax_line_id_tbl.DELETE;
1577 
1578     -- Frozen dist deleted check for Self Assessed Tax Distributions
1579     OPEN get_deleted_frzn_sa_dist;
1580     FETCH get_deleted_frzn_sa_dist BULK COLLECT
1581      INTO l_trx_id_tbl,
1582           l_tax_dist_id_tbl,
1583           l_summary_tax_line_id_tbl;
1584     CLOSE get_deleted_frzn_sa_dist;
1585 
1586     IF l_trx_id_tbl.COUNT > 0 THEN
1587       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1588       l_error_buffer := 'System is trying to delete self-assessed frozen tax distributions. '||
1589                         'Unable to complete Tax Processing.';
1590 
1591       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1592         FND_LOG.STRING(g_level_unexpected,
1593                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Check_Frozen_Tax_Dists',
1594                        'ERROR: '||l_error_buffer);
1595         FND_LOG.STRING(g_level_unexpected,
1596                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Check_Frozen_Tax_Dists',
1597                        'Following self-assessed frozen tax distributions deleted from ZX_REC_NREC_DIST:');
1598       END IF;
1599 
1600       FOR i IN NVL(l_trx_id_tbl.FIRST,0)..NVL(l_trx_id_tbl.LAST,-99) LOOP
1601         IF l_prev_trx_id <> l_trx_id_tbl(i) THEN
1602           l_msg_context_info_rec.trx_id := l_trx_id_tbl(i);
1603 
1604           FND_MESSAGE.SET_NAME('ZX','ZX_GENERIC_TEXT');
1605           FND_MESSAGE.SET_TOKEN('GENERIC_TEXT',l_error_buffer);
1606           ZX_API_PUB.Add_Msg(l_msg_context_info_rec);
1607         END IF;
1608         l_prev_trx_id := l_trx_id_tbl(i);
1609 
1610         IF (g_level_unexpected >= g_current_runtime_level ) THEN
1611            FND_LOG.STRING(g_level_unexpected,
1612                           'ZX.PLSQL.ZX_TRL_PUB_PKG.Check_Frozen_Tax_Dists',
1613                           TO_CHAR(i)||'. Trx_Id: '||TO_CHAR(l_trx_id_tbl(i))||
1614                           ', Rec_Nrec_Tax_Dist_Id: '||TO_CHAR(l_tax_dist_id_tbl(i))||
1615                           ', Summary_Tax_Line_Id: '||TO_CHAR(l_summary_tax_line_id_tbl(i)));
1616         END IF;
1617 
1618       END LOOP;
1619     END IF;
1620 
1621     IF (g_level_procedure >= g_current_runtime_level ) THEN
1622       FND_LOG.STRING(g_level_procedure,
1623            'ZX.PLSQL.ZX_TRL_PUB_PKG.Check_Frozen_Tax_Dists',
1624            'End : Frozen Tax Distributions deleted Validation : '||TO_CHAR(SYSDATE,'DD-MM-YYYY HH24:MI:SS'));
1625     END IF;
1626 
1627     IF (g_level_procedure >= g_current_runtime_level ) THEN
1628       FND_LOG.STRING(g_level_procedure,
1629                      'ZX.PLSQL.ZX_TRL_PUB_PKG.Check_Frozen_Tax_Dists.END',
1630                      'ZX_TRL_PUB_PKG: Check_Frozen_Tax_Dists(-)'||x_return_status);
1631     END IF;
1632 
1633   EXCEPTION
1634     WHEN OTHERS THEN
1635       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1636       l_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1637 
1638       IF (g_level_unexpected >= g_current_runtime_level ) THEN
1639         FND_LOG.STRING(g_level_unexpected,
1640                        'ZX.PLSQL.ZX_TRL_PUB_PKG.Check_Frozen_Tax_Dists',
1641                         l_error_buffer);
1642       END IF;
1643   END Check_Frozen_Tax_Dists;
1644 
1645 --   Package constructor
1646 --
1647 -------------------------------------------------------------------------------
1648 
1649 END ZX_TRL_PUB_PKG;