DBA Data[Home] [Help]

PACKAGE BODY: APPS.ZX_TDS_OFFSET_TAX_DETM_PKG

Source


1 package body ZX_TDS_OFFSET_TAX_DETM_PKG as
2 /* $Header: zxdioffsettxpkgb.pls 120.43.12010000.2 2008/11/12 12:22:45 spasala ship $ */
3 
4 PROCEDURE get_offset_info(
5             p_tax_rate_code         IN     ZX_RATES_B.TAX_RATE_CODE%TYPE,
6             p_tax                   IN     ZX_TAXES_B.TAX%TYPE,
7             p_tax_regime_code       IN     ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
8             p_tax_status_code       IN     ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
9             p_tax_determine_date    IN     ZX_DETAIL_TAX_LINES_GT.TAX_DETERMINE_DATE%TYPE,
10             p_tax_jurisdiction_code IN     ZX_JURISDICTIONS_B.tax_jurisdiction_code%TYPE,
11             p_tax_class             IN     ZX_RATES_B.TAX_CLASS%TYPE,
12             p_offset_tax_rate_id       OUT NOCOPY ZX_RATES_B.TAX_RATE_ID%TYPE,
13             p_tax_rate                 OUT NOCOPY ZX_LINES.TAX_RATE%TYPE,
14             p_return_status            OUT NOCOPY VARCHAR2,
15             p_error_buffer             OUT NOCOPY VARCHAR2);
16 
17 PROCEDURE set_null_columns(
18             p_offset_tax_line_rec   IN OUT NOCOPY ZX_DETAIL_TAX_LINES_GT%ROWTYPE);
19 
20 PROCEDURE set_flg_columns(
21             p_offset_tax_line_rec   IN OUT NOCOPY ZX_DETAIL_TAX_LINES_GT%ROWTYPE);
22 
23 PROCEDURE set_amt_columns(
24             p_offset_tax_line_rec   IN OUT NOCOPY ZX_DETAIL_TAX_LINES_GT%ROWTYPE,
25             p_parent_tax_rate       IN            VARCHAR2,
26             p_initial_tax_rate      IN            NUMBER,
27             p_return_status            OUT NOCOPY VARCHAR2,
28             p_error_buffer             OUT NOCOPY VARCHAR2);
29 
30 
31 PROCEDURE get_tax_status_id(
32             p_tax_regime_code       IN     ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
33             p_tax                   IN     ZX_TAXES_B.TAX%TYPE,
34             p_tax_status_code       IN     ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
35             p_tax_determine_date    IN     ZX_DETAIL_TAX_LINES_GT.TAX_DETERMINE_DATE%TYPE,
36             p_tax_status_id            OUT NOCOPY ZX_STATUS_B.TAX_STATUS_ID%TYPE,
37             p_return_status            OUT NOCOPY VARCHAR2,
38             p_error_buffer             OUT NOCOPY VARCHAR2);
39 
40 PROCEDURE get_tax_id(
41             p_tax_regime_code       IN     ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
42             p_tax                   IN     ZX_TAXES_B.TAX%TYPE,
43             p_tax_determine_date    IN     ZX_DETAIL_TAX_LINES_GT.TAX_DETERMINE_DATE%TYPE,
44             p_tax_id                   OUT NOCOPY ZX_TAXES_B.TAX_ID%TYPE,
45             p_return_status            OUT NOCOPY VARCHAR2,
46             p_error_buffer             OUT NOCOPY VARCHAR2);
47 
48 PROCEDURE get_old_offset_tax_line_id(
49             p_event_class_rec        IN                ZX_API_PUB.EVENT_CLASS_REC_TYPE,
50             p_offset_tax_line_rec    IN                ZX_DETAIL_TAX_LINES_GT%ROWTYPE,
51             p_old_offset_tax_line_id    OUT NOCOPY ZX_LINES.TAX_LINE_ID%TYPE,
52             p_return_status             OUT NOCOPY VARCHAR2,
53             p_error_buffer              OUT NOCOPY VARCHAR2);
54 
55 PROCEDURE create_offset_tax_line(
56             p_offset_tax_line_rec    IN OUT NOCOPY ZX_DETAIL_TAX_LINES_GT%ROWTYPE,
57             p_event_class_rec        IN     ZX_API_PUB.EVENT_CLASS_REC_TYPE,
58             p_offset_tax_rate_code   IN     ZX_RATES_B.TAX_RATE_CODE%TYPE,
59             p_offset_tax_rate_id     IN     ZX_RATES_B.TAX_RATE_ID%TYPE,
60             p_tax_rate               IN     ZX_LINES.TAX_RATE%TYPE,
61             p_initial_tax_rate       IN     ZX_LINES.TAX_RATE%TYPE,
62             p_offset_tax             IN     ZX_TAXES_B.TAX%TYPE,
63             p_offset_status_code     IN     ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
64             p_return_status             OUT NOCOPY VARCHAR2,
65             p_error_buffer              OUT NOCOPY VARCHAR2);
66 
67 g_current_runtime_level      NUMBER;
68 g_level_statement            CONSTANT  NUMBER   := FND_LOG.LEVEL_STATEMENT;
69 g_level_procedure            CONSTANT  NUMBER   := FND_LOG.LEVEL_PROCEDURE;
70 g_level_unexpected           CONSTANT  NUMBER   := FND_LOG.LEVEL_UNEXPECTED;
71 g_level_error 		     CONSTANT  NUMBER   := FND_LOG.LEVEL_ERROR;
72 
73 ----------------------------------------------------------------------
74 --  PUBLIC PROCEDURE
75 --  process_offset_tax
76 --
77 --  DESCRIPTION
78 --
79 --  This procedure is the entry point to offset tax determination process
80 
81 PROCEDURE process_offset_tax(
82             p_offset_tax_line_rec  IN OUT NOCOPY ZX_DETAIL_TAX_LINES_GT%ROWTYPE,
83             p_event_class_rec      IN            ZX_API_PUB.EVENT_CLASS_REC_TYPE,
84             p_return_status           OUT NOCOPY VARCHAR2,
85             p_error_buffer            OUT NOCOPY VARCHAR2)
86 
87 IS
88   l_tax_rate_id               ZX_RATES_B.TAX_RATE_ID%TYPE;
89   l_offset_tax_rate_id        ZX_RATES_B.TAX_RATE_ID%TYPE;
90   l_offset_tax_rate           ZX_LINES.TAX_RATE%TYPE;
91   l_initial_tax_rate          ZX_LINES.TAX_RATE%TYPE;
92   l_offset_tax                ZX_TAXES_B.TAX%TYPE;
93   l_offset_tax_regime_code    ZX_REGIMES_B.TAX_REGIME_CODE%TYPE;
94   l_offset_tax_status_code    ZX_STATUS_B.TAX_STATUS_CODE%TYPE;
95   l_offset_tax_rate_code      ZX_RATES_B.OFFSET_TAX_RATE_CODE%TYPE;
96   l_tax_rate_rec              ZX_TDS_UTILITIES_PKG.zx_rate_info_rec_type;
97   l_tax_class                 ZX_RATES_B.TAX_CLASS%TYPE;
98 
99 BEGIN
100   g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
101 
102   IF (g_level_procedure >= g_current_runtime_level ) THEN
103     FND_LOG.STRING(g_level_procedure,
104                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.process_offset_tax.BEGIN',
105                    'ZX_TDS_OFFSET_TAX_DETM_PKG: process_offset_tax(+)');
106   END IF;
107 
108   p_return_status := FND_API.G_RET_STS_SUCCESS;
109   p_error_buffer  := NULL;
110 
111   -- Bug#5417753- determine tax_class value
112   IF p_event_class_rec.prod_family_grp_code = 'O2C' THEN
113     l_tax_class := 'OUTPUT';
114   ELSIF p_event_class_rec.prod_family_grp_code = 'P2P' THEN
115     l_tax_class := 'INPUT';
116   END IF;
117 
118   l_tax_rate_id := p_offset_tax_line_rec.tax_rate_id;
119   l_offset_tax_regime_code := p_offset_tax_line_rec.tax_regime_code;
120 
121 
122   IF ZX_TDS_UTILITIES_PKG.g_tax_rate_info_tbl.EXISTS(l_tax_rate_id) THEN
123     l_offset_tax_rate_code :=
124         ZX_TDS_UTILITIES_PKG.g_tax_rate_info_tbl(l_tax_rate_id).offset_tax_rate_code;
125     l_offset_tax_status_code :=
126         ZX_TDS_UTILITIES_PKG.g_tax_rate_info_tbl(l_tax_rate_id).offset_status_code;
127     l_offset_tax :=
128         ZX_TDS_UTILITIES_PKG.g_tax_rate_info_tbl(l_tax_rate_id).offset_tax;
129 
130     l_initial_tax_rate :=
131         ZX_TDS_UTILITIES_PKG.g_tax_rate_info_tbl(l_tax_rate_id).percentage_rate;
132   ELSE
133 
134     ZX_TDS_UTILITIES_PKG.get_tax_rate_info(
135       p_tax_rate_id      => l_tax_rate_id,
136       p_tax_rate_rec     => l_tax_rate_rec,
137       p_return_status    => p_return_status,
138       p_error_buffer     => p_error_buffer
139     );
140     IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
141       IF (g_level_error >= g_current_runtime_level ) THEN
142         FND_LOG.STRING(g_level_error,
143                      'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.process_offset_tax',
144                      'Incorrect status returned from ZX_TDS_UTILITIES_PKG.get_tax_rate_info'||
145                      'p_return_status = ' || p_return_status);
146         FND_LOG.STRING(g_level_error,
147                      'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.process_offset_tax',
148                      'p_error_buffer  = ' || p_error_buffer);
149       END IF;
150       RETURN;
151     END IF;
152 
153     ZX_TDS_UTILITIES_PKG.g_tax_rate_info_tbl(l_tax_rate_id) := l_tax_rate_rec;
154 
155     l_offset_tax_rate_code   := l_tax_rate_rec.offset_tax_rate_code;
156     l_offset_tax_status_code := l_tax_rate_rec.offset_status_code;
157     l_offset_tax             := l_tax_rate_rec.offset_tax;
158     l_initial_tax_rate       := l_tax_rate_rec.percentage_rate;
159 
160   END IF;
161 
162   get_offset_info(l_offset_tax_rate_code,
163                   l_offset_tax,
164                   l_offset_tax_regime_code,
165                   l_offset_tax_status_code,
166                   p_offset_tax_line_rec.tax_determine_date,
167                   p_offset_tax_line_rec.tax_jurisdiction_code,
168                   l_tax_class,
169                   l_offset_tax_rate_id,
170                   l_offset_tax_rate,
171                   p_return_status,
172                   p_error_buffer);
173 
174   IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
175     --
176     -- bug#4893261- need to seed ZX_OFFSET_RATE_NOT_FOUND
177     --
178     IF p_return_status = FND_API.G_RET_STS_ERROR THEN
179       FND_MESSAGE.SET_NAME('ZX','ZX_OFFSET_RATE_NOT_FOUND');
180         FND_MESSAGE.SET_TOKEN('TAX_REGIME', l_offset_tax_regime_code);
181         FND_MESSAGE.SET_TOKEN('TAX',l_offset_tax);
182         FND_MESSAGE.SET_TOKEN('TAX_STATUS',l_offset_tax_status_code);
183         FND_MESSAGE.SET_TOKEN('TAX_RATE_CODE', l_offset_tax_rate_code);
184 
185         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
186                             p_offset_tax_line_rec.trx_line_id;
187         ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
188                             p_offset_tax_line_rec.trx_level_type;
189 
190         ZX_API_PUB.add_msg(
191               ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
192 
193     END IF;
194     RETURN;
195   END IF;
196 
197   IF (g_level_procedure >= g_current_runtime_level ) THEN
198 
199     FND_LOG.STRING(g_level_procedure,
200                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.process_offset_tax.END',
201                    'initial tax rate '||to_char(l_initial_tax_rate));
202   END IF;
203   create_offset_tax_line(p_offset_tax_line_rec,
204                          p_event_class_rec,
205                          l_offset_tax_rate_code,
206                          l_offset_tax_rate_id,
207                          l_offset_tax_rate,
208                          l_initial_tax_rate,
209                          l_offset_tax,
210                          l_offset_tax_status_code,
211                          p_return_status,
212                          p_error_buffer);
213   IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
214     RETURN;
215   END IF;
216 
217   IF (g_level_procedure >= g_current_runtime_level ) THEN
218 
219     FND_LOG.STRING(g_level_procedure,
220                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.process_offset_tax.END',
221                    'ZX_TDS_OFFSET_TAX_DETM_PKG: process_offset_tax(-)'||p_return_status);
222   END IF;
223 
224 EXCEPTION
225   WHEN OTHERS THEN
226     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
227     p_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
228 
229     IF (g_level_unexpected >= g_current_runtime_level ) THEN
230       FND_LOG.STRING(g_level_unexpected,
231                      'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.process_offset_tax',
232                       p_error_buffer);
233     END IF;
234 
235 END process_offset_tax;
236 
237 -----------------------------------------------------------------------
238 --  PRIVATE PROCEDURE
239 --  get_offset_info
240 --
241 --  DESCRIPTION
242 --  This procedure gets offset tax info from ZX_RATES_B
243 --
244 PROCEDURE get_offset_info(
245             p_tax_rate_code         IN     ZX_RATES_B.TAX_RATE_CODE%TYPE,
246             p_tax                   IN     ZX_TAXES_B.TAX%TYPE,
247             p_tax_regime_code       IN     ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
248             p_tax_status_code       IN     ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
249             p_tax_determine_date    IN     ZX_DETAIL_TAX_LINES_GT.TAX_DETERMINE_DATE%TYPE,
250             p_tax_jurisdiction_code IN     ZX_JURISDICTIONS_B.tax_jurisdiction_code%TYPE,
251             p_tax_class             IN     ZX_RATES_B.TAX_CLASS%TYPE,
252             p_offset_tax_rate_id       OUT NOCOPY    ZX_RATES_B.TAX_RATE_ID%TYPE,
253             p_tax_rate                 OUT NOCOPY ZX_LINES.TAX_RATE%TYPE,
254             p_return_status            OUT NOCOPY VARCHAR2,
255             p_error_buffer             OUT NOCOPY VARCHAR2)
256 
257 IS
258   --l_Rate_Type_Code           ZX_RATES_B.Rate_Type_Code%TYPE;
259   --l_percentage_rate          ZX_RATES_B.PERCENTAGE_RATE%TYPE;
260   --l_quantity_rate            ZX_RATES_B.QUANTITY_RATE%TYPE;
261   l_tax_rate_rec               ZX_TDS_UTILITIES_PKG.zx_rate_info_rec_type;
262 
263   /* Bug#5417753- use cache structure
264   CURSOR get_offset_info_csr
265     (c_tax_rate_code         ZX_RATES_B.TAX_RATE_CODE%TYPE,
266      c_tax                   ZX_TAXES_B.TAX%TYPE,
267      c_tax_regime_code       ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
268      c_tax_status_code       ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
269      c_tax_determine_date    ZX_DETAIL_TAX_LINES_GT.TAX_DETERMINE_DATE%TYPE)
270   IS
271 
272     SELECT tax_rate_id,
273            Rate_Type_Code,
274            percentage_rate,
275            quantity_rate
276       FROM ZX_SCO_RATES_B_V
277       WHERE tax_rate_code   = c_tax_rate_code         AND
278             tax             = c_tax                   AND
279             tax_regime_code = c_tax_regime_code       AND
280             tax_status_code = c_tax_status_code       AND
281             active_flag     = 'Y'                     AND
282             c_tax_determine_date >= effective_from    AND
283             (c_tax_determine_date <= effective_to     OR
284              effective_to IS NULL)
285     ORDER BY subscription_level_code;
286    */
287 
288 BEGIN
289   IF (g_level_statement >= g_current_runtime_level ) THEN
290     FND_LOG.STRING(g_level_statement,
291                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.get_offset_info.BEGIN',
292                    'ZX_TDS_OFFSET_TAX_DETM_PKG: get_offset_info(+)'||
293                    'p_tax_rate_code = ' || p_tax_rate_code||
294                    'p_tax = ' || p_tax||
295                    'p_tax_regime_code = ' || p_tax_regime_code||
296                    'p_tax_jurisdiction_code = ' || p_tax_jurisdiction_code ||
297                    'p_tax_class = ' || p_tax_class ||
298                    'p_tax_status_code = ' || p_tax_status_code);
299 
300   END IF;
301 
302   p_return_status := FND_API.G_RET_STS_SUCCESS;
303 
304   /* Bug#5417753- use cache structure
305   OPEN get_offset_info_csr(p_tax_rate_code,
306                            p_tax,
307                            p_tax_regime_code,
308                            p_tax_status_code,
309                            p_tax_determine_date);
310   FETCH get_offset_info_csr INTO
311     p_offset_tax_rate_id,
312     l_Rate_Type_Code,
313     l_percentage_rate,
314     l_quantity_rate;
315   IF get_offset_info_csr%NOTFOUND THEN
316     p_return_status := FND_API.G_RET_STS_ERROR;
317     p_error_buffer  := 'No data found for the specified tax rate ';
318   END IF;
319   CLOSE get_offset_info_csr;
320   */
321 
322   ZX_TDS_UTILITIES_PKG.get_tax_rate_info(
323                         p_tax_regime_code,
324                         p_tax,
325                         p_tax_jurisdiction_code,
326                         p_tax_status_code,
327                         p_tax_rate_code,
328                         p_tax_determine_date,
329                         p_tax_class,
330                         l_tax_rate_rec,
331                         p_return_status,
332                         p_error_buffer);
333 
334   IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
335     p_offset_tax_rate_id := l_tax_rate_rec.tax_rate_id;
336 
337     IF l_tax_rate_rec.Rate_Type_Code = 'PERCENTAGE' THEN
338       p_tax_rate := l_tax_rate_rec.percentage_rate;
339     ELSE
340       p_tax_rate := l_tax_rate_rec.quantity_rate;
341     END IF;
342   END IF;
343 
344   IF (g_level_statement >= g_current_runtime_level ) THEN
345 
346     FND_LOG.STRING(g_level_statement,
347                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.get_offset_info.END',
348                    'ZX_TDS_OFFSET_TAX_DETM_PKG: get_offset_info(-)'||
349                    'p_tax_rate = ' || to_char(p_tax_rate));
350   END IF;
351 
352 EXCEPTION
353   WHEN OTHERS THEN
354     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
355     p_error_buffer  :=  sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
356 
357     IF (FND_LOG.LEVEL_UNEXPECTED >= g_current_runtime_level ) THEN
358       FND_LOG.STRING(FND_LOG.LEVEL_UNEXPECTED,
359                      'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.get_offset_info',
360                      'p_error_buffer  = ' || p_error_buffer);
361   END IF;
362 END get_offset_info;
363 
364 -----------------------------------------------------------------------
365 --  PRIVATE PROCEDURE
366 --  set_null_columns
367 --
368 --  DESCRIPTION
369 --  This procedure sets the values of columns to NULL
370 
371 PROCEDURE set_null_columns(
372             p_offset_tax_line_rec IN OUT NOCOPY ZX_DETAIL_TAX_LINES_GT%ROWTYPE)
373 IS
374 BEGIN
375   IF (g_level_statement >= g_current_runtime_level ) THEN
376     FND_LOG.STRING(g_level_statement,
377                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.set_null_columns.BEGIN',
378                    'ZX_TDS_OFFSET_TAX_DETM_PKG: set_null_columns(+)');
379   END IF;
380 
381   p_offset_tax_line_rec.orig_tax_status_id             := NULL;
382   p_offset_tax_line_rec.orig_tax_status_code           := NULL;
383   p_offset_tax_line_rec.orig_tax_rate_id               := NULL;
384   p_offset_tax_line_rec.orig_tax_rate_code             := NULL;
385   p_offset_tax_line_rec.orig_tax_rate                  := NULL;
386   p_offset_tax_line_rec.orig_taxable_amt               := NULL;
387   p_offset_tax_line_rec.orig_taxable_amt_tax_curr      := NULL;
388   p_offset_tax_line_rec.orig_tax_amt                   := NULL;
389   p_offset_tax_line_rec.orig_tax_amt_tax_curr          := NULL;
390 --  p_offset_tax_line_rec.offset_tax_line_number         := NULL;
391   p_offset_tax_line_rec.created_by                     := NULL;
392   p_offset_tax_line_rec.creation_date                  := NULL;
393   p_offset_tax_line_rec.tax_line_id                    := NULL;
394   p_offset_tax_line_rec.last_manual_entry              := NULL;
395   p_offset_tax_line_rec.tax_provider_id                := NULL;
396   p_offset_tax_line_rec.tax_applicability_result_id    := NULL;
397   p_offset_tax_line_rec.status_result_id               := NULL;
398   p_offset_tax_line_rec.rate_result_id                 := NULL;
399   p_offset_tax_line_rec.basis_result_id                := NULL;
400   p_offset_tax_line_rec.thresh_result_id               := NULL;
401   p_offset_tax_line_rec.calc_result_id                 := NULL;
402   p_offset_tax_line_rec.direct_rate_result_id          := NULL;
403   p_offset_tax_line_rec.tax_apportionment_line_number  := NULL;
404   p_offset_tax_line_rec.summary_tax_line_id            := NULL;
405   p_offset_tax_line_rec.tax_hold_code                  := NULL;
406   p_offset_tax_line_rec.tax_hold_released_code         := NULL;
407 
408   IF (g_level_statement >= g_current_runtime_level ) THEN
409     FND_LOG.STRING(g_level_statement,
410                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.set_null_columns.END',
411                    'ZX_TDS_OFFSET_TAX_DETM_PKG: set_null_columns(-)');
412   END IF;
413 
414 EXCEPTION
415   WHEN OTHERS THEN
416     IF (g_level_unexpected >= g_current_runtime_level ) THEN
417       FND_LOG.STRING(g_level_unexpected,
418                      'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.set_null_columns',
419                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
420     END IF;
421 
422 END set_null_columns;
423 
424 ----------------------------------------------------------------------
425 --  PRIVATE PROCEDURE
426 --  set_flg_columns
427 --
428 --  DESCRIPTION
429 --  This procedure initializes the value of flag columns
430 
431 PROCEDURE set_flg_columns(
432             p_offset_tax_line_rec IN OUT NOCOPY ZX_DETAIL_TAX_LINES_GT%ROWTYPE)
433 IS
434 BEGIN
435   IF (g_level_statement >= g_current_runtime_level ) THEN
436     FND_LOG.STRING(g_level_statement,
437                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.set_flg_columns.BEGIN',
438                    'ZX_TDS_OFFSET_TAX_DETM_PKG: set_flg_columns(+)');
439   END IF;
440 
441   p_offset_tax_line_rec.Offset_Flag                     := 'Y'; --Bug6509867
442   p_offset_tax_line_rec.Compounding_Tax_Flag            := 'N';
443   p_offset_tax_line_rec.Tax_Apportionment_Flag          := 'N';
444   p_offset_tax_line_rec.Overridden_Flag                 := 'N';
445   p_offset_tax_line_rec.Manually_Entered_Flag           := 'N';
446   p_offset_tax_line_rec.Reporting_Only_Flag             := 'N';
447   p_offset_tax_line_rec.Freeze_Until_Overridden_Flag    := 'N';
448   p_offset_tax_line_rec.Copied_From_Other_Doc_Flag      := 'N';
449   p_offset_tax_line_rec.Recalc_Required_Flag            := 'N';
450   p_offset_tax_line_rec.Settlement_Flag                 := 'N';
451   p_offset_tax_line_rec.Associated_Child_Frozen_Flag    := 'N';
452   p_offset_tax_line_rec.Enforce_From_Natural_Acct_Flag  := 'N';
453   p_offset_tax_line_rec.Historical_Flag                 := 'N';
454 
455   -- should get from the parent line
456   -- p_offset_tax_line_rec.Process_For_Recovery_Flag       := 'Y';
457 
458   IF (g_level_statement >= g_current_runtime_level ) THEN
459     FND_LOG.STRING(g_level_statement,
460                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.set_flg_columns.END',
461                    'ZX_TDS_OFFSET_TAX_DETM_PKG: set_flg_columns(-)');
462   END IF;
463 
464 EXCEPTION
465   WHEN OTHERS THEN
466 
467     IF (g_level_unexpected >= g_current_runtime_level ) THEN
468       FND_LOG.STRING(g_level_unexpected,
469                      'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.set_flg_columns',
470                       sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
471     END IF;
472 
473 END set_flg_columns;
474 ----------------------------------------------------------------------
475 --  PRIVATE PROCEDURE
476 --  set_amt_columns
477 --
478 --  DESCRIPTION
479 --  This procedure populates tax amount related columns
480 
481 PROCEDURE set_amt_columns(
482             p_offset_tax_line_rec IN OUT NOCOPY ZX_DETAIL_TAX_LINES_GT%ROWTYPE,
483             p_parent_tax_rate     IN            VARCHAR2,
484             p_initial_tax_rate    IN            NUMBER,
485             p_return_status          OUT NOCOPY VARCHAR2,
486             p_error_buffer           OUT NOCOPY VARCHAR2
487 )
488 IS
489   l_tax_id                ZX_TAXES_B.TAX_ID%TYPE;
490   l_tax_min_acct_unit     ZX_TAXES_B.MINIMUM_ACCOUNTABLE_UNIT%TYPE;
491   l_tax_precision         ZX_TAXES_B.TAX_PRECISION%TYPE;
492 BEGIN
493   IF (g_level_statement >= g_current_runtime_level ) THEN
494     FND_LOG.STRING(g_level_statement,
495                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.set_amt_columns.BEGIN',
496                    'ZX_TDS_OFFSET_TAX_DETM_PKG: set_amt_columns(+)');
497   END IF;
498 
499   p_return_status := FND_API.G_RET_STS_SUCCESS;
500 
501   --
502   -- taxable amounts would be same as the original tax line
503   -- do not need to change unrounded_taxable_amt,
504   -- taxable_amt, taxable_amt_tax_curr, taxable_amt_funcl_curr
505   --
506 
507   --
508   -- prorated total amounts would be opposite of original tax line
509   --
510   p_offset_tax_line_rec.prd_total_tax_amt := - p_offset_tax_line_rec.prd_total_tax_amt;
511   p_offset_tax_line_rec.prd_total_tax_amt_tax_curr := - p_offset_tax_line_rec.prd_total_tax_amt_tax_curr;
512   p_offset_tax_line_rec.prd_total_tax_amt_funcl_curr := - p_offset_tax_line_rec.prd_total_tax_amt_funcl_curr;
513 
514   --
515   -- check to see if need to recalculate tax related amounts
516   -- if offset tax rate is different
517   --
518 
519   IF (p_offset_tax_line_rec.tax_rate + p_parent_tax_rate = 0 ) THEN
520     --
521     -- set all offset amounts to negative, no need to recalculate
522     --
523     p_offset_tax_line_rec.unrounded_tax_amt := - p_offset_tax_line_rec.unrounded_tax_amt;
524     p_offset_tax_line_rec.tax_amt := - p_offset_tax_line_rec.tax_amt;
525     p_offset_tax_line_rec.tax_amt_tax_curr := - p_offset_tax_line_rec.tax_amt_tax_curr;
526     p_offset_tax_line_rec.cal_tax_amt := p_offset_tax_line_rec.tax_amt;
527     p_offset_tax_line_rec.cal_tax_amt_tax_curr := p_offset_tax_line_rec.tax_amt_tax_curr;
528     p_offset_tax_line_rec.tax_amt_funcl_curr := - p_offset_tax_line_rec.tax_amt_funcl_curr;
529     p_offset_tax_line_rec.cal_tax_amt_funcl_curr  := - p_offset_tax_line_rec.cal_tax_amt_funcl_curr;
530 
531     RETURN;
532   END IF;
533 
534   IF (g_level_statement >= g_current_runtime_level ) THEN
535 
536     FND_LOG.STRING(g_level_statement,
537                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.set_amt_columns.END',
538                    'initia tax rate'||to_number(p_initial_tax_rate));
539   END IF;
540 
541   IF (g_level_statement >= g_current_runtime_level ) THEN
542 
543     FND_LOG.STRING(g_level_statement,
544                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.set_amt_columns.END',
545                    'offset tax rate'||to_number(p_offset_tax_line_rec.tax_rate));
546   END IF;
547   IF (p_offset_tax_line_rec.tax_rate + p_initial_tax_rate = 0 ) THEN
548     --
549     -- set all offset amounts to negative, no need to recalculate
550     --
551     p_offset_tax_line_rec.unrounded_tax_amt := - p_offset_tax_line_rec.unrounded_tax_amt;
552     p_offset_tax_line_rec.tax_amt := - p_offset_tax_line_rec.tax_amt;
553     p_offset_tax_line_rec.tax_amt_tax_curr := - p_offset_tax_line_rec.tax_amt_tax_curr;
554     p_offset_tax_line_rec.cal_tax_amt := p_offset_tax_line_rec.tax_amt;
555     p_offset_tax_line_rec.cal_tax_amt_tax_curr := p_offset_tax_line_rec.tax_amt_tax_curr;
556     p_offset_tax_line_rec.tax_amt_funcl_curr := - p_offset_tax_line_rec.tax_amt_funcl_curr;
557     p_offset_tax_line_rec.cal_tax_amt_funcl_curr  := - p_offset_tax_line_rec.cal_tax_amt_funcl_curr;
558     p_offset_tax_line_rec.tax_rate  := - p_parent_tax_rate;
559 
560     RETURN;
561   END IF;
562   --
563   -- offset tax has a different rate, need to recalculate amounts
564   --
565 
566   p_offset_tax_line_rec.unrounded_tax_amt :=
567      p_offset_tax_line_rec.unrounded_taxable_amt * p_offset_tax_line_rec.tax_rate/100;
568 
569   --
570   -- tax amount
571   --
572   p_offset_tax_line_rec.tax_amt := p_offset_tax_line_rec.unrounded_tax_amt;
573 
574   p_offset_tax_line_rec.tax_amt :=
575     ZX_TDS_TAX_ROUNDING_PKG.round_tax(
576               p_offset_tax_line_rec.tax_amt,
577               p_offset_tax_line_rec.Rounding_Rule_Code,
578               p_offset_tax_line_rec.minimum_accountable_unit,
579               p_offset_tax_line_rec.precision,
580               p_return_status,
581               p_error_buffer);
582 
583 
584   IF p_offset_tax_line_rec.mrc_tax_line_flag = 'N' THEN
585     --
586     -- tax amount tax currency
587     --
588     p_offset_tax_line_rec.tax_amt_tax_curr :=
589       p_offset_tax_line_rec.unrounded_tax_amt * p_offset_tax_line_rec.tax_currency_conversion_rate;
590 
591     --
592     -- now round the tax amount tax currency
593     --
594 
595     l_tax_id := p_offset_tax_line_rec.tax_id;
596     l_tax_precision := ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).tax_precision;
597     l_tax_min_acct_unit := ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).minimum_accountable_unit;
598 
599     p_offset_tax_line_rec.tax_amt_tax_curr :=
600         ZX_TDS_TAX_ROUNDING_PKG.round_tax(
601                 p_offset_tax_line_rec.tax_amt_tax_curr,
602                 p_offset_tax_line_rec.Rounding_Rule_Code,
603                 l_tax_min_acct_unit,
604                 l_tax_precision,
605                 p_return_status,
606                 p_error_buffer);
607 
608     IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
609       RETURN;
610     END IF;
611 
612     --
613     -- functional currency
614     --
615 
616     IF p_offset_tax_line_rec.currency_conversion_rate IS NOT NULL THEN
617       p_offset_tax_line_rec.tax_amt_funcl_curr :=
618         p_offset_tax_line_rec.unrounded_tax_amt * p_offset_tax_line_rec.currency_conversion_rate;
619 
620       p_offset_tax_line_rec.tax_amt_funcl_curr :=
621         ZX_TDS_TAX_ROUNDING_PKG.round_tax_funcl_curr(
622                 p_offset_tax_line_rec.tax_amt_funcl_curr,
623                 p_offset_tax_line_rec.ledger_id,
624                 p_return_status,
625                 p_error_buffer);
626 
627     END IF;
628   END IF;
629 
630   --
631   -- calculated tax amounts
632   --
633   p_offset_tax_line_rec.cal_tax_amt := p_offset_tax_line_rec.tax_amt;
634   p_offset_tax_line_rec.cal_tax_amt_tax_curr := p_offset_tax_line_rec.tax_amt_tax_curr;
635   p_offset_tax_line_rec.cal_tax_amt_funcl_curr := p_offset_tax_line_rec.tax_amt_funcl_curr;
636 
637   IF (g_level_statement >= g_current_runtime_level ) THEN
638 
639     FND_LOG.STRING(g_level_statement,
640                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.set_amt_columns.END',
641                    'ZX_TDS_OFFSET_TAX_DETM_PKG: set_amt_columns(-)'||p_return_status);
642   END IF;
643 
644 EXCEPTION
645   WHEN OTHERS THEN
646     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
647     p_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
648 
649     IF (g_level_unexpected >= g_current_runtime_level ) THEN
650       FND_LOG.STRING(g_level_unexpected,
651                      'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.set_amt_columns',
652                       p_error_buffer);
653     END IF;
654 
655 END set_amt_columns;
656 -----------------------------------------------------------------------
657 --  PRIVATE PROCEDURE
658 --  get_tax_status_id
659 --
660 --  DESCRIPTION
661 --  This procedure gets  tax status id from global cache structure based on
662 --  tax regime code, tax and tax status code
663 --
664 PROCEDURE get_tax_status_id(
665             p_tax_regime_code       IN     ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
666             p_tax                   IN     ZX_TAXES_B.TAX%TYPE,
667             p_tax_status_code       IN     ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
668             p_tax_determine_date    IN     ZX_DETAIL_TAX_LINES_GT.TAX_DETERMINE_DATE%TYPE,
669             p_tax_status_id            OUT NOCOPY ZX_STATUS_B.TAX_STATUS_ID%TYPE,
670             p_return_status            OUT NOCOPY VARCHAR2,
671             p_error_buffer             OUT NOCOPY VARCHAR2)
672 
673 IS
674   l_status_rec       ZX_TDS_UTILITIES_PKG.ZX_STATUS_INFO_REC;
675 
676 BEGIN
677   IF (g_level_statement >= g_current_runtime_level ) THEN
678     FND_LOG.STRING(g_level_statement,
679                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.get_tax_status_id.BEGIN',
680                    'ZX_TDS_OFFSET_TAX_DETM_PKG: get_tax_status_id(+)');
681   END IF;
682   p_return_status := FND_API.G_RET_STS_SUCCESS;
683 
684   ZX_TDS_UTILITIES_PKG.get_tax_status_cache_info(
685                                   p_tax,
686                                   p_tax_regime_code,
687                                   p_tax_status_code,
688                                   p_tax_determine_date,
689                                   l_status_rec,
690                                   p_return_status,
691                                   p_error_buffer);
692 
693   IF p_return_status = FND_API.G_RET_STS_SUCCESS  THEN
694     p_tax_status_id := l_status_rec.tax_status_id;
695   END IF;
696 
697   IF (g_level_statement >= g_current_runtime_level ) THEN
698 
699     FND_LOG.STRING(g_level_statement,
700                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.get_tax_status_id.END',
701                    'ZX_TDS_OFFSET_TAX_DETM_PKG: get_tax_status_id(-)');
702   END IF;
703 
704 EXCEPTION
705   WHEN OTHERS THEN
706     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
707     p_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
708 
709     IF (g_level_unexpected >= g_current_runtime_level ) THEN
710       FND_LOG.STRING(g_level_unexpected,
711                      'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.get_tax_status_id',
712                       p_error_buffer);
713     END IF;
714 
715 END get_tax_status_id;
716 -----------------------------------------------------------------------
717 --  PRIVATE PROCEDURE
718 --  get_tax_id
719 --
720 --  DESCRIPTION
721 --  This procedure gets  tax id from zx_taxes based on
722 --  tax regime code and  tax
723 --
724 PROCEDURE get_tax_id(
725             p_tax_regime_code       IN     ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
726             p_tax                   IN     ZX_TAXES_B.TAX%TYPE,
727             p_tax_determine_date    IN     ZX_DETAIL_TAX_LINES_GT.TAX_DETERMINE_DATE%TYPE,
728             p_tax_id                   OUT NOCOPY ZX_TAXES_B.TAX_ID%TYPE,
729             p_return_status            OUT NOCOPY VARCHAR2,
730             p_error_buffer             OUT NOCOPY VARCHAR2)
731 
732 IS
733   l_tax_rec         ZX_TDS_UTILITIES_PKG.ZX_TAX_INFO_CACHE_REC;
734 BEGIN
735   IF (g_level_statement >= g_current_runtime_level ) THEN
736     FND_LOG.STRING(g_level_statement,
737                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.get_tax_id.BEGIN',
738                    'ZX_TDS_OFFSET_TAX_DETM_PKG: get_tax_id(+)');
739   END IF;
740 
741   p_return_status := FND_API.G_RET_STS_SUCCESS;
742 
743   ZX_TDS_UTILITIES_PKG.get_tax_cache_info(
744                         p_tax_regime_code,
745                         p_tax,
746                         p_tax_determine_date,
747                         l_tax_rec,
748                         p_return_status,
749                         p_error_buffer);
750 
751   IF p_return_status = FND_API.G_RET_STS_SUCCESS  THEN
752     p_tax_id := l_tax_rec.tax_id;
753   END IF;
754 
755   IF (g_level_statement >= g_current_runtime_level ) THEN
756 
757     FND_LOG.STRING(g_level_statement,
758                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.get_tax_id.END',
759                    'ZX_TDS_OFFSET_TAX_DETM_PKG: get_tax_id(-)'||
760                    'p_tax_id = ' || to_char(p_tax_id)||
761                    'p_return_status = ' || p_return_status);
762   END IF;
763 
764 EXCEPTION
765   WHEN OTHERS THEN
766     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
767     p_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
768 
769     IF (g_level_unexpected >= g_current_runtime_level ) THEN
770       FND_LOG.STRING(g_level_unexpected,
771                      'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.get_tax_id',
772                       p_error_buffer);
773     END IF;
774 
775 END get_tax_id;
776 
777 ----------------------------------------------------------------------
778 --  PRIVATE PROCEDURE
779 --  get_old_offset_tax_line_id
780 --
781 --  DESCRIPTION
782 --
783 --  The procedure gets the tax line id of an offset tax line
784 --  from the repository based on the value of the tax line id
785 --  it links to
786 
787 PROCEDURE get_old_offset_tax_line_id(
788             p_event_class_rec            IN            ZX_API_PUB.EVENT_CLASS_REC_TYPE,
789             p_offset_tax_line_rec        IN            ZX_DETAIL_TAX_LINES_GT%ROWTYPE,
790             p_old_offset_tax_line_id        OUT NOCOPY ZX_LINES.TAX_LINE_ID%TYPE,
791             p_return_status                 OUT NOCOPY VARCHAR2,
792             p_error_buffer                  OUT NOCOPY VARCHAR2)
793 IS
794 
795 
796   CURSOR get_old_offset_tax_line_id_csr
797   -- (c_offset_link_to_tax_line_id   ZX_LINES.OFFSET_LINK_TO_TAX_LINE_ID%TYPE)
798   IS
799     SELECT tax_line_id
800       FROM ZX_LINES
801      WHERE APPLICATION_ID = p_offset_tax_line_rec.APPLICATION_ID
802        AND ENTITY_CODE = p_offset_tax_line_rec.ENTITY_CODE
803        AND EVENT_CLASS_CODE = p_offset_tax_line_rec.EVENT_CLASS_CODE
804        AND trx_id = p_offset_tax_line_rec.trx_id
805        AND trx_line_id = p_offset_tax_line_rec.trx_line_id
806        AND trx_level_type = p_offset_tax_line_rec.trx_level_type
807        AND tax_regime_code = p_offset_tax_line_rec.tax_regime_code
808        AND offset_link_to_tax_line_id = p_offset_tax_line_rec.offset_link_to_tax_line_id;
809 
810 BEGIN
811   IF (g_level_statement >= g_current_runtime_level ) THEN
812     FND_LOG.STRING(g_level_statement,
813                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.get_old_offset_tax_line_id.BEGIN',
814                    'ZX_TDS_OFFSET_TAX_DETM_PKG: get_old_offset_tax_line_id(+)'||
815                    'p_offset_link_to_tax_line_id = ' ||
816                     to_char(p_offset_tax_line_rec.offset_link_to_tax_line_id));
817   END IF;
818 
819   p_return_status := FND_API.G_RET_STS_SUCCESS;
820 
821   OPEN get_old_offset_tax_line_id_csr;
822   FETCH get_old_offset_tax_line_id_csr INTO p_old_offset_tax_line_id;
823   IF get_old_offset_tax_line_id_csr%NOTFOUND THEN
824     --
825     -- in this case, it is the first time this tax line has offset
826     -- tax associated with it, no offset tax line has been previously
827     -- created for this line
828     --
829     p_old_offset_tax_line_id := NULL;
830   END IF;
831   CLOSE get_old_offset_tax_line_id_csr;
832 
833 
834   IF (g_level_statement >= g_current_runtime_level ) THEN
835 
836     FND_LOG.STRING(g_level_statement,
837                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.get_old_offset_tax_line_id.END',
838                    'ZX_TDS_OFFSET_TAX_DETM_PKG: get_old_offset_tax_line_id(-)'||
839                    'p_old_offset_tax_line_id = ' ||
840                     to_char(p_old_offset_tax_line_id)||
841                    'p_return_status = ' || p_return_status);
842   END IF;
843 
844 EXCEPTION
845   WHEN OTHERS THEN
846     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
847     p_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
848 
849     IF (g_level_unexpected >= g_current_runtime_level ) THEN
850       FND_LOG.STRING(g_level_unexpected,
851                      'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.get_old_offset_tax_line_id',
852                       p_error_buffer);
853     END IF;
854 
855 END get_old_offset_tax_line_id;
856 
857 ----------------------------------------------------------------------
858 --  PRIVATE PROCEDURE
859 --  create_offset_tax_line
860 --
861 --  DESCRIPTION
862 --
863 --  The procedure is used to create an offset tax line for a main tax line
864 --  which has offset_flag = 'Y'
865 
866 PROCEDURE create_offset_tax_line(
867             p_offset_tax_line_rec    IN OUT NOCOPY ZX_DETAIL_TAX_LINES_GT%ROWTYPE,
868             p_event_class_rec        IN     ZX_API_PUB.EVENT_CLASS_REC_TYPE,
869             p_offset_tax_rate_code   IN     ZX_RATES_B.TAX_RATE_CODE%TYPE,
870             p_offset_tax_rate_id     IN     ZX_RATES_B.TAX_RATE_ID%TYPE,
871             p_tax_rate               IN     ZX_LINES.TAX_RATE%TYPE,
872             p_initial_tax_rate       IN     ZX_LINES.TAX_RATE%TYPE,
873             p_offset_tax             IN     ZX_TAXES_B.TAX%TYPE,
874             p_offset_status_code     IN     ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
875             p_return_status             OUT NOCOPY VARCHAR2,
876             p_error_buffer              OUT NOCOPY VARCHAR2)
877 IS
878 
879   CURSOR  get_tax_line_number_csr IS
880    SELECT NVL(MAX(tax_line_number), 0) + 1
881      FROM zx_lines
882     WHERE application_id       = p_offset_tax_line_rec.application_id
883       AND event_class_code    = p_offset_tax_line_rec.event_class_code
884       AND entity_code         = p_offset_tax_line_rec.entity_code
885       AND trx_id              = p_offset_tax_line_rec.trx_id
886       AND trx_line_id         = p_offset_tax_line_rec.trx_line_id
887       AND trx_level_type      = p_offset_tax_line_rec.trx_level_type;
888 
889   l_parent_tax_rate         ZX_LINES.TAX_RATE%TYPE;
890   l_old_offset_tax_line_id  ZX_LINES.TAX_LINE_ID%TYPE;
891 
892 BEGIN
893   IF (g_level_statement >= g_current_runtime_level ) THEN
894     FND_LOG.STRING(g_level_statement,
895                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.create_offset_tax_line.BEGIN',
896                    'ZX_TDS_OFFSET_TAX_DETM_PKG: create_offset_tax_line(+)');
897   END IF;
898 
899   p_return_status := FND_API.G_RET_STS_SUCCESS;
900 
901   --
902   -- set link to current non offset tax line
903   --
904   p_offset_tax_line_rec.offset_link_to_tax_line_id :=
905                                 p_offset_tax_line_rec.tax_line_id;
906 --  p_offset_tax_line_rec.tax_line_number :=
907 --                     p_offset_tax_line_rec.offset_tax_line_number;
908 
909   --
910   -- null out columns
911   --
912   set_null_columns(p_offset_tax_line_rec);
913 
914   --
915   -- set flags
916   --
917   set_flg_columns(p_offset_tax_line_rec);
918 
919   --
920   -- populate tax_line_id and who columns
921   --
922   ZX_TDS_TAX_LINES_POPU_PKG.populate_mandatory_columns(
923                                                p_offset_tax_line_rec,
924                                                p_return_status,
925                                                p_error_buffer);
926   IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
927     RETURN;
928   END IF;
929 
930   --
931   -- keep the tax rate of the tax line which associated with this
932   -- offset tax line, it will be used to determine whether all tax amounts
933   -- related need to be recalculated if offset tax rate is different
934   --
935   l_parent_tax_rate := p_offset_tax_line_rec.tax_rate;
936 
937   --
938   -- populate tax related info
939   --
940   p_offset_tax_line_rec.tax_rate_code := p_offset_tax_rate_code;
941   p_offset_tax_line_rec.tax_rate_id := p_offset_tax_rate_id;
942   p_offset_tax_line_rec.tax_rate  := p_tax_rate;
943   p_offset_tax_line_rec.offset_tax_rate_code := NULL;
944 
945   p_offset_tax_line_rec.tax := p_offset_tax;
946   get_tax_id(p_offset_tax_line_rec.tax_regime_code,
947              p_offset_tax,
948              p_offset_tax_line_rec.tax_determine_date,
949              p_offset_tax_line_rec.tax_id,
950              p_return_status,
951              p_error_buffer);
952   IF p_return_status <>FND_API.G_RET_STS_SUCCESS THEN
953     RETURN;
954   END IF;
955 
956   p_offset_tax_line_rec.tax_status_code :=  p_offset_status_code;
957   get_tax_status_id(p_offset_tax_line_rec.tax_regime_code,
958                     p_offset_tax,
959                     p_offset_status_code,
960                     p_offset_tax_line_rec.tax_determine_date,
961                     p_offset_tax_line_rec.tax_status_id,
962                     p_return_status,
963                     p_error_buffer);
964   IF p_return_status <>FND_API.G_RET_STS_SUCCESS THEN
965     RETURN;
966   END IF;
967 
968   p_offset_tax_line_rec.tax_type_code :=
969     ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_offset_tax_line_rec.tax_id).tax_type_code;
970 
971   --
972   -- populate amount columns
973   --
974   set_amt_columns(p_offset_tax_line_rec,
975                   l_parent_tax_rate,
976                   p_initial_tax_rate,
977                   p_return_status,
978                   p_error_buffer);
979 
980   IF p_return_status <>FND_API.G_RET_STS_SUCCESS THEN
981     RETURN;
982   END IF;
983 
984   -- bug 5580990: populate legal_reporting_status
985   IF p_event_class_rec.tax_reporting_flag = 'Y' THEN
986     p_offset_tax_line_rec.legal_reporting_status :=
987              ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
988                     p_offset_tax_line_rec.tax_id).legal_reporting_status_def_val;
989   END IF;
990 
991   --
992   -- if tax line is updated or overridden, need to preserve the
993   -- existing offset tax line id for this tax line since the offset
994   -- tax line may have been accounted, update the new created offset
995   -- tax line id with the existing offset tax line id in the
996   -- repository for this tax line
997   --
998 
999   -- populate tax_line_number for OVERRIDE_TAX
1000   --
1001   IF NVL(p_offset_tax_line_rec.tax_event_type_code, 'A') = 'OVERRIDE_TAX' THEN
1002     OPEN  get_tax_line_number_csr;
1003     FETCH get_tax_line_number_csr INTO p_offset_tax_line_rec.tax_line_number;
1004     CLOSE get_tax_line_number_csr;
1005   END IF;
1006 
1007   -- Bug Fix 5417887
1008   -- IF (p_event_class_rec.tax_event_type_code = 'UPDATE' OR
1009   IF (p_offset_tax_line_rec.tax_event_type_code = 'UPDATE' OR
1010       p_event_class_rec.tax_event_type_code = 'OVERRIDE_TAX') THEN
1011     get_old_offset_tax_line_id(
1012             p_event_class_rec,
1013             p_offset_tax_line_rec,
1014             l_old_offset_tax_line_id,
1015             p_return_status,
1016             p_error_buffer);
1017 
1018     IF p_return_status <>FND_API.G_RET_STS_SUCCESS THEN
1019       RETURN;
1020     END IF;
1021 
1022     IF l_old_offset_tax_line_id IS NOT NULL THEN
1023       --
1024       -- overwrite the newly generated tax line id with
1025       -- the existing one in the repository
1026       --
1027       p_offset_tax_line_rec.tax_line_id := l_old_offset_tax_line_id;
1028     END IF;
1029   END IF;
1030 
1031   IF (g_level_statement >= g_current_runtime_level ) THEN
1032 
1033     FND_LOG.STRING(g_level_statement,
1034                    'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.create_offset_tax_line.END',
1035                    'ZX_TDS_OFFSET_TAX_DETM_PKG: create_offset_tax_line(-)'||p_return_status);
1036   END IF;
1037 
1038 EXCEPTION
1039   WHEN OTHERS THEN
1040     p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1041     p_error_buffer  := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1042 
1043     IF (g_level_unexpected >= g_current_runtime_level ) THEN
1044       FND_LOG.STRING(g_level_unexpected,
1045                      'ZX.PLSQL.ZX_TDS_OFFSET_TAX_DETM_PKG.create_offset_tax_line',
1046                       p_error_buffer);
1047     END IF;
1048 
1049 END create_offset_tax_line;
1050 
1051 END  ZX_TDS_OFFSET_TAX_DETM_PKG;