[Home] [Help]
PACKAGE BODY: APPS.ZX_TRD_INTERNAL_SERVICES_PVT
Source
1 PACKAGE BODY ZX_TRD_INTERNAL_SERVICES_PVT AS
2 /* $Header: zxmirecdmsrvpvtb.pls 120.132.12020000.8 2013/04/24 11:05:27 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 TYPE index_amt_rec_type IS RECORD (
12 tbl_index BINARY_INTEGER,
13 tbl_amt NUMBER);
14
15 TYPE index_amt_tbl_type IS TABLE OF index_amt_rec_type
16 INDEX BY BINARY_INTEGER;
17
18 PROCEDURE distribute_rounding_diff (
19 p_index_amt_tbl IN OUT NOCOPY index_amt_tbl_type,
20 p_rounding_diff IN NUMBER,
21 p_min_acct_unit IN NUMBER,
22 p_return_status OUT NOCOPY VARCHAR2,
23 p_error_buffer OUT NOCOPY VARCHAR2);
24
25 PROCEDURE sort_tbl_amt_desc (
26 p_index_amt_tbl IN OUT NOCOPY index_amt_tbl_type,
27 p_return_status OUT NOCOPY VARCHAR2,
28 p_error_buffer OUT NOCOPY VARCHAR2);
29
30 PROCEDURE round_tax_dists_trx_curr (
31 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
32 p_rnd_begin_index IN NUMBER,
33 p_rnd_end_index IN NUMBER,
34 p_tax_line_amt IN NUMBER,
35 p_return_status OUT NOCOPY VARCHAR2,
36 p_error_buffer OUT NOCOPY VARCHAR2);
37
38 PROCEDURE convert_tax_dists (
39 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
40 p_rnd_begin_index IN NUMBER,
41 p_rnd_end_index IN NUMBER,
42 p_tax_line_amt_tax_curr IN NUMBER,
43 p_tax_line_amt_funcl_curr IN NUMBER,
44 p_return_status OUT NOCOPY VARCHAR2,
45 p_error_buffer OUT NOCOPY VARCHAR2);
46
47 PROCEDURE get_recovery_from_applied(
48 p_tax_id IN NUMBER,
49 p_tax_apportionment_line_num IN NUMBER,
50 p_prd_total_tax_amt IN NUMBER,
51 p_trx_line_dist_index IN NUMBER,
52 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
53 p_rnd_begin_index IN NUMBER,
54 p_rnd_end_index OUT NOCOPY NUMBER,
55 p_return_status OUT NOCOPY VARCHAR2,
56 p_error_buffer OUT NOCOPY VARCHAR2);
57
58 PROCEDURE get_recovery_from_adjusted(
59 p_tax_id IN NUMBER,
60 p_tax_apportionment_line_num IN NUMBER,
61 p_trx_line_dist_index IN NUMBER,
62 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
63 p_rnd_begin_index IN NUMBER,
64 p_rnd_end_index OUT NOCOPY NUMBER,
65 p_return_status OUT NOCOPY VARCHAR2,
66 p_error_buffer OUT NOCOPY VARCHAR2);
67
68 PROCEDURE enforce_recovery_from_ref(
69 p_detail_tax_line_tbl IN ZX_TRD_SERVICES_PUB_PKG.TAX_LINE_TBL_TYPE,
70 p_tax_line_index IN NUMBER,
71 p_trx_line_dist_index IN NUMBER,
72 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
73 p_rnd_begin_index IN NUMBER,
74 p_rnd_end_index OUT NOCOPY NUMBER,
75 p_return_status OUT NOCOPY VARCHAR2,
76 p_error_buffer OUT NOCOPY VARCHAR2);
77
78 PROCEDURE round_and_adjust_prd_tax_amts (
79 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
80 p_rnd_begin_index IN NUMBER,
81 p_rnd_end_index IN NUMBER,
82 p_return_status OUT NOCOPY VARCHAR2,
83 p_error_buffer OUT NOCOPY VARCHAR2);
84
85 PROCEDURE get_variance_related_columns(
86 p_detail_tax_line_tbl IN ZX_TRD_SERVICES_PUB_PKG.TAX_LINE_TBL_TYPE,
87 p_tax_line_index IN NUMBER,
88 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
89 p_rnd_begin_index IN NUMBER,
90 p_rnd_end_index IN NUMBER,
91 p_return_status OUT NOCOPY VARCHAR2,
92 p_error_buffer OUT NOCOPY VARCHAR2);
93
94 PROCEDURE calc_tax_dist(
95 p_detail_tax_line_tbl IN ZX_TRD_SERVICES_PUB_PKG.TAX_LINE_TBL_TYPE,
96 p_tax_line_index IN NUMBER,
97 p_trx_line_dist_index IN NUMBER,
98 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
99 p_rnd_begin_index IN NUMBER,
100 p_rnd_end_index IN OUT NOCOPY NUMBER,
101 p_event_class_rec IN ZX_API_PUB.event_class_rec_type,
102 p_return_status OUT NOCOPY VARCHAR2,
103 p_error_buffer OUT NOCOPY VARCHAR2) IS
104
105 l_index NUMBER;
106 l_new_index NUMBER;
107 l_total_count NUMBER;
108 l_curr_count NUMBER;
109 l_new_count NUMBER;
110 l_tax_dist_id NUMBER;
111 l_max_tax_dist_number NUMBER;
112
113 CURSOR get_tax_distribution_cur is
114 SELECT *
115 FROM zx_rec_nrec_dist
116 WHERE NVL(reverse_flag,'N') = 'N'
117 AND tax_line_id = p_detail_tax_line_tbl(p_tax_line_index).tax_line_id
118 AND trx_line_dist_id =
119 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_dist_id(
120 p_trx_line_dist_index)
121 ORDER BY rec_nrec_tax_dist_id, recoverable_flag;
122
123 CURSOR get_maximum_tax_dist_num_csr is
124 SELECT max(rec_nrec_tax_dist_number)
125 FROM zx_rec_nrec_dist
126 WHERE tax_line_id = p_detail_tax_line_tbl(p_tax_line_index).tax_line_id
127 AND trx_line_dist_id =
128 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_dist_id(
129 p_trx_line_dist_index);
130
131 BEGIN
132
133 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
134
135 IF (g_level_procedure >= g_current_runtime_level ) THEN
136 FND_LOG.STRING(g_level_procedure,
137 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.CALC_TAX_DIST.BEGIN',
138 'ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist(+)');
139 END IF;
140
141 p_return_status:= FND_API.G_RET_STS_SUCCESS;
142
143 l_index:= p_rnd_begin_index - 1;
144 l_new_index := NULL;
145 l_total_count := 0;
146
147 IF (g_level_statement >= g_current_runtime_level ) THEN
148 FND_LOG.STRING(g_level_statement,
149 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.CALC_TAX_DIST',
150 'p_rnd_begin_index = ' || p_rnd_begin_index||
151 'p_rnd_end_index = ' || p_rnd_end_index);
152 END IF;
153
154 OPEN get_tax_distribution_cur;
155
156 LOOP -- get_tax_distribution_cur
157 l_index := l_index + 1;
158 FETCH get_tax_distribution_cur INTO p_rec_nrec_dist_tbl(l_index);
159 EXIT WHEN get_tax_distribution_cur%NOTFOUND;
160
161 END LOOP; -- get_tax_distribution_cur
162
163 l_total_count:= get_tax_distribution_cur%ROWCOUNT;
164
165 IF (g_level_statement >= g_current_runtime_level ) THEN
166 FND_LOG.STRING(g_level_statement,
167 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.CALC_TAX_DIST',
168 'l_total_count = ' || l_total_count);
169 END IF;
170
171 CLOSE get_tax_distribution_cur;
172
173 IF l_total_count = 0 THEN -- first time processing
174
175 /*
176 first fetch all the tax distributions whose reverse_flag <>'Y',
177 order by recoverable_flag for the tax line id
178 and item distribution id.
179 If there is no tax distribution found -- first time calculation
180 call recovery type applicability
181 */
182
183 IF (g_level_statement >= g_current_runtime_level ) THEN
184 FND_LOG.STRING(g_level_statement,
185 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.CALC_TAX_DIST',
186 'first time calculation for this tax line and item dist');
187 END IF;
188
189 -- Modified the IF condition for Bug#14055352 --
190 IF (NVL(p_event_class_rec.enforce_tax_from_ref_doc_flag, 'N') = 'Y'
191 OR
192 -- Added following conditions for Bug#13012588 --
193 -- zero amount reference tax line --
194 (p_detail_tax_line_tbl(p_tax_line_index).other_doc_source = 'REFERENCE'
195 AND p_detail_tax_line_tbl(p_tax_line_index).unrounded_tax_amt = 0
196 AND p_detail_tax_line_tbl(p_tax_line_index).unrounded_taxable_amt = 0
197 AND p_detail_tax_line_tbl(p_tax_line_index).manually_entered_flag = 'Y'
198 AND p_detail_tax_line_tbl(p_tax_line_index).freeze_until_overridden_flag ='Y')
199 )
200 AND p_event_class_rec.tax_event_type_code <> 'OVERRIDE_TAX'
201 AND ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_application_id(p_trx_line_dist_index) IS NULL
202 AND ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_application_id(p_trx_line_dist_index) IS NULL
203 AND ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_application_id(p_trx_line_dist_index) IS NOT NULL
204 THEN
205 -- If p_event_class_rec.enforce_tax_from_ref_doc_flag = 'Y' AND
206 -- trx_line_dist_tbl.ref_doc_application_id IS NOT NULL,
207 -- OR --
208 -- If tax line is zero amount reference tax line --
209 -- get tax recovery rate code from refefence document
210 --
211 enforce_recovery_from_ref(
212 p_detail_tax_line_tbl,
213 p_tax_line_index,
214 p_trx_line_dist_index,
215 p_rec_nrec_dist_tbl,
216 p_rnd_begin_index,
217 p_rnd_end_index,
218 p_return_status,
219 p_error_buffer);
220
221 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
222 IF (g_level_statement >= g_current_runtime_level ) THEN
223 FND_LOG.STRING(g_level_statement,
224 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist',
225 'Incorrect return_status after calling ' ||
226 'ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref()'||p_return_status);
227 END IF;
228 RETURN;
229 END IF;
230
231 ELSE
232
233 det_appl_rec_type(
234 p_detail_tax_line_tbl,
235 p_tax_line_index,
236 p_trx_line_dist_index,
237 p_rec_nrec_dist_tbl,
238 p_rnd_begin_index,
239 p_rnd_end_index,
240 p_return_status,
241 p_error_buffer);
242
243 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
244 IF (g_level_statement >= g_current_runtime_level ) THEN
245 FND_LOG.STRING(g_level_statement,
246 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist',
247 'Incorrect return_status after calling ' ||
248 'ZX_TRD_INTERNAL_SERVICES_PVT.det_appl_rec_type()'||p_return_status);
249 END IF;
250 RETURN;
251 END IF;
252
253 END IF;
254
255 -- get_related_column and call recovery rate determination
256 --
257 get_tax_related_columns_sta(
258 p_detail_tax_line_tbl,
259 p_tax_line_index,
260 p_trx_line_dist_index,
261 p_rec_nrec_dist_tbl,
262 p_rnd_begin_index,
263 p_rnd_end_index,
264 p_return_status,
265 p_error_buffer);
266
267 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
268 IF (g_level_statement >= g_current_runtime_level ) THEN
269 FND_LOG.STRING(g_level_statement,
270 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist',
271 'Incorrect return_status after calling ' ||
272 'ZX_TRD_INTERNAL_SERVICES_PVT.get_tax_related_columns_sta()'||p_return_status);
273 END IF;
274 RETURN;
275 END IF;
276
277
278 get_tax_related_columns_var(
279 p_detail_tax_line_tbl,
280 p_tax_line_index,
281 p_trx_line_dist_index,
282 p_rec_nrec_dist_tbl,
283 p_rnd_begin_index,
284 p_rnd_end_index,
285 p_return_status,
286 p_error_buffer);
287
288 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
289 IF (g_level_statement >= g_current_runtime_level ) THEN
290 FND_LOG.STRING(g_level_statement,
291 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist',
292 'Incorrect return_status after calling ' ||
293 'ZX_TRD_INTERNAL_SERVICES_PVT.get_tax_related_columns_var()'||p_return_status);
294 END IF;
295 RETURN;
296 END IF;
297
298 IF ZX_TRD_SERVICES_PUB_PKG.g_variance_calc_flag = 'Y' THEN
299 get_variance_related_columns(
300 p_detail_tax_line_tbl,
301 p_tax_line_index,
302 p_rec_nrec_dist_tbl,
303 p_rnd_begin_index,
304 p_rnd_end_index,
305 p_return_status,
306 p_error_buffer);
307
308 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
309 IF (g_level_statement >= g_current_runtime_level ) THEN
310 FND_LOG.STRING(g_level_statement,
311 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist',
312 'Incorrect return_status after calling ' ||
313 'ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns()'||p_return_status);
314 END IF;
315 RETURN;
316 END IF;
317
318
319 END IF;
320
321 get_rec_rate(
322 p_detail_tax_line_tbl,
323 p_tax_line_index,
324 p_trx_line_dist_index,
325 p_event_class_rec,
326 p_rec_nrec_dist_tbl,
327 p_rnd_begin_index,
328 p_rnd_end_index,
329 p_return_status,
330 p_error_buffer);
331 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
332 IF (g_level_statement >= g_current_runtime_level ) THEN
333 FND_LOG.STRING(g_level_statement,
334 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist',
335 'Incorrect return_status after calling ' ||
336 'ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate()'||p_return_status);
337 END IF;
338 RETURN;
339 END IF;
340
341 ELSE -- second time calculation
342
343 /*
344 If there are tax distribution found -- second time calculation.
345 First we need to consider frozen tax distribution case,
346 we need to create reverse tax distributions for the frozen tax
347 distributions.
348 For example, we get
349 D1 frozen
350 D2 frozen
351 D3 frozen
352 we can assume if one tax distribution for the same tax line and item
353 dist is frozen, all tax distributions for the same tax line and item
354 dist are frozen.
355
356 So we need to create
357 D1 frozen reverse
358 D2 frozen reverse
359 D3 frozen reverse
360 D4 negative D1 reverse
361 D5 negative D2 reverse
362 D6 negative D3 reverse
363 D7 same as D1
364 D8 same as D2
365 D9 same as D3
366 THEN recovery rate determination need to be ran for D7 - D9.
367 */
368
369 IF (g_level_statement >= g_current_runtime_level ) THEN
370 FND_LOG.STRING(g_level_statement,
371 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.CALC_TAX_DIST',
372 'tax dists have been determined before '||
373 'p_rnd_begin_index = ' || p_rnd_begin_index||
374 'p_rnd_end_index = ' || p_rnd_end_index);
375 END IF;
376
377 -- get the maximum rec_nrec_tax_dist_number
378 --
379 OPEN get_maximum_tax_dist_num_csr;
380 FETCH get_maximum_tax_dist_num_csr INTO l_max_tax_dist_number;
381 CLOSE get_maximum_tax_dist_num_csr;
382
383 l_max_tax_dist_number := NVL(l_max_tax_dist_number, 0);
384
385 -- set p_rnd_end_index
386 --
387 p_rnd_end_index:= p_rnd_begin_index + l_total_count - 1;
388
389 FOR i IN p_rnd_begin_Index .. p_rnd_end_Index LOOP
390
391 -- 6709478
392 IF NVL(p_rec_nrec_dist_tbl(i).summary_tax_line_id, -999999) <>
393 NVL(p_detail_tax_line_tbl(p_tax_line_index).summary_tax_line_id, -999999)
394 THEN
395
396 SELECT zx_rec_nrec_dist_s.nextval INTO
397 p_rec_nrec_dist_tbl(i).rec_nrec_tax_dist_id FROM DUAL;
398
399 END IF;
400
401 IF NVL(p_rec_nrec_dist_tbl(i).freeze_flag, 'N') = 'Y' THEN
402
403
404 p_rec_nrec_dist_tbl(i).reverse_flag:= 'Y';
405
406 SELECT zx_rec_nrec_dist_s.nextval INTO l_tax_dist_id from dual;
407
408 l_new_index:= i + l_total_count;
409 p_rec_nrec_dist_tbl(l_new_index):= p_rec_nrec_dist_tbl(i);
410 p_rec_nrec_dist_tbl(l_new_index).rec_nrec_tax_dist_id:= l_tax_dist_id;
411 p_rec_nrec_dist_tbl(l_new_index).freeze_flag:= 'N';
412 p_rec_nrec_dist_tbl(l_new_index).reverse_flag := 'Y';
413 p_rec_nrec_dist_tbl(l_new_index).posting_flag := NULL;
414 p_rec_nrec_dist_tbl(l_new_index).reversed_tax_dist_id :=
415 p_rec_nrec_dist_tbl(i).rec_nrec_tax_dist_id;
416 p_rec_nrec_dist_tbl(l_new_index).rec_nrec_tax_amt:=
417 -p_rec_nrec_dist_tbl(l_new_index).rec_nrec_tax_amt;
418 p_rec_nrec_dist_tbl(l_new_index).rec_nrec_tax_amt_tax_curr:=
419 -p_rec_nrec_dist_tbl(l_new_index).rec_nrec_tax_amt_tax_curr;
420 p_rec_nrec_dist_tbl(l_new_index).rec_nrec_tax_amt_funcl_curr :=
421 -p_rec_nrec_dist_tbl(l_new_index).rec_nrec_tax_amt_funcl_curr;
422 p_rec_nrec_dist_tbl(l_new_index).trx_line_dist_amt:=
423 -p_rec_nrec_dist_tbl(l_new_index).trx_line_dist_amt;
424 p_rec_nrec_dist_tbl(l_new_index).trx_line_dist_tax_amt:=
425 -p_rec_nrec_dist_tbl(l_new_index).trx_line_dist_tax_amt;
426 -- 6709478
427 p_rec_nrec_dist_tbl(l_new_index).trx_line_dist_qty:=
428 -p_rec_nrec_dist_tbl(l_new_index).trx_line_dist_qty;
429 p_rec_nrec_dist_tbl(l_new_index).taxable_amt :=
430 -p_rec_nrec_dist_tbl(l_new_index).taxable_amt;
431 p_rec_nrec_dist_tbl(l_new_index).taxable_amt_tax_curr :=
432 -p_rec_nrec_dist_tbl(l_new_index).taxable_amt_tax_curr;
433 p_rec_nrec_dist_tbl(l_new_index).taxable_amt_funcl_curr :=
434 -p_rec_nrec_dist_tbl(l_new_index).taxable_amt_funcl_curr;
435 p_rec_nrec_dist_tbl(l_new_index).orig_rec_nrec_tax_amt:=
436 -p_rec_nrec_dist_tbl(l_new_index).orig_rec_nrec_tax_amt;
437 p_rec_nrec_dist_tbl(l_new_index).orig_rec_nrec_tax_amt_tax_curr:=
438 -p_rec_nrec_dist_tbl(l_new_index).orig_rec_nrec_tax_amt_tax_curr;
439 p_rec_nrec_dist_tbl(l_new_index).unrounded_rec_nrec_tax_amt:=
440 -p_rec_nrec_dist_tbl(l_new_index).unrounded_rec_nrec_tax_amt;
441
442 p_rec_nrec_dist_tbl(l_new_index).rec_nrec_tax_dist_number :=
443 l_max_tax_dist_number + 1;
444
445 -- bug 6706941: populate gl_date for the reversed tax distribution
446 --
447 p_rec_nrec_dist_tbl(l_new_index).gl_date :=
448 AP_UTILITIES_PKG.get_reversal_gl_date(
449 p_date => p_rec_nrec_dist_tbl(l_new_index).gl_date,
450 p_org_id => p_rec_nrec_dist_tbl(l_new_index).internal_organization_id);
451
452 l_max_tax_dist_number := l_max_tax_dist_number + 1;
453
454 -- p_rec_nrec_dist_tbl(l_new_index).rec_nrec_tax_dist_number :=
455 -- -p_rec_nrec_dist_tbl(l_new_index).rec_nrec_tax_dist_number;
456
457 -- p_rec_nrec_dist_tbl(l_new_index).invoice_price_variance:=
458 -- -p_rec_nrec_dist_tbl(l_new_index).invoice_price_variance;
459 -- p_rec_nrec_dist_tbl(l_new_index).base_invoice_price_variance:=
460 -- -p_rec_nrec_dist_tbl(l_new_index).base_invoice_price_variance;
461 -- p_rec_nrec_dist_tbl(l_new_index).exchange_rate_variance:=
462 -- -p_rec_nrec_dist_tbl(l_new_index).exchange_rate_variance;
463
464 l_new_index:= l_new_index + l_total_count;
465
466 SELECT zx_rec_nrec_dist_s.nextval INTO l_tax_dist_id from dual;
467
468 p_rec_nrec_dist_tbl(l_new_index) := p_rec_nrec_dist_tbl(i);
469 p_rec_nrec_dist_tbl(l_new_index).rec_nrec_tax_dist_id := l_tax_dist_id;
470 p_rec_nrec_dist_tbl(l_new_index).freeze_flag := 'N';
471 p_rec_nrec_dist_tbl(l_new_index).reverse_flag := 'N';
472 p_rec_nrec_dist_tbl(l_new_index).posting_flag := NULL;
473
474 -- Start : Code changes for Bug#10072294 --
475 ZX_TDS_UTILITIES_PKG.populate_tax_cache (
476 p_tax_id => p_detail_tax_line_tbl(p_tax_line_index).tax_id,
477 p_return_status => p_return_status,
478 p_error_buffer => p_error_buffer);
479
480 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
481 IF (g_level_statement >= g_current_runtime_level ) THEN
482 FND_LOG.STRING(g_level_statement,
483 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist',
484 'Incorrect return_status after calling ' ||
485 'ZX_TDS_UTILITIES_PKG.populate_tax_cache()'||p_return_status);
486 END IF;
487 RETURN;
488 END IF;
489
490 IF (NVL(p_rec_nrec_dist_tbl(l_new_index).historical_flag, 'N') <> 'Y') AND
491 (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_application_id(p_trx_line_dist_index) IS NULL) AND
492 (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_application_id(p_trx_line_dist_index) IS NULL OR
493 ( ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_application_id(p_trx_line_dist_index) IS NOT NULL AND
494 ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_detail_tax_line_tbl(p_tax_line_index).tax_id).applied_amt_handling_flag = 'R'
495 )
496 )
497 THEN
498 p_rec_nrec_dist_tbl(l_new_index).recovery_rate_id := NULL;
499 END IF;
500 -- End : Code changes for Bug#10072294 --
501
502 p_rec_nrec_dist_tbl(l_new_index).rec_nrec_tax_dist_number :=
503 l_max_tax_dist_number + 1;
504 l_max_tax_dist_number := l_max_tax_dist_number + 1;
505
506 -- commented out for bug 5581573
507 --IF p_event_class_rec.enforce_tax_from_ref_doc_flag = 'Y' AND
508 -- ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_application_id(
509 -- p_trx_line_dist_index) IS NOT NULL
510 --THEN
511 -- set rec_nrec_rate to NULL
512 --
513 -- p_rec_nrec_dist_tbl(l_new_index).rec_nrec_rate := NULL;
514
515 --END IF;
516
517 -- Bug 7117340 -- DFF ER
518 p_rec_nrec_dist_tbl(l_new_index).attribute1 := NULL;
519 p_rec_nrec_dist_tbl(l_new_index).attribute2 := NULL;
520 p_rec_nrec_dist_tbl(l_new_index).attribute3 := NULL;
521 p_rec_nrec_dist_tbl(l_new_index).attribute4 := NULL;
522 p_rec_nrec_dist_tbl(l_new_index).attribute5 := NULL;
523 p_rec_nrec_dist_tbl(l_new_index).attribute6 := NULL;
524 p_rec_nrec_dist_tbl(l_new_index).attribute7 := NULL;
525 p_rec_nrec_dist_tbl(l_new_index).attribute8 := NULL;
526 p_rec_nrec_dist_tbl(l_new_index).attribute9 := NULL;
527 p_rec_nrec_dist_tbl(l_new_index).attribute10 := NULL;
528 p_rec_nrec_dist_tbl(l_new_index).attribute11 := NULL;
529 p_rec_nrec_dist_tbl(l_new_index).attribute12 := NULL;
530 p_rec_nrec_dist_tbl(l_new_index).attribute13 := NULL;
531 p_rec_nrec_dist_tbl(l_new_index).attribute14 := NULL;
532 p_rec_nrec_dist_tbl(l_new_index).attribute15 := NULL;
533 p_rec_nrec_dist_tbl(l_new_index).attribute_category := NULL;
534 -- End Bug 7117340 -- DFF ER
535
536 END IF; -- freeze_flag = 'Y'
537 END LOOP; -- i IN p_rnd_begin_Index .. p_rnd_end_Index
538
539 IF l_new_index IS NOT NULL THEN
540 p_rnd_end_index:= l_new_index;
541 END IF;
542
543 get_tax_related_columns_var(
544 p_detail_tax_line_tbl,
545 p_tax_line_index,
546 p_trx_line_dist_index,
547 p_rec_nrec_dist_tbl,
548 p_rnd_begin_index,
549 p_rnd_end_index,
550 p_return_status,
551 p_error_buffer);
552
553 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
554 IF (g_level_statement >= g_current_runtime_level ) THEN
555 FND_LOG.STRING(g_level_statement,
556 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist',
557 'Incorrect return_status after calling ' ||
558 'ZX_TRD_INTERNAL_SERVICES_PVT.get_tax_related_columns_var()'||p_return_status);
559 END IF;
560 RETURN;
561 END IF;
562
563 IF ZX_TRD_SERVICES_PUB_PKG.g_variance_calc_flag = 'Y' THEN
564 get_variance_related_columns(
565 p_detail_tax_line_tbl,
566 p_tax_line_index,
567 p_rec_nrec_dist_tbl,
568 p_rnd_begin_index,
569 p_rnd_end_index,
570 p_return_status,
571 p_error_buffer);
572
573 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
574 IF (g_level_statement >= g_current_runtime_level ) THEN
575 FND_LOG.STRING(g_level_statement,
576 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist',
577 'Incorrect return_status after calling ' ||
578 'ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns()'||p_return_status);
579 END IF;
580 RETURN;
581 END IF;
582
583 END IF;
584
585 get_rec_rate(
586 p_detail_tax_line_tbl,
587 p_tax_line_index,
588 p_trx_line_dist_index,
589 p_event_class_rec,
590 p_rec_nrec_dist_tbl,
591 p_rnd_begin_index,
592 p_rnd_end_index,
593 p_return_status,
594 p_error_buffer);
595 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
596 IF (g_level_statement >= g_current_runtime_level ) THEN
597 FND_LOG.STRING(g_level_statement,
598 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist',
599 'Incorrect return_status after calling ' ||
600 'ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate()'||p_return_status);
601 END IF;
602 RETURN;
603 END IF;
604
605
606 END IF; -- no row found
607
608 IF (g_level_procedure >= g_current_runtime_level ) THEN
609 FND_LOG.STRING(g_level_procedure,
610 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.CALC_TAX_DIST.END',
611 'ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist (-)');
612 END IF;
613
614 EXCEPTION
615 WHEN OTHERS THEN
616 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
617 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
618
619 IF (g_level_unexpected >= g_current_runtime_level ) THEN
620 FND_LOG.STRING(g_level_unexpected,
621 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist',
622 p_error_buffer);
623 FND_LOG.STRING(g_level_unexpected,
624 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.CALC_TAX_DIST.END',
625 'ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist (-)');
626 END IF;
627
628 END calc_tax_dist;
629
630 PROCEDURE cancel_tax_line(
631 p_detail_tax_line_tbl IN ZX_TRD_SERVICES_PUB_PKG.TAX_LINE_TBL_TYPE,
632 p_tax_line_index IN NUMBER,
633 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
634 p_rnd_begin_index IN NUMBER,
635 p_rnd_end_index IN OUT NOCOPY NUMBER,
636 p_event_class_rec IN ZX_API_PUB.event_class_rec_type,
637 p_return_status OUT NOCOPY VARCHAR2,
638 p_error_buffer OUT NOCOPY VARCHAR2)
639 IS
640 i number;
641 i1 number;
642
643 l_max_tax_dist_number NUMBER;
644 l_old_trx_line_dist_id NUMBER;
645
646 CURSOR get_maximum_tax_dist_num_csr (
647 c_tax_line_id NUMBER,
648 c_trx_line_dist_id NUMBER) IS
649 SELECT max(rec_nrec_tax_dist_number)
650 FROM zx_rec_nrec_dist
651 WHERE tax_line_id = c_tax_line_id
652 AND trx_line_dist_id = c_trx_line_dist_id;
653
654 Cursor get_tax_distributions_cur IS
655 SELECT * FROM zx_rec_nrec_dist
656 WHERE trx_id = p_event_class_rec.trx_id
657 AND application_id = p_event_class_rec.application_id
658 AND entity_code = p_event_class_rec.entity_code
659 AND event_class_code = p_event_class_rec.event_class_code
660 AND tax_line_id = p_detail_tax_line_tbl(p_tax_line_index).tax_line_id
661 AND NVL(reverse_flag ,'N') = 'N'
662 AND freeze_flag = 'Y'
663 ORDER BY trx_line_dist_id;
664
665
666 begin
667
668 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
669 IF (g_level_procedure >= g_current_runtime_level ) THEN
670 FND_LOG.STRING(g_level_procedure,
671 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.cancel_tax_line.BEGIN',
672 'ZX_TRD_INTERNAL_SERVICES_PVT.cancel_tax_line (+)');
673 END IF;
674
675 p_return_status:= FND_API.G_RET_STS_SUCCESS;
676 i:= p_rnd_begin_index;
677 l_old_trx_line_dist_id := NULL;
678
679 OPEN get_tax_distributions_cur;
680
681 LOOP
682 FETCH get_tax_distributions_cur INTO p_rec_nrec_dist_tbl(i);
683
684 exit when get_tax_distributions_cur%notfound;
685
686 p_rec_nrec_dist_tbl(i).reverse_flag:= 'Y';
687
688 -- bug 6906427
689 --
690 p_rec_nrec_dist_tbl(i).tax_line_number :=
691 p_detail_tax_line_tbl(p_tax_line_index).tax_line_number;
692
693 i1 := i;
694 i:= i1 + 1;
695 p_rec_nrec_dist_tbl(i):= p_rec_nrec_dist_tbl(i1);
696
697 SELECT zx_rec_nrec_dist_s.NEXTVAL INTO p_rec_nrec_dist_tbl(i).rec_nrec_tax_dist_id FROM DUAL;
698
699 p_rec_nrec_dist_tbl(i).reversed_tax_dist_id:= p_rec_nrec_dist_tbl(i1).rec_nrec_tax_dist_id;
700 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt:= -p_rec_nrec_dist_tbl(i1).rec_nrec_tax_amt;
701 p_rec_nrec_dist_tbl(i).REC_NREC_TAX_AMT_TAX_CURR:= -p_rec_nrec_dist_tbl(i1).REC_NREC_TAX_AMT_TAX_CURR;
702 p_rec_nrec_dist_tbl(i).REC_NREC_TAX_AMT_FUNCL_CURR:= -p_rec_nrec_dist_tbl(i1).REC_NREC_TAX_AMT_FUNCL_CURR;
703 p_rec_nrec_dist_tbl(i).TRX_LINE_DIST_AMT:= -p_rec_nrec_dist_tbl(i1).TRX_LINE_DIST_AMT;
704 p_rec_nrec_dist_tbl(i).TRX_LINE_DIST_TAX_AMT:= -p_rec_nrec_dist_tbl(i1).TRX_LINE_DIST_TAX_AMT;
705 p_rec_nrec_dist_tbl(i).TAXABLE_AMT := -p_rec_nrec_dist_tbl(i1).TAXABLE_AMT;
706 p_rec_nrec_dist_tbl(i).TAXABLE_AMT_TAX_CURR := -p_rec_nrec_dist_tbl(i1).TAXABLE_AMT_TAX_CURR;
707 p_rec_nrec_dist_tbl(i).TAXABLE_AMT_FUNCL_CURR := -p_rec_nrec_dist_tbl(i1).TAXABLE_AMT_FUNCL_CURR;
708 p_rec_nrec_dist_tbl(i).ORIG_REC_NREC_TAX_AMT:= -p_rec_nrec_dist_tbl(i1).ORIG_REC_NREC_TAX_AMT;
709 p_rec_nrec_dist_tbl(i).ORIG_REC_NREC_TAX_AMT_TAX_CURR:= -p_rec_nrec_dist_tbl(i1).ORIG_REC_NREC_TAX_AMT_TAX_CURR;
710 p_rec_nrec_dist_tbl(i).UNROUNDED_REC_NREC_TAX_AMT:= -p_rec_nrec_dist_tbl(i1).UNROUNDED_REC_NREC_TAX_AMT;
711 p_rec_nrec_dist_tbl(i).REC_NREC_TAX_DIST_NUMBER:= -p_rec_nrec_dist_tbl(i1).REC_NREC_TAX_DIST_NUMBER;
712 --p_rec_nrec_dist_tbl(i).INVOICE_PRICE_VARIANCE:= -p_rec_nrec_dist_tbl(i1).INVOICE_PRICE_VARIANCE;
713 --p_rec_nrec_dist_tbl(i).BASE_INVOICE_PRICE_VARIANCE:= -p_rec_nrec_dist_tbl(i1).BASE_INVOICE_PRICE_VARIANCE;
714 --p_rec_nrec_dist_tbl(i).EXCHANGE_RATE_VARIANCE:= -p_rec_nrec_dist_tbl(i1).EXCHANGE_RATE_VARIANCE;
715 p_rec_nrec_dist_tbl(i).freeze_flag := 'N';
716 p_rec_nrec_dist_tbl(i).posting_flag := 'N';
717
718 -- bug 6706941: populate gl_date for the reversed tax distribution
719 --
720 p_rec_nrec_dist_tbl(i).gl_date :=
721 AP_UTILITIES_PKG.get_reversal_gl_date(
722 p_date => p_rec_nrec_dist_tbl(i1).gl_date,
723 p_org_id => p_rec_nrec_dist_tbl(i1).internal_organization_id);
724
725 -- 6881847
726 p_rec_nrec_dist_tbl(i).trx_line_dist_qty := -p_rec_nrec_dist_tbl(i1).trx_line_dist_qty;
727
728 -- bug 6906427
729 --
730 p_rec_nrec_dist_tbl(i).tax_line_number := p_rec_nrec_dist_tbl(i1).tax_line_number;
731
732 IF l_old_trx_line_dist_id IS NULL OR
733 l_old_trx_line_dist_id <> p_rec_nrec_dist_tbl(i).trx_line_dist_id
734 THEN
735 -- get the maximum rec_nrec_tax_dist_number
736 --
737 OPEN get_maximum_tax_dist_num_csr
738 (p_rec_nrec_dist_tbl(i).tax_line_id,
739 p_rec_nrec_dist_tbl(i).trx_line_dist_id);
740 FETCH get_maximum_tax_dist_num_csr INTO l_max_tax_dist_number;
741 CLOSE get_maximum_tax_dist_num_csr;
742
743 l_max_tax_dist_number := NVL(l_max_tax_dist_number, 0);
744 l_old_trx_line_dist_id := p_rec_nrec_dist_tbl(i).trx_line_dist_id;
745
746 ELSE
747
748 l_max_tax_dist_number := l_max_tax_dist_number + 1;
749
750 END IF;
751
752 p_rec_nrec_dist_tbl(i).rec_nrec_tax_dist_number := l_max_tax_dist_number + 1;
753
754 i:= i+1;
755
756 END LOOP;
757
758 CLOSE get_tax_distributions_cur;
759
760 p_rnd_end_index:= i-1;
761
762 IF (g_level_procedure >= g_current_runtime_level ) THEN
763 FND_LOG.STRING(g_level_procedure,
764 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.cancel_tax_line.BEGIN',
765 'ZX_TRD_INTERNAL_SERVICES_PVT.cancel_tax_line (-)');
766 END IF;
767
768 EXCEPTION
769 WHEN OTHERS THEN
770 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
771 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
772
773 IF (g_level_unexpected >= g_current_runtime_level ) THEN
774 FND_LOG.STRING(g_level_unexpected,
775 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.cancel_tax_line',
776 p_error_buffer);
777 FND_LOG.STRING(g_level_unexpected,
778 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.cancel_tax_line.END',
779 'ZX_TRD_INTERNAL_SERVICES_PVT.cancel_tax_line(-)');
780 END IF;
781
782 end cancel_tax_line;
783
784
785 PROCEDURE det_appl_rec_type(
786 p_detail_tax_line_tbl IN zx_trd_services_pub_pkg.tax_line_tbl_type,
787 p_tax_line_index IN NUMBER,
788 p_trx_line_dist_index IN NUMBER,
789 p_rec_nrec_dist_tbl IN OUT NOCOPY zx_trd_services_pub_pkg.rec_nrec_dist_tbl_type,
790 p_rnd_begin_index IN NUMBER,
791 p_rnd_end_index OUT NOCOPY NUMBER,
792 p_return_status OUT NOCOPY VARCHAR2,
793 p_error_buffer OUT NOCOPY VARCHAR2) IS
794
795 l_tax ZX_TAXES_B.tax%TYPE;
796 l_tax_id NUMBER;
797 l_tax_apportionment_line_num NUMBER;
798 l_index NUMBER;
799 l_tax_regime_code ZX_STATUS_B.tax_regime_code%TYPE;
800 l_rec_nrec_tax_dist_number NUMBER;
801
802 CURSOR get_tax_recovery_info_cur(
803 c_tax_id zx_taxes_b.tax_id%TYPE) IS
804 SELECT allow_recoverability_flag,
805 primary_recovery_type_code,
806 primary_rec_type_rule_flag,
807 secondary_recovery_type_code,
808 secondary_rec_type_rule_flag,
809 primary_rec_rate_det_rule_flag,
810 sec_rec_rate_det_rule_flag,
811 def_primary_rec_rate_code,
812 def_secondary_rec_rate_code,
813 effective_from,
814 effective_to,
815 def_rec_settlement_option_code,
816 tax_account_source_tax
817 FROM ZX_TAXES_B
818 WHERE tax_id = c_tax_id;
819
820 CURSOR get_maximum_tax_dist_num_csr is
821 SELECT max(rec_nrec_tax_dist_number)
822 FROM zx_rec_nrec_dist
823 WHERE tax_line_id = p_detail_tax_line_tbl(p_tax_line_index).tax_line_id
824 AND trx_line_dist_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_dist_id(
825 p_trx_line_dist_index);
826
827 l_max_tax_dist_number NUMBER;
828
829 BEGIN
830
831 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
832
833 IF (g_level_procedure >= g_current_runtime_level ) THEN
834 FND_LOG.STRING(g_level_procedure,
835 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.DET_APPL_REC_TYPE.BEGIN',
836 'ZX_TRD_INTERNAL_SERVICES_PVT.DET_APPL_REC_TYPE(+)');
837 END IF;
838
839 p_return_status := FND_API.G_RET_STS_SUCCESS;
840
841 OPEN get_maximum_tax_dist_num_csr;
842 FETCH get_maximum_tax_dist_num_csr INTO l_max_tax_dist_number;
843 CLOSE get_maximum_tax_dist_num_csr;
844
845 l_max_tax_dist_number := NVL(l_max_tax_dist_number, 0);
846
847 l_rec_nrec_tax_dist_number := l_max_tax_dist_number + 1;
848 l_index := p_rnd_begin_index;
849
850 -- Bug 13147482
851 --IF p_detail_tax_line_tbl(p_tax_line_index).tax_provider_id IS NULL THEN
852
853 l_tax_id := p_detail_tax_line_tbl(p_tax_line_index).tax_id;
854 l_tax := p_detail_tax_line_tbl(p_tax_line_index).tax;
855 l_tax_regime_code := p_detail_tax_line_tbl(p_tax_line_index).tax_regime_code;
856 l_tax_apportionment_line_num := p_detail_tax_line_tbl(p_tax_line_index).tax_apportionment_line_number;
857
858 -- for applied_from(prepayment)/adjusted_to(credit memo) document ,
859 -- get the recovery types from applied_from /adjusted_to document.
860 --
861 IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_application_id(
862 p_trx_line_dist_index) IS NOT NULL THEN
863 -- If applied_from_application_id IS NOT NULL,
864 -- get detail tax lines from applied_from document.
865 --
866 get_recovery_from_applied(
867 l_tax_id,
868 l_tax_apportionment_line_num,
869 p_detail_tax_line_tbl(p_tax_line_index).prd_total_tax_amt,
870 p_trx_line_dist_index,
871 p_rec_nrec_dist_tbl,
872 p_rnd_begin_index,
873 p_rnd_end_index,
874 p_return_status,
875 p_error_buffer);
876
877 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
878 THEN
879 IF (g_level_error >= g_current_runtime_level ) THEN
880 FND_LOG.STRING(g_level_error,
881 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.det_appl_rec_type',
882 'Incorrect return_status after calling ' ||
883 'ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_applied()');
884 FND_LOG.STRING(g_level_error,
885 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.det_appl_rec_type.END',
886 'ZX_TRD_INTERNAL_SERVICES_PVT.det_appl_rec_type(-)'||p_return_status);
887 END IF;
888 END IF;
889 RETURN;
890
891 ELSIF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_application_id(
892 p_trx_line_dist_index) IS NOT NULL
893 THEN
894 -- If adjusted_to_application_id IS NOT NULL,
895 -- get detail tax lines from adjusted_to document.
896 --
897 get_recovery_from_adjusted(
898 l_tax_id,
899 l_tax_apportionment_line_num,
900 p_trx_line_dist_index,
901 p_rec_nrec_dist_tbl,
902 p_rnd_begin_index,
903 p_rnd_end_index,
904 p_return_status,
905 p_error_buffer);
906
907 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
908 THEN
909 IF (g_level_error >= g_current_runtime_level ) THEN
910 FND_LOG.STRING(g_level_error,
911 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.det_appl_rec_type',
912 'Incorrect return_status after calling ' ||
913 'ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_adjusted()');
914 FND_LOG.STRING(g_level_error,
915 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.det_appl_rec_type.END',
916 'ZX_TRD_INTERNAL_SERVICES_PVT.det_appl_rec_type(-)'||p_return_status);
917 END IF;
918 END IF;
919
920 -- return to the calling point, the normal recovery type determination
921 -- process will be skipped.
922 --
923 RETURN;
924 END IF; -- applied_from_application_id/adjusted_doc_application_id NOT NULL
925
926 -- Populate tax recovery info cache
927 -- g_tax_recovery_info_tbl
928 --
929
930 --Bug 13147482
931 IF p_detail_tax_line_tbl(p_tax_line_index).tax_provider_id IS NULL THEN
932
933 IF NOT g_tax_recovery_info_tbl.EXISTS(l_tax_id) THEN
934
935 OPEN get_tax_recovery_info_cur(l_tax_id);
936 FETCH get_tax_recovery_info_cur INTO
937 g_tax_recovery_info_tbl(l_tax_id).allow_recoverability_flag,
938 g_tax_recovery_info_tbl(l_tax_id).primary_recovery_type_code,
939 g_tax_recovery_info_tbl(l_tax_id).primary_rec_type_rule_flag,
940 g_tax_recovery_info_tbl(l_tax_id).secondary_recovery_type_code,
941 g_tax_recovery_info_tbl(l_tax_id).secondary_rec_type_rule_flag,
942 g_tax_recovery_info_tbl(l_tax_id).primary_rec_rate_det_rule_flag,
943 g_tax_recovery_info_tbl(l_tax_id).sec_rec_rate_det_rule_flag,
944 g_tax_recovery_info_tbl(l_tax_id).def_primary_rec_rate_code,
945 g_tax_recovery_info_tbl(l_tax_id).def_secondary_rec_rate_code,
946 g_tax_recovery_info_tbl(l_tax_id).effective_from,
947 g_tax_recovery_info_tbl(l_tax_id).effective_to,
948 g_tax_recovery_info_tbl(l_tax_id).def_rec_settlement_option_code,
949 g_tax_recovery_info_tbl(l_tax_id).tax_account_source_tax;
950
951 IF get_tax_recovery_info_cur%NOTFOUND THEN
952 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
953
954 IF (g_level_procedure >= g_current_runtime_level ) THEN
955 FND_LOG.STRING(g_level_procedure,
956 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.DET_APPL_REC_TYPE.END',
957 'ZX_TRD_INTERNAL_SERVICES_PVT.DET_APPL_REC_TYPE(-)'||'error: can not find tax info for ' || l_tax_id);
958 END IF;
959 CLOSE get_tax_recovery_info_cur;
960 RETURN;
961 END IF;
962
963 CLOSE get_tax_recovery_info_cur;
964
965 g_tax_recovery_info_tbl(l_tax_id).tax_regime_code := l_tax_regime_code;
966 g_tax_recovery_info_tbl(l_tax_id).tax := l_tax;
967 g_tax_recovery_info_tbl(l_tax_id).tax_id := l_tax_id;
968
969 END IF;
970
971 IF g_tax_recovery_info_tbl(l_tax_id).allow_recoverability_flag = 'Y' THEN
972
973 p_rec_nrec_dist_tbl(l_index).recoverable_flag:= 'Y';
974 p_rec_nrec_dist_tbl(l_index).recovery_type_code
975 := g_tax_recovery_info_tbl(l_tax_id).primary_recovery_type_code;
976 p_rec_nrec_dist_tbl(l_index).rec_type_rule_flag
977 := g_tax_recovery_info_tbl(l_tax_id).primary_rec_type_rule_flag;
978 p_rec_nrec_dist_tbl(l_index).rec_rate_det_rule_flag
979 := g_tax_recovery_info_tbl(l_tax_id).primary_rec_rate_det_rule_flag;
980 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_dist_number:= l_rec_nrec_tax_dist_number;
981
982
983 l_index:= l_index + 1;
984 l_rec_nrec_tax_dist_number:= l_rec_nrec_tax_dist_number + 1;
985
986 IF g_tax_recovery_info_tbl(l_tax_id).secondary_recovery_type_code IS NOT NULL THEN
987
988 p_rec_nrec_dist_tbl(l_index).recoverable_flag:= 'Y';
989 p_rec_nrec_dist_tbl(l_index).recovery_type_code
990 := g_tax_recovery_info_tbl(l_tax_id).secondary_recovery_type_code;
991 p_rec_nrec_dist_tbl(l_index).rec_type_rule_flag
992 := g_tax_recovery_info_tbl(l_tax_id).secondary_rec_type_rule_flag;
993 p_rec_nrec_dist_tbl(l_index).rec_rate_det_rule_flag
994 := g_tax_recovery_info_tbl(l_tax_id).sec_rec_rate_det_rule_flag;
995 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_dist_number:= l_rec_nrec_tax_dist_number;
996
997 l_index:= l_index + 1; --reserved for non-recoverable line
998 l_rec_nrec_tax_dist_number:= l_rec_nrec_tax_dist_number + 1;
999
1000 END IF;
1001
1002 ELSE -- no recovery allowed
1003
1004 IF (g_level_statement >= g_current_runtime_level ) THEN
1005 FND_LOG.STRING(g_level_statement,
1006 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.DET_APPL_REC_TYPE',
1007 'No applicable recovery type found');
1008 END IF;
1009
1010 END IF;
1011 ELSE --provider calculated tax lines should be 100% non-recoverable.
1012 IF (g_level_statement >= g_current_runtime_level ) THEN
1013 FND_LOG.STRING(g_level_statement,
1014 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.DET_APPL_REC_TYPE',
1015 'Provider calculated tax lines are 100% non-recoverable.');
1016 END IF;
1017
1018 END IF;
1019
1020 p_rnd_end_index:= l_index;
1021 p_rec_nrec_dist_tbl(l_index).recoverable_flag:= 'N';
1022 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_dist_number:= l_rec_nrec_tax_dist_number;
1023
1024 IF (g_level_procedure >= g_current_runtime_level ) THEN
1025
1026 FND_LOG.STRING(g_level_procedure,
1027 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.DET_APPL_REC_TYPE.END',
1028 'ZX_TRD_INTERNAL_SERVICES_PVT.DET_APPL_REC_TYPE(-)'||
1029 ' begin index = ' || p_rnd_end_index||
1030 ' end index = ' || p_rnd_end_index);
1031 END IF;
1032
1033 EXCEPTION
1034 WHEN OTHERS THEN
1035 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1036 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1037
1038 IF (g_level_unexpected >= g_current_runtime_level ) THEN
1039 FND_LOG.STRING(g_level_unexpected,
1040 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.DET_APPL_REC_TYPE',
1041 p_error_buffer);
1042 FND_LOG.STRING(g_level_unexpected,
1043 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.DET_APPL_REC_TYPE.END',
1044 'ZX_TRD_INTERNAL_SERVICES_PVT.DET_APPL_REC_TYPE(-)');
1045 END IF;
1046
1047 END DET_APPL_REC_TYPE;
1048
1049 PROCEDURE get_tax_related_columns_sta(
1050 p_detail_tax_line_tbl IN ZX_TRD_SERVICES_PUB_PKG.tax_line_tbl_type,
1051 p_tax_line_index IN NUMBER,
1052 p_trx_line_dist_index IN NUMBER,
1053 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.rec_nrec_dist_tbl_type,
1054 p_rnd_begin_index IN NUMBER,
1055 p_rnd_end_index IN NUMBER,
1056 p_return_status OUT NOCOPY VARCHAR2,
1057 p_error_buffer OUT NOCOPY VARCHAR2) IS
1058
1059 BEGIN
1060
1061 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1062
1063 IF (g_level_procedure >= g_current_runtime_level ) THEN
1064 FND_LOG.STRING(g_level_procedure,
1065 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_STA.BEGIN',
1066 'ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_STA(+)');
1067 END IF;
1068
1069 p_return_status:= FND_API.G_RET_STS_SUCCESS;
1070
1071 FOR i IN p_rnd_begin_index..p_rnd_end_index LOOP
1072
1073 p_rec_nrec_dist_tbl(i).application_id :=
1074 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.application_id(p_trx_line_dist_index);
1075
1076 p_rec_nrec_dist_tbl(i).entity_code :=
1077 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.entity_code(p_trx_line_dist_index);
1078
1079 p_rec_nrec_dist_tbl(i).event_class_code :=
1080 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.event_class_code(p_trx_line_dist_index);
1081
1082 p_rec_nrec_dist_tbl(i).event_type_code :=
1083 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.event_type_code(p_trx_line_dist_index);
1084
1085 p_rec_nrec_dist_tbl(i).tax_event_class_code :=
1086 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_class_code(p_trx_line_dist_index);
1087
1088 p_rec_nrec_dist_tbl(i).tax_event_type_code :=
1089 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_event_type_code(p_trx_line_dist_index);
1090
1091 p_rec_nrec_dist_tbl(i).trx_id :=
1092 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_id(p_trx_line_dist_index);
1093
1094 p_rec_nrec_dist_tbl(i).trx_number :=
1095 p_detail_tax_line_tbl(p_tax_line_index).trx_number;
1096
1097 p_rec_nrec_dist_tbl(i).trx_line_id :=
1098 p_detail_tax_line_tbl(p_tax_line_index).trx_line_id;
1099
1100 p_rec_nrec_dist_tbl(i).trx_level_type :=
1101 p_detail_tax_line_tbl(p_tax_line_index).trx_level_type;
1102
1103 p_rec_nrec_dist_tbl(i).trx_line_number :=
1104 p_detail_tax_line_tbl(p_tax_line_index).trx_line_number;
1105 p_rec_nrec_dist_tbl(i).trx_line_dist_id :=
1106 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_dist_id(p_trx_line_dist_index);
1107
1108
1109 p_rec_nrec_dist_tbl(i).item_dist_number :=
1110 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.item_dist_number(p_trx_line_dist_index);
1111
1112 -- need to add later
1113 -- p_rec_nrec_dist_tbl(i).tax_line_dist_number :=
1114 -- ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_line_dist_number(p_trx_line_dist_index);
1115
1116 p_rec_nrec_dist_tbl(i).content_owner_id :=
1117 p_detail_tax_line_tbl(p_tax_line_index).content_owner_id;
1118
1119 p_rec_nrec_dist_tbl(i).ref_doc_application_id :=
1120 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_application_id(p_trx_line_dist_index);
1121
1122 p_rec_nrec_dist_tbl(i).ref_doc_entity_code :=
1123 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_entity_code(p_trx_line_dist_index);
1124
1125 p_rec_nrec_dist_tbl(i).ref_doc_event_class_code :=
1126 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_event_class_code(p_trx_line_dist_index);
1127
1128 p_rec_nrec_dist_tbl(i).ref_doc_trx_id :=
1129 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_trx_id(p_trx_line_dist_index);
1130
1131 p_rec_nrec_dist_tbl(i).ref_doc_line_id :=
1132 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_line_id(p_trx_line_dist_index);
1133
1134 p_rec_nrec_dist_tbl(i).ref_doc_trx_level_type :=
1135 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_trx_level_type(p_trx_line_dist_index);
1136
1137 p_rec_nrec_dist_tbl(i).ref_doc_dist_id :=
1138 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_dist_id(p_trx_line_dist_index);
1139
1140 /*
1141 p_rec_nrec_dist_tbl(i).hdr_trx_user_key1 :=
1142 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.hdr_trx_user_key1(p_trx_line_dist_index);
1143 p_rec_nrec_dist_tbl(i).hdr_trx_user_key2 :=
1144 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.hdr_trx_user_key2(p_trx_line_dist_index);
1145 p_rec_nrec_dist_tbl(i).hdr_trx_user_key3 :=
1146 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.hdr_trx_user_key3(p_trx_line_dist_index);
1147 p_rec_nrec_dist_tbl(i).hdr_trx_user_key4 :=
1148 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.hdr_trx_user_key4(p_trx_line_dist_index);
1149 p_rec_nrec_dist_tbl(i).hdr_trx_user_key5 :=
1150 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.hdr_trx_user_key5(p_trx_line_dist_index);
1151 p_rec_nrec_dist_tbl(i).hdr_trx_user_key6 :=
1152 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.hdr_trx_user_key6(p_trx_line_dist_index);
1153 p_rec_nrec_dist_tbl(i).line_trx_user_key1 :=
1154 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_trx_user_key1(p_trx_line_dist_index);
1155 p_rec_nrec_dist_tbl(i).line_trx_user_key2 :=
1156 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_trx_user_key2(p_trx_line_dist_index);
1157 p_rec_nrec_dist_tbl(i).line_trx_user_key3 :=
1158 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_trx_user_key3(p_trx_line_dist_index);
1159 p_rec_nrec_dist_tbl(i).line_trx_user_key4 :=
1160 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_trx_user_key4(p_trx_line_dist_index);
1161 p_rec_nrec_dist_tbl(i).line_trx_user_key5 :=
1162 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_trx_user_key5(p_trx_line_dist_index);
1163 p_rec_nrec_dist_tbl(i).line_trx_user_key6 :=
1164 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.line_trx_user_key6(p_trx_line_dist_index);
1165 p_rec_nrec_dist_tbl(i).dist_trx_user_key1 :=
1166 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.dist_trx_user_key1(p_trx_line_dist_index);
1167 p_rec_nrec_dist_tbl(i).dist_trx_user_key2 :=
1168 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.dist_trx_user_key2(p_trx_line_dist_index);
1169 p_rec_nrec_dist_tbl(i).dist_trx_user_key3 :=
1170 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.dist_trx_user_key3(p_trx_line_dist_index);
1171 p_rec_nrec_dist_tbl(i).dist_trx_user_key4 :=
1172 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.dist_trx_user_key4(p_trx_line_dist_index);
1173 p_rec_nrec_dist_tbl(i).dist_trx_user_key5 :=
1174 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.dist_trx_user_key5(p_trx_line_dist_index);
1175 p_rec_nrec_dist_tbl(i).dist_trx_user_key6 :=
1176 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.dist_trx_user_key6(p_trx_line_dist_index);
1177 */
1178 p_rec_nrec_dist_tbl(i).tax_regime_id :=
1179 p_detail_tax_line_tbl(p_tax_line_index).tax_regime_id;
1180
1181 p_rec_nrec_dist_tbl(i).tax_regime_code :=
1182 p_detail_tax_line_tbl(p_tax_line_index).tax_regime_code;
1183 p_rec_nrec_dist_tbl(i).tax_id := p_detail_tax_line_tbl(p_tax_line_index).tax_id;
1184 p_rec_nrec_dist_tbl(i).tax := p_detail_tax_line_tbl(p_tax_line_index).tax;
1185
1186 p_rec_nrec_dist_tbl(i).tax_line_id :=
1187 p_detail_tax_line_tbl(p_tax_line_index).tax_line_id;
1188 --Bug 14251332, to fetch tax distributions for adjusted tax lines.
1189 p_rec_nrec_dist_tbl(i).tax_apportionment_line_number :=
1190 p_detail_tax_line_tbl(p_tax_line_index).tax_apportionment_line_number;
1191 --Bug 14251332
1192 p_rec_nrec_dist_tbl(i).ledger_id :=
1193 p_detail_tax_line_tbl(p_tax_line_index).ledger_id;
1194 p_rec_nrec_dist_tbl(i).record_type_code :=
1195 p_detail_tax_line_tbl(p_tax_line_index).record_type_code;
1196
1197 p_rec_nrec_dist_tbl(i).legal_entity_id :=
1198 p_detail_tax_line_tbl(p_tax_line_index).legal_entity_id;
1199
1200 p_rec_nrec_dist_tbl(i).mrc_tax_dist_flag :=
1201 p_detail_tax_line_tbl(p_tax_line_index).mrc_tax_line_flag;
1202
1203 -- Bug 7117340 -- DFF ER
1204 p_rec_nrec_dist_tbl(i).attribute1 := p_detail_tax_line_tbl(p_tax_line_index).attribute1;
1205 p_rec_nrec_dist_tbl(i).attribute2 := p_detail_tax_line_tbl(p_tax_line_index).attribute2;
1206 p_rec_nrec_dist_tbl(i).attribute3 := p_detail_tax_line_tbl(p_tax_line_index).attribute3;
1207 p_rec_nrec_dist_tbl(i).attribute4 := p_detail_tax_line_tbl(p_tax_line_index).attribute4;
1208 p_rec_nrec_dist_tbl(i).attribute5 := p_detail_tax_line_tbl(p_tax_line_index).attribute5;
1209 p_rec_nrec_dist_tbl(i).attribute6 := p_detail_tax_line_tbl(p_tax_line_index).attribute6;
1210 p_rec_nrec_dist_tbl(i).attribute7 := p_detail_tax_line_tbl(p_tax_line_index).attribute7;
1211 p_rec_nrec_dist_tbl(i).attribute8 := p_detail_tax_line_tbl(p_tax_line_index).attribute8;
1212 p_rec_nrec_dist_tbl(i).attribute9 := p_detail_tax_line_tbl(p_tax_line_index).attribute9;
1213 p_rec_nrec_dist_tbl(i).attribute10 := p_detail_tax_line_tbl(p_tax_line_index).attribute10;
1214 p_rec_nrec_dist_tbl(i).attribute11 := p_detail_tax_line_tbl(p_tax_line_index).attribute11;
1215 p_rec_nrec_dist_tbl(i).attribute12 := p_detail_tax_line_tbl(p_tax_line_index).attribute12;
1216 p_rec_nrec_dist_tbl(i).attribute13 := p_detail_tax_line_tbl(p_tax_line_index).attribute13;
1217 p_rec_nrec_dist_tbl(i).attribute14 := p_detail_tax_line_tbl(p_tax_line_index).attribute14;
1218 p_rec_nrec_dist_tbl(i).attribute15 := p_detail_tax_line_tbl(p_tax_line_index).attribute15;
1219 p_rec_nrec_dist_tbl(i).attribute_category := p_detail_tax_line_tbl(p_tax_line_index).attribute_category;
1220 -- End Bug 7117340 -- DFF ER
1221
1222 -- IF applied_amt_handling_flag = 'R', copy prd_total_tax_amt,
1223 -- prd_total_tax_amt_tax_curr, prd_total_tax_amt_funcl_curr from zx_lines
1224 --
1225 IF p_rec_nrec_dist_tbl(p_rnd_begin_index).applied_from_tax_dist_id IS NOT NULL THEN
1226
1227 IF NOT ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl.exists(p_detail_tax_line_tbl(
1228 p_tax_line_index).tax_id) then
1229
1230 ZX_TDS_UTILITIES_PKG.populate_tax_cache (
1231 p_tax_id => p_detail_tax_line_tbl(p_tax_line_index).tax_id,
1232 p_return_status => p_return_status,
1233 p_error_buffer => p_error_buffer);
1234 END IF;
1235
1236
1237 IF ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_detail_tax_line_tbl(
1238 p_tax_line_index).tax_id).applied_amt_handling_flag = 'R'
1239 THEN
1240 p_rec_nrec_dist_tbl(i).prd_total_tax_amt :=
1241 p_detail_tax_line_tbl(p_tax_line_index).prd_total_tax_amt;
1242 p_rec_nrec_dist_tbl(i).prd_total_tax_amt_tax_curr :=
1243 p_detail_tax_line_tbl(p_tax_line_index).prd_total_tax_amt_tax_curr;
1244 p_rec_nrec_dist_tbl(i).prd_total_tax_amt_funcl_curr :=
1245 p_detail_tax_line_tbl(p_tax_line_index).prd_total_tax_amt_funcl_curr;
1246 END IF;
1247
1248 END IF;
1249
1250 END LOOP; -- i in p_rnd_begin_index..p_rnd_end_index
1251
1252 IF (g_level_procedure >= g_current_runtime_level ) THEN
1253 FND_LOG.STRING(g_level_procedure,
1254 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_STA.END',
1255 'ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_STA(-)');
1256 END IF;
1257
1258 EXCEPTION
1259 WHEN OTHERS THEN
1260 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1261 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1262
1263 IF (g_level_unexpected >= g_current_runtime_level ) THEN
1264 FND_LOG.STRING(g_level_unexpected,
1265 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_STA',
1266 p_error_buffer);
1267 FND_LOG.STRING(g_level_unexpected,
1268 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_STA.END',
1269 'ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_STA(-)');
1270 END IF;
1271 END get_tax_related_columns_sta;
1272
1273
1274 PROCEDURE get_tax_related_columns_var(
1275 p_detail_tax_line_tbl IN ZX_TRD_SERVICES_PUB_PKG.tax_line_tbl_type,
1276 p_tax_line_index IN NUMBER,
1277 p_trx_line_dist_index IN NUMBER,
1278 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.rec_nrec_dist_tbl_type,
1279 p_rnd_begin_index IN NUMBER,
1280 p_rnd_end_index IN NUMBER,
1281 p_return_status OUT NOCOPY VARCHAR2,
1282 p_error_buffer OUT NOCOPY VARCHAR2) IS
1283
1284 l_temp_line_amt NUMBER;
1285 --l_period_name gl_period_statuses.period_name%TYPE := '';
1286
1287 BEGIN
1288
1289 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1290
1291 IF (g_level_procedure >= g_current_runtime_level ) THEN
1292 FND_LOG.STRING(g_level_procedure,
1293 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR.BEGIN',
1294 'ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR(+)');
1295 END IF;
1296 p_return_status:= FND_API.G_RET_STS_SUCCESS;
1297
1298 FOR i in p_rnd_begin_index..p_rnd_end_index
1299 LOOP
1300
1301 IF NVL(p_rec_nrec_dist_tbl(i).reverse_flag, 'N') <> 'Y' AND
1302 NVL(p_rec_nrec_dist_tbl(i).freeze_flag, 'N') <> 'Y'
1303 THEN
1304 IF (g_level_statement >= g_current_runtime_level ) THEN
1305 FND_LOG.STRING(g_level_statement,
1306 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR',
1307 'Reverse flag and freeze flag are not Y');
1308 END IF;
1309
1310
1311 p_rec_nrec_dist_tbl(i).INTENDED_USE:= ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.LINE_INTENDED_USE(p_trx_line_dist_index);
1312 p_rec_nrec_dist_tbl(i).PROJECT_ID:= ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.PROJECT_ID(p_trx_line_dist_index);
1313 p_rec_nrec_dist_tbl(i).TASK_ID:= ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TASK_ID(p_trx_line_dist_index);
1314 p_rec_nrec_dist_tbl(i).AWARD_ID:= ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.AWARD_ID(p_trx_line_dist_index);
1315 p_rec_nrec_dist_tbl(i).EXPENDITURE_TYPE:= ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.EXPENDITURE_TYPE(p_trx_line_dist_index);
1316 p_rec_nrec_dist_tbl(i).EXPENDITURE_ORGANIZATION_ID:= ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.EXPENDITURE_ORGANIZATION_ID(p_trx_line_dist_index);
1317 p_rec_nrec_dist_tbl(i).EXPENDITURE_ITEM_DATE:= ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.EXPENDITURE_ITEM_DATE(p_trx_line_dist_index);
1318 p_rec_nrec_dist_tbl(i).ACCOUNT_CCID:= ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ACCOUNT_CCID(p_trx_line_dist_index);
1319 p_rec_nrec_dist_tbl(i).ACCOUNT_STRING:= ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ACCOUNT_STRING(p_trx_line_dist_index);
1320
1321 p_rec_nrec_dist_tbl(i).TRX_LINE_DIST_AMT := ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_AMT(p_trx_line_dist_index);
1322 p_rec_nrec_dist_tbl(i).TRX_LINE_DIST_QTY := ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_QUANTITY(p_trx_line_dist_index);
1323 --p_rec_nrec_dist_tbl(i).GL_DATE := ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_GL_DATE(p_trx_line_dist_index); -- copy gl date
1324
1325 /*AP_UTILITIES_PKG.get_open_gl_date(ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_GL_DATE(p_trx_line_dist_index),
1326 l_period_name,
1327 p_rec_nrec_dist_tbl(i).GL_DATE,
1328 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.INTERNAL_ORGANIZATION_ID(p_trx_line_dist_index));
1329
1330 IF p_rec_nrec_dist_tbl(i).GL_DATE IS NULL THEN
1331
1332 p_return_status := FND_API.G_RET_STS_ERROR;
1333 FND_MESSAGE.SET_NAME('SQLAP', 'AP_CANCEL_NO_OPEN_FUT_PERIOD');
1334 FND_MESSAGE.SET_TOKEN('DATE', to_char(ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_GL_DATE(p_trx_line_dist_index), 'dd-mon-yyyy'));
1335
1336 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id := p_detail_tax_line_tbl(p_tax_line_index).trx_line_id;
1337 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type := p_detail_tax_line_tbl(p_tax_line_index).trx_level_type;
1338 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.tax_line_id := p_detail_tax_line_tbl(p_tax_line_index).tax_line_id;
1339 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_dist_id := p_rec_nrec_dist_tbl(i).trx_line_dist_id;
1340 ZX_API_PUB.add_msg(ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
1341
1342 IF (g_level_statement >= g_current_runtime_level ) THEN
1343 FND_LOG.STRING(g_level_statement,
1344 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR',
1345 'No Open Period or future period found for the accounting date passed by Payables');
1346 FND_LOG.STRING(g_level_statement,
1347 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR.END',
1348 'ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR(-)');
1349 END IF;
1350 RETURN;
1351 END IF;*/
1352
1353 -- tax only line
1354 IF p_rec_nrec_dist_tbl(i).Tax_Only_Line_Flag = 'Y' THEN
1355 IF (g_level_statement >= g_current_runtime_level ) THEN
1356 FND_LOG.STRING(g_level_statement,
1357 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR',
1358 'Tax only line flag is Y');
1359 END IF;
1360
1361 p_rec_nrec_dist_tbl(i).TRX_LINE_DIST_TAX_AMT := p_detail_tax_line_tbl(p_tax_line_index).TAX_AMT;
1362 p_rec_nrec_dist_tbl(i).UNROUNDED_TAXABLE_AMT := p_detail_tax_line_tbl(p_tax_line_index).TAXABLE_AMT;
1363 ELSE
1364 IF (g_level_statement >= g_current_runtime_level ) THEN
1365 FND_LOG.STRING(g_level_statement,
1366 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR',
1367 'Tax only line flag is not Y');
1368 END IF;
1369
1370 IF p_detail_tax_line_tbl(p_tax_line_index).applied_from_event_class_code = 'PREPAYMENT INVOICES' THEN
1371 IF (g_level_statement >= g_current_runtime_level ) THEN
1372 FND_LOG.STRING(g_level_statement,
1373 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR',
1374 'Prepayment Invoice application');
1375 END IF;
1376 l_temp_line_amt := p_detail_tax_line_tbl(p_tax_line_index).line_amt -
1377 NVL(ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.total_inc_tax_amt(p_trx_line_dist_index), 0);
1378
1379 ELSE
1380 -- bug 5019399
1381 -- bug 6670955
1382 l_temp_line_amt := p_detail_tax_line_tbl(p_tax_line_index).line_amt;
1383 --NVL(ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.total_inc_tax_amt(p_trx_line_dist_index), 0);
1384 END IF;
1385
1386 IF l_temp_line_amt <> 0 THEN -- Bug 4932210, 5019399
1387
1388 --Bug 15866615, use unrounded_tax_amt to stamp trx_line_dist_tax_amt so that unrounded_rec_nrec_tax_amt is correctly generated
1389 p_rec_nrec_dist_tbl(i).TRX_LINE_DIST_TAX_AMT :=
1390 NVL(p_detail_tax_line_tbl(p_tax_line_index).UNROUNDED_TAX_AMT, p_detail_tax_line_tbl(p_tax_line_index).TAX_AMT) *
1391 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_AMT(p_trx_line_dist_index) /l_temp_line_amt;
1392
1393 -- comment out for bug 3795178
1394 /*ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_QUANTITY(p_trx_line_dist_index) /
1395 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_QUANTITY(p_trx_line_dist_index); */
1396
1397 p_rec_nrec_dist_tbl(i).UNROUNDED_TAXABLE_AMT :=
1398 p_detail_tax_line_tbl(p_tax_line_index).TAXABLE_AMT *
1399 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_AMT(p_trx_line_dist_index) /l_temp_line_amt;
1400
1401 -- comment out for bug 3795178
1402 /*ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_QUANTITY(p_trx_line_dist_index) /
1403 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_QUANTITY(p_trx_line_dist_index); */
1404
1405 ELSE
1406 -- Bug 5195602: For reversed item distributions, line_amt is 0,
1407 -- but TRX_LINE_DIST_AMT might not be 0.
1408 --
1409 --Bug 15866615
1410 p_rec_nrec_dist_tbl(i).trx_line_dist_tax_amt :=
1411 NVL(p_detail_tax_line_tbl(p_tax_line_index).unrounded_tax_amt,p_detail_tax_line_tbl(p_tax_line_index).tax_amt);
1412 p_rec_nrec_dist_tbl(i).unrounded_taxable_amt := p_detail_tax_line_tbl(p_tax_line_index).taxable_amt;
1413
1414 END IF;
1415 END IF;
1416
1417 p_rec_nrec_dist_tbl(i).TAX_RATE_ID:= p_detail_tax_line_tbl(p_tax_line_index).TAX_RATE_ID;
1418 p_rec_nrec_dist_tbl(i).TAX_RATE_CODE:= p_detail_tax_line_tbl(p_tax_line_index).TAX_RATE_CODE;
1419 p_rec_nrec_dist_tbl(i).TAX_RATE:= p_detail_tax_line_tbl(p_tax_line_index).TAX_RATE;
1420 p_rec_nrec_dist_tbl(i).Inclusive_Flag:= p_detail_tax_line_tbl(p_tax_line_index).Tax_Amt_Included_Flag;
1421 -- bug#6709478
1422 --p_rec_nrec_dist_tbl(i).SUMMARY_TAX_LINE_ID:= p_detail_tax_line_tbl(p_tax_line_index).SUMMARY_TAX_LINE_ID;
1423 p_rec_nrec_dist_tbl(i).CURRENCY_CONVERSION_DATE:= p_detail_tax_line_tbl(p_tax_line_index).CURRENCY_CONVERSION_DATE;
1424 p_rec_nrec_dist_tbl(i).CURRENCY_CONVERSION_TYPE:= p_detail_tax_line_tbl(p_tax_line_index).CURRENCY_CONVERSION_TYPE;
1425 p_rec_nrec_dist_tbl(i).CURRENCY_CONVERSION_RATE:= p_detail_tax_line_tbl(p_tax_line_index).CURRENCY_CONVERSION_RATE;
1426 p_rec_nrec_dist_tbl(i).TAX_CURRENCY_CONVERSION_DATE:= p_detail_tax_line_tbl(p_tax_line_index).TAX_CURRENCY_CONVERSION_DATE;
1427 p_rec_nrec_dist_tbl(i).TAX_CURRENCY_CONVERSION_TYPE:= p_detail_tax_line_tbl(p_tax_line_index).TAX_CURRENCY_CONVERSION_TYPE;
1428 p_rec_nrec_dist_tbl(i).TAX_CURRENCY_CONVERSION_RATE:= p_detail_tax_line_tbl(p_tax_line_index).TAX_CURRENCY_CONVERSION_RATE;
1429 p_rec_nrec_dist_tbl(i).MINIMUM_ACCOUNTABLE_UNIT:= p_detail_tax_line_tbl(p_tax_line_index).MINIMUM_ACCOUNTABLE_UNIT;
1430 p_rec_nrec_dist_tbl(i).PRECISION:= p_detail_tax_line_tbl(p_tax_line_index).PRECISION;
1431 p_rec_nrec_dist_tbl(i).Rounding_Rule_Code:= p_detail_tax_line_tbl(p_tax_line_index).ROUNDING_RULE_CODE;
1432 p_rec_nrec_dist_tbl(i).TAX_STATUS_ID:= p_detail_tax_line_tbl(p_tax_line_index).TAX_STATUS_ID;
1433 p_rec_nrec_dist_tbl(i).TAX_STATUS_CODE:= p_detail_tax_line_tbl(p_tax_line_index).TAX_STATUS_CODE;
1434 p_rec_nrec_dist_tbl(i).TRX_CURRENCY_CODE:= p_detail_tax_line_tbl(p_tax_line_index).TRX_CURRENCY_CODE;
1435 p_rec_nrec_dist_tbl(i).TAX_CURRENCY_CODE:= p_detail_tax_line_tbl(p_tax_line_index).TAX_CURRENCY_CODE;
1436 p_rec_nrec_dist_tbl(i).unit_price:= p_detail_tax_line_tbl(p_tax_line_index).unit_price;
1437 p_rec_nrec_dist_tbl(i).self_assessed_flag := p_detail_tax_line_tbl(p_tax_line_index).self_assessed_flag;
1438 p_rec_nrec_dist_tbl(i).tax_only_line_flag := p_detail_tax_line_tbl(p_tax_line_index).tax_only_line_flag;
1439
1440 -- bug 5508356
1441 p_rec_nrec_dist_tbl(i).internal_organization_id := p_detail_tax_line_tbl(p_tax_line_index).internal_organization_id;
1442 p_rec_nrec_dist_tbl(i).tax_jurisdiction_id := p_detail_tax_line_tbl(p_tax_line_index).tax_jurisdiction_id;
1443
1444 -- bug 6879755
1445 IF ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.APPLICATION_ID(p_trx_line_dist_index) = 200 THEN
1446 BEGIN
1447 IF p_rec_nrec_dist_tbl(i).orig_gl_date IS NOT NULL THEN
1448 p_rec_nrec_dist_tbl(i).gl_date :=
1449 AP_UTILITIES_PKG.get_reversal_gl_date(
1450 p_date => p_rec_nrec_dist_tbl(i).gl_date,
1451 p_org_id => ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.INTERNAL_ORGANIZATION_ID(p_trx_line_dist_index));
1452 ELSE
1453 p_rec_nrec_dist_tbl(i).gl_date :=
1454 AP_UTILITIES_PKG.get_reversal_gl_date(
1455 p_date => ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_GL_DATE(p_trx_line_dist_index),
1456 p_org_id => ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.INTERNAL_ORGANIZATION_ID(p_trx_line_dist_index));
1457 END IF;
1458 EXCEPTION
1459 WHEN OTHERS THEN
1460 IF nvl(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_reporting_flag(p_trx_line_dist_index),'N') = 'Y' THEN
1461 p_return_status := FND_API.G_RET_STS_ERROR;
1462 FND_MESSAGE.SET_NAME('SQLAP', 'AP_CANCEL_NO_OPEN_FUT_PERIOD');
1463 FND_MESSAGE.SET_TOKEN('DATE', to_char(ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_GL_DATE(p_trx_line_dist_index), 'dd-mon-yyyy'));
1464
1465 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id := p_detail_tax_line_tbl(p_tax_line_index).trx_line_id;
1466 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type := p_detail_tax_line_tbl(p_tax_line_index).trx_level_type;
1467 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.tax_line_id := p_detail_tax_line_tbl(p_tax_line_index).tax_line_id;
1468 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_dist_id := p_rec_nrec_dist_tbl(i).trx_line_dist_id;
1469 ZX_API_PUB.add_msg(ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
1470
1471 IF (g_level_statement >= g_current_runtime_level ) THEN
1472 FND_LOG.STRING(g_level_statement,
1473 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR',
1474 'No Open Period or future period found for the accounting date passed by Payables');
1475 FND_LOG.STRING(g_level_statement,
1476 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR.END',
1477 'ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR(-)');
1478 END IF;
1479 RETURN;
1480 END IF;
1481 END;
1482 ELSIF ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.APPLICATION_ID(p_trx_line_dist_index) = 201 THEN
1483
1484 p_rec_nrec_dist_tbl(i).gl_date :=
1485 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_GL_DATE(p_trx_line_dist_index);
1486
1487 END IF;
1488
1489 IF nvl(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.tax_reporting_flag(p_trx_line_dist_index),'N') = 'Y' THEN
1490 IF p_rec_nrec_dist_tbl(i).GL_DATE IS NULL THEN
1491
1492 p_return_status := FND_API.G_RET_STS_ERROR;
1493 FND_MESSAGE.SET_NAME('SQLAP', 'AP_CANCEL_NO_OPEN_FUT_PERIOD');
1494 FND_MESSAGE.SET_TOKEN('DATE', to_char(ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_GL_DATE(p_trx_line_dist_index), 'dd-mon-yyyy'));
1495
1496 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id := p_detail_tax_line_tbl(p_tax_line_index).trx_line_id;
1497 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type := p_detail_tax_line_tbl(p_tax_line_index).trx_level_type;
1498 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.tax_line_id := p_detail_tax_line_tbl(p_tax_line_index).tax_line_id;
1499 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_dist_id := p_rec_nrec_dist_tbl(i).trx_line_dist_id;
1500 ZX_API_PUB.add_msg(ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
1501
1502 IF (g_level_statement >= g_current_runtime_level ) THEN
1503 FND_LOG.STRING(g_level_statement,
1504 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR',
1505 'No Open Period or future period found for the accounting date passed by Payables');
1506 FND_LOG.STRING(g_level_statement,
1507 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR.END',
1508 'ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR(-)');
1509 END IF;
1510 RETURN;
1511 END IF;
1512 END IF;
1513
1514 END IF; -- reverse_flag, 'N') <> 'Y' AND freeze_flag <> 'Y'
1515
1516 -- bug#6709478 : populate summary tax line id from detail tax line
1517 p_rec_nrec_dist_tbl(i).summary_tax_line_id := p_detail_tax_line_tbl(p_tax_line_index).summary_tax_line_id;
1518 p_rec_nrec_dist_tbl(i).tax_line_number := p_detail_tax_line_tbl(p_tax_line_index).tax_line_number;
1519
1520 END LOOP;
1521
1522 IF (g_level_procedure >= g_current_runtime_level ) THEN
1523 FND_LOG.STRING(g_level_procedure,
1524 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR.END',
1525 'ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR(-)');
1526 END IF;
1527
1528 EXCEPTION
1529 WHEN OTHERS THEN
1530 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1531 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1532
1533 IF (g_level_unexpected >= g_current_runtime_level ) THEN
1534 FND_LOG.STRING(g_level_unexpected,
1535 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR',
1536 p_error_buffer);
1537 FND_LOG.STRING(g_level_unexpected,
1538 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR.END',
1539 'ZX_TRD_INTERNAL_SERVICES_PVT.GET_TAX_RELATED_COLUMNS_VAR(-)');
1540 END IF;
1541
1542 END GET_TAX_RELATED_COLUMNS_VAR;
1543
1544
1545 PROCEDURE get_rec_rate(
1546 p_detail_tax_line_tbl IN ZX_TRD_SERVICES_PUB_PKG.tax_line_tbl_type,
1547 p_tax_line_index IN NUMBER,
1548 p_trx_line_dist_index IN NUMBER,
1549 p_event_class_rec IN ZX_API_PUB.event_class_rec_type,
1550 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.rec_nrec_dist_tbl_type,
1551 p_rnd_begin_index IN NUMBER,
1552 p_rnd_end_index IN OUT NOCOPY NUMBER,
1553 p_return_status OUT NOCOPY VARCHAR2,
1554 p_error_buffer OUT NOCOPY VARCHAR2) IS
1555
1556 l_rec_rule_code VARCHAR2(30);
1557 l_rec_type_code VARCHAR2(30);
1558 l_rec_rate_id NUMBER;
1559 l_tax_rate_id NUMBER;
1560 l_tax_id NUMBER;
1561 l_non_rec_index NUMBER;
1562 l_rec_rate NUMBER;
1563 l_total_rec_rate NUMBER;
1564 l_tax_determine_date DATE;
1565 l_tax_date DATE;
1566 l_rec_rate_code ZX_RATES_B.TAX_RATE_CODE%TYPE;
1567 l_tax ZX_TAXES_B.tax%TYPE;
1568 l_tax_regime_code ZX_STATUS_B.tax_regime_code%TYPE;
1569 l_tax_status_code ZX_STATUS_B.tax_status_code%TYPE;
1570 l_content_owner_id ZX_RATES_B.content_owner_id%TYPE; -- Added for Bug#14038095 --
1571 l_tax_jurisdiction_code ZX_RATES_B.tax_jurisdiction_code%TYPE;
1572 l_tax_rate_code ZX_RATES_B.tax_rate_code%TYPE;
1573 l_def_rec_rate_code ZX_RATES_B.tax_rate_code%TYPE; -- Added for Bug#5395277 --
1574 l_tax_class ZX_RATES_B.tax_class%TYPE;
1575 l_acct_source_tax_rate_id ZX_RATES_B.tax_rate_id%TYPE;
1576 l_def_rec_settlement_code ZX_RATES_B.def_rec_settlement_option_code%TYPE;
1577 l_def_rec_type_code ZX_RATES_B.recovery_type_code%TYPE;
1578 l_zx_result_rec ZX_PROCESS_RESULTS%ROWTYPE;
1579 l_tbl_index BINARY_INTEGER;
1580 l_rec_rate_adhoc_flag VARCHAR2(1);
1581
1582 -- Commented for Bug#5395227
1583 -- CURSOR get_rec_rule_code_csr(
1584 -- c_tax_regime_code ZX_STATUS_B.tax_regime_code%TYPE,
1585 -- c_tax ZX_STATUS_B.tax%TYPE,
1586 -- c_tax_status_code ZX_STATUS_B.tax_status_code%TYPE,
1587 -- c_tax_rate_code VARCHAR2,
1588 -- c_tax_date DATE) IS
1589 -- SELECT recovery_rule_code
1590 -- FROM ZX_SCO_RATES_B_V
1591 -- WHERE tax_regime_code = c_tax_regime_code
1592 -- AND tax = c_tax
1593 -- AND tax_status_code = c_tax_status_code
1594 -- AND tax_rate_code = c_tax_rate_code
1595 -- AND active_flag = 'Y'
1596 -- AND rate_type_code <> 'RECOVERY'
1597 -- AND effective_from <= c_tax_date
1598 -- AND (effective_to >= c_tax_date OR effective_to IS NULL)
1599 -- --AND rownum = 1
1600 -- ORDER BY subscription_level_code;
1601
1602 -- Commented for Bug#5395227 - use get_rec_info_csr
1603 -- CURSOR get_def_rec_rate_from_rate_csr(
1604 -- c_tax_status_code ZX_STATUS_B.tax_status_code%TYPE,
1605 -- c_tax ZX_STATUS_B.tax%TYPE,
1606 -- c_tax_regime_code ZX_STATUS_B.tax_regime_code%TYPE,
1607 -- c_tax_date DATE,
1608 -- c_recovery_type_code zx_rates_b.default_rec_type_code%TYPE,
1609 -- c_tax_rate_code zx_rates_b.tax_rate_code%TYPE) IS
1610 -- SELECT default_rec_rate_code
1611 -- FROM ZX_SCO_RATES_B_V rate
1612 -- WHERE rate.effective_from <= c_tax_date
1613 -- AND (rate.effective_to >= c_tax_date OR rate.effective_to IS NULL)
1614 -- AND rate.tax_rate_code = c_tax_rate_code
1615 -- AND rate.tax_status_code = c_tax_status_code
1616 -- AND rate.tax = c_tax
1617 -- AND rate.active_flag = 'Y'
1618 -- AND rate_type_code <> 'RECOVERY'
1619 -- AND rate.default_rec_type_code = c_recovery_type_code
1620 -- AND rate.tax_regime_code = c_tax_regime_code
1621 -- --AND rownum = 1
1622 -- ORDER BY rate.subscription_level_code;
1623
1624 -- Bug#5395227- replace above cursor
1625 --
1626 CURSOR get_rec_info_csr(
1627 c_tax_rate_id ZX_RATES_B.tax_rate_id%TYPE) IS
1628 SELECT recovery_rule_code,
1629 default_rec_rate_code,
1630 def_rec_settlement_option_code,
1631 default_rec_type_code
1632 FROM ZX_RATES_B
1633 WHERE tax_rate_id = c_tax_rate_id;
1634
1635 CURSOR get_rec_rate_csr(
1636 c_tax ZX_STATUS_B.tax%TYPE,
1637 c_tax_regime_code ZX_STATUS_B.tax_regime_code%TYPE,
1638 c_tax_date DATE,
1639 c_recovery_type_code ZX_RATES_B.recovery_type_code%TYPE,
1640 c_tax_class ZX_RATES_B.tax_class%TYPE,
1641 c_tax_rate_code ZX_RATES_B.tax_rate_code%TYPE) IS
1642 SELECT tax_rate_id,
1643 percentage_rate,
1644 allow_adhoc_tax_rate_flag
1645 FROM ZX_SCO_RATES_B_V
1646 WHERE tax_regime_code = c_tax_regime_code
1647 AND tax = c_tax
1648 AND tax_rate_code = c_tax_rate_code
1649 AND rate_type_code = 'RECOVERY'
1650 AND recovery_type_code = c_recovery_type_code
1651 AND active_flag = 'Y'
1652 AND (tax_class = c_tax_class or tax_class IS NULL)
1653 AND effective_from <= c_tax_date
1654 AND (effective_to >= c_tax_date OR effective_to IS NULL)
1655 ORDER BY tax_class NULLS LAST, subscription_level_code;
1656
1657 CURSOR get_def_rec_rate_from_type_csr(
1658 c_tax ZX_STATUS_B.tax%TYPE,
1659 c_tax_regime_code ZX_STATUS_B.tax_regime_code%TYPE,
1660 c_tax_date DATE,
1661 c_tax_class ZX_RATES_B.tax_class%TYPE,
1662 c_recovery_type_code ZX_RATES_B.recovery_type_code%TYPE) IS
1663 SELECT rate.tax_rate_id,
1664 rate.tax_rate_code,
1665 rate.percentage_rate,
1666 rate.allow_adhoc_tax_rate_flag
1667 FROM ZX_SCO_RATES_B_V rate
1668 WHERE tax = c_tax
1669 AND tax_regime_code = c_tax_regime_code
1670 AND active_flag = 'Y'
1671 AND default_flg_effective_from <= c_tax_date
1672 AND (default_flg_effective_to >= c_tax_date OR
1673 default_flg_effective_to IS NULL)
1674 AND rate_type_code = 'RECOVERY'
1675 AND rate.recovery_type_code = c_recovery_type_code
1676 AND (rate.tax_class = c_tax_class or rate.tax_class IS NULL)
1677 AND default_rate_flag = 'Y'
1678 ORDER BY rate.tax_class NULLS LAST, rate.subscription_level_code;
1679
1680 CURSOR get_tax_rec_info_from_tax_csr(
1681 c_tax_id ZX_TAXES_B.tax_id%TYPE) IS
1682 SELECT allow_recoverability_flag,
1683 primary_recovery_type_code,
1684 primary_rec_type_rule_flag,
1685 secondary_recovery_type_code,
1686 secondary_rec_type_rule_flag,
1687 primary_rec_rate_det_rule_flag,
1688 sec_rec_rate_det_rule_flag,
1689 def_primary_rec_rate_code,
1690 def_secondary_rec_rate_code,
1691 effective_from,
1692 effective_to,
1693 def_rec_settlement_option_code,
1694 tax_account_source_tax
1695 FROM ZX_TAXES_B
1696 WHERE tax_id = c_tax_id;
1697
1698 -- Added for Bug#5508356
1699 CURSOR get_tax_account_entity_id_csr(
1700 c_recovery_rate_id zx_rec_nrec_dist.recovery_rate_id%TYPE,
1701 c_ledger_id zx_rec_nrec_dist.ledger_id%TYPE,
1702 c_internal_org_id zx_rec_nrec_dist.internal_organization_id%TYPE) IS
1703 SELECT tax_account_entity_id
1704 FROM zx_accounts
1705 WHERE tax_account_entity_id = c_recovery_rate_id
1706 AND tax_account_entity_code = 'RATES'
1707 AND ledger_id = c_ledger_id
1708 AND internal_organization_id = c_internal_org_id;
1709
1710 -- Added for Bug#14038095 --
1711 CURSOR get_adhoc_rec_rate_id_csr(
1712 c_tax ZX_RATES_B.tax%TYPE,
1713 c_tax_regime_code ZX_RATES_B.tax_regime_code%TYPE,
1714 c_content_owner_id ZX_RATES_B.content_owner_id%TYPE,
1715 c_tax_class ZX_RATES_B.tax_class%TYPE) IS
1716 SELECT tax_rate_id
1717 FROM zx_rates_b
1718 WHERE tax = c_tax
1719 AND tax_regime_code = c_tax_regime_code
1720 AND content_owner_id IN (c_content_owner_id,-99)
1721 AND tax_rate_code = 'AD_HOC_RECOVERY'
1722 AND rate_type_code = 'RECOVERY'
1723 AND recovery_type_code = 'STANDARD'
1724 AND record_type_code = 'MIGRATED'
1725 AND active_flag = 'Y'
1726 AND (tax_class = c_tax_class OR tax_class IS NULL)
1727 ORDER BY tax_class NULLS LAST, content_owner_id DESC;
1728
1729 BEGIN
1730
1731 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1732
1733 IF (g_level_procedure >= g_current_runtime_level ) THEN
1734 FND_LOG.STRING(g_level_procedure,
1735 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate.BEGIN',
1736 'ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate(+)');
1737 END IF;
1738
1739 p_return_status:= FND_API.G_RET_STS_SUCCESS;
1740
1741 l_tax_id:= p_detail_tax_line_tbl(p_tax_line_index).tax_id;
1742 l_tax := p_detail_tax_line_tbl(p_tax_line_index).tax;
1743 l_tax_regime_code := p_detail_tax_line_tbl(p_tax_line_index).tax_regime_code;
1744
1745 IF (g_level_statement >= g_current_runtime_level ) THEN
1746 FND_LOG.STRING(g_level_statement,
1747 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
1748 'Tax : '|| l_tax || ', Tax Regime code : '|| l_tax_regime_code);
1749 END IF;
1750
1751 -- Bug#5417753- determine tax_class value
1752 IF p_event_class_rec.prod_family_grp_code = 'O2C' THEN
1753 l_tax_class := 'OUTPUT';
1754 ELSIF p_event_class_rec.prod_family_grp_code = 'P2P' THEN
1755 l_tax_class := 'INPUT';
1756 END IF;
1757
1758 -- if recovery info is not exist in the global structure for this tax,
1759 -- populate the structure for the future usage.
1760 IF NOT g_tax_recovery_info_tbl.EXISTS(l_tax_id)
1761 THEN
1762 IF (g_level_statement >= g_current_runtime_level ) THEN
1763 FND_LOG.STRING(g_level_statement,
1764 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
1765 'Populating tax cache information ');
1766 END IF;
1767
1768
1769 OPEN get_tax_rec_info_from_tax_csr(l_tax_id);
1770 FETCH get_tax_rec_info_from_tax_csr INTO
1771 g_tax_recovery_info_tbl(l_tax_id).allow_recoverability_flag,
1772 g_tax_recovery_info_tbl(l_tax_id).primary_recovery_type_code,
1773 g_tax_recovery_info_tbl(l_tax_id).primary_rec_type_rule_flag,
1774 g_tax_recovery_info_tbl(l_tax_id).secondary_recovery_type_code,
1775 g_tax_recovery_info_tbl(l_tax_id).secondary_rec_type_rule_flag,
1776 g_tax_recovery_info_tbl(l_tax_id).primary_rec_rate_det_rule_flag,
1777 g_tax_recovery_info_tbl(l_tax_id).sec_rec_rate_det_rule_flag,
1778 g_tax_recovery_info_tbl(l_tax_id).def_primary_rec_rate_code,
1779 g_tax_recovery_info_tbl(l_tax_id).def_secondary_rec_rate_code,
1780 g_tax_recovery_info_tbl(l_tax_id).effective_from,
1781 g_tax_recovery_info_tbl(l_tax_id).effective_to,
1782 g_tax_recovery_info_tbl(l_tax_id).def_rec_settlement_option_code,
1783 g_tax_recovery_info_tbl(l_tax_id).tax_account_source_tax;
1784
1785 IF get_tax_rec_info_from_tax_csr%NOTFOUND THEN
1786 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1787 IF (g_level_statement >= g_current_runtime_level ) THEN
1788 FND_LOG.STRING(g_level_statement,
1789 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
1790 'error: ' || 'no tax info can be found for '||l_tax_id);
1791 END IF;
1792 CLOSE get_tax_rec_info_from_tax_csr;
1793 RETURN;
1794 END IF;
1795
1796 CLOSE get_tax_rec_info_from_tax_csr;
1797
1798 g_tax_recovery_info_tbl(l_tax_id).tax_regime_code := l_tax_regime_code;
1799 g_tax_recovery_info_tbl(l_tax_id).tax := l_tax;
1800 g_tax_recovery_info_tbl(l_tax_id).tax_id := l_tax_id;
1801
1802 END IF;
1803
1804 IF NOT ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl.exists(l_tax_id) then
1805 ZX_TDS_UTILITIES_PKG.populate_tax_cache (
1806 p_tax_id => l_tax_id,
1807 p_return_status => p_return_status,
1808 p_error_buffer => p_error_buffer);
1809 END IF;
1810
1811 IF (g_level_statement >= g_current_runtime_level ) THEN
1812 FND_LOG.STRING(g_level_statement,
1813 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
1814 'Populated tax cache information ');
1815 END IF;
1816
1817
1818 -- (If applied_from_application_id IS NOT NULL and
1819 -- applied_amt_handling_flag = 'P'), or adjusted_doc_application_id is not
1820 -- null, copy tax recovery rate percentage from applied_from/adjusted_to
1821 -- document. Skip the tax recovery rate determination process.
1822 --
1823 IF ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_application_id(
1824 p_trx_line_dist_index) IS NOT NULL OR
1825 (ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_application_id(
1826 p_trx_line_dist_index) IS NOT NULL AND
1827 ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).applied_amt_handling_flag ='P')
1828 THEN
1829
1830 IF (g_level_procedure >= g_current_runtime_level ) THEN
1831
1832 FND_LOG.STRING(g_level_procedure,
1833 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate.END',
1834 'ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate(-)'||
1835 'tax recovery rate is copied from applied_from or adjusted_to document');
1836 END IF;
1837 RETURN;
1838
1839 END IF;
1840 IF (g_level_statement >= g_current_runtime_level ) THEN
1841 FND_LOG.STRING(g_level_statement,
1842 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
1843 'Adjusted doc, applied from doc information is null ');
1844 END IF;
1845
1846
1847 l_tax_rate_code := p_detail_tax_line_tbl(p_tax_line_index).tax_rate_code;
1848 l_tax_rate_id := p_detail_tax_line_tbl(p_tax_line_index).tax_rate_id;
1849 l_tax_determine_date :=
1850 p_detail_tax_line_tbl(p_tax_line_index).tax_determine_date;
1851 l_tax_status_code := p_detail_tax_line_tbl(p_tax_line_index).tax_status_code;
1852 l_tax_jurisdiction_code :=
1853 p_detail_tax_line_tbl(p_tax_line_index).tax_jurisdiction_code;
1854 l_tax_date := p_detail_tax_line_tbl(p_tax_line_index).tax_date;
1855
1856 -- Added for Bug#14038095 --
1857 l_content_owner_id := p_detail_tax_line_tbl(p_tax_line_index).content_owner_id;
1858
1859 l_total_rec_rate:= 0;
1860
1861 IF p_rnd_begin_index IS NULL OR p_rnd_end_index IS NULL OR
1862 p_rnd_begin_index > p_rnd_end_index
1863 THEN
1864 IF (g_level_statement >= g_current_runtime_level ) THEN
1865 FND_LOG.STRING(g_level_statement,
1866 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
1867 'begin or end index is null, or begin index > end index');
1868 END IF;
1869 RETURN;
1870 END IF;
1871
1872 FOR i IN p_rnd_begin_index..p_rnd_end_index LOOP
1873
1874 IF NVL(p_rec_nrec_dist_tbl(i).reverse_flag, 'N') <> 'Y' AND
1875 NVL(p_rec_nrec_dist_tbl(i).freeze_flag, 'N') <> 'Y'
1876 THEN
1877 IF (g_level_statement >= g_current_runtime_level ) THEN
1878 FND_LOG.STRING(g_level_statement,
1879 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
1880 'Reverse flag and freeze flag are not Y.');
1881 END IF;
1882
1883
1884 IF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag,'N') = 'N' THEN
1885 IF (g_level_statement >= g_current_runtime_level ) THEN
1886 FND_LOG.STRING(g_level_statement,
1887 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
1888 'Recoverable flag is N');
1889 END IF;
1890
1891 l_non_rec_index := i;
1892 IF p_rec_nrec_dist_tbl(l_non_rec_index).account_source_tax_rate_id IS NULL THEN
1893 OPEN get_tax_account_entity_id_csr(
1894 p_rec_nrec_dist_tbl(l_non_rec_index).tax_rate_id,
1895 p_rec_nrec_dist_tbl(l_non_rec_index).ledger_id,
1896 p_rec_nrec_dist_tbl(l_non_rec_index).internal_organization_id);
1897 FETCH get_tax_account_entity_id_csr INTO l_acct_source_tax_rate_id;
1898 CLOSE get_tax_account_entity_id_csr;
1899 IF l_acct_source_tax_rate_id IS NOT NULL THEN
1900 p_rec_nrec_dist_tbl(l_non_rec_index).account_source_tax_rate_id := l_acct_source_tax_rate_id;
1901 ELSE
1902 p_rec_nrec_dist_tbl(l_non_rec_index).account_source_tax_rate_id :=
1903 p_detail_tax_line_tbl(p_tax_line_index).account_source_tax_rate_id;
1904
1905 END IF;
1906
1907 END IF;
1908
1909 ELSE -- recoverable line
1910 IF (g_level_statement >= g_current_runtime_level ) THEN
1911 FND_LOG.STRING(g_level_statement,
1912 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
1913 'Recoverable flag is Y');
1914 END IF;
1915
1916
1917 l_rec_type_code:= p_rec_nrec_dist_tbl(i).recovery_type_code;
1918 l_rec_rate_code:= NULL;
1919 l_rec_rate_id:= NULL;
1920 l_rec_rate:= NULL;
1921 l_rec_rate_adhoc_flag := NULL;
1922 l_def_rec_settlement_code := NULL;
1923 l_acct_source_tax_rate_id := NULL;
1924
1925 IF NVL(p_rec_nrec_dist_tbl(i).historical_flag, 'N') = 'Y' OR
1926 NVL(p_rec_nrec_dist_tbl(i).last_manual_entry, 'X') =
1927 'RECOVERY_RATE_CODE' OR
1928 NVL(p_rec_nrec_dist_tbl(i).last_manual_entry, 'X') =
1929 'RECOVERY_RATE' THEN --Bug7250287
1930
1931 -- For migrated recovery tax distrabutions, or RECOVERY_RATE_CODE
1932 -- is overridden, accumulate total recovery rate
1933 --
1934 l_total_rec_rate := l_total_rec_rate + p_rec_nrec_dist_tbl(i).rec_nrec_rate;
1935 l_rec_rate_code := p_rec_nrec_dist_tbl(i).recovery_rate_code;
1936
1937 IF (g_level_statement >= g_current_runtime_level ) THEN
1938 FND_LOG.STRING(g_level_statement,
1939 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
1940 'Last Manual Entry : '||p_rec_nrec_dist_tbl(i).last_manual_entry);
1941 END IF;
1942
1943 IF (g_level_statement >= g_current_runtime_level ) THEN
1944 FND_LOG.STRING(g_level_statement,
1945 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
1946 'B. TAX_DIST_ID : '|| to_char(p_rec_nrec_dist_tbl(i).rec_nrec_tax_dist_id)||
1947 ', RECOVERY_RATE_CODE : '|| p_rec_nrec_dist_tbl(i).recovery_rate_code||
1948 ', RECOVERY_RATE_ID : '|| to_char(p_rec_nrec_dist_tbl(i).recovery_rate_id)||
1949 ', RECOVERY_RATE : '|| to_char(p_rec_nrec_dist_tbl(i).rec_nrec_rate));
1950 END IF;
1951
1952 IF p_rec_nrec_dist_tbl(i).recovery_rate_id IS NULL THEN
1953 OPEN get_rec_rate_csr(l_tax,
1954 l_tax_regime_code,
1955 l_tax_determine_date,
1956 l_rec_type_code,
1957 l_tax_class,
1958 l_rec_rate_code);
1959 FETCH get_rec_rate_csr INTO l_rec_rate_id,
1960 l_rec_rate,
1961 l_rec_rate_adhoc_flag;
1962 CLOSE get_rec_rate_csr;
1963
1964 IF l_rec_rate_id IS NOT NULL THEN
1965 p_rec_nrec_dist_tbl(i).recovery_rate_id := l_rec_rate_id;
1966 p_rec_nrec_dist_tbl(i).rec_nrec_rate := l_rec_rate;
1967 END IF;
1968 END IF;
1969
1970 IF (g_level_statement >= g_current_runtime_level ) THEN
1971 FND_LOG.STRING(g_level_statement,
1972 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
1973 'A. TAX_DIST_ID : '|| to_char(p_rec_nrec_dist_tbl(i).rec_nrec_tax_dist_id)||
1974 ', RECOVERY_RATE_CODE : '|| p_rec_nrec_dist_tbl(i).recovery_rate_code||
1975 ', RECOVERY_RATE_ID : '|| to_char(p_rec_nrec_dist_tbl(i).recovery_rate_id)||
1976 ', RECOVERY_RATE : '|| to_char(p_rec_nrec_dist_tbl(i).rec_nrec_rate));
1977 END IF;
1978
1979 ELSE
1980
1981 IF ((NVL(p_event_class_rec.enforce_tax_from_ref_doc_flag,'N') = 'Y' AND
1982 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_application_id(p_trx_line_dist_index) IS NOT NULL
1983 )
1984 OR -- Added following conditions for Bug#13012588
1985 (p_detail_tax_line_tbl(p_tax_line_index).other_doc_source = 'REFERENCE' AND
1986 p_detail_tax_line_tbl(p_tax_line_index).unrounded_tax_amt = 0 AND
1987 p_detail_tax_line_tbl(p_tax_line_index).unrounded_taxable_amt = 0 AND
1988 p_detail_tax_line_tbl(p_tax_line_index).manually_entered_flag = 'Y' AND
1989 p_detail_tax_line_tbl(p_tax_line_index).freeze_until_overridden_flag ='Y'
1990 )
1991 )
1992 AND p_rec_nrec_dist_tbl(i).recovery_rate_code IS NOT NULL
1993 THEN
1994
1995 l_rec_rate_code := p_rec_nrec_dist_tbl(i).recovery_rate_code;
1996
1997 IF (g_level_statement >= g_current_runtime_level ) THEN
1998 FND_LOG.STRING(g_level_statement,
1999 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2000 'Enforce Tax Recovery Code from Reference Document.'||
2001 'ENFORCE_TAX_FROM_REF_DOC_FLAG : '||
2002 NVL(p_event_class_rec.enforce_tax_from_ref_doc_flag,'N'));
2003
2004 FND_LOG.STRING(g_level_statement,
2005 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2006 'Recovery Rate Code : '||l_rec_rate_code);
2007 END IF;
2008
2009
2010 ELSE
2011 -- bug 9760322
2012 --
2013 IF l_rec_type_code = g_tax_recovery_info_tbl(
2014 l_tax_id).primary_recovery_type_code
2015 THEN
2016 p_rec_nrec_dist_tbl(i).rec_rate_det_rule_flag :=
2017 g_tax_recovery_info_tbl(l_tax_id).primary_rec_rate_det_rule_flag;
2018
2019 ELSIF l_rec_type_code = g_tax_recovery_info_tbl(
2020 l_tax_id).secondary_recovery_type_code
2021 THEN
2022 p_rec_nrec_dist_tbl(i).rec_rate_det_rule_flag :=
2023 g_tax_recovery_info_tbl(l_tax_id).sec_rec_rate_det_rule_flag;
2024 END IF;
2025
2026 IF p_rec_nrec_dist_tbl(i).rec_rate_det_rule_flag = 'Y' THEN
2027
2028 -- Bug#5395227- get recovery rule code and default
2029 -- recovery rate code from zx_rates_b
2030 --
2031 OPEN get_rec_info_csr(l_tax_rate_id);
2032 FETCH get_rec_info_csr INTO l_rec_rule_code,
2033 l_def_rec_rate_code,
2034 l_def_rec_settlement_code,
2035 l_def_rec_type_code;
2036 CLOSE get_rec_info_csr;
2037
2038 -- Bug 6813467 - Removed the check IF l_rec_rule_code IS NOT NULL, it should enter
2039 -- rules processing unconditionally. Rules Engine will process for the rec_rule_code
2040 -- that is passed and if not found then will process further.
2041 IF (g_level_statement >= g_current_runtime_level ) THEN
2042 FND_LOG.STRING(g_level_statement,
2043 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2044 'l_rec_rule_code : '|| l_rec_rule_code);
2045 FND_LOG.STRING(g_level_statement,
2046 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2047 'l_def_rec_rate_code : ' || l_def_rec_rate_code);
2048 FND_LOG.STRING(g_level_statement,
2049 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2050 'l_def_rec_settlement_code : ' ||l_def_rec_settlement_code );
2051 FND_LOG.STRING(g_level_statement,
2052 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2053 'l_rec_type_code : ' || l_rec_type_code );
2054 FND_LOG.STRING(g_level_statement,
2055 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2056 'l_def_rec_rate_code : ' || l_def_rec_rate_code );
2057 END IF;
2058
2059 ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process(
2060 'DET_RECOVERY_RATE',
2061 'TRX_LINE_DIST_TBL',
2062 p_trx_line_dist_index,
2063 p_event_class_rec,
2064 l_tax_id,
2065 NULL,-- l_tax_status_code
2066 l_tax_determine_date,
2067 l_rec_rule_code,
2068 l_rec_type_code,
2069 l_zx_result_rec,
2070 p_return_status,
2071 p_error_buffer);
2072
2073 l_rec_rate_code:= l_zx_result_rec.alphanumeric_result;
2074 l_rec_rate_id:= l_zx_result_rec.numeric_result;
2075 IF (g_level_statement >= g_current_runtime_level ) THEN
2076 FND_LOG.STRING(g_level_statement,
2077 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2078 'l_rec_rate_code : '||l_rec_rate_code );
2079 FND_LOG.STRING(g_level_statement,
2080 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2081 'l_rec_rate_id : ' || to_char(l_rec_rate_id));
2082
2083 END IF;
2084
2085
2086 -- bug 5716167
2087 IF l_rec_rate_code IS NULL THEN
2088 -- bug 9759983
2089 IF l_def_rec_type_code <> p_rec_nrec_dist_tbl(i).recovery_type_code THEN
2090 NULL;
2091 ELSE
2092 l_rec_rate_code := l_def_rec_rate_code;
2093 END IF;
2094 END IF;
2095
2096 -- bug 5386805: populate rec_rate_result_id;
2097 --
2098 p_rec_nrec_dist_tbl(i).rec_rate_result_id := l_zx_result_rec.result_id;
2099
2100 END IF; -- rec_rate_det_rule_flag
2101
2102 IF l_rec_rate_code IS NULL THEN
2103 -- Bug#5457916- need to fetch l_def_rec_rate_code
2104 -- if rec_rate_det_rule_flag is 'N', the cursor
2105 -- has not been fetched earlier, the l_rec_rule_code
2106 -- is fetched in this case but not used
2107 --
2108 IF NVL(p_rec_nrec_dist_tbl(i).rec_rate_det_rule_flag, 'N') = 'N' THEN
2109 IF (g_level_statement >= g_current_runtime_level ) THEN
2110 FND_LOG.STRING(g_level_statement,
2111 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2112 'rec_rate_det_rule_flag is N ');
2113 END IF;
2114
2115 OPEN get_rec_info_csr(l_tax_rate_id);
2116 FETCH get_rec_info_csr INTO l_rec_rule_code,
2117 l_def_rec_rate_code,
2118 l_def_rec_settlement_code,
2119 l_def_rec_type_code;
2120 CLOSE get_rec_info_csr;
2121 END IF;
2122 -- bug 9759983
2123
2124 IF (g_level_statement >= g_current_runtime_level ) THEN
2125 FND_LOG.STRING(g_level_statement,
2126 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2127 'l_rec_rule_code : '|| l_rec_rule_code);
2128 FND_LOG.STRING(g_level_statement,
2129 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2130 'l_def_rec_rate_code : ' || l_def_rec_rate_code);
2131 FND_LOG.STRING(g_level_statement,
2132 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2133 'l_def_rec_settlement_code : ' ||l_def_rec_settlement_code );
2134 FND_LOG.STRING(g_level_statement,
2135 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2136 'l_def_rec_rate_code : ' || l_def_rec_rate_code );
2137 END IF;
2138
2139 IF l_def_rec_type_code <> p_rec_nrec_dist_tbl(i).recovery_type_code THEN
2140 NULL;
2141 ELSE
2142 l_rec_rate_code := l_def_rec_rate_code;
2143 END IF;
2144
2145 IF l_rec_rate_code IS NULL THEN
2146
2147 OPEN get_def_rec_rate_from_type_csr(
2148 l_tax,
2149 l_tax_regime_code,
2150 l_tax_determine_date,
2151 l_tax_class,
2152 l_rec_type_code);
2153
2154 FETCH get_def_rec_rate_from_type_csr INTO l_rec_rate_id,
2155 l_rec_rate_code, l_rec_rate, l_rec_rate_adhoc_flag;
2156
2157 CLOSE get_def_rec_rate_from_type_csr;
2158
2159
2160 IF l_rec_rate_code IS NULL THEN
2161
2162
2163 /*** Bug#5395227
2164 OPEN get_def_rec_rate_from_rate_csr(
2165 l_tax_status_code,
2166 l_tax,
2167 l_tax_regime_code,
2168 l_tax_determine_date,
2169 l_rec_type_code,
2170 l_tax_rate_code);
2171
2172 FETCH get_def_rec_rate_from_rate_csr INTO l_rec_rate_code;
2173 CLOSE get_def_rec_rate_from_rate_csr;
2174 ***/
2175
2176 --
2177 -- Bug#5457916- need to fetch l_def_rec_rate_code
2178 -- if rec_rate_det_rule_flag is 'N', the cursor
2179 -- has not been fetched earlier, the l_rec_rule_code
2180 -- is fetched in this case but not used
2181 --
2182 /***IF NVL(p_rec_nrec_dist_tbl(i).rec_rate_det_rule_flag, 'N') = 'N' THEN
2183 OPEN get_rec_info_csr(l_tax_rate_id);
2184 FETCH get_rec_info_csr INTO l_rec_rule_code,
2185 l_def_rec_rate_code,
2186 l_def_rec_settlement_code;
2187 CLOSE get_rec_info_csr;
2188 END IF;
2189
2190 l_rec_rate_code := l_def_rec_rate_code;
2191 ***/
2192
2193
2194 -- get def_primary_rec_rate_code or def_secondary_rec_rate_code
2195 -- From g_tax_recovery_info_tbl.
2196 --
2197
2198 IF l_rec_type_code = g_tax_recovery_info_tbl(
2199 l_tax_id).primary_recovery_type_code THEN
2200
2201 l_rec_rate_code :=
2202 g_tax_recovery_info_tbl(l_tax_id).def_primary_rec_rate_code;
2203
2204 ELSIF l_rec_type_code = g_tax_recovery_info_tbl(
2205 l_tax_id).secondary_recovery_type_code THEN
2206
2207 l_rec_rate_code := g_tax_recovery_info_tbl(
2208 l_tax_id).def_secondary_rec_rate_code;
2209 END IF;
2210
2211 IF l_rec_rate_code IS NULL THEN
2212 p_return_status := FND_API.G_RET_STS_ERROR;
2213
2214 FND_MESSAGE.SET_NAME('ZX','ZX_REC_RATE_CODE_NOT_FOUND');
2215 FND_MESSAGE.SET_TOKEN('REGIME_NAME', l_tax_regime_code);
2216 FND_MESSAGE.SET_TOKEN('CONTENT_OWNER_NAME',
2217 p_detail_tax_line_tbl(p_tax_line_index).content_owner_id);
2218
2219 FND_MESSAGE.SET_TOKEN('TAX_NAME', l_tax);
2220 FND_MESSAGE.SET_TOKEN('RECOVERY_TYPE', l_rec_type_code);
2221
2222 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
2223 p_detail_tax_line_tbl(p_tax_line_index).trx_line_id;
2224 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
2225 p_detail_tax_line_tbl(p_tax_line_index).trx_level_type;
2226 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.tax_line_id :=
2227 p_detail_tax_line_tbl(p_tax_line_index).tax_line_id;
2228 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_dist_id :=
2229 p_rec_nrec_dist_tbl(i).trx_line_dist_id;
2230 ZX_API_PUB.add_msg(
2231 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
2232
2233 IF (g_level_statement >= g_current_runtime_level ) THEN
2234 FND_LOG.STRING(g_level_statement,
2235 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2236 'Cannot find default rec rate code');
2237 FND_LOG.STRING(g_level_statement,
2238 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2239 'p_return_status := ' || p_return_status);
2240 FND_LOG.STRING(g_level_statement,
2241 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate.END',
2242 'ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate(-)');
2243 END IF;
2244 RETURN;
2245 END IF; -- default tax recovery rate code not found, raise error
2246 END IF; -- default tax recovery rate code at Tax level
2247 END IF; -- default tax recovery rate code at recovery type level
2248 END IF; -- default tax recovery rate code for Tax Rate
2249
2250 IF (g_level_statement >= g_current_runtime_level ) THEN
2251 FND_LOG.STRING(g_level_statement,
2252 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2253 'l_rec_rate_code = ' || l_rec_rate_code);
2254 END IF;
2255 END IF; -- p_event_class_rec.enforce_tax_from_ref_doc_flag
2256
2257 -- Bug 12870975 : Added code to Copy the rec_nrec_rate and recovery_rate_id
2258 -- from PO in case of Zero Amount reference tax line
2259 IF p_detail_tax_line_tbl(p_tax_line_index).other_doc_source = 'REFERENCE' AND
2260 p_detail_tax_line_tbl(p_tax_line_index).unrounded_tax_amt = 0 AND
2261 p_detail_tax_line_tbl(p_tax_line_index).unrounded_taxable_amt = 0 AND
2262 p_detail_tax_line_tbl(p_tax_line_index).manually_entered_flag = 'Y' AND
2263 p_detail_tax_line_tbl(p_tax_line_index).freeze_until_overridden_flag ='Y'
2264 THEN
2265
2266 l_rec_rate := p_rec_nrec_dist_tbl(i).rec_nrec_rate;
2267 l_rec_rate_id := p_rec_nrec_dist_tbl(i).recovery_rate_id;
2268
2269 IF (g_level_statement >= g_current_runtime_level ) THEN
2270 FND_LOG.STRING(g_level_statement,
2271 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2272 'Assigned Recovery Rate Percentage and Recovery_Rate_Id '||
2273 'for Zero Amount Reference Tax Line');
2274 FND_LOG.STRING(g_level_statement,
2275 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2276 'Recovery_Rate : '||l_rec_rate ||', Recovery_Rate_Id : '||l_rec_rate_id);
2277 END IF;
2278
2279 -- Start : Added for Bug#14038095 --
2280 IF l_rec_rate_id IS NULL AND l_rec_rate_code = 'AD_HOC_RECOVERY' THEN
2281 IF (g_level_statement >= g_current_runtime_level ) THEN
2282 FND_LOG.STRING(g_level_statement,
2283 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2284 'Recovery_Rate_Id from the PO is NULL for Recovery Rate Code AD_HOC_RECOVERY');
2285 FND_LOG.STRING(g_level_statement,
2286 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2287 'Getting Recovery_Rate_Id for Recovery Rate Code AD_HOC_RECOVERY...');
2288 END IF;
2289
2290 OPEN get_adhoc_rec_rate_id_csr(
2291 l_tax,
2292 l_tax_regime_code,
2293 l_content_owner_id,
2294 l_tax_class);
2295 FETCH get_adhoc_rec_rate_id_csr INTO l_rec_rate_id;
2296 CLOSE get_adhoc_rec_rate_id_csr;
2297
2298 IF (g_level_statement >= g_current_runtime_level ) THEN
2299 FND_LOG.STRING(g_level_statement,
2300 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2301 'Recovery_Rate_Id for Recovery Rate Code AD_HOC_RECOVERY : '||l_rec_rate_id);
2302 END IF;
2303 END IF;
2304 -- END : Added for Bug#14038095 --
2305
2306 ELSIF l_rec_rate IS NULL THEN
2307 -- get l_rec_rate if it is null
2308 --
2309 OPEN get_rec_rate_csr(l_tax,
2310 l_tax_regime_code,
2311 l_tax_determine_date,
2312 l_rec_type_code,
2313 l_tax_class,
2314 l_rec_rate_code);
2315
2316 FETCH get_rec_rate_csr INTO l_rec_rate_id, l_rec_rate,
2317 l_rec_rate_adhoc_flag;
2318 CLOSE get_rec_rate_csr;
2319 END IF; -- _rec_rate IS NULL
2320
2321 -- Bug 4012677: Support PO item distribution level tax recovery
2322 -- rate override
2323 --
2324 IF ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.overriding_recovery_rate(
2325 p_trx_line_dist_index) IS NOT NULL AND
2326 p_rec_nrec_dist_tbl(i).recovery_type_code =
2327 g_tax_recovery_info_tbl(l_tax_id).primary_recovery_type_code AND
2328 l_rec_rate_adhoc_flag = 'Y'
2329 THEN
2330
2331 p_rec_nrec_dist_tbl(i).orig_rec_nrec_rate := l_rec_rate;
2332 l_rec_rate :=
2333 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.overriding_recovery_rate(
2334 p_trx_line_dist_index);
2335 END IF;
2336
2337 -- For invoice matched to PO and rec_nrec_rate overidden by user in PO,
2338 -- copy rec_nrec_rate if tax recovery rate is adhoc
2339 --
2340 IF NVL(p_event_class_rec.enforce_tax_from_ref_doc_flag,'N') = 'Y' AND
2341 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_application_id(
2342 p_trx_line_dist_index) IS NOT NULL AND
2343 p_rec_nrec_dist_tbl(i).rec_nrec_rate IS NOT NULL AND
2344 l_rec_rate_adhoc_flag = 'Y'
2345 THEN
2346
2347 l_rec_rate := p_rec_nrec_dist_tbl(i).rec_nrec_rate;
2348
2349 END IF; -- End Bug 4012677
2350
2351 -- populate l_rec_rate_id, l_rec_rate_code, l_rec_rate on
2352 -- this recovery tax distribution
2353 --
2354 IF l_rec_rate IS NOT NULL THEN
2355
2356 p_rec_nrec_dist_tbl(i).recovery_rate_id := l_rec_rate_id;
2357 p_rec_nrec_dist_tbl(i).recovery_rate_code := l_rec_rate_code;
2358 p_rec_nrec_dist_tbl(i).rec_nrec_rate := l_rec_rate;
2359
2360 l_total_rec_rate:= l_total_rec_rate + l_rec_rate;
2361
2362 ELSE -- l_rec_rate NULL
2363
2364 p_return_status := FND_API.G_RET_STS_ERROR;
2365
2366 FND_MESSAGE.SET_NAME('ZX','ZX_REC_RATE_NOT_FOUND');
2367 FND_MESSAGE.SET_TOKEN('REGIME_NAME', l_tax_regime_code);
2368 FND_MESSAGE.SET_TOKEN('CONTENT_OWNER_NAME',
2369 p_detail_tax_line_tbl(p_tax_line_index).content_owner_id);
2370
2371 FND_MESSAGE.SET_TOKEN('TAX_NAME', l_tax);
2372 FND_MESSAGE.SET_TOKEN('RECOVERY_TYPE', l_rec_type_code);
2373 FND_MESSAGE.SET_TOKEN('RECOVERY_RATE_CODE', l_rec_rate_code);
2374
2375 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
2376 p_detail_tax_line_tbl(p_tax_line_index).trx_line_id;
2377 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
2378 p_detail_tax_line_tbl(p_tax_line_index).trx_level_type;
2379 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.tax_line_id :=
2380 p_detail_tax_line_tbl(p_tax_line_index).tax_line_id;
2381 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_dist_id :=
2382 p_rec_nrec_dist_tbl(i).trx_line_dist_id;
2383
2384 ZX_API_PUB.add_msg(
2385 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
2386
2387
2388 IF (g_level_statement >= g_current_runtime_level ) THEN
2389 FND_LOG.STRING(g_level_statement,
2390 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2391 'error: Recovery rate is not found.');
2392
2393 FND_LOG.STRING(g_level_statement,
2394 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate.END',
2395 'ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate(-)');
2396 END IF;
2397 RETURN;
2398 END IF;
2399 END IF; -- LME <> 'RECOVERY_RATE_CODE' OR historical_flag <> 'Y'
2400
2401 -- bug 5508356: populate def_rec_settlement_option_code
2402 --
2403 IF l_def_rec_settlement_code IS NULL THEN
2404
2405 OPEN get_rec_info_csr(l_tax_rate_id);
2406 FETCH get_rec_info_csr INTO l_rec_rule_code,
2407 l_def_rec_rate_code,
2408 l_def_rec_settlement_code,
2409 l_def_rec_type_code;
2410 CLOSE get_rec_info_csr;
2411
2412 IF l_def_rec_settlement_code IS NULL THEN
2413 l_def_rec_settlement_code :=
2414 g_tax_recovery_info_tbl(l_tax_id).def_rec_settlement_option_code;
2415
2416 IF l_def_rec_settlement_code IS NULL THEN
2417 l_def_rec_settlement_code := 'IMMEDIATE';
2418 END IF;
2419 END IF;
2420 END IF; -- l_def_rec_settlement_code IS NULL
2421
2422 p_rec_nrec_dist_tbl(i).def_rec_settlement_option_code :=
2423 l_def_rec_settlement_code;
2424
2425 -- bug 5508356: populate account_source_tax_rate_id
2426 --
2427 OPEN get_tax_account_entity_id_csr(
2428 p_rec_nrec_dist_tbl(i).recovery_rate_id,
2429 p_rec_nrec_dist_tbl(i).ledger_id,
2430 p_rec_nrec_dist_tbl(i).internal_organization_id);
2431 FETCH get_tax_account_entity_id_csr INTO l_acct_source_tax_rate_id;
2432 CLOSE get_tax_account_entity_id_csr;
2433
2434 IF l_acct_source_tax_rate_id IS NOT NULL THEN
2435 p_rec_nrec_dist_tbl(i).account_source_tax_rate_id :=
2436 l_acct_source_tax_rate_id;
2437 IF (g_level_statement >= g_current_runtime_level ) THEN
2438 FND_LOG.STRING(g_level_statement,
2439 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2440 'Tax accounts defined for recovery rate id '|| to_char(p_rec_nrec_dist_tbl(i).recovery_rate_id));
2441
2442 END IF;
2443
2444 ELSE
2445 -- 6900725
2446 -- p_rec_nrec_dist_tbl(i).account_source_tax_rate_id :=
2447 -- p_detail_tax_line_tbl(p_tax_line_index).account_source_tax_rate_id;
2448 -- This ELSE part contains the fix for bug 6900725
2449 IF (g_level_statement >= g_current_runtime_level ) THEN
2450 FND_LOG.STRING(g_level_statement,
2451 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2452 'Tax accounts not defined for recovery rate id '|| to_char(p_rec_nrec_dist_tbl(i).recovery_rate_id));
2453
2454 END IF;
2455
2456 IF g_tax_recovery_info_tbl(l_tax_id).tax_account_source_tax IS NOT NULL THEN
2457 IF (g_level_statement >= g_current_runtime_level ) THEN
2458 FND_LOG.STRING(g_level_statement,
2459 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2460 'Getting account source tax rate id from Tax Accounts Source Tax '|| g_tax_recovery_info_tbl(l_tax_id).tax_account_source_tax );
2461
2462 END IF;
2463
2464
2465 FOR j in p_rec_nrec_dist_tbl.first..p_rec_nrec_dist_tbl.last LOOP
2466 IF p_rec_nrec_dist_tbl(j).tax = g_tax_recovery_info_tbl(l_tax_id).tax_account_source_tax AND
2467 p_rec_nrec_dist_tbl(j).tax_regime_code = p_rec_nrec_dist_tbl(i).tax_regime_code AND
2468 p_rec_nrec_dist_tbl(j).trx_line_dist_id = p_rec_nrec_dist_tbl(i).trx_line_dist_id AND
2469 p_rec_nrec_dist_tbl(j).recovery_type_code = g_tax_recovery_info_tbl(p_rec_nrec_dist_tbl(j).tax_id).primary_recovery_type_code AND
2470 p_rec_nrec_dist_tbl(i).recovery_type_code = g_tax_recovery_info_tbl(l_tax_id).primary_recovery_type_code
2471 THEN
2472
2473 p_rec_nrec_dist_tbl(i).account_source_tax_rate_id := p_rec_nrec_dist_tbl(j).account_source_tax_rate_id;
2474
2475 ELSIF p_rec_nrec_dist_tbl(j).tax = g_tax_recovery_info_tbl(l_tax_id).tax_account_source_tax AND
2476 p_rec_nrec_dist_tbl(j).tax_regime_code = p_rec_nrec_dist_tbl(i).tax_regime_code AND
2477 p_rec_nrec_dist_tbl(j).trx_line_dist_id = p_rec_nrec_dist_tbl(i).trx_line_dist_id AND
2478 p_rec_nrec_dist_tbl(j).recovery_type_code = g_tax_recovery_info_tbl(p_rec_nrec_dist_tbl(j).tax_id).secondary_recovery_type_code AND
2479 p_rec_nrec_dist_tbl(i).recovery_type_code = g_tax_recovery_info_tbl(l_tax_id).secondary_recovery_type_code
2480 THEN
2481
2482 p_rec_nrec_dist_tbl(i).account_source_tax_rate_id := p_rec_nrec_dist_tbl(j).account_source_tax_rate_id;
2483
2484 END IF;
2485 END LOOP;
2486 IF p_rec_nrec_dist_tbl(i).account_source_tax_rate_id IS NULL THEN
2487 FOR j in p_rec_nrec_dist_tbl.first..p_rec_nrec_dist_tbl.last LOOP
2488 IF p_rec_nrec_dist_tbl(j).tax = g_tax_recovery_info_tbl(l_tax_id).tax_account_source_tax AND
2489 p_rec_nrec_dist_tbl(j).tax_regime_code = p_rec_nrec_dist_tbl(i).tax_regime_code AND
2490 p_rec_nrec_dist_tbl(j).trx_line_dist_id = p_rec_nrec_dist_tbl(i).trx_line_dist_id AND
2491 p_rec_nrec_dist_tbl(i).recovery_type_code = g_tax_recovery_info_tbl(l_tax_id).secondary_recovery_type_code AND
2492 g_tax_recovery_info_tbl(p_rec_nrec_dist_tbl(j).tax_id).secondary_recovery_type_code IS NULL AND
2493 p_rec_nrec_dist_tbl(j).recovery_type_code = g_tax_recovery_info_tbl(p_rec_nrec_dist_tbl(j).tax_id).primary_recovery_type_code
2494 THEN
2495
2496 p_rec_nrec_dist_tbl(i).account_source_tax_rate_id := p_rec_nrec_dist_tbl(j).account_source_tax_rate_id;
2497
2498 END IF;
2499 END LOOP;
2500 END IF;
2501 IF (g_level_statement >= g_current_runtime_level ) THEN
2502 FND_LOG.STRING(g_level_statement,
2503 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2504 'Account source tax rate id for recovery rate '|| to_char(p_rec_nrec_dist_tbl(i).account_source_tax_rate_id));
2505
2506 END IF;
2507
2508
2509 IF p_rec_nrec_dist_tbl(i).account_source_tax_rate_id IS NULL THEN
2510 OPEN get_tax_account_entity_id_csr(
2511 p_rec_nrec_dist_tbl(i).tax_rate_id,
2512 p_rec_nrec_dist_tbl(i).ledger_id,
2513 p_rec_nrec_dist_tbl(i).internal_organization_id);
2514 FETCH get_tax_account_entity_id_csr INTO l_acct_source_tax_rate_id;
2515 CLOSE get_tax_account_entity_id_csr;
2516 IF l_acct_source_tax_rate_id IS NOT NULL THEN
2517 p_rec_nrec_dist_tbl(i).account_source_tax_rate_id := l_acct_source_tax_rate_id;
2518 ELSE
2519 p_rec_nrec_dist_tbl(i).account_source_tax_rate_id := p_detail_tax_line_tbl(p_tax_line_index).account_source_tax_rate_id;
2520
2521 END IF;
2522 IF (g_level_statement >= g_current_runtime_level ) THEN
2523 FND_LOG.STRING(g_level_statement,
2524 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2525 'Final Account source tax rate id '|| to_char(p_rec_nrec_dist_tbl(i).account_source_tax_rate_id));
2526
2527 END IF;
2528
2529
2530
2531 END IF;
2532
2533 END IF;
2534
2535 END IF; -- l_account_source_tax_rate_id IS NOT NULL
2536 END IF; -- recoverable_flag = 'N' OR ELSE
2537 END IF; -- reverse_flag <> 'Y AND freeze_flag <> 'Y'
2538 END LOOP; -- i IN p_rnd_begin_index..p_rnd_end_index
2539
2540 IF l_non_rec_index IS NULL THEN
2541
2542 p_rnd_end_index:= p_rnd_end_index + 1;
2543 l_non_rec_index:= p_rnd_end_index;
2544
2545 p_rec_nrec_dist_tbl(p_rnd_end_index):= p_rec_nrec_dist_tbl(p_rnd_end_index - 1);
2546
2547 -- bug 5417252
2548 SELECT zx_rec_nrec_dist_s.nextval INTO
2549 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_tax_dist_id from dual;
2550
2551 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_tax_dist_number :=
2552 p_rec_nrec_dist_tbl(p_rnd_end_index-1).rec_nrec_tax_dist_number + 1;
2553
2554 p_rec_nrec_dist_tbl(p_rnd_end_index).recoverable_flag := 'N';
2555 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_type_id := NULL;
2556 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_type_code := NULL;
2557 p_rec_nrec_dist_tbl(p_rnd_end_index).historical_flag := 'N';
2558 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_rate_id := NULL;
2559 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_rate_code := NULL;
2560 --6900725
2561 p_rec_nrec_dist_tbl(p_rnd_end_index).account_source_tax_rate_id := NULL;
2562
2563
2564
2565 END IF; -- l_non_rec_index IS NULL
2566 -- 6900725
2567 p_rec_nrec_dist_tbl(l_non_rec_index).account_source_tax_rate_id := NULL;
2568 l_acct_source_tax_rate_id := null;
2569 IF p_rec_nrec_dist_tbl(l_non_rec_index).account_source_tax_rate_id IS NULL THEN
2570 OPEN get_tax_account_entity_id_csr(
2571 p_rec_nrec_dist_tbl(l_non_rec_index).tax_rate_id,
2572 p_rec_nrec_dist_tbl(l_non_rec_index).ledger_id,
2573 p_rec_nrec_dist_tbl(l_non_rec_index).internal_organization_id);
2574 FETCH get_tax_account_entity_id_csr INTO l_acct_source_tax_rate_id;
2575 CLOSE get_tax_account_entity_id_csr;
2576 IF l_acct_source_tax_rate_id IS NOT NULL THEN
2577 p_rec_nrec_dist_tbl(l_non_rec_index).account_source_tax_rate_id := l_acct_source_tax_rate_id;
2578 ELSE
2579 p_rec_nrec_dist_tbl(l_non_rec_index).account_source_tax_rate_id := p_detail_tax_line_tbl(p_tax_line_index).account_source_tax_rate_id;
2580
2581 END IF;
2582
2583 END IF;
2584 IF (g_level_statement >= g_current_runtime_level ) THEN
2585 FND_LOG.STRING(g_level_statement,
2586 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2587 'Account source tax rate id for non recoverable dist '||p_rec_nrec_dist_tbl(l_non_rec_index).account_source_tax_rate_id);
2588
2589 END IF;
2590
2591
2592
2593 p_rec_nrec_dist_tbl(l_non_rec_index).rec_nrec_rate:= 100 - l_total_rec_rate;
2594 IF p_rec_nrec_dist_tbl(l_non_rec_index).rec_nrec_rate < 0 THEN
2595 p_return_status := FND_API.G_RET_STS_ERROR;
2596
2597 FND_MESSAGE.SET_NAME('ZX','ZX_SUM_REC_RATE_OVER');
2598
2599 FND_MESSAGE.SET_TOKEN('RECOVERY_TYPE_1',
2600 g_tax_recovery_info_tbl(
2601 l_tax_id).primary_recovery_type_code);
2602 FND_MESSAGE.SET_TOKEN('RECOVERY_TYPE_2',
2603 g_tax_recovery_info_tbl(
2604 l_tax_id).secondary_recovery_type_code);
2605 FND_MESSAGE.SET_TOKEN('REGIME_NAME', l_tax_regime_code);
2606 FND_MESSAGE.SET_TOKEN('TAX_NAME', l_tax);
2607
2608 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id :=
2609 p_detail_tax_line_tbl(p_tax_line_index).trx_line_id;
2610 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type :=
2611 p_detail_tax_line_tbl(p_tax_line_index).trx_level_type;
2612 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.tax_line_id :=
2613 p_detail_tax_line_tbl(p_tax_line_index).tax_line_id;
2614 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_dist_id :=
2615 p_rec_nrec_dist_tbl(l_non_rec_index).trx_line_dist_id;
2616
2617 ZX_API_PUB.add_msg(
2618 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
2619
2620 IF (g_level_statement >= g_current_runtime_level ) THEN
2621 FND_LOG.STRING(g_level_statement,
2622 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2623 'Error: Total Recovery Rate is greater than 100');
2624 END IF;
2625 RETURN;
2626
2627 END IF;
2628
2629 IF (g_level_statement >= g_current_runtime_level ) THEN
2630 FND_LOG.STRING(g_level_statement,
2631 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2632 'p_rec_nrec_dist_tbl(' || l_non_rec_index ||
2633 ').rec_nrec_rate = '
2634 || p_rec_nrec_dist_tbl(l_non_rec_index).rec_nrec_rate);
2635 END IF;
2636
2637 IF (g_level_procedure >= g_current_runtime_level ) THEN
2638 FND_LOG.STRING(g_level_procedure,
2639 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate.END',
2640 'ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate(-)');
2641 END IF;
2642
2643 EXCEPTION
2644 WHEN OTHERS THEN
2645 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2646 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
2647
2648 IF (g_level_unexpected >= g_current_runtime_level ) THEN
2649 FND_LOG.STRING(g_level_unexpected,
2650 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate',
2651 p_error_buffer);
2652 FND_LOG.STRING(g_level_unexpected,
2653 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate.END',
2654 'ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_rate(-)');
2655 END IF;
2656 END get_rec_rate;
2657
2658 PROCEDURE GET_REC_NREC_DIST_AMT(
2659 p_detail_tax_line_tbl IN ZX_TRD_SERVICES_PUB_PKG.TAX_LINE_TBL_TYPE,
2660 p_tax_line_index IN NUMBER,
2661 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
2662 p_rnd_begin_index IN NUMBER,
2663 p_rnd_end_index IN NUMBER,
2664 p_return_status OUT NOCOPY VARCHAR2,
2665 p_error_buffer OUT NOCOPY VARCHAR2)
2666 IS
2667
2668 BEGIN
2669 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2670 IF (g_level_procedure >= g_current_runtime_level ) THEN
2671 FND_LOG.STRING(g_level_procedure,
2672 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_REC_NREC_DIST_AMT.BEGIN',
2673 'ZX_TRD_INTERNAL_SERVICES_PVT.GET_REC_NREC_DIST_AMT(+)');
2674 END IF;
2675 p_return_status:= FND_API.G_RET_STS_SUCCESS;
2676
2677 For i in p_rnd_begin_index..p_rnd_end_index
2678 LOOP
2679 IF NVL(p_rec_nrec_dist_tbl(i).reverse_flag,'N') = 'N' THEN
2680
2681 -- Bug 10069028, For PO, even if the recovery rate is 100 or 0, unrounded_rec_nrec_tax_amt should be populated as unrounded.
2682 -- Not as trx_line_dist_tax_amt which is rounded tax amt
2683 -- Bug 14346100, added AND condition. When, trx_line_dist_tax_amt is 0, unrounded_rec_nrec_tax_amt should not be non zero.
2684 /* IF (p_rec_nrec_dist_tbl(i).application_id = 201 AND p_rec_nrec_dist_tbl(i).trx_line_dist_tax_amt <> 0) THEN
2685 p_rec_nrec_dist_tbl(i).unrounded_rec_nrec_tax_amt :=
2686 (p_rec_nrec_dist_tbl(i).trx_line_dist_amt * p_rec_nrec_dist_tbl(i).tax_rate/100) * p_rec_nrec_dist_tbl(i).rec_nrec_rate/100;
2687 --Bug 15866615, removed conditions used in bug 10069028 and 14346100, now trx_line_dist_tax_amt is stamped using unrounded_tax_amt
2688 ELSE */
2689 p_rec_nrec_dist_tbl(i).unrounded_rec_nrec_tax_amt:=
2690 p_rec_nrec_dist_tbl(i).trx_line_dist_tax_amt * p_rec_nrec_dist_tbl(i).rec_nrec_rate/100;
2691 -- END IF; --application_id
2692
2693 END IF;
2694 END LOOP;
2695
2696 IF (g_level_procedure >= g_current_runtime_level ) THEN
2697 FND_LOG.STRING(g_level_procedure,
2698 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_REC_NREC_DIST_AMT.END',
2699 'ZX_TRD_INTERNAL_SERVICES_PVT.GET_REC_NREC_DIST_AMT(-)');
2700 END IF;
2701
2702 EXCEPTION
2703 WHEN OTHERS THEN
2704 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2705 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
2706
2707 IF (g_level_unexpected >= g_current_runtime_level ) THEN
2708 FND_LOG.STRING(g_level_unexpected,
2709 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_REC_NREC_DIST_AMT',
2710 p_error_buffer);
2711 FND_LOG.STRING(g_level_unexpected,
2712 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.GET_REC_NREC_DIST_AMT.END',
2713 'ZX_TRD_INTERNAL_SERVICES_PVT.GET_REC_NREC_DIST_AMT(-)');
2714 END IF;
2715
2716 END GET_REC_NREC_DIST_AMT;
2717
2718
2719 PROCEDURE round_rec_nrec_amt(
2720 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
2721 p_rnd_begin_index IN NUMBER,
2722 p_rnd_end_index IN NUMBER,
2723 p_tax_line_amt IN NUMBER,
2724 p_tax_line_amt_tax_curr IN NUMBER,
2725 p_tax_line_amt_funcl_curr IN NUMBER,
2726 p_return_status OUT NOCOPY VARCHAR2,
2727 p_error_buffer OUT NOCOPY VARCHAR2) IS
2728
2729 l_rounding_rule_code zx_taxes_b.rounding_rule_code%TYPE;
2730 l_min_acct_unit zx_taxes_b.minimum_accountable_unit%TYPE;
2731 l_precision zx_taxes_b.tax_precision%TYPE;
2732 l_trx_currency_code zx_rec_nrec_dist.trx_currency_code%TYPE;
2733 l_tax_currency_code zx_rec_nrec_dist.tax_currency_code%TYPE;
2734 l_tax_currency_date zx_rec_nrec_dist.tax_currency_conversion_date%TYPE;
2735 l_tax_currency_type zx_rec_nrec_dist.tax_currency_conversion_type%TYPE;
2736 l_tax_currency_rate zx_rec_nrec_dist.tax_currency_conversion_rate%TYPE;
2737 l_tax_amt_tax_currency zx_rec_nrec_dist.rec_nrec_tax_amt_tax_curr%TYPE;
2738 l_taxable_amt_tax_currency zx_rec_nrec_dist.taxable_amt_tax_curr%TYPE;
2739 l_tax_id zx_taxes_b.tax_id%TYPE;
2740
2741 BEGIN
2742 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2743 IF (g_level_procedure >= g_current_runtime_level ) THEN
2744 FND_LOG.STRING(g_level_procedure,
2745 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT.BEGIN',
2746 'ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT(+)');
2747 END IF;
2748
2749 p_return_status:= FND_API.G_RET_STS_SUCCESS;
2750
2751 IF p_rnd_begin_index IS NULL OR p_rnd_end_index IS NULL OR
2752 p_rnd_begin_index > p_rnd_end_index THEN
2753
2754 --p_return_status:= FND_API.G_RET_STS_ERROR;
2755 IF (g_level_statement >= g_current_runtime_level ) THEN
2756 FND_LOG.STRING(g_level_statement,
2757 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT',
2758 'begin or end index is null, or begin index > end index');
2759 END IF;
2760 RETURN;
2761 END IF;
2762
2763 -- this procedure is called FOR each tax line so rounding rule etc are the same FOR the tax dists.
2764
2765 l_rounding_rule_code:= p_rec_nrec_dist_tbl(p_rnd_begin_index).rounding_rule_code;
2766 l_min_acct_unit:= p_rec_nrec_dist_tbl(p_rnd_begin_index).minimum_accountable_unit;
2767 l_precision:= p_rec_nrec_dist_tbl(p_rnd_begin_index).precision;
2768
2769 -- call procedure round_tax_dists_trx_curr to round tax amount.
2770 -- and taxable amount and adjust tax amount rounding difference.
2771 --
2772 round_tax_dists_trx_curr ( p_rec_nrec_dist_tbl,
2773 p_rnd_begin_index,
2774 p_rnd_end_index,
2775 p_tax_line_amt,
2776 p_return_status,
2777 p_error_buffer);
2778
2779 IF p_rec_nrec_dist_tbl(p_rnd_begin_index).mrc_tax_dist_flag = 'N' THEN
2780 -- call procedure convert_tax_dists to convert and round tax amount
2781 -- and taxable amount INTO tax currency and functional curremcy.
2782 --
2783 convert_tax_dists ( p_rec_nrec_dist_tbl,
2784 p_rnd_begin_index,
2785 p_rnd_end_index,
2786 p_tax_line_amt_tax_curr,
2787 p_tax_line_amt_funcl_curr,
2788 p_return_status,
2789 p_error_buffer);
2790
2791 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2792 IF (g_level_error >= g_current_runtime_level ) THEN
2793 FND_LOG.STRING(g_level_error,
2794 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_rec_nrec_amt',
2795 'Incorrect return_status after calling ' ||
2796 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists()');
2797 FND_LOG.STRING(g_level_error,
2798 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_rec_nrec_amt.END',
2799 'ZX_TRD_INTERNAL_SERVICES_PVT.round_rec_nrec_amt(-)'||p_return_status);
2800 END IF;
2801 RETURN;
2802 END IF;
2803
2804 IF p_rec_nrec_dist_tbl(p_rnd_begin_index).applied_from_tax_dist_id IS NOT NULL
2805 THEN
2806 l_tax_id := p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_id;
2807 IF ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).applied_amt_handling_flag='R'
2808 THEN
2809 -- call round_and_adjust_prd_tax_amts to round and adjust prd_tax_amt,
2810 -- prd_tax_amt_tax_curr, and prd_tax_amt_funcl_curr
2811 --
2812 round_and_adjust_prd_tax_amts (
2813 p_rec_nrec_dist_tbl => p_rec_nrec_dist_tbl,
2814 p_rnd_begin_index => p_rnd_begin_index,
2815 p_rnd_end_index => p_rnd_end_index,
2816 p_return_status => p_return_status,
2817 p_error_buffer => p_error_buffer);
2818
2819 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS THEN
2820 IF (g_level_statement >= g_current_runtime_level ) THEN
2821 FND_LOG.STRING(g_level_statement,
2822 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT',
2823 'Incorrect return_status after calling ' ||
2824 'ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts');
2825 FND_LOG.STRING(g_level_statement,
2826 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT',
2827 'RETURN_STATUS = ' || p_return_status);
2828 FND_LOG.STRING(g_level_statement,
2829 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT.END',
2830 'ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT(-)');
2831 END IF;
2832 RETURN;
2833 END IF;
2834
2835 ELSIF ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).applied_amt_handling_flag='P'
2836 THEN
2837 -- copy rec_nrec_tax_amt, rec_nrec_tax_amt_tax_curr,
2838 -- rec_nrec_tax_amt_funcl_curr to prd_tax_amt, prd_tax_amt_tax_curr,
2839 -- prd_tax_amt_funcl_curr.
2840
2841 FOR i IN p_rec_nrec_dist_tbl.FIRST.. p_rec_nrec_dist_tbl.LAST LOOP
2842 p_rec_nrec_dist_tbl(i).prd_tax_amt :=
2843 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
2844 p_rec_nrec_dist_tbl(i).prd_tax_amt_tax_curr :=
2845 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_tax_curr;
2846 p_rec_nrec_dist_tbl(i).prd_tax_amt_funcl_curr :=
2847 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_funcl_curr;
2848 END LOOP;
2849 END IF; -- applied_amt_handling_flag = 'R' or 'P'
2850 END IF; -- applied_from_tax_dist_id IS NOT NULL
2851 END IF; -- mrc_tax_dist_flag = 'N'
2852
2853 IF (g_level_procedure >= g_current_runtime_level ) THEN
2854
2855 FND_LOG.STRING(g_level_procedure,
2856 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT.END',
2857 'ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT(-)'||p_return_status);
2858 END IF;
2859
2860 EXCEPTION
2861 WHEN OTHERS THEN
2862 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2863 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
2864
2865 IF (g_level_unexpected >= g_current_runtime_level ) THEN
2866 FND_LOG.STRING(g_level_unexpected,
2867 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT',
2868 p_error_buffer);
2869 FND_LOG.STRING(g_level_unexpected,
2870 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT.END',
2871 'ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT(-)');
2872 END IF;
2873
2874 END ROUND_REC_NREC_AMT;
2875
2876 PROCEDURE round_tax_dists_trx_curr (
2877 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
2878 p_rnd_begin_index IN NUMBER,
2879 p_rnd_end_index IN NUMBER,
2880 p_tax_line_amt IN NUMBER,
2881 p_return_status OUT NOCOPY VARCHAR2,
2882 p_error_buffer OUT NOCOPY VARCHAR2) IS
2883
2884 l_non_zero_rec_tax_dists_tbl index_amt_tbl_type;
2885 l_non_zero_nrec_tax_dists_tbl index_amt_tbl_type;
2886
2887 l_rec_tax_dists_tbl_sort_flg VARCHAR2(1);
2888 l_nrec_tax_dists_tbl_sort_flg VARCHAR2(1);
2889
2890 l_non_zero_rec_tax_index NUMBER := 0;
2891 l_non_zero_nrec_tax_index NUMBER := 0;
2892
2893 l_rec_tax_rnd_diff NUMBER := 0;
2894 l_nrec_tax_rnd_diff NUMBER := 0;
2895 l_tax_line_rnd_diff NUMBER;
2896
2897 l_rnd_total_rec_tax_amt NUMBER := 0;
2898 l_rnd_total_nrec_tax_amt NUMBER := 0;
2899
2900 l_max_rec_tax_index NUMBER :=NULL;
2901 l_max_nrec_tax_index NUMBER :=NULL;
2902
2903 l_rec_amt_largest NUMBER := 0;
2904 l_nrec_amt_largest NUMBER := 0;
2905
2906 l_index NUMBER;
2907 l_min_acct_unit zx_taxes_b.minimum_accountable_unit%TYPE;
2908 l_precision zx_taxes_b.tax_precision%TYPE;
2909 l_round_nrec_flag VARCHAR2(1);
2910
2911 BEGIN
2912
2913 IF (g_level_procedure >= g_current_runtime_level ) THEN
2914 FND_LOG.STRING(g_level_procedure,
2915 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.BEGIN',
2916 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(+)');
2917 END IF;
2918
2919 p_return_status:= FND_API.G_RET_STS_SUCCESS;
2920
2921 IF p_rnd_begin_index IS NULL OR p_rnd_end_index IS NULL OR
2922 p_rnd_begin_index > p_rnd_end_index THEN
2923
2924 --p_return_status:= FND_API.G_RET_STS_ERROR;
2925 IF (g_level_statement >= g_current_runtime_level ) THEN
2926 FND_LOG.STRING(g_level_statement,
2927 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
2928 'begin or end index is null, or begin index > end index');
2929 END IF;
2930 RETURN;
2931 END IF;
2932
2933 FOR i IN p_rnd_begin_index .. p_rnd_end_index LOOP
2934 -- round rec_nrec_tax_amt and taxable_amt
2935 --
2936
2937 -- Bugfix: 5388586, do not round reversal pair of tax distributions
2938
2939 IF NVL(p_rec_nrec_dist_tbl(i).reverse_flag, 'N') = 'N' THEN
2940
2941 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt :=
2942 ZX_TDS_TAX_ROUNDING_PKG.round_tax(
2943 p_amount => p_rec_nrec_dist_tbl(i).unrounded_rec_nrec_tax_amt,
2944 p_Rounding_Rule_Code => p_rec_nrec_dist_tbl(i).rounding_rule_code,
2945 p_min_acct_unit => p_rec_nrec_dist_tbl(i).minimum_accountable_unit,
2946 p_precision => p_rec_nrec_dist_tbl(i).precision,
2947 p_return_status => p_return_status,
2948 p_error_buffer => p_error_buffer);
2949
2950 IF (g_level_statement >= g_current_runtime_level ) THEN
2951 FND_LOG.STRING(g_level_statement,
2952 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
2953 ' i = '||to_char(i) || ' round '|| p_rec_nrec_dist_tbl(i).unrounded_rec_nrec_tax_amt ||
2954 ' to '|| p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt);
2955 END IF;
2956
2957 p_rec_nrec_dist_tbl(i).taxable_amt :=
2958 ZX_TDS_TAX_ROUNDING_PKG.round_tax(
2959 p_amount => p_rec_nrec_dist_tbl(i).unrounded_taxable_amt,
2960 p_Rounding_Rule_Code => p_rec_nrec_dist_tbl(i).rounding_rule_code,
2961 p_min_acct_unit => p_rec_nrec_dist_tbl(i).minimum_accountable_unit,
2962 p_precision => p_rec_nrec_dist_tbl(i).precision,
2963 p_return_status => p_return_status,
2964 p_error_buffer => p_error_buffer);
2965 END IF;
2966
2967 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
2968 THEN
2969 IF (g_level_error >= g_current_runtime_level ) THEN
2970 FND_LOG.STRING(g_level_error,
2971 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
2972 'Incorrect return_status after calling ' ||
2973 'ZX_TDS_TAX_ROUNDING_PKG.round_tax()');
2974 FND_LOG.STRING(g_level_error,
2975 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.END',
2976 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(-)'||p_return_status);
2977 END IF;
2978 RETURN;
2979 END IF;
2980
2981 -- Bugfix: 5388586, do not adjust reversal pair of tax distributions
2982 IF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'Y' AND NVL(p_rec_nrec_dist_tbl(i).reverse_flag, 'N') = 'N' THEN
2983
2984 -- Accumulate l_rnd_total_rec_tax_amt
2985 --
2986 l_rnd_total_rec_tax_amt := l_rnd_total_rec_tax_amt +
2987 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
2988
2989 -- Accumulate rounding diffrence of recoverable tax dists
2990 --
2991 l_rec_tax_rnd_diff := l_rec_tax_rnd_diff +
2992 p_rec_nrec_dist_tbl(i).unrounded_rec_nrec_tax_amt -
2993 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
2994
2995 IF p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt <> 0 THEN
2996 -- Record non-zero recoverable tax dists
2997 --
2998 l_non_zero_rec_tax_index := l_non_zero_rec_tax_index + 1;
2999
3000 l_non_zero_rec_tax_dists_tbl(l_non_zero_rec_tax_index).tbl_index := i;
3001 l_non_zero_rec_tax_dists_tbl(l_non_zero_rec_tax_index).tbl_amt :=
3002 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3003
3004 -- Record the largest rec_nrec_tax_amt of non-zero recoverable tax dists
3005 --
3006 IF ABS(p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt) >= ABS(l_rec_amt_largest)
3007 THEN
3008 l_max_rec_tax_index := i;
3009 l_rec_amt_largest := p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3010 END IF;
3011 END IF;
3012
3013 -- Bugfix: 5388586, do not adjust reversal pair of tax distributions
3014 ELSIF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'N' AND
3015 NVL(p_rec_nrec_dist_tbl(i).reverse_flag, 'N') = 'N' THEN
3016
3017 -- Accumulate l_rnd_total_nrec_tax_amt
3018 --
3019 l_rnd_total_nrec_tax_amt := l_rnd_total_nrec_tax_amt +
3020 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3021
3022 -- Accumulate rounding diffrence of non-recoverable tax dists
3023 --
3024 l_nrec_tax_rnd_diff := l_nrec_tax_rnd_diff +
3025 p_rec_nrec_dist_tbl(i).unrounded_rec_nrec_tax_amt -
3026 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3027
3028 IF p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt <> 0 THEN
3029
3030 -- Record non-zero non-recoverable tax dists
3031 --
3032 l_non_zero_nrec_tax_index := l_non_zero_nrec_tax_index + 1;
3033
3034 l_non_zero_nrec_tax_dists_tbl(l_non_zero_nrec_tax_index).tbl_index := i;
3035 l_non_zero_nrec_tax_dists_tbl(l_non_zero_nrec_tax_index).tbl_amt :=
3036 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3037
3038 -- Record the largest rec_nrec_tax_amt of non-zero non-recoverable tax
3039 -- dists
3040 --
3041 IF ABS(p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt) >= ABS(l_nrec_amt_largest)
3042 THEN
3043 l_max_nrec_tax_index := i;
3044 l_nrec_amt_largest := p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3045 END IF;
3046 END IF;
3047 END IF; -- recoverable_flag
3048
3049 END LOOP;
3050
3051 -- round l_rec_tax_rnd_diff
3052 --
3053 l_rec_tax_rnd_diff := ZX_TDS_TAX_ROUNDING_PKG.round_tax(
3054 l_rec_tax_rnd_diff,
3055 p_rec_nrec_dist_tbl(p_rnd_begin_index).Rounding_Rule_Code,
3056 p_rec_nrec_dist_tbl(p_rnd_begin_index).minimum_accountable_unit,
3057 p_rec_nrec_dist_tbl(p_rnd_begin_index).precision,
3058 p_return_status,
3059 p_error_buffer);
3060
3061 -- round l_nrec_tax_rnd_diff
3062 --
3063 l_nrec_tax_rnd_diff := ZX_TDS_TAX_ROUNDING_PKG.round_tax(
3064 l_nrec_tax_rnd_diff,
3065 p_rec_nrec_dist_tbl(p_rnd_begin_index).Rounding_Rule_Code,
3066 p_rec_nrec_dist_tbl(p_rnd_begin_index).minimum_accountable_unit,
3067 p_rec_nrec_dist_tbl(p_rnd_begin_index).precision,
3068 p_return_status,
3069 p_error_buffer);
3070
3071 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3072 THEN
3073 IF (g_level_error >= g_current_runtime_level ) THEN
3074 FND_LOG.STRING(g_level_error,
3075 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
3076 'Incorrect return_status after calling ' ||
3077 'ZX_TDS_TAX_ROUNDING_PKG.round_tax()');
3078 FND_LOG.STRING(g_level_error,
3079 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.END',
3080 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(-)'||p_return_status);
3081 END IF;
3082 RETURN;
3083 END IF;
3084
3085 IF l_rec_tax_rnd_diff <> 0 THEN
3086
3087 -- calculate minimum accountable unit if it is not available
3088 --
3089 l_precision := p_rec_nrec_dist_tbl(p_rnd_begin_index).precision;
3090 l_min_acct_unit :=
3091 NVL(p_rec_nrec_dist_tbl(p_rnd_begin_index).minimum_accountable_unit,
3092 POWER(10,l_precision*(-1)));
3093
3094 IF l_non_zero_rec_tax_dists_tbl.COUNT = 0 AND l_non_zero_nrec_tax_dists_tbl.COUNT = 0 THEN
3095 FOR i IN p_rnd_begin_index .. p_rnd_end_index LOOP
3096 IF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'Y' AND NVL(p_rec_nrec_dist_tbl(i).reverse_flag, 'N') = 'N' THEN
3097 -- Record one of the zero recoverable tax dists incase all the rec lines are zero lines
3098 --
3099 l_non_zero_rec_tax_index := l_non_zero_rec_tax_index + 1;
3100 l_non_zero_rec_tax_dists_tbl(l_non_zero_rec_tax_index).tbl_index := i;
3101 l_non_zero_rec_tax_dists_tbl(l_non_zero_rec_tax_index).tbl_amt :=
3102 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3103
3104 l_max_rec_tax_index := i;
3105 l_rec_amt_largest := p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3106 exit;
3107 END IF;
3108 END LOOP;
3109 END IF;
3110
3111 -- Adjust l_rec_tax_rnd_diff to recoverable tax dists first. If no
3112 -- non-zero recoverable tax dists exist, adjust rounding_diff to
3113 -- nonrecoverable tax dists.
3114 --
3115 IF l_non_zero_rec_tax_dists_tbl.COUNT > 0 THEN
3116 -- sort l_non_zero_rec_tax_dists_tbl
3117 --
3118 sort_tbl_amt_desc (
3119 p_index_amt_tbl => l_non_zero_rec_tax_dists_tbl,
3120 p_return_status => p_return_status,
3121 p_error_buffer => p_error_buffer);
3122
3123 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3124 THEN
3125 IF (g_level_error >= g_current_runtime_level ) THEN
3126 FND_LOG.STRING(g_level_error,
3127 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
3128 'Incorrect return_status after calling ' ||
3129 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc()');
3130 FND_LOG.STRING(g_level_error,
3131 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.END',
3132 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(-)'||p_return_status);
3133 END IF;
3134 RETURN;
3135 END IF;
3136
3137 -- set the sort flag for l_non_zero_rec_tax_dists_tbl
3138 --
3139 l_rec_tax_dists_tbl_sort_flg := 'Y';
3140
3141 -- distribute rounding difference
3142 --
3143 ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff (
3144 p_index_amt_tbl => l_non_zero_rec_tax_dists_tbl,
3145 p_rounding_diff => l_rec_tax_rnd_diff,
3146 p_min_acct_unit => l_min_acct_unit,
3147 p_return_status => p_return_status,
3148 p_error_buffer => p_error_buffer);
3149
3150 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3151 THEN
3152 IF (g_level_error >= g_current_runtime_level ) THEN
3153 FND_LOG.STRING(g_level_error,
3154 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
3155 'Incorrect return_status after calling ' ||
3156 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff()');
3157 FND_LOG.STRING(g_level_error,
3158 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.END',
3159 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(-)'||p_return_status);
3160 END IF;
3161 RETURN;
3162 END IF;
3163
3164 -- update the amount of other currency in p_rec_nrec_dist_tbl
3165 --
3166 FOR i IN l_non_zero_rec_tax_dists_tbl.FIRST ..
3167 l_non_zero_rec_tax_dists_tbl.LAST LOOP
3168 l_index := l_non_zero_rec_tax_dists_tbl(i).tbl_index;
3169 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt :=
3170 l_non_zero_rec_tax_dists_tbl(i).tbl_amt;
3171 END LOOP;
3172
3173 ELSIF l_non_zero_nrec_tax_dists_tbl.COUNT > 0 THEN
3174
3175 -- sort l_non_zero_nrec_tax_dists_tbl
3176 --
3177 sort_tbl_amt_desc (
3178 p_index_amt_tbl => l_non_zero_nrec_tax_dists_tbl,
3179 p_return_status => p_return_status,
3180 p_error_buffer => p_error_buffer);
3181
3182 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3183 THEN
3184 IF (g_level_error >= g_current_runtime_level ) THEN
3185 FND_LOG.STRING(g_level_error,
3186 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
3187 'Incorrect return_status after calling ' ||
3188 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc()');
3189 FND_LOG.STRING(g_level_error,
3190 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.END',
3191 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(-)'||p_return_status);
3192 END IF;
3193 RETURN;
3194 END IF;
3195
3196 -- set the sort flag for l_non_zero_nrec_tax_dists_tbl
3197 --
3198 l_nrec_tax_dists_tbl_sort_flg := 'Y';
3199
3200 -- distribute rounding difference
3201 --
3202 ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff (
3203 l_non_zero_nrec_tax_dists_tbl,
3204 l_rec_tax_rnd_diff,
3205 l_min_acct_unit,
3206 p_return_status,
3207 p_error_buffer);
3208
3209 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3210 THEN
3211 IF (g_level_error >= g_current_runtime_level ) THEN
3212 FND_LOG.STRING(g_level_error,
3213 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
3214 'Incorrect return_status after calling ' ||
3215 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff()');
3216 FND_LOG.STRING(g_level_error,
3217 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.END',
3218 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(-)');
3219 END IF;
3220 RETURN;
3221 END IF;
3222
3223 -- update the amount of other currency in p_rec_nrec_dist_tbl
3224 --
3225 FOR i IN l_non_zero_nrec_tax_dists_tbl.FIRST ..
3226 l_non_zero_nrec_tax_dists_tbl.LAST LOOP
3227 l_index := l_non_zero_nrec_tax_dists_tbl(i).tbl_index;
3228 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt :=
3229 l_non_zero_nrec_tax_dists_tbl(i).tbl_amt;
3230 END LOOP;
3231 END IF;
3232
3233 END IF; -- l_rec_tax_rnd_diff <> 0
3234
3235 IF l_nrec_tax_rnd_diff <> 0 THEN
3236
3237 -- calculate minimum accountable unit if it is not available
3238 --
3239 l_precision := p_rec_nrec_dist_tbl(p_rnd_begin_index).precision;
3240 l_min_acct_unit :=
3241 NVL(p_rec_nrec_dist_tbl(p_rnd_begin_index).minimum_accountable_unit,
3242 POWER(10,l_precision*(-1)));
3243
3244 IF l_non_zero_nrec_tax_dists_tbl.COUNT = 0 AND l_non_zero_rec_tax_dists_tbl.COUNT = 0 THEN
3245 FOR i IN p_rnd_begin_index .. p_rnd_end_index LOOP
3246 IF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'N' AND NVL(p_rec_nrec_dist_tbl(i).reverse_flag, 'N') = 'N' THEN
3247 -- Record one of zero non-recoverable tax dists incase all the non-rec lines are zero lines
3248 --
3249 l_non_zero_nrec_tax_index := l_non_zero_nrec_tax_index + 1;
3250 l_non_zero_nrec_tax_dists_tbl(l_non_zero_nrec_tax_index).tbl_index := i;
3251 l_non_zero_nrec_tax_dists_tbl(l_non_zero_nrec_tax_index).tbl_amt :=
3252 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3253
3254 l_max_nrec_tax_index := i;
3255 l_nrec_amt_largest := p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3256 exit;
3257 END IF;
3258 END LOOP;
3259 END IF;
3260
3261 -- Adjust rounding_diff to nonrecoverable tax dists first. if there is no
3262 -- non-zero nonrecoverable tax dists, adjust rounding_diff to recoverable
3263 -- tax dists.
3264 --
3265 IF l_non_zero_nrec_tax_dists_tbl.COUNT > 0 THEN
3266
3267 IF NVL(l_nrec_tax_dists_tbl_sort_flg, 'N') <> 'Y' THEN
3268 -- sort l_non_zero_nrec_tax_dists_tbl
3269 --
3270 sort_tbl_amt_desc (
3271 p_index_amt_tbl => l_non_zero_nrec_tax_dists_tbl,
3272 p_return_status => p_return_status,
3273 p_error_buffer => p_error_buffer);
3274
3275 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3276 THEN
3277 IF (g_level_error >= g_current_runtime_level ) THEN
3278 FND_LOG.STRING(g_level_error,
3279 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
3280 'Incorrect return_status after calling ' ||
3281 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc()');
3282 FND_LOG.STRING(g_level_error,
3283 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.END',
3284 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(-)');
3285 END IF;
3286 RETURN;
3287 END IF;
3288
3289 -- set the sort flag for l_non_zero_nrec_tax_dists_tbl
3290 --
3291 l_nrec_tax_dists_tbl_sort_flg := 'Y';
3292
3293 END IF; -- l_nrec_tax_dists_tbl_sort_flg <> 'Y'
3294
3295 -- distribute rounding difference
3296 --
3297 ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff (
3298 l_non_zero_nrec_tax_dists_tbl,
3299 l_nrec_tax_rnd_diff,
3300 l_min_acct_unit,
3301 p_return_status,
3302 p_error_buffer);
3303
3304 IF NVL(p_return_status,FND_API.G_RET_STS_ERROR)<>FND_API.G_RET_STS_SUCCESS
3305 THEN
3306 IF (g_level_error >= g_current_runtime_level ) THEN
3307 FND_LOG.STRING(g_level_error,
3308 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
3309 'Incorrect return_status after calling ' ||
3310 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff()');
3311 FND_LOG.STRING(g_level_error,
3312 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.END',
3313 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(-)');
3314 END IF;
3315 RETURN;
3316 END IF;
3317
3318 -- update the amount of other currency in p_rec_nrec_dist_tbl
3319 --
3320 FOR i IN l_non_zero_nrec_tax_dists_tbl.FIRST ..
3321 l_non_zero_nrec_tax_dists_tbl.LAST LOOP
3322 l_index := l_non_zero_nrec_tax_dists_tbl(i).tbl_index;
3323 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt :=
3324 l_non_zero_nrec_tax_dists_tbl(i).tbl_amt;
3325 END LOOP;
3326
3327 ELSIF l_non_zero_rec_tax_dists_tbl.COUNT > 0 THEN
3328
3329 IF NVL(l_rec_tax_dists_tbl_sort_flg, 'N') <> 'Y' THEN
3330 -- sort l_non_zero_nrec_tax_dists_tbl
3331 --
3332 sort_tbl_amt_desc (
3333 p_index_amt_tbl => l_non_zero_rec_tax_dists_tbl,
3334 p_return_status => p_return_status,
3335 p_error_buffer => p_error_buffer);
3336
3337 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3338 THEN
3339 IF (g_level_error >= g_current_runtime_level ) THEN
3340 FND_LOG.STRING(g_level_error,
3341 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
3342 'Incorrect return_status after calling ' ||
3343 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc()');
3344 FND_LOG.STRING(g_level_error,
3345 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.END',
3346 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(-)');
3347 END IF;
3348 RETURN;
3349 END IF;
3350
3351 -- set the sort flag for l_non_zero_rec_tax_dists_tbl
3352 --
3353 l_rec_tax_dists_tbl_sort_flg := 'Y';
3354
3355 END IF; -- l_nrec_tax_dists_tbl_sort_flg <> 'Y'
3356
3357 -- distribute rounding difference
3358 --
3359 ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff (
3360 l_non_zero_rec_tax_dists_tbl,
3361 l_nrec_tax_rnd_diff,
3362 l_min_acct_unit,
3363 p_return_status,
3364 p_error_buffer);
3365
3366 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3367 THEN
3368 IF (g_level_error >= g_current_runtime_level ) THEN
3369 FND_LOG.STRING(g_level_error,
3370 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
3371 'Incorrect return_status after calling ' ||
3372 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff()');
3373 FND_LOG.STRING(g_level_error,
3374 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.END',
3375 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(-)'||p_return_status);
3376 END IF;
3377 RETURN;
3378 END IF;
3379
3380 -- update the amount of other currency in p_rec_nrec_dist_tbl
3381 --
3382 FOR i IN l_non_zero_rec_tax_dists_tbl.FIRST ..
3383 l_non_zero_rec_tax_dists_tbl.LAST LOOP
3384 l_index := l_non_zero_rec_tax_dists_tbl(i).tbl_index;
3385 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt :=
3386 l_non_zero_rec_tax_dists_tbl(i).tbl_amt;
3387 END LOOP;
3388 END IF;
3389 END IF; -- l_nrec_tax_rnd_diff <> 0
3390
3391 -- check rounding difference between tax line in zx_lines and
3392 -- the tax distributions in zx_rec_nrec_tax_dist with the same
3393 -- tax_line_id.
3394 --
3395 IF p_tax_line_amt IS NOT NULL THEN
3396 -- calculate rounding difference for tax line amount
3397 --
3398 l_tax_line_rnd_diff := p_tax_line_amt -
3399 (( l_rnd_total_rec_tax_amt + l_rec_tax_rnd_diff ) +
3400 (l_rnd_total_nrec_tax_amt + l_nrec_tax_rnd_diff));
3401
3402
3403 --IF l_tax_line_rnd_diff < 0 THEN
3404
3405 -- Adjust rounding difference to the largest recoverable tax dists first.
3406 -- If there is no recoverable tax dists, adjust rounding
3407 -- difference to the largest nonrecoverable tax dists.
3408 --
3409 --IF l_max_rec_tax_index IS NOT NULL THEN
3410
3411 --p_rec_nrec_dist_tbl(l_max_rec_tax_index).rec_nrec_tax_amt :=
3412 --p_rec_nrec_dist_tbl(l_max_rec_tax_index).rec_nrec_tax_amt + l_tax_line_rnd_diff;
3413
3414 --ELSIF l_max_nrec_tax_index IS NOT NULL THEN
3415
3416 --p_rec_nrec_dist_tbl(l_max_nrec_tax_index).rec_nrec_tax_amt :=
3417 --p_rec_nrec_dist_tbl(l_max_nrec_tax_index).rec_nrec_tax_amt + l_tax_line_rnd_diff;
3418
3419 --END IF;
3420
3421 --ELSIF l_tax_line_rnd_diff > 0 THEN
3422
3423 -- Adjust rounding_diff to the largest nonrecoverable tax dists first.
3424 -- if there is no nonrecoverable tax dists, adjust rounding_diff to the
3425 -- largest recoverable tax dists.
3426 --
3427 --IF l_max_nrec_tax_index IS NOT NULL THEN
3428
3429 --p_rec_nrec_dist_tbl(l_max_nrec_tax_index).rec_nrec_tax_amt :=
3430 --p_rec_nrec_dist_tbl(l_max_nrec_tax_index).rec_nrec_tax_amt + l_tax_line_rnd_diff;
3431
3432 --ELSIF l_max_rec_tax_index IS NOT NULL THEN
3433
3434 --p_rec_nrec_dist_tbl(l_max_rec_tax_index).rec_nrec_tax_amt :=
3435 --p_rec_nrec_dist_tbl(l_max_rec_tax_index).rec_nrec_tax_amt + l_tax_line_rnd_diff;
3436
3437 --END IF;
3438 --END IF; -- l_tax_line_rnd_diff > 0 OR < 0
3439
3440 IF p_rec_nrec_dist_tbl(p_rnd_begin_index).Rounding_Rule_Code = 'UP' THEN
3441
3442 -- When rounding rule code is UP
3443 -- Adjust rounding difference to the largest non-recoverable tax dists first.
3444 -- If there is no recoverable tax dists, adjust rounding
3445 -- difference to the largest recoverable tax dists.
3446 --
3447 IF l_max_nrec_tax_index IS NOT NULL THEN
3448
3449 p_rec_nrec_dist_tbl(l_max_nrec_tax_index).rec_nrec_tax_amt :=
3450 p_rec_nrec_dist_tbl(l_max_nrec_tax_index).rec_nrec_tax_amt + l_tax_line_rnd_diff;
3451
3452 ELSIF l_max_rec_tax_index IS NOT NULL THEN
3453
3454 p_rec_nrec_dist_tbl(l_max_rec_tax_index).rec_nrec_tax_amt :=
3455 p_rec_nrec_dist_tbl(l_max_rec_tax_index).rec_nrec_tax_amt + l_tax_line_rnd_diff;
3456
3457 END IF;
3458
3459 ELSIF p_rec_nrec_dist_tbl(p_rnd_begin_index).Rounding_Rule_Code = 'DOWN' THEN
3460
3461 -- When rounding rule code is DOWN
3462 -- Adjust rounding difference to the largest recoverable tax dists first.
3463 -- If there is no non-recoverable tax dists, adjust rounding
3464 -- difference to the largest recoverable tax dists.
3465 --
3466 IF l_max_rec_tax_index IS NOT NULL THEN
3467
3468 p_rec_nrec_dist_tbl(l_max_rec_tax_index).rec_nrec_tax_amt :=
3469 p_rec_nrec_dist_tbl(l_max_rec_tax_index).rec_nrec_tax_amt + l_tax_line_rnd_diff;
3470
3471 ELSIF l_max_nrec_tax_index IS NOT NULL THEN
3472
3473 p_rec_nrec_dist_tbl(l_max_nrec_tax_index).rec_nrec_tax_amt :=
3474 p_rec_nrec_dist_tbl(l_max_nrec_tax_index).rec_nrec_tax_amt + l_tax_line_rnd_diff;
3475
3476 END IF;
3477
3478 ELSIF NVL(p_rec_nrec_dist_tbl(p_rnd_begin_index).Rounding_Rule_Code,'NEAREST') = 'NEAREST' THEN
3479
3480 IF p_rec_nrec_dist_tbl(p_rnd_begin_index).Minimum_Accountable_unit IS NOT NULL THEN
3481
3482 -- When rounding rule code is NEAREST
3483 -- Adjust rounding difference to the largest non-recoverable tax dists first.
3484 -- for 0.5 and above
3485 -- If there is no recoverable tax dists, adjust rounding
3486 -- difference to the largest recoverable tax dists.
3487 --
3488
3489 IF ABS(l_tax_line_rnd_diff)/p_rec_nrec_dist_tbl(p_rnd_begin_index).Minimum_Accountable_unit >= 5 THEN
3490 l_round_nrec_flag := 'Y';
3491 ELSE
3492 l_round_nrec_flag := 'N';
3493 END IF;
3494 ELSE
3495
3496 -- When rounding rule code is NEAREST
3497 -- Adjust rounding difference to the largest recoverable tax dists first.
3498 -- for below 0.5
3499 -- If there is no non-recoverable tax dists, adjust rounding
3500 -- difference to the largest recoverable tax dists.
3501 --
3502
3503 IF ABS(l_tax_line_rnd_diff)/ POWER(10, (-1) * p_rec_nrec_dist_tbl(p_rnd_begin_index).precision) >= 5 THEN
3504 l_round_nrec_flag := 'Y';
3505 ELSE
3506 l_round_nrec_flag := 'N';
3507 END IF;
3508 END IF;
3509 IF l_round_nrec_flag = 'N' THEN
3510 IF l_max_rec_tax_index IS NOT NULL THEN
3511
3512 p_rec_nrec_dist_tbl(l_max_rec_tax_index).rec_nrec_tax_amt :=
3513 p_rec_nrec_dist_tbl(l_max_rec_tax_index).rec_nrec_tax_amt + l_tax_line_rnd_diff;
3514
3515 ELSIF l_max_nrec_tax_index IS NOT NULL THEN
3516
3517 p_rec_nrec_dist_tbl(l_max_nrec_tax_index).rec_nrec_tax_amt :=
3518 p_rec_nrec_dist_tbl(l_max_nrec_tax_index).rec_nrec_tax_amt + l_tax_line_rnd_diff;
3519
3520 END IF;
3521 ELSE
3522 IF l_max_nrec_tax_index IS NOT NULL THEN
3523
3524 p_rec_nrec_dist_tbl(l_max_nrec_tax_index).rec_nrec_tax_amt :=
3525 p_rec_nrec_dist_tbl(l_max_nrec_tax_index).rec_nrec_tax_amt + l_tax_line_rnd_diff;
3526
3527 ELSIF l_max_rec_tax_index IS NOT NULL THEN
3528
3529 p_rec_nrec_dist_tbl(l_max_rec_tax_index).rec_nrec_tax_amt :=
3530 p_rec_nrec_dist_tbl(l_max_rec_tax_index).rec_nrec_tax_amt + l_tax_line_rnd_diff;
3531
3532 END IF;
3533 END IF;
3534 END IF; -- Rounding_Rule_Code up, down, nearest
3535 END IF; -- p_tax_line_amt IS NOT NULL
3536
3537 IF (g_level_procedure >= g_current_runtime_level ) THEN
3538
3539 FND_LOG.STRING(g_level_procedure,
3540 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.END',
3541 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(-)'||p_return_status);
3542 END IF;
3543
3544 EXCEPTION
3545
3546 WHEN OTHERS THEN
3547 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3548 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
3549
3550 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3551 FND_LOG.STRING(g_level_unexpected,
3552 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr',
3553 p_error_buffer);
3554 FND_LOG.STRING(g_level_unexpected,
3555 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr.END',
3556 'ZX_TRD_INTERNAL_SERVICES_PVT.round_tax_dists_trx_curr(-)');
3557 END IF;
3558
3559 END round_tax_dists_trx_curr;
3560
3561 PROCEDURE convert_tax_dists (
3562 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
3563 p_rnd_begin_index IN NUMBER,
3564 p_rnd_end_index IN NUMBER,
3565 p_tax_line_amt_tax_curr IN NUMBER,
3566 p_tax_line_amt_funcl_curr IN NUMBER,
3567 p_return_status OUT NOCOPY VARCHAR2,
3568 p_error_buffer OUT NOCOPY VARCHAR2) IS
3569
3570 l_non_zero_rec_tax_dists_tbl index_amt_tbl_type;
3571 l_non_zero_nrec_tax_dists_tbl index_amt_tbl_type;
3572
3573 l_rec_tax_dists_tbl_sort_flg VARCHAR2(1);
3574 l_nrec_tax_dists_tbl_sort_flg VARCHAR2(1);
3575
3576 l_non_zero_rec_tax_index NUMBER := 0;
3577 l_non_zero_nrec_tax_index NUMBER := 0;
3578
3579 l_total_rec_tax_amt_trx_curr NUMBER := 0;
3580 l_total_nrec_tax_amt_trx_curr NUMBER := 0;
3581
3582 l_sum_of_rnd_rec_tax_amt NUMBER := 0;
3583 l_sum_of_rnd_nrec_tax_amt NUMBER := 0;
3584
3585 l_total_unrnd_rec_tax_amt NUMBER := 0;
3586 l_total_unrnd_nrec_tax_amt NUMBER := 0;
3587 l_rnd_total_rec_tax_amt NUMBER := 0;
3588 l_rnd_total_nrec_tax_amt NUMBER := 0;
3589
3590 l_rec_tax_rnd_diff_tax_curr NUMBER;
3591 l_nrec_tax_rnd_diff_tax_curr NUMBER;
3592 l_rec_tax_rnd_diff_funcl_curr NUMBER;
3593 l_nrec_tax_rnd_diff_funcl_curr NUMBER;
3594
3595 l_tax_line_rnd_diff_tax_curr NUMBER;
3596 l_tax_line_rnd_diff_funcl_curr NUMBER;
3597
3598 l_min_acct_unit_tax_curr zx_taxes_b.minimum_accountable_unit%TYPE;
3599 l_precision_tax_curr zx_taxes_b.tax_precision%TYPE;
3600 -- l_rounding_rule_tax_curr zx_taxes_b.Rounding_Rule_Code%TYPE;
3601 l_min_acct_unit_funcl_curr zx_taxes_b.minimum_accountable_unit%TYPE;
3602 l_precision_funcl_curr zx_taxes_b.tax_precision%TYPE;
3603 l_funcl_currency_code fnd_currencies.currency_code%TYPE;
3604 l_ledger_id gl_sets_of_books.set_of_books_id%TYPE;
3605
3606 l_index NUMBER;
3607 l_tax_id zx_taxes_b.tax_id%TYPE;
3608
3609
3610
3611 BEGIN
3612
3613 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3614
3615 IF (g_level_procedure >= g_current_runtime_level ) THEN
3616 FND_LOG.STRING(g_level_procedure,
3617 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.BEGIN',
3618 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(+)');
3619 END IF;
3620
3621 p_return_status:= FND_API.G_RET_STS_SUCCESS;
3622
3623 IF p_rnd_begin_index IS NULL OR p_rnd_end_index IS NULL OR
3624 p_rnd_begin_index > p_rnd_end_index THEN
3625
3626 --p_return_status:= FND_API.G_RET_STS_ERROR;
3627 IF (g_level_statement >= g_current_runtime_level ) THEN
3628 FND_LOG.STRING(g_level_statement,
3629 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
3630 'begin or end index is null, or begin index > end index');
3631 END IF;
3632 RETURN;
3633 END IF;
3634
3635 -- /******** START OF CONVERSION AND ROUNDING FOR TAX CURRENCY ********/
3636 --
3637 IF p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_currency_code =
3638 p_rec_nrec_dist_tbl(p_rnd_begin_index).trx_currency_code THEN
3639
3640 -- if tax_currency_code is the same as the trx currency_code, it is not
3641 -- necessary to convert tax amount and taxable amount to tax currency.
3642 -- Set the following amounts: taxable_amt_tax_curr = taxable_amt (rounded)
3643 -- and rec_nrec_tax_amt_tax_curr = rec_nrec_tax_amt(rounded)
3644 --
3645 FOR i IN p_rnd_begin_index .. p_rnd_end_index LOOP
3646 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_tax_curr :=
3647 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3648 p_rec_nrec_dist_tbl(i).taxable_amt_tax_curr :=
3649 p_rec_nrec_dist_tbl(i).taxable_amt;
3650 END LOOP;
3651 ELSE
3652
3653 IF p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_currency_code IS NULL THEN
3654 p_return_status:= FND_API.G_RET_STS_UNEXP_ERROR;
3655 IF (g_level_error >= g_current_runtime_level ) THEN
3656 FND_LOG.STRING(g_level_error,
3657 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
3658 'Tax currency code is NULL');
3659 FND_LOG.STRING(g_level_error,
3660 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
3661 'p_return_status = ' || p_return_status);
3662 END IF;
3663 RETURN;
3664 END IF;
3665
3666 -- get l_min_acct_unit_tax_curr l_precision_tax_curr and
3667 -- l_rounding_rule_tax_curr
3668 --
3669 l_tax_id := p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_id;
3670 ZX_TDS_UTILITIES_PKG.populate_tax_cache (
3671 p_tax_id => l_tax_id,
3672 p_return_status => p_return_status,
3673 p_error_buffer => p_error_buffer);
3674 l_precision_tax_curr :=
3675 ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).tax_precision;
3676 l_min_acct_unit_tax_curr :=
3677 NVL(ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).minimum_accountable_unit,
3678 POWER(10,l_precision_tax_curr*(-1)));
3679
3680 -- l_rounding_rule_tax_curr :=
3681 -- ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).rounding_rule_code;
3682
3683 FOR i IN p_rnd_begin_index .. p_rnd_end_index LOOP
3684
3685 IF NVL(p_rec_nrec_dist_tbl(i).reverse_flag,'N') = 'N' THEN
3686 -- If rec_nrec_tax_amt is zero, set rec_nrec_tax_amt_tax_curr to zero.
3687 -- Otherwise, convert rec_nrec_tax_amt to tax currency with
3688 -- unrounded_rec_nrec_tax_amt.
3689 --
3690 IF p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt = 0 THEN
3691
3692 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_tax_curr := 0;
3693 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_funcl_curr := 0;
3694
3695 ELSE
3696 -- convert tax dist amount to rec_nrec_tax_amt_tax_curr
3697 --
3698 ZX_TDS_TAX_ROUNDING_PKG.convert_to_currency(
3699 p_rec_nrec_dist_tbl(i).trx_currency_code,
3700 p_rec_nrec_dist_tbl(i).tax_currency_code,
3701 p_rec_nrec_dist_tbl(i).tax_currency_conversion_date,
3702 p_rec_nrec_dist_tbl(i).tax_currency_conversion_type,
3703 p_rec_nrec_dist_tbl(i).currency_conversion_type,
3704 p_rec_nrec_dist_tbl(i).tax_currency_conversion_rate,
3705 p_rec_nrec_dist_tbl(i).unrounded_rec_nrec_tax_amt, -- IN param
3706 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_tax_curr, -- OUT param
3707 p_return_status,
3708 p_error_buffer,
3709 p_rec_nrec_dist_tbl(i).currency_conversion_date); --Bug7183884
3710
3711 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3712 THEN
3713 IF (g_level_error >= g_current_runtime_level ) THEN
3714 FND_LOG.STRING(g_level_error,
3715 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
3716 'Incorrect return_status after calling ' ||
3717 'ZX_TDS_TAX_ROUNDING_PKG.convert_to_currency()');
3718 FND_LOG.STRING(g_level_error,
3719 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
3720 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)');
3721 END IF;
3722 RETURN;
3723 END IF;
3724
3725 -- round the converted tax dist amount in tax currency
3726 --
3727 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_tax_curr :=
3728 ZX_TDS_TAX_ROUNDING_PKG.round_tax(
3729 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_tax_curr,
3730 p_rec_nrec_dist_tbl(i).Rounding_Rule_Code,
3731 l_min_acct_unit_tax_curr,
3732 l_precision_tax_curr,
3733 p_return_status,
3734 p_error_buffer);
3735
3736 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3737 THEN
3738 IF (g_level_error >= g_current_runtime_level ) THEN
3739 FND_LOG.STRING(g_level_error,
3740 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
3741 'Incorrect return_status after calling ' ||
3742 'ZX_TDS_TAX_ROUNDING_PKG.round_tax()');
3743 FND_LOG.STRING(g_level_error,
3744 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
3745 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)');
3746 END IF;
3747 RETURN;
3748 END IF;
3749
3750 IF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'N' THEN
3751
3752 -- Accumulate tax amount of converted non-recoverable tax dists
3753 --
3754 l_sum_of_rnd_nrec_tax_amt := l_sum_of_rnd_nrec_tax_amt +
3755 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_tax_curr;
3756
3757 -- Record the non-zero non-recoverable tax dists
3758 --
3759 l_non_zero_nrec_tax_index := l_non_zero_nrec_tax_index + 1;
3760
3761 l_non_zero_nrec_tax_dists_tbl(l_non_zero_nrec_tax_index).tbl_index := i;
3762 l_non_zero_nrec_tax_dists_tbl(
3763 l_non_zero_nrec_tax_index).tbl_amt :=
3764 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_tax_curr;
3765
3766
3767 ELSIF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'Y' THEN
3768
3769 -- Accumulate amount of converted recoverable tax dists
3770 --
3771 l_sum_of_rnd_rec_tax_amt := l_sum_of_rnd_rec_tax_amt +
3772 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_tax_curr;
3773
3774 -- Record the non-zero recoverable tax dists
3775 --
3776 l_non_zero_rec_tax_index := l_non_zero_rec_tax_index + 1;
3777
3778 l_non_zero_rec_tax_dists_tbl(l_non_zero_rec_tax_index).tbl_index := i;
3779 l_non_zero_rec_tax_dists_tbl(
3780 l_non_zero_rec_tax_index).tbl_amt :=
3781 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_tax_curr;
3782
3783 END IF; -- recoverable_flag
3784 END IF; -- rec_nrec_tax_amt = 0 OR <> 0
3785
3786 IF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'N' THEN
3787
3788 -- Accumulate rounded non-recoverable tax amount(not converted)
3789 --
3790 l_total_nrec_tax_amt_trx_curr := l_total_nrec_tax_amt_trx_curr +
3791 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3792
3793 -- Accumulate unrounded non-recoverable tax amount(not converted)
3794 --
3795 l_total_unrnd_nrec_tax_amt := l_total_unrnd_nrec_tax_amt +
3796 p_rec_nrec_dist_tbl(i).unrounded_rec_nrec_tax_amt;
3797
3798 ELSIF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'Y' THEN
3799
3800 -- Accumulate rounded recoverable tax amount(not converted)
3801 --
3802 l_total_rec_tax_amt_trx_curr := l_total_rec_tax_amt_trx_curr +
3803 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
3804
3805 -- Accumulate unrounded recoverable tax amount(not converted)
3806 --
3807 l_total_unrnd_rec_tax_amt := l_total_unrnd_rec_tax_amt +
3808 p_rec_nrec_dist_tbl(i).unrounded_rec_nrec_tax_amt;
3809 END IF;
3810 END IF; -- NVL(p_rec_nrec_dist_tbl(i).reverse_flag,'N') = 'N'
3811 END LOOP; -- i IN p_rnd_begin_index .. p_rnd_end_index
3812
3813 -- convert l_total_unrnd_nrec_tax_amt to tax currency
3814 --
3815 ZX_TDS_TAX_ROUNDING_PKG.convert_to_currency(
3816 p_rec_nrec_dist_tbl(p_rnd_begin_index).trx_currency_code,
3817 p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_currency_code,
3818 p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_currency_conversion_date,
3819 p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_currency_conversion_type,
3820 p_rec_nrec_dist_tbl(p_rnd_begin_index).currency_conversion_type,
3821 p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_currency_conversion_rate,
3822 l_total_unrnd_nrec_tax_amt, -- IN param
3823 l_rnd_total_nrec_tax_amt, -- OUT param
3824 p_return_status,
3825 p_error_buffer,
3826 p_rec_nrec_dist_tbl(p_rnd_begin_index).currency_conversion_date);--Bug7183884
3827
3828 -- convert l_total_unrnd_rec_tax_amt in tax currency
3829 --
3830 ZX_TDS_TAX_ROUNDING_PKG.convert_to_currency(
3831 p_rec_nrec_dist_tbl(p_rnd_begin_index).trx_currency_code,
3832 p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_currency_code,
3833 p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_currency_conversion_date,
3834 p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_currency_conversion_type,
3835 p_rec_nrec_dist_tbl(p_rnd_begin_index).currency_conversion_type,
3836 p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_currency_conversion_rate,
3837 l_total_unrnd_rec_tax_amt, -- IN param
3838 l_rnd_total_rec_tax_amt, -- OUT param
3839 p_return_status,
3840 p_error_buffer,
3841 p_rec_nrec_dist_tbl(p_rnd_begin_index).currency_conversion_date); --Bug7183884
3842
3843 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3844 THEN
3845 IF (g_level_error >= g_current_runtime_level ) THEN
3846 FND_LOG.STRING(g_level_error,
3847 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
3848 'Incorrect return_status after calling ' ||
3849 'ZX_TDS_TAX_ROUNDING_PKG.convert_to_currency()');
3850 FND_LOG.STRING(g_level_error,
3851 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
3852 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)');
3853 END IF;
3854 RETURN;
3855 END IF;
3856
3857 -- round the converted l_rnd_total_nrec_tax_amt
3858 --
3859 l_rnd_total_nrec_tax_amt := ZX_TDS_TAX_ROUNDING_PKG.round_tax(
3860 l_rnd_total_nrec_tax_amt,
3861 p_rec_nrec_dist_tbl(p_rnd_begin_index).Rounding_Rule_Code,
3862 l_min_acct_unit_tax_curr,
3863 l_precision_tax_curr,
3864 p_return_status,
3865 p_error_buffer);
3866
3867 -- round the converted l_rnd_total_rec_tax_amt
3868 --
3869 l_rnd_total_rec_tax_amt := ZX_TDS_TAX_ROUNDING_PKG.round_tax(
3870 l_rnd_total_rec_tax_amt,
3871 p_rec_nrec_dist_tbl(p_rnd_begin_index).Rounding_Rule_Code,
3872 l_min_acct_unit_tax_curr,
3873 l_precision_tax_curr,
3874 p_return_status,
3875 p_error_buffer);
3876
3877 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3878 THEN
3879 IF (g_level_error >= g_current_runtime_level ) THEN
3880 FND_LOG.STRING(g_level_error,
3881 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
3882 'Incorrect return_status after calling ' ||
3883 'ZX_TDS_TAX_ROUNDING_PKG.round_tax()');
3884 FND_LOG.STRING(g_level_error,
3885 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
3886 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)');
3887 END IF;
3888 RETURN;
3889 END IF;
3890
3891
3892 -- calculate rounding difference in tax currency for recoverable and
3893 -- non-recoverable tax distributions
3894 --
3895 l_rec_tax_rnd_diff_tax_curr := l_rnd_total_rec_tax_amt -
3896 l_sum_of_rnd_rec_tax_amt;
3897 l_nrec_tax_rnd_diff_tax_curr :=l_rnd_total_nrec_tax_amt -
3898 l_sum_of_rnd_nrec_tax_amt;
3899
3900 IF l_rec_tax_rnd_diff_tax_curr <> 0 THEN
3901
3902 -- Adjust rounding_diff to recoverable tax dists first. If there is no
3903 -- non-zero recoverable tax dists, adjust rounding_diff to nonrecoverable
3904 -- tax dists.
3905 --
3906 IF l_non_zero_rec_tax_dists_tbl.COUNT > 0 THEN
3907
3908 -- sort l_non_zero_rec_tax_dists_tbl
3909 --
3910 ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc (
3911 p_index_amt_tbl => l_non_zero_rec_tax_dists_tbl,
3912 p_return_status => p_return_status,
3913 p_error_buffer => p_error_buffer);
3914
3915 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3916 THEN
3917 IF (g_level_error >= g_current_runtime_level ) THEN
3918 FND_LOG.STRING(g_level_error,
3919 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
3920 'Incorrect return_status after calling ' ||
3921 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc()');
3922 FND_LOG.STRING(g_level_error,
3923 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
3924 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)');
3925 END IF;
3926 RETURN;
3927 END IF;
3928
3929 -- set the sort flag for l_non_zero_rec_tax_dists_tbl
3930 --
3931 l_rec_tax_dists_tbl_sort_flg := 'Y';
3932
3933 -- distribute rounding difference
3934 --
3935 ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff (
3936 p_index_amt_tbl => l_non_zero_rec_tax_dists_tbl,
3937 p_rounding_diff => l_rec_tax_rnd_diff_tax_curr,
3938 p_min_acct_unit => l_min_acct_unit_tax_curr,
3939 p_return_status => p_return_status,
3940 p_error_buffer => p_error_buffer);
3941
3942 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3943 THEN
3944 IF (g_level_error >= g_current_runtime_level ) THEN
3945 FND_LOG.STRING(g_level_error,
3946 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
3947 'Incorrect return_status after calling ' ||
3948 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff()');
3949 FND_LOG.STRING(g_level_error,
3950 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
3951 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||p_return_status);
3952 END IF;
3953 RETURN;
3954 END IF;
3955
3956 -- update rec_nrec_tax_amt_tax_curr
3957 --
3958 FOR i IN l_non_zero_rec_tax_dists_tbl.FIRST ..
3959 l_non_zero_rec_tax_dists_tbl.LAST LOOP
3960 l_index := l_non_zero_rec_tax_dists_tbl(i).tbl_index;
3961 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr :=
3962 l_non_zero_rec_tax_dists_tbl(i).tbl_amt;
3963 END LOOP;
3964
3965 ELSIF l_non_zero_nrec_tax_dists_tbl.COUNT > 0 THEN
3966
3967 -- sort l_non_zero_nrec_tax_dists_tbl
3968 --
3969 ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc (
3970 p_index_amt_tbl => l_non_zero_nrec_tax_dists_tbl,
3971 p_return_status => p_return_status,
3972 p_error_buffer => p_error_buffer);
3973
3974 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
3975 THEN
3976 IF (g_level_error >= g_current_runtime_level ) THEN
3977 FND_LOG.STRING(g_level_error,
3978 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
3979 'Incorrect return_status after calling ' ||
3980 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc()');
3981 FND_LOG.STRING(g_level_error,
3982 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
3983 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||p_return_status);
3984 END IF;
3985 RETURN;
3986 END IF;
3987
3988 -- set the sort flag for l_non_zero_nrec_tax_dists_tbl
3989 --
3990 l_nrec_tax_dists_tbl_sort_flg := 'Y';
3991
3992 -- distribute rounding difference
3993 --
3994 ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff (
3995 p_index_amt_tbl => l_non_zero_nrec_tax_dists_tbl,
3996 p_rounding_diff => l_rec_tax_rnd_diff_tax_curr,
3997 p_min_acct_unit => l_min_acct_unit_tax_curr,
3998 p_return_status => p_return_status,
3999 p_error_buffer => p_error_buffer);
4000
4001 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4002 THEN
4003 IF (g_level_error >= g_current_runtime_level ) THEN
4004 FND_LOG.STRING(g_level_error,
4005 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4006 'Incorrect return_status after calling ' ||
4007 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff()');
4008 FND_LOG.STRING(g_level_error,
4009 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4010 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||p_return_status);
4011 END IF;
4012 RETURN;
4013 END IF;
4014
4015 -- update rec_nrec_tax_amt_tax_curr
4016 --
4017 FOR i IN l_non_zero_nrec_tax_dists_tbl.FIRST ..
4018 l_non_zero_nrec_tax_dists_tbl.LAST LOOP
4019 l_index := l_non_zero_nrec_tax_dists_tbl(i).tbl_index;
4020 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr :=
4021 l_non_zero_nrec_tax_dists_tbl(i).tbl_amt;
4022 END LOOP;
4023 END IF;
4024
4025 END IF; -- l_rec_tax_rnd_diff_tax_curr <> 0
4026
4027 IF l_nrec_tax_rnd_diff_tax_curr <> 0 THEN
4028
4029 -- Adjust rounding_diff to nonrecoverable tax dists first. if there is no
4030 -- non-zero nonrecoverable tax dists, adjust rounding_diff to recoverable
4031 -- tax dists.
4032 --
4033 IF l_non_zero_nrec_tax_dists_tbl.COUNT > 0 THEN
4034
4035 IF NVL(l_nrec_tax_dists_tbl_sort_flg, 'N') <> 'Y' THEN
4036 -- sort l_non_zero_nrec_tax_dists_tbl
4037 --
4038 ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc (
4039 p_index_amt_tbl => l_non_zero_nrec_tax_dists_tbl,
4040 p_return_status => p_return_status,
4041 p_error_buffer => p_error_buffer);
4042
4043 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4044 THEN
4045 IF (g_level_error >= g_current_runtime_level ) THEN
4046 FND_LOG.STRING(g_level_error,
4047 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4048 'Incorrect return_status after calling ' ||
4049 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc()');
4050 FND_LOG.STRING(g_level_error,
4051 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4052 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)');
4053 END IF;
4054 RETURN;
4055 END IF;
4056
4057 -- set the sort flag for l_non_zero_nrec_tax_dists_tbl
4058 --
4059 l_nrec_tax_dists_tbl_sort_flg := 'Y';
4060
4061 END IF; -- l_nrec_tax_dists_tbl_sort_flg <> 'Y'
4062
4063 -- distribute rounding difference
4064 --
4065 ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff (
4066 p_index_amt_tbl => l_non_zero_nrec_tax_dists_tbl,
4067 p_rounding_diff => l_nrec_tax_rnd_diff_tax_curr,
4068 p_min_acct_unit => l_min_acct_unit_tax_curr,
4069 p_return_status => p_return_status,
4070 p_error_buffer => p_error_buffer);
4071
4072 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4073 THEN
4074 IF (g_level_error >= g_current_runtime_level ) THEN
4075 FND_LOG.STRING(g_level_error,
4076 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4077 'Incorrect return_status after calling ' ||
4078 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff()');
4079 FND_LOG.STRING(g_level_error,
4080 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4081 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||p_return_status);
4082 END IF;
4083 RETURN;
4084 END IF;
4085
4086 -- update rec_nrec_tax_amt_tax_curr
4087 --
4088 FOR i IN l_non_zero_nrec_tax_dists_tbl.FIRST ..
4089 l_non_zero_nrec_tax_dists_tbl.LAST LOOP
4090 l_index := l_non_zero_nrec_tax_dists_tbl(i).tbl_index;
4091 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr :=
4092 l_non_zero_nrec_tax_dists_tbl(i).tbl_amt;
4093 END LOOP;
4094
4095 ELSIF l_non_zero_rec_tax_dists_tbl.COUNT > 0 THEN
4096
4097 IF NVL(l_rec_tax_dists_tbl_sort_flg, 'N') <> 'Y' THEN
4098 -- sort l_non_zero_nrec_tax_dists_tbl
4099 --
4100 ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc (
4101 p_index_amt_tbl => l_non_zero_rec_tax_dists_tbl,
4102 p_return_status => p_return_status,
4103 p_error_buffer => p_error_buffer);
4104
4105 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4106 THEN
4107 IF (g_level_error >= g_current_runtime_level ) THEN
4108 FND_LOG.STRING(g_level_error,
4109 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4110 'Incorrect return_status after calling ' ||
4111 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc()');
4112 FND_LOG.STRING(g_level_error,
4113 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4114 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||p_return_status);
4115 END IF;
4116 RETURN;
4117 END IF;
4118
4119 -- set the sort flag for l_non_zero_rec_tax_dists_tbl
4120 --
4121 l_rec_tax_dists_tbl_sort_flg := 'Y';
4122
4123 END IF; -- l_nrec_tax_dists_tbl_sort_flg <> 'Y'
4124
4125 -- distribute rounding difference
4126 --
4127 ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff (
4128 p_index_amt_tbl => l_non_zero_rec_tax_dists_tbl,
4129 p_rounding_diff => l_nrec_tax_rnd_diff_tax_curr,
4130 p_min_acct_unit => l_min_acct_unit_tax_curr,
4131 p_return_status => p_return_status,
4132 p_error_buffer => p_error_buffer);
4133
4134 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4135 THEN
4136 IF (g_level_error >= g_current_runtime_level ) THEN
4137 FND_LOG.STRING(g_level_error,
4138 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4139 'Incorrect return_status after calling ' ||
4140 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff()');
4141 FND_LOG.STRING(g_level_error,
4142 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4143 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||p_return_status);
4144 END IF;
4145 RETURN;
4146 END IF;
4147
4148 -- update rec_nrec_tax_amt_tax_curr
4149 --
4150 FOR i IN l_non_zero_rec_tax_dists_tbl.FIRST ..
4151 l_non_zero_rec_tax_dists_tbl.LAST LOOP
4152 l_index := l_non_zero_rec_tax_dists_tbl(i).tbl_index;
4153 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr :=
4154 l_non_zero_rec_tax_dists_tbl(i).tbl_amt;
4155 END LOOP;
4156 END IF;
4157 END IF; -- l_nrec_tax_rnd_diff_tax_curr <> 0
4158
4159 -- check rounding difference between tax line in zx_lines and
4160 -- the tax distributions in zx_rec_nrec_tax_dist with the same
4161 -- tax_line_id.
4162 --
4163 IF p_tax_line_amt_tax_curr IS NOT NULL THEN
4164 -- calculate rounding difference for tax line amount
4165 --
4166 l_tax_line_rnd_diff_tax_curr := p_tax_line_amt_tax_curr -
4167 (l_rnd_total_rec_tax_amt + l_rnd_total_nrec_tax_amt);
4168
4169 IF l_tax_line_rnd_diff_tax_curr > 0 THEN
4170
4171 -- Adjust this rounding difference to the largest non-zero
4172 -- non-recoverabletax distribution (check first), or adjust it to
4173 -- the largest non-zero recoverable tax distribution.
4174 --
4175 IF l_non_zero_nrec_tax_dists_tbl.COUNT > 0 THEN
4176
4177 l_index := l_non_zero_nrec_tax_dists_tbl(
4178 l_non_zero_nrec_tax_dists_tbl.FIRST).tbl_index;
4179 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr :=
4180 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr +
4181 l_tax_line_rnd_diff_tax_curr;
4182
4183
4184 ELSIF l_non_zero_rec_tax_dists_tbl.COUNT > 0 THEN
4185
4186 l_index := l_non_zero_rec_tax_dists_tbl(
4187 l_non_zero_rec_tax_dists_tbl.FIRST).tbl_index;
4188 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr :=
4189 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr +
4190 l_tax_line_rnd_diff_tax_curr;
4191
4192 END IF;
4193
4194 ELSIF l_tax_line_rnd_diff_tax_curr < 0 THEN
4195
4196 -- Adjust this rounding difference to the largest non-zero
4197 -- recoverabletax distribution (check first), or adjust it to
4198 -- the largest non-zero non-recoverable tax distribution.
4199 --
4200 IF l_non_zero_rec_tax_dists_tbl.COUNT > 0 THEN
4201
4202 l_index := l_non_zero_rec_tax_dists_tbl(
4203 l_non_zero_rec_tax_dists_tbl.FIRST).tbl_index;
4204 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr :=
4205 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr +
4206 l_tax_line_rnd_diff_tax_curr;
4207
4208
4209 ELSIF l_non_zero_nrec_tax_dists_tbl.COUNT > 0 THEN
4210
4211 l_index := l_non_zero_nrec_tax_dists_tbl(
4212 l_non_zero_nrec_tax_dists_tbl.FIRST).tbl_index;
4213
4214 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr :=
4215 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr +
4216 l_tax_line_rnd_diff_tax_curr;
4217
4218 END IF;
4219 END IF; -- l_tax_line_rnd_diff_tax_curr > 0 OR < 0
4220 END IF; -- p_tax_line_amt_tax_curr IS NOT NULL
4221
4222
4223 -- convert taxable amount to tax currency
4224 --
4225 FOR i IN p_rnd_begin_index .. p_rnd_end_index LOOP
4226
4227 IF NVL(p_rec_nrec_dist_tbl(i).reverse_flag,'N') = 'N' THEN
4228
4229 ZX_TDS_TAX_ROUNDING_PKG.convert_to_currency(
4230 p_rec_nrec_dist_tbl(i).trx_currency_code,
4231 p_rec_nrec_dist_tbl(i).tax_currency_code,
4232 p_rec_nrec_dist_tbl(i).tax_currency_conversion_date,
4233 p_rec_nrec_dist_tbl(i).tax_currency_conversion_type,
4234 p_rec_nrec_dist_tbl(i).currency_conversion_type,
4235 p_rec_nrec_dist_tbl(i).tax_currency_conversion_rate,
4236 p_rec_nrec_dist_tbl(i).unrounded_taxable_amt, -- IN param
4237 p_rec_nrec_dist_tbl(i).taxable_amt_tax_curr, -- OUT param
4238 p_return_status,
4239 p_error_buffer,
4240 p_rec_nrec_dist_tbl(i).currency_conversion_date);--Bug7183884
4241
4242 IF NVL(p_return_status,FND_API.G_RET_STS_ERROR)<>FND_API.G_RET_STS_SUCCESS
4243 THEN
4244 IF (g_level_error >= g_current_runtime_level ) THEN
4245 FND_LOG.STRING(g_level_error,
4246 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4247 'Incorrect return_status after calling ' ||
4248 'ZX_TDS_TAX_ROUNDING_PKG.convert_to_currency()');
4249 FND_LOG.STRING(g_level_error,
4250 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4251 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||p_return_status);
4252 END IF;
4253 RETURN;
4254 END IF;
4255
4256 -- do rounding
4257 --
4258 p_rec_nrec_dist_tbl(i).taxable_amt_tax_curr :=
4259 ZX_TDS_TAX_ROUNDING_PKG.round_tax(
4260 p_rec_nrec_dist_tbl(i).taxable_amt_tax_curr,
4261 p_rec_nrec_dist_tbl(i).Rounding_Rule_Code,
4262 l_min_acct_unit_tax_curr,
4263 l_precision_tax_curr,
4264 p_return_status,
4265 p_error_buffer);
4266
4267 IF NVL(p_return_status,FND_API.G_RET_STS_ERROR)<>FND_API.G_RET_STS_SUCCESS
4268 THEN
4269 IF (g_level_error >= g_current_runtime_level ) THEN
4270 FND_LOG.STRING(g_level_error,
4271 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4272 'Incorrect return_status after calling ' ||
4273 'ZX_TDS_TAX_ROUNDING_PKG.round_tax()');
4274 FND_LOG.STRING(g_level_error,
4275 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4276 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||p_return_status);
4277 END IF;
4278 RETURN;
4279 END IF;
4280 END IF; -- NVL(p_rec_nrec_dist_tbl(i).reverse_flag,'N') = 'N'
4281 END LOOP;
4282 END IF; -- tax_currency_code <> trx_currency_code
4283 --
4284 -- /******** END OF CONVERSION AND ROUNDING FOR TAX CURRENCY ********/
4285
4286
4287 -- /****** START OF CONVERSION AND ROUNDING FOR FUNCTIONAL CURRENCY ******/
4288 --
4289 IF p_rec_nrec_dist_tbl(p_rnd_begin_index).ledger_id IS NOT NULL THEN
4290
4291 -- initialize some local varialbles and data structures
4292 --
4293 l_sum_of_rnd_rec_tax_amt := 0;
4294 l_sum_of_rnd_nrec_tax_amt := 0;
4295
4296 l_rnd_total_rec_tax_amt := 0;
4297 l_rnd_total_nrec_tax_amt := 0;
4298
4299 -- get l_min_acct_unit and l_precision and l_funcl_currency_code
4300 --
4301 l_ledger_id := p_rec_nrec_dist_tbl(p_rnd_begin_index).ledger_id;
4302
4303 IF NOT ZX_TDS_UTILITIES_PKG.g_currency_rec_tbl.EXISTS(l_ledger_id) THEN
4304
4305 ZX_TDS_UTILITIES_PKG.populate_currency_cache (
4306 p_ledger_id => l_ledger_id,
4307 p_return_status => p_return_status,
4308 p_error_buffer => p_error_buffer);
4309
4310 IF NVL(p_return_status,FND_API.G_RET_STS_ERROR)<>FND_API.G_RET_STS_SUCCESS
4311 THEN
4312 IF (g_level_error >= g_current_runtime_level ) THEN
4313 FND_LOG.STRING(g_level_error,
4314 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4315 'Incorrect return_status after calling ' ||
4316 'ZX_TDS_UTILITIES_PKG.populate_currency_cache()');
4317 FND_LOG.STRING(g_level_error,
4318 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4319 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||p_return_status);
4320 END IF;
4321 RETURN;
4322 END IF;
4323 END IF;
4324
4325 l_funcl_currency_code := ZX_TDS_UTILITIES_PKG.g_currency_rec_tbl(
4326 l_ledger_id).currency_code;
4327 l_precision_funcl_curr := ZX_TDS_UTILITIES_PKG.g_currency_rec_tbl(
4328 l_ledger_id).precision;
4329 l_min_acct_unit_funcl_curr :=
4330 NVL(ZX_TDS_UTILITIES_PKG.g_currency_rec_tbl(
4331 l_ledger_id).minimum_accountable_unit,
4332 POWER(10,l_precision_funcl_curr*(-1)));
4333
4334 IF l_funcl_currency_code =
4335 p_rec_nrec_dist_tbl(p_rnd_begin_index).trx_currency_code THEN
4336
4337 -- if l_funcl_currency_code = trx_currency_code, it is not necessary to
4338 -- convert tax amount and taxable amount to functional currency.
4339 -- Set the followings: taxable_amt_funcl_curr = taxable_amt(rounded)
4340 -- and rec_nrec_tax_amt_funcl_curr = rec_nrec_tax_amt(rounded)
4341 --
4342 FOR i IN p_rnd_begin_index .. p_rnd_end_index LOOP
4343 IF NVL(p_rec_nrec_dist_tbl(i).reverse_flag, 'N') = 'N' THEN
4344 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_funcl_curr :=
4345 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
4346 p_rec_nrec_dist_tbl(i).taxable_amt_funcl_curr :=
4347 p_rec_nrec_dist_tbl(i).taxable_amt;
4348 END IF;
4349
4350 -- set func_curr_rounding_adjustment = 0
4351 --
4352 p_rec_nrec_dist_tbl(i).func_curr_rounding_adjustment := 0;
4353
4354 END LOOP;
4355
4356 IF (g_level_procedure >= g_current_runtime_level ) THEN
4357
4358 FND_LOG.STRING(g_level_procedure,
4359 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4360 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||
4361 'Functional currency is the same as transaction currency, no conversion is performed');
4362 END IF;
4363 RETURN;
4364 END IF;
4365
4366 -- l_funcl_currency_code <> trx_currency_code: need to convert tax amount
4367 -- and taxable amount to functional currency
4368 --
4369 IF p_rec_nrec_dist_tbl(p_rnd_begin_index).trx_currency_code =
4370 p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_currency_code THEN
4371
4372 -- trx_currency_code = tax_currency_code: l_non_zero_nrec_tax_dists_tbl
4373 -- and l_non_zero_rec_tax_dists_tbl etc need to be built here
4374 --
4375 l_non_zero_rec_tax_dists_tbl.DELETE;
4376 l_non_zero_nrec_tax_dists_tbl.DELETE;
4377
4378 l_non_zero_rec_tax_index := 0;
4379 l_non_zero_nrec_tax_index:= 0;
4380
4381 l_total_unrnd_rec_tax_amt := 0;
4382 l_total_unrnd_nrec_tax_amt := 0;
4383
4384 l_total_nrec_tax_amt_trx_curr := 0;
4385 l_total_rec_tax_amt_trx_curr := 0;
4386
4387 FOR i IN p_rnd_begin_index .. p_rnd_end_index LOOP
4388 IF NVL(p_rec_nrec_dist_tbl(i).reverse_flag, 'N') = 'N' THEN
4389 IF p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt = 0 THEN
4390 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_funcl_curr := 0;
4391 ELSE
4392 IF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'N' THEN
4393
4394 -- Record the non-zero non-recoverable tax dists
4395 --
4396 l_non_zero_nrec_tax_index := l_non_zero_nrec_tax_index + 1;
4397
4398 l_non_zero_nrec_tax_dists_tbl(l_non_zero_nrec_tax_index).tbl_index := i;
4399 -- l_non_zero_nrec_tax_dists_tbl(
4400 -- l_non_zero_nrec_tax_index).tbl_amt :=
4401 -- p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_tax_curr;
4402
4403
4404 ELSIF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'Y' THEN
4405
4406 -- Record the non-zero recoverable tax dists
4407 --
4408 l_non_zero_rec_tax_index := l_non_zero_rec_tax_index + 1;
4409
4410 l_non_zero_rec_tax_dists_tbl(l_non_zero_rec_tax_index).tbl_index := i;
4411 -- l_non_zero_rec_tax_dists_tbl(
4412 -- l_non_zero_rec_tax_index).tbl_amt :=
4413 -- p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt_tax_curr;
4414
4415 END IF; -- recoverable_flag = 'N' or 'Y'
4416 END IF; -- rec_nrec_tax_amt = 0 or not
4417
4418 IF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'N' THEN
4419
4420 -- Accumulate rounded non-recoverable tax amount(not converted)
4421 --
4422 l_total_nrec_tax_amt_trx_curr := l_total_nrec_tax_amt_trx_curr +
4423 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
4424
4425 -- Accumulate unrounded non-recoverable tax amount(not converted)
4426 --
4427 l_total_unrnd_nrec_tax_amt := l_total_unrnd_nrec_tax_amt +
4428 p_rec_nrec_dist_tbl(i).unrounded_rec_nrec_tax_amt;
4429
4430 ELSIF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'Y' THEN
4431
4432 -- Accumulate rounded recoverable tax amount(not converted)
4433 --
4434 l_total_rec_tax_amt_trx_curr := l_total_rec_tax_amt_trx_curr +
4435 p_rec_nrec_dist_tbl(i).rec_nrec_tax_amt;
4436
4437 -- Accumulate unrounded recoverable tax amount(not converted)
4438 --
4439 l_total_unrnd_rec_tax_amt := l_total_unrnd_rec_tax_amt +
4440 p_rec_nrec_dist_tbl(i).unrounded_rec_nrec_tax_amt;
4441 END IF;
4442 END IF; -- NVL(p_rec_nrec_dist_tbl(i).reverse_flag, 'N') = 'N'
4443
4444 -- set func_curr_rounding_adjustment = 0. It may be adjusted later.
4445 --
4446 p_rec_nrec_dist_tbl(i).func_curr_rounding_adjustment := 0;
4447
4448 END LOOP; -- i IN p_rnd_begin_index .. p_rnd_end_index
4449 END IF; -- trx_currency_code = tax_currency_code or ELSE
4450
4451 IF l_non_zero_rec_tax_dists_tbl.COUNT > 0 THEN
4452 FOR i IN l_non_zero_rec_tax_dists_tbl.FIRST ..
4453 l_non_zero_rec_tax_dists_tbl.LAST LOOP
4454
4455 -- convert tax amount to functional currency and perform rounding for
4456 -- rec_nrec_tax_amt_funcl_curr
4457 --
4458 l_index := l_non_zero_rec_tax_dists_tbl(i).tbl_index;
4459 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
4460 p_rec_nrec_dist_tbl(l_index).unrounded_rec_nrec_tax_amt *
4461 p_rec_nrec_dist_tbl(l_index).currency_conversion_rate;
4462
4463 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
4464 round(p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr/
4465 l_min_acct_unit_funcl_curr)*l_min_acct_unit_funcl_curr;
4466
4467 -- Accumulate tax amount of converted recoverable tax dists
4468 --
4469 l_sum_of_rnd_rec_tax_amt := l_sum_of_rnd_rec_tax_amt +
4470 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr;
4471
4472 -- Refresh l_non_zero_rec_tax_dists_tbl(i).tbl_amt with
4473 -- rec_nrec_tax_amt_funcl_curr.
4474 --
4475 l_non_zero_rec_tax_dists_tbl(i).tbl_amt :=
4476 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr;
4477
4478 END LOOP;
4479 END IF;
4480
4481 IF l_non_zero_nrec_tax_dists_tbl.COUNT > 0 THEN
4482 FOR i IN l_non_zero_nrec_tax_dists_tbl.FIRST ..
4483 l_non_zero_nrec_tax_dists_tbl.LAST LOOP
4484 -- convert tax amount to functional currency and perform rounding for
4485 -- rec_nrec_tax_amt_funcl_curr
4486 --
4487 l_index := l_non_zero_nrec_tax_dists_tbl(i).tbl_index;
4488 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
4489 p_rec_nrec_dist_tbl(l_index).unrounded_rec_nrec_tax_amt *
4490 p_rec_nrec_dist_tbl(l_index).currency_conversion_rate;
4491
4492 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
4493 round(p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr/
4494 l_min_acct_unit_funcl_curr)*l_min_acct_unit_funcl_curr;
4495
4496 -- Accumulate tax amount of converted non-recoverable tax dists
4497 --
4498 l_sum_of_rnd_nrec_tax_amt := l_sum_of_rnd_nrec_tax_amt +
4499 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr;
4500
4501 -- Refresh l_non_zero_rec_tax_dists_tbl(i).tbl_amt with
4502 -- rec_nrec_tax_amt_funcl_curr.
4503 --
4504 l_non_zero_nrec_tax_dists_tbl(i).tbl_amt :=
4505 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr;
4506 END LOOP;
4507 END IF;
4508
4509 -- convert l_rnd_total_rec_tax_amt to functional currency and
4510 -- perform rounding for l_total_unrnd_rec_tax_amt
4511 --
4512 l_rnd_total_rec_tax_amt := l_total_unrnd_rec_tax_amt *
4513 p_rec_nrec_dist_tbl(p_rnd_begin_index).currency_conversion_rate;
4514 l_rnd_total_rec_tax_amt := round(l_rnd_total_rec_tax_amt/
4515 l_min_acct_unit_funcl_curr)*l_min_acct_unit_funcl_curr;
4516
4517 -- convert l_rnd_total_nrec_tax_amt to functional currency and
4518 -- perform rounding for l_total_unrnd_nrec_tax_amt
4519 --
4520 l_rnd_total_nrec_tax_amt := l_total_unrnd_nrec_tax_amt *
4521 p_rec_nrec_dist_tbl(p_rnd_begin_index).currency_conversion_rate;
4522
4523 l_rnd_total_nrec_tax_amt := round(l_rnd_total_nrec_tax_amt/
4524 l_min_acct_unit_funcl_curr)*l_min_acct_unit_funcl_curr;
4525
4526
4527 -- calculate rounding difference in functional currency for recoverable and
4528 -- non-recoverable tax distributions
4529 --
4530 l_rec_tax_rnd_diff_funcl_curr :=
4531 l_rnd_total_rec_tax_amt - l_sum_of_rnd_rec_tax_amt;
4532 l_nrec_tax_rnd_diff_funcl_curr :=
4533 l_rnd_total_nrec_tax_amt-l_sum_of_rnd_nrec_tax_amt;
4534
4535 IF l_rec_tax_rnd_diff_funcl_curr <> 0 THEN
4536
4537 -- Adjust rounding_diff to recoverable tax dists first. if there is no
4538 -- non-zero recoverable tax dists, adjust rounding_diff to nonrecoverable
4539 -- tax dists.
4540 --
4541 IF l_non_zero_rec_tax_dists_tbl.COUNT > 0 THEN
4542
4543 IF NVL(l_rec_tax_dists_tbl_sort_flg, 'N') <> 'Y' THEN
4544
4545 -- sort l_non_zero_rec_tax_dists_tbl
4546 --
4547 ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc (
4548 p_index_amt_tbl => l_non_zero_rec_tax_dists_tbl,
4549 p_return_status => p_return_status,
4550 p_error_buffer => p_error_buffer);
4551
4552 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4553 THEN
4554 IF (g_level_error >= g_current_runtime_level ) THEN
4555 FND_LOG.STRING(g_level_error,
4556 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4557 'Incorrect return_status after calling ' ||
4558 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc()');
4559 FND_LOG.STRING(g_level_error,
4560 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4561 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||p_return_status);
4562 END IF;
4563 RETURN;
4564 END IF;
4565
4566 -- set the sort flag for l_non_zero_rec_tax_dists_tbl
4567 --
4568 l_rec_tax_dists_tbl_sort_flg := 'Y';
4569
4570 END IF; -- l_rec_tax_dists_tbl_sort_flg <> 'Y'
4571
4572 ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff (
4573 p_index_amt_tbl => l_non_zero_rec_tax_dists_tbl,
4574 p_rounding_diff => l_rec_tax_rnd_diff_funcl_curr,
4575 p_min_acct_unit => l_min_acct_unit_funcl_curr,
4576 p_return_status => p_return_status,
4577 p_error_buffer => p_error_buffer);
4578
4579 -- update rec_nrec_tax_amt_funcl_curr
4580 --
4581 FOR i IN l_non_zero_rec_tax_dists_tbl.FIRST ..
4582 l_non_zero_rec_tax_dists_tbl.LAST LOOP
4583 l_index := l_non_zero_rec_tax_dists_tbl(i).tbl_index;
4584
4585 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
4586 l_non_zero_rec_tax_dists_tbl(i).tbl_amt;
4587 END LOOP;
4588
4589 ELSIF l_non_zero_nrec_tax_dists_tbl.COUNT > 0 THEN
4590
4591 IF NVL(l_nrec_tax_dists_tbl_sort_flg, 'N') <> 'Y' THEN
4592 -- sort l_non_zero_nrec_tax_dists_tbl
4593 --
4594 ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc (
4595 p_index_amt_tbl => l_non_zero_nrec_tax_dists_tbl,
4596 p_return_status => p_return_status,
4597 p_error_buffer => p_error_buffer);
4598
4599 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4600 THEN
4601 IF (g_level_error >= g_current_runtime_level ) THEN
4602 FND_LOG.STRING(g_level_error,
4603 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4604 'Incorrect return_status after calling ' ||
4605 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc()');
4606 FND_LOG.STRING(g_level_error,
4607 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4608 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||p_return_status);
4609 END IF;
4610 RETURN;
4611 END IF;
4612
4613 -- set the sort flag for l_non_zero_rec_tax_dists_tbl
4614 --
4615 l_nrec_tax_dists_tbl_sort_flg := 'Y';
4616
4617 END IF; -- l_nrec_tax_dists_tbl_sort_flg <> 'Y'
4618
4619 ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff (
4620 p_index_amt_tbl => l_non_zero_nrec_tax_dists_tbl,
4621 p_rounding_diff => l_rec_tax_rnd_diff_funcl_curr,
4622 p_min_acct_unit => l_min_acct_unit_funcl_curr,
4623 p_return_status => p_return_status,
4624 p_error_buffer => p_error_buffer);
4625
4626 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4627 THEN
4628 IF (g_level_error >= g_current_runtime_level ) THEN
4629 FND_LOG.STRING(g_level_error,
4630 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4631 'Incorrect return_status after calling ' ||
4632 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff()');
4633 FND_LOG.STRING(g_level_error,
4634 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4635 'RETURN_STATUS = ' || p_return_status);
4636 FND_LOG.STRING(g_level_error,
4637 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4638 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)');
4639 END IF;
4640 RETURN;
4641 END IF;
4642
4643 -- update rec_nrec_tax_amt_funcl_curr
4644 --
4645 FOR i IN l_non_zero_nrec_tax_dists_tbl.FIRST ..
4646 l_non_zero_nrec_tax_dists_tbl.LAST LOOP
4647
4648 l_index := l_non_zero_nrec_tax_dists_tbl(i).tbl_index;
4649 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
4650 l_non_zero_nrec_tax_dists_tbl(i).tbl_amt;
4651 END LOOP;
4652 END IF;
4653 END IF; -- l_rec_tax_rnd_diff_funcl_curr <> 0
4654
4655 IF l_nrec_tax_rnd_diff_funcl_curr <> 0 THEN
4656
4657 -- Adjust rounding_diff to nonrecoverable tax dists first. if there is no
4658 -- nonrecoverable tax dists, adjust rounding_diff to recoverable tax dists.
4659 --
4660 IF l_non_zero_nrec_tax_dists_tbl.COUNT > 0 THEN
4661
4662 IF NVL(l_nrec_tax_dists_tbl_sort_flg, 'N') <> 'Y' THEN
4663 -- sort l_non_zero_nrec_tax_dists_tbl
4664 --
4665 ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc (
4666 p_index_amt_tbl => l_non_zero_nrec_tax_dists_tbl,
4667 p_return_status => p_return_status,
4668 p_error_buffer => p_error_buffer);
4669
4670 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4671 THEN
4672 IF (g_level_error >= g_current_runtime_level ) THEN
4673 FND_LOG.STRING(g_level_error,
4674 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4675 'Incorrect return_status after calling ' ||
4676 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc()');
4677 FND_LOG.STRING(g_level_error,
4678 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4679 'RETURN_STATUS = ' || p_return_status);
4680 FND_LOG.STRING(g_level_error,
4681 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4682 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)');
4683 END IF;
4684 RETURN;
4685 END IF;
4686
4687 -- set the sort flag for l_non_zero_nrec_tax_dists_tbl
4688 --
4689 l_nrec_tax_dists_tbl_sort_flg := 'Y';
4690
4691 END IF; -- l_nrec_tax_dists_tbl_sort_flg <> 'Y'
4692
4693 ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff (
4694 p_index_amt_tbl => l_non_zero_nrec_tax_dists_tbl,
4695 p_rounding_diff => l_nrec_tax_rnd_diff_funcl_curr,
4696 p_min_acct_unit => l_min_acct_unit_funcl_curr,
4697 p_return_status => p_return_status,
4698 p_error_buffer => p_error_buffer);
4699
4700 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4701 THEN
4702 IF (g_level_error >= g_current_runtime_level ) THEN
4703 FND_LOG.STRING(g_level_error,
4704 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4705 'Incorrect return_status after calling ' ||
4706 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff()');
4707 FND_LOG.STRING(g_level_error,
4708 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4709 'RETURN_STATUS = ' || p_return_status);
4710 FND_LOG.STRING(g_level_error,
4711 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4712 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)');
4713 END IF;
4714 RETURN;
4715 END IF;
4716
4717 -- update rec_nrec_tax_amt_funcl_curr
4718 --
4719 FOR i IN l_non_zero_nrec_tax_dists_tbl.FIRST ..
4720 l_non_zero_nrec_tax_dists_tbl.LAST LOOP
4721
4722 l_index := l_non_zero_nrec_tax_dists_tbl(i).tbl_index;
4723 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
4724 l_non_zero_nrec_tax_dists_tbl(i).tbl_amt;
4725 END LOOP;
4726
4727 ELSIF l_non_zero_rec_tax_dists_tbl.COUNT > 0 THEN
4728
4729 IF NVL(l_rec_tax_dists_tbl_sort_flg, 'N') <> 'Y' THEN
4730 -- sort l_non_zero_rec_tax_dists_tbl
4731 --
4732 ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc (
4733 p_index_amt_tbl => l_non_zero_rec_tax_dists_tbl,
4734 p_return_status => p_return_status,
4735 p_error_buffer => p_error_buffer);
4736
4737 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4738 THEN
4739 IF (g_level_error >= g_current_runtime_level ) THEN
4740 FND_LOG.STRING(g_level_error,
4741 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4742 'Incorrect return_status after calling ' ||
4743 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc()');
4744 FND_LOG.STRING(g_level_error,
4745 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4746 'RETURN_STATUS = ' || p_return_status);
4747 FND_LOG.STRING(g_level_error,
4748 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4749 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)');
4750 END IF;
4751 RETURN;
4752 END IF;
4753
4754 -- set the sort flag for l_non_zero_rec_tax_dists_tbl
4755 --
4756 l_rec_tax_dists_tbl_sort_flg := 'Y';
4757
4758 END IF; -- l_rec_tax_dists_tbl_sort_flg <> 'Y'
4759
4760 ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff (
4761 p_index_amt_tbl => l_non_zero_rec_tax_dists_tbl,
4762 p_rounding_diff => l_nrec_tax_rnd_diff_funcl_curr,
4763 p_min_acct_unit => l_min_acct_unit_funcl_curr,
4764 p_return_status => p_return_status,
4765 p_error_buffer => p_error_buffer);
4766
4767 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
4768 THEN
4769 IF (g_level_error >= g_current_runtime_level ) THEN
4770 FND_LOG.STRING(g_level_error,
4771 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4772 'Incorrect return_status after calling ' ||
4773 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff()');
4774 FND_LOG.STRING(g_level_error,
4775 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4776 'RETURN_STATUS = ' || p_return_status);
4777 FND_LOG.STRING(g_level_error,
4778 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4779 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)');
4780 END IF;
4781 RETURN;
4782 END IF;
4783
4784 -- update rec_nrec_tax_amt_funcl_curr
4785 --
4786 FOR i IN l_non_zero_rec_tax_dists_tbl.FIRST ..
4787 l_non_zero_rec_tax_dists_tbl.LAST LOOP
4788
4789 l_index := l_non_zero_rec_tax_dists_tbl(i).tbl_index;
4790 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
4791 l_non_zero_rec_tax_dists_tbl(i).tbl_amt;
4792 END LOOP;
4793 END IF;
4794 END IF; -- l_nrec_tax_rnd_diff_funcl_curr <> 0
4795
4796 IF p_tax_line_amt_funcl_curr IS NOT NULL THEN
4797
4798 -- calculate rounding difference for amount of tax line
4799 --
4800 l_tax_line_rnd_diff_funcl_curr := p_tax_line_amt_funcl_curr -
4801 (l_rnd_total_rec_tax_amt + l_rnd_total_nrec_tax_amt);
4802
4803
4804 IF l_tax_line_rnd_diff_funcl_curr > 0 THEN
4805
4806 -- Adjust this rounding difference to the largest non-zero
4807 -- non-recoverabletax distribution (check first), or adjust it to
4808 -- the largest non-zero recoverable tax distribution.
4809 --
4810 IF l_non_zero_nrec_tax_dists_tbl.COUNT > 0 THEN
4811
4812 l_index := l_non_zero_nrec_tax_dists_tbl(
4813 l_non_zero_nrec_tax_dists_tbl.FIRST).tbl_index;
4814 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
4815 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr +
4816 l_tax_line_rnd_diff_funcl_curr;
4817
4818 -- store rounding adjustment
4819 --
4820 p_rec_nrec_dist_tbl(l_index).func_curr_rounding_adjustment :=
4821 l_tax_line_rnd_diff_funcl_curr;
4822
4823
4824 IF (g_level_statement >= g_current_runtime_level ) THEN
4825 FND_LOG.STRING(g_level_statement,
4826 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4827 'Rounding Dif adjusted to the largest non-rec tax dist '||l_index);
4828 END IF;
4829
4830 ELSIF l_non_zero_rec_tax_dists_tbl.COUNT > 0 THEN
4831
4832 l_index := l_non_zero_rec_tax_dists_tbl(
4833 l_non_zero_rec_tax_dists_tbl.FIRST).tbl_index;
4834 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
4835 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr +
4836 l_tax_line_rnd_diff_funcl_curr;
4837
4838 -- store rounding adjustment
4839 --
4840 p_rec_nrec_dist_tbl(l_index).func_curr_rounding_adjustment :=
4841 l_tax_line_rnd_diff_funcl_curr;
4842
4843 IF (g_level_statement >= g_current_runtime_level ) THEN
4844 FND_LOG.STRING(g_level_statement,
4845 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4846 'Rounding Dif adjusted to the largest rec tax dist '||l_index);
4847 END IF;
4848
4849 END IF;
4850
4851 ELSIF l_tax_line_rnd_diff_funcl_curr < 0 THEN
4852
4853 -- Adjust this rounding difference to the largest non-zero
4854 -- recoverabletax distribution (check first), or adjust it to
4855 -- the largest non-zero non-recoverable tax distribution.
4856 --
4857 IF l_non_zero_rec_tax_dists_tbl.COUNT > 0 THEN
4858
4859 l_index := l_non_zero_rec_tax_dists_tbl(
4860 l_non_zero_rec_tax_dists_tbl.FIRST).tbl_index;
4861 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
4862 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr +
4863 l_tax_line_rnd_diff_funcl_curr;
4864
4865 -- store rounding adjustment
4866 --
4867 p_rec_nrec_dist_tbl(l_index).func_curr_rounding_adjustment :=
4868 l_tax_line_rnd_diff_funcl_curr;
4869
4870
4871 IF (g_level_statement >= g_current_runtime_level ) THEN
4872 FND_LOG.STRING(g_level_statement,
4873 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4874 'Rounding Dif adjusted to the largest rec tax dist '||l_index);
4875 END IF;
4876
4877
4878 ELSIF l_non_zero_nrec_tax_dists_tbl.COUNT > 0 THEN
4879
4880 l_index := l_non_zero_nrec_tax_dists_tbl(
4881 l_non_zero_nrec_tax_dists_tbl.FIRST).tbl_index;
4882
4883 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
4884 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr +
4885 l_tax_line_rnd_diff_funcl_curr;
4886
4887 -- store rounding adjustment
4888 --
4889 p_rec_nrec_dist_tbl(l_index).func_curr_rounding_adjustment :=
4890 l_tax_line_rnd_diff_funcl_curr;
4891
4892 IF (g_level_statement >= g_current_runtime_level ) THEN
4893 FND_LOG.STRING(g_level_statement,
4894 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4895 'Rounding Dif adjusted to the largest non-rec tax dist '||l_index);
4896 END IF;
4897
4898 END IF;
4899 END IF; -- l_tax_line_rnd_diff_tax_curr > 0 OR < 0
4900 END IF; -- p_tax_line_amt_funcl_curr IS NOT NULL
4901
4902 -- converting taxable_amt to functional currency.
4903 --
4904 FOR i IN p_rnd_begin_index .. p_rnd_end_index LOOP
4905 IF NVL(p_rec_nrec_dist_tbl(i).reverse_flag, 'N') = 'N' THEN
4906 IF l_funcl_currency_code <> p_rec_nrec_dist_tbl(i).trx_currency_code THEN
4907 -- convert to functional currency
4908 --
4909 p_rec_nrec_dist_tbl(i).taxable_amt_funcl_curr :=
4910 p_rec_nrec_dist_tbl(i).unrounded_taxable_amt *
4911 p_rec_nrec_dist_tbl(i).currency_conversion_rate;
4912 -- round
4913 p_rec_nrec_dist_tbl(i).taxable_amt_funcl_curr :=
4914 round(p_rec_nrec_dist_tbl(i).taxable_amt_funcl_curr/
4915 l_min_acct_unit_funcl_curr)*l_min_acct_unit_funcl_curr;
4916 ELSE
4917 p_rec_nrec_dist_tbl(i).taxable_amt_funcl_curr :=
4918 p_rec_nrec_dist_tbl(i).taxable_amt;
4919 END IF;
4920 END IF;
4921 END LOOP;
4922
4923 ELSE -- p_rec_nrec_dist_tbl(i).ledger_id IS NULL
4924 IF (g_level_procedure >= g_current_runtime_level ) THEN
4925
4926 FND_LOG.STRING(g_level_procedure,
4927 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4928 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||
4929 ' null Ledger_id cannot perform conversion to functional currency');
4930 END IF;
4931 END IF;
4932 --
4933 -- /****** END OF CONVERSION AND ROUNDING OF FUNCTIONAL CURRENCY ******/
4934
4935 IF (g_level_procedure >= g_current_runtime_level ) THEN
4936
4937 FND_LOG.STRING(g_level_procedure,
4938 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4939 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)'||p_return_status);
4940 END IF;
4941
4942 EXCEPTION
4943
4944 WHEN OTHERS THEN
4945 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4946 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4947
4948 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4949 FND_LOG.STRING(g_level_unexpected,
4950 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists',
4951 p_error_buffer);
4952 FND_LOG.STRING(g_level_unexpected,
4953 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists.END',
4954 'ZX_TRD_INTERNAL_SERVICES_PVT.convert_tax_dists(-)');
4955 END IF;
4956
4957 END convert_tax_dists;
4958
4959
4960 PROCEDURE distribute_rounding_diff (
4961 p_index_amt_tbl IN OUT NOCOPY index_amt_tbl_type,
4962 p_rounding_diff IN NUMBER,
4963 p_min_acct_unit IN NUMBER,
4964 p_return_status OUT NOCOPY VARCHAR2,
4965 p_error_buffer OUT NOCOPY VARCHAR2) IS
4966
4967 l_num_of_min_units NUMBER;
4968 l_num_of_multiples NUMBER;
4969 l_remainder NUMBER;
4970
4971 BEGIN
4972
4973 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
4974
4975 IF (g_level_procedure >= g_current_runtime_level ) THEN
4976 FND_LOG.STRING(g_level_procedure,
4977 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff.BEGIN',
4978 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff(+)'||
4979 'p_rounding_diff = ' || p_rounding_diff);
4980 END IF;
4981
4982 p_return_status:= FND_API.G_RET_STS_SUCCESS;
4983
4984 -- Adjust rounding difference
4985 --
4986 IF p_rounding_diff = 0 THEN
4987 IF (g_level_procedure >= g_current_runtime_level ) THEN
4988
4989 FND_LOG.STRING(g_level_procedure,
4990 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff.END',
4991 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff(-)'||'no diff');
4992 END IF;
4993 RETURN;
4994
4995 ELSE
4996
4997 l_num_of_min_units := ABS(TRUNC(p_rounding_diff/p_min_acct_unit));
4998
4999 IF p_index_amt_tbl.COUNT > 0 THEN
5000
5001 l_num_of_multiples := TRUNC(l_num_of_min_units/ p_index_amt_tbl.COUNT);
5002 l_remainder := MOD(l_num_of_min_units, p_index_amt_tbl.COUNT);
5003
5004 IF l_num_of_multiples <> 0 THEN
5005
5006 FOR i IN p_index_amt_tbl.FIRST .. p_index_amt_tbl.LAST LOOP
5007
5008 p_index_amt_tbl(i).tbl_amt := p_index_amt_tbl(i).tbl_amt +
5009 p_min_acct_unit * l_num_of_multiples * SIGN(p_rounding_diff);
5010
5011 END LOOP; -- IN p_index_amt_tbl.FIRST .. p_index_amt_tbl.LAST LOOP
5012
5013 END IF; -- l_num_of_multiples <> 0
5014
5015 IF l_remainder <> 0 THEN
5016
5017 FOR i IN 1 .. l_remainder LOOP
5018 p_index_amt_tbl(i).tbl_amt := p_index_amt_tbl(i).tbl_amt +
5019 p_min_acct_unit * SIGN(p_rounding_diff);
5020
5021 END LOOP; -- IN 1 .. l_remainder LOOP
5022
5023 END IF; -- l_remainder <> 0
5024 ELSE -- p_index_amt_tbl.COUNT = 0
5025 IF (g_level_procedure >= g_current_runtime_level ) THEN
5026
5027 FND_LOG.STRING(g_level_procedure,
5028 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff.END',
5029 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff(-)'||
5030 'p_index_amt_tbl is empty');
5031 END IF;
5032 RETURN;
5033 END IF; -- p_index_amt_tbl.COUNT > 0 OR NOT
5034 END IF; -- p_rounding_diff <> 0 OR NOT
5035
5036 IF (g_level_procedure >= g_current_runtime_level ) THEN
5037 FND_LOG.STRING(g_level_procedure,
5038 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff.END',
5039 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff(-)'||
5040 p_return_status);
5041 END IF;
5042
5043 EXCEPTION
5044
5045 WHEN OTHERS THEN
5046 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5047 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5048
5049 IF (g_level_unexpected >= g_current_runtime_level ) THEN
5050 FND_LOG.STRING(g_level_unexpected,
5051 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff',
5052 p_error_buffer);
5053 FND_LOG.STRING(g_level_unexpected,
5054 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff.END',
5055 'ZX_TRD_INTERNAL_SERVICES_PVT.distribute_rounding_diff(-)');
5056 END IF;
5057
5058 END distribute_rounding_diff;
5059
5060 PROCEDURE sort_tbl_amt_desc (
5061 p_index_amt_tbl IN OUT NOCOPY index_amt_tbl_type,
5062 p_return_status OUT NOCOPY VARCHAR2,
5063 p_error_buffer OUT NOCOPY VARCHAR2) IS
5064
5065 l_length NUMBER;
5066 l_incr NUMBER;
5067 l_first NUMBER;
5068 l_temp_amt NUMBER;
5069 l_temp_index NUMBER;
5070 l_temp_num NUMBER;
5071
5072 BEGIN
5073
5074 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5075
5076 IF (g_level_procedure >= g_current_runtime_level ) THEN
5077 FND_LOG.STRING(g_level_procedure,
5078 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc.BEGIN',
5079 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc(+)');
5080 END IF;
5081
5082 p_return_status:= FND_API.G_RET_STS_SUCCESS;
5083
5084 -- initialize local variables
5085 --
5086 l_length := p_index_amt_tbl.COUNT;
5087 l_incr := TRUNC(l_length/2);
5088 l_first := p_index_amt_tbl.FIRST;
5089
5090 -- sorting p_index_amt_tbl using SHELL sort method
5091 --
5092 WHILE l_incr >= 1 LOOP
5093
5094 FOR i IN l_incr + l_first .. l_first + l_length - 1 LOOP
5095
5096 -- hold the values at the current index intemporary variables
5097 --
5098 l_temp_index := p_index_amt_tbl(i).tbl_index;
5099 l_temp_amt := p_index_amt_tbl(i).tbl_amt;
5100 l_temp_num := i;
5101
5102 WHILE ( l_temp_num >= l_incr + l_first AND l_temp_amt >
5103 p_index_amt_tbl(l_temp_num - l_incr).tbl_amt ) LOOP
5104
5105
5106 p_index_amt_tbl(l_temp_num).tbl_index :=
5107 p_index_amt_tbl(l_temp_num - l_incr).tbl_index;
5108
5109 p_index_amt_tbl(l_temp_num).tbl_amt :=
5110 p_index_amt_tbl(l_temp_num - l_incr).tbl_amt;
5111
5112 l_temp_num := l_temp_num - l_incr;
5113
5114 END LOOP;
5115
5116 p_index_amt_tbl(l_temp_num).tbl_index := l_temp_index;
5117 p_index_amt_tbl(l_temp_num).tbl_amt := l_temp_amt;
5118
5119 END LOOP; --
5120
5121 l_incr := trunc(l_incr/2);
5122
5123 END LOOP;
5124
5125 IF (g_level_procedure >= g_current_runtime_level ) THEN
5126
5127 FND_LOG.STRING(g_level_procedure,
5128 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc.END',
5129 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc(-)'||p_return_status);
5130 END IF;
5131
5132 EXCEPTION
5133
5134 WHEN OTHERS THEN
5135 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5136 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5137
5138 IF (g_level_unexpected >= g_current_runtime_level ) THEN
5139 FND_LOG.STRING(g_level_unexpected,
5140 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc',
5141 p_error_buffer);
5142 FND_LOG.STRING(g_level_unexpected,
5143 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc.END',
5144 'ZX_TRD_INTERNAL_SERVICES_PVT.sort_tbl_amt_desc(-)');
5145 END IF;
5146
5147 END sort_tbl_amt_desc;
5148
5149 PROCEDURE get_recovery_from_applied(
5150 p_tax_id IN NUMBER,
5151 p_tax_apportionment_line_num IN NUMBER,
5152 p_prd_total_tax_amt IN NUMBER,
5153 p_trx_line_dist_index IN NUMBER,
5154 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
5155 p_rnd_begin_index IN NUMBER,
5156 p_rnd_end_index OUT NOCOPY NUMBER,
5157 p_return_status OUT NOCOPY VARCHAR2,
5158 p_error_buffer OUT NOCOPY VARCHAR2) IS
5159
5160 CURSOR get_tax_dists_csr IS
5161 SELECT recoverable_flag,
5162 recovery_type_code,
5163 rec_type_rule_flag,
5164 rec_rate_det_rule_flag,
5165 recovery_rate_id,
5166 recovery_rate_code,
5167 rec_nrec_rate,
5168 rec_nrec_tax_dist_id,
5169 rec_nrec_tax_amt,
5170 rec_nrec_tax_amt_tax_curr,
5171 rec_nrec_tax_amt_funcl_curr,
5172 trx_line_dist_amt,
5173 def_rec_settlement_option_code,
5174 account_source_tax_rate_id
5175 FROM zx_rec_nrec_dist
5176 WHERE application_id =
5177 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_application_id(
5178 p_trx_line_dist_index)
5179 AND entity_code =
5180 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_entity_code(
5181 p_trx_line_dist_index)
5182 AND event_class_code =
5183 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_event_class_code(
5184 p_trx_line_dist_index)
5185 AND trx_id =
5186 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_trx_id(
5187 p_trx_line_dist_index)
5188 AND trx_line_id =
5189 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_line_id(
5190 p_trx_line_dist_index)
5191 AND trx_level_type =
5192 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_trx_level_type(
5193 p_trx_line_dist_index)
5194 AND trx_line_dist_id =
5195 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_dist_id(
5196 p_trx_line_dist_index)
5197 AND tax_id = p_tax_id
5198 -- Modified the condition for Bug#16601146
5199 AND NVL(tax_apportionment_line_number,p_tax_apportionment_line_num) = p_tax_apportionment_line_num
5200 -- AND NVL(tax_apportionment_line_number,-99) =
5201 -- DECODE(historical_flag,'Y',p_tax_apportionment_line_num,NVL(tax_apportionment_line_number,-99))
5202 AND NVL(reverse_flag, 'N') <> 'Y'
5203 ORDER BY rec_nrec_tax_dist_id, recoverable_flag;
5204
5205 l_rec_nrec_tax_dist_number NUMBER;
5206
5207 BEGIN
5208
5209 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5210 IF (g_level_procedure >= g_current_runtime_level ) THEN
5211 FND_LOG.STRING(g_level_procedure,
5212 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_applied.BEGIN',
5213 'ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_applied(+)');
5214 END IF;
5215
5216 p_return_status := FND_API.G_RET_STS_SUCCESS;
5217
5218 p_rnd_end_index := p_rnd_begin_index -1;
5219 l_rec_nrec_tax_dist_number:= 0;
5220
5221 ZX_TDS_UTILITIES_PKG.populate_tax_cache (
5222 p_tax_id => p_tax_id,
5223 p_return_status => p_return_status,
5224 p_error_buffer => p_error_buffer);
5225
5226 IF (g_level_statement >= g_current_runtime_level ) THEN
5227 FND_LOG.STRING(g_level_statement,
5228 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_applied',
5229 'Fetching Tax Dists for: '||
5230 'APPLIED_FROM_APPLICATION_ID : '||TO_CHAR(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_application_id(p_trx_line_dist_index)) ||', '||
5231 'APPLIED_FROM_ENTITY_CODE : '||ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_entity_code(p_trx_line_dist_index) ||', '||
5232 'APPLIED_FROM_EVENT_CLASS_CODE : '||ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_event_class_code(p_trx_line_dist_index) ||', '||
5233 'APPLIED_FROM_TRX_ID : '||TO_CHAR(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_trx_id(p_trx_line_dist_index)) ||', '||
5234 'APPLIED_FROM_LINE_ID : '||TO_CHAR(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_line_id(p_trx_line_dist_index)) ||', '||
5235 'APPLIED_FROM_TRX_LEVEL_TYPE : '||ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_trx_level_type(p_trx_line_dist_index) ||', '||
5236 'APPLIED_FROM_DIST_ID : '||TO_CHAR(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_dist_id(p_trx_line_dist_index)) ||', '||
5237 'TAX_ID : '||TO_CHAR(p_tax_id) ||', '||
5238 'TAX_APPORTIONMENT_LINE_NUMBER : '||TO_CHAR(p_tax_apportionment_line_num)
5239 );
5240 END IF;
5241
5242 IF (g_level_statement >= g_current_runtime_level ) THEN
5243 FND_LOG.STRING(g_level_statement,
5244 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_applied',
5245 'Updating Tax_Apportionment_Line_Number in the tax distributions of Applied_From Doc...');
5246 END IF;
5247
5248 UPDATE zx_rec_nrec_dist zd
5249 SET tax_apportionment_line_number =
5250 (SELECT tax_apportionment_line_number
5251 FROM zx_lines zl
5252 WHERE zl.tax_line_id = zd.tax_line_id)
5253 WHERE application_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_application_id(p_trx_line_dist_index)
5254 AND entity_code = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_entity_code(p_trx_line_dist_index)
5255 AND event_class_code = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_event_class_code(p_trx_line_dist_index)
5256 AND trx_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_trx_id(p_trx_line_dist_index)
5257 AND trx_line_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_line_id(p_trx_line_dist_index)
5258 AND trx_level_type = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_trx_level_type(p_trx_line_dist_index)
5259 AND trx_line_dist_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.applied_from_dist_id(p_trx_line_dist_index)
5260 AND tax_apportionment_line_number IS NULL
5261 AND NVL(reverse_flag, 'N') <> 'Y';
5262
5263 IF (g_level_statement >= g_current_runtime_level ) THEN
5264 FND_LOG.STRING(g_level_statement,
5265 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_applied',
5266 ' Rows updated : '|| TO_CHAR(SQL%ROWCOUNT));
5267 END IF;
5268
5269 FOR tax_dist_rec in get_tax_dists_csr LOOP
5270
5271 IF (g_level_statement >= g_current_runtime_level ) THEN
5272 FND_LOG.STRING(g_level_statement,
5273 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_applied',
5274 'Fetched Record: '||
5275 'REC_NREC_TAX_DIST_ID : '|| TO_CHAR(tax_dist_rec.rec_nrec_tax_dist_id) ||', '||
5276 'RECOVERY_RATE_CODE : '|| tax_dist_rec.Recovery_rate_code ||', '||
5277 'RECOVERY_RATE_ID : '|| TO_CHAR(tax_dist_rec.recovery_rate_id) ||', '||
5278 'REC_NREC_RATE : '|| TO_CHAR(tax_dist_rec.rec_nrec_rate) ||', '||
5279 'RECOVERABLE_FLAG : '|| tax_dist_rec.recoverable_flag ||', '||
5280 'RECOVERY_TYPE_CODE : '|| tax_dist_rec.recovery_type_code ||', '||
5281 'REC_TYPE_RULE_FLAG : '|| tax_dist_rec.rec_type_rule_flag ||', '||
5282 'REC_RATE_DET_RULE_FLAG : '|| tax_dist_rec.rec_rate_det_rule_flag ||', '||
5283 'REC_NREC_TAX_AMT : '|| TO_CHAR(tax_dist_rec.rec_nrec_tax_amt) ||', '||
5284 'REC_NREC_TAX_AMT_TAX_CURR : '|| TO_CHAR(tax_dist_rec.rec_nrec_tax_amt_tax_curr) ||', '||
5285 'REC_NREC_TAX_AMT_FUNCL_CURR : '|| TO_CHAR(tax_dist_rec.rec_nrec_tax_amt_funcl_curr) ||', '||
5286 'TRX_LINE_DIST_AMT : '|| TO_CHAR(tax_dist_rec.trx_line_dist_amt) ||', '||
5287 'DEF_REC_SETTLEMENT_OPTION_CODE : '|| tax_dist_rec.def_rec_settlement_option_code ||', '||
5288 'ACCOUNT_SOURCE_TAX_RATE_ID : '|| TO_CHAR(tax_dist_rec.account_source_tax_rate_id)
5289 );
5290 END IF;
5291
5292 l_rec_nrec_tax_dist_number := l_rec_nrec_tax_dist_number + 1;
5293 p_rnd_end_index := p_rnd_end_index + 1;
5294
5295 p_rec_nrec_dist_tbl(p_rnd_end_index).recoverable_flag :=
5296 tax_dist_rec.recoverable_flag;
5297 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_type_code :=
5298 tax_dist_rec.recovery_type_code;
5299 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_type_rule_flag :=
5300 tax_dist_rec.rec_type_rule_flag;
5301 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_rate_det_rule_flag :=
5302 tax_dist_rec.rec_rate_det_rule_flag;
5303 p_rec_nrec_dist_tbl(p_rnd_end_index).applied_from_tax_dist_id :=
5304 tax_dist_rec.rec_nrec_tax_dist_id;
5305 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_tax_dist_number:=
5306 l_rec_nrec_tax_dist_number;
5307
5308 -- 1. If applied_amt_handling_flag ='P', populate recovery_rate_code,
5309 -- recovery_rate_id and rec_nrec_rate from applied from document.
5310 -- Tax distributions are proarted based the amount applied.
5311 -- 2. If applied_amt_handling_flag ='R', populate recovery_rate_code from
5312 -- applied document. recovery_rate_id and rec_nrec_rate are determined
5313 -- in the current document. Tax distributions are recalculated based on
5314 -- the rec_nrec_ratein the current document.
5315 --
5316 IF ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
5317 p_tax_id).applied_amt_handling_flag = 'P' THEN
5318 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_rate_code :=
5319 tax_dist_rec.recovery_rate_code;
5320 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_rate_id :=
5321 tax_dist_rec.recovery_rate_id;
5322 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_rate :=
5323 tax_dist_rec.rec_nrec_rate;
5324 -- populate prd_total_tax_amt
5325 p_rec_nrec_dist_tbl(p_rnd_end_index).prd_total_tax_amt :=
5326 p_prd_total_tax_amt;
5327 p_rec_nrec_dist_tbl(p_rnd_end_index).def_rec_settlement_option_code :=
5328 tax_dist_rec.def_rec_settlement_option_code;
5329 p_rec_nrec_dist_tbl(p_rnd_end_index).account_source_tax_rate_id :=
5330 tax_dist_rec.account_source_tax_rate_id;
5331
5332 ELSIF ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(
5333 p_tax_id).applied_amt_handling_flag = 'R' THEN
5334 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_rate_code :=
5335 tax_dist_rec.recovery_rate_code;
5336
5337 p_rec_nrec_dist_tbl(p_rnd_end_index).prd_tax_amt :=
5338 tax_dist_rec.rec_nrec_tax_amt *
5339 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_AMT(p_trx_line_dist_index)/
5340 tax_dist_rec.trx_line_dist_amt;
5341
5342 p_rec_nrec_dist_tbl(p_rnd_end_index).prd_tax_amt_tax_curr :=
5343 tax_dist_rec.rec_nrec_tax_amt_tax_curr *
5344 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_AMT(p_trx_line_dist_index)/
5345 tax_dist_rec.trx_line_dist_amt;
5346
5347 IF tax_dist_rec.rec_nrec_tax_amt_funcl_curr IS NOT NULL THEN
5348 p_rec_nrec_dist_tbl(p_rnd_end_index).prd_tax_amt_funcl_curr :=
5349 tax_dist_rec.rec_nrec_tax_amt_funcl_curr *
5350 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_AMT(p_trx_line_dist_index)/
5351 tax_dist_rec.trx_line_dist_amt;
5352 END IF;
5353 END IF;
5354
5355 END LOOP;
5356
5357 IF (g_level_procedure >= g_current_runtime_level) THEN
5358
5359 FND_LOG.STRING(g_level_procedure,
5360 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_applied.END',
5361 'ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_applied(-)'||p_return_status);
5362 END IF;
5363
5364 EXCEPTION
5365 WHEN OTHERS THEN
5366 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5367 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5368
5369 IF (g_level_unexpected >= g_current_runtime_level ) THEN
5370 FND_LOG.STRING(g_level_unexpected,
5371 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_applied',
5372 p_error_buffer);
5373 FND_LOG.STRING(g_level_unexpected,
5374 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_applied.END',
5375 'ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_applied(-)');
5376 END IF;
5377
5378 END get_recovery_from_applied;
5379
5380 PROCEDURE get_recovery_from_adjusted(
5381 p_tax_id IN NUMBER,
5382 p_tax_apportionment_line_num IN NUMBER,
5383 p_trx_line_dist_index IN NUMBER,
5384 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
5385 p_rnd_begin_index IN NUMBER,
5386 p_rnd_end_index OUT NOCOPY NUMBER,
5387 p_return_status OUT NOCOPY VARCHAR2,
5388 p_error_buffer OUT NOCOPY VARCHAR2) IS
5389
5390 CURSOR get_tax_dists_csr IS
5391 SELECT recoverable_flag,
5392 recovery_type_code,
5393 rec_type_rule_flag,
5394 rec_rate_det_rule_flag,
5395 recovery_rate_id,
5396 recovery_rate_code,
5397 rec_nrec_rate,
5398 rec_nrec_tax_dist_id,
5399 def_rec_settlement_option_code,
5400 account_source_tax_rate_id
5401 FROM zx_rec_nrec_dist
5402 WHERE application_id =
5403 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_application_id(
5404 p_trx_line_dist_index)
5405 AND entity_code =
5406 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_entity_code(
5407 p_trx_line_dist_index)
5408 AND event_class_code =
5409 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_event_class_code(
5410 p_trx_line_dist_index)
5411 AND trx_id =
5412 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_trx_id(
5413 p_trx_line_dist_index)
5414 AND trx_line_id =
5415 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_line_id(
5416 p_trx_line_dist_index)
5417 AND trx_level_type =
5418 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_trx_level_type(
5419 p_trx_line_dist_index)
5420 AND trx_line_dist_id =
5421 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_dist_id(
5422 p_trx_line_dist_index)
5423 AND tax_id = p_tax_id
5424 -- Modified the following condition for Bug#16601146
5425 AND NVL(tax_apportionment_line_number,p_tax_apportionment_line_num) = p_tax_apportionment_line_num
5426 -- AND NVL(tax_apportionment_line_number,-99) =
5427 -- DECODE(historical_flag,'Y',p_tax_apportionment_line_num,NVL(tax_apportionment_line_number,-99))
5428 AND NVL(reverse_flag, 'N') <> 'Y'
5429 ORDER BY rec_nrec_tax_dist_id, recoverable_flag;
5430
5431 l_rec_nrec_tax_dist_number NUMBER;
5432
5433 BEGIN
5434
5435 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5436 IF (g_level_procedure >= g_current_runtime_level ) THEN
5437 FND_LOG.STRING(g_level_procedure,
5438 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_adjusted.BEGIN',
5439 'ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_adjusted(+)');
5440 END IF;
5441
5442 p_return_status := FND_API.G_RET_STS_SUCCESS;
5443
5444 p_rnd_end_index := p_rnd_begin_index - 1;
5445
5446 l_rec_nrec_tax_dist_number := 0;
5447
5448 ZX_TDS_UTILITIES_PKG.populate_tax_cache (
5449 p_tax_id => p_tax_id,
5450 p_return_status => p_return_status,
5451 p_error_buffer => p_error_buffer);
5452
5453 IF (g_level_statement >= g_current_runtime_level ) THEN
5454 FND_LOG.STRING(g_level_statement,
5455 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_adjusted',
5456 'Fetching Tax Dists for: '||
5457 'ADJUSTED_DOC_APPLICATION_ID : '||TO_CHAR(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_application_id(p_trx_line_dist_index)) ||', '||
5458 'ADJUSTED_DOC_ENTITY_CODE : '||ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_entity_code(p_trx_line_dist_index) ||', '||
5459 'ADJUSTED_DOC_EVENT_CLASS_CODE : '||ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_event_class_code(p_trx_line_dist_index) ||', '||
5460 'ADJUSTED_DOC_TRX_ID : '||TO_CHAR(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_trx_id(p_trx_line_dist_index)) ||', '||
5461 'ADJUSTED_DOC_LINE_ID : '||TO_CHAR(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_line_id(p_trx_line_dist_index)) ||', '||
5462 'ADJUSTED_DOC_TRX_LEVEL_TYPE : '||ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_trx_level_type(p_trx_line_dist_index) ||', '||
5463 'ADJUSTED_DOC_DIST_ID : '||TO_CHAR(ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_dist_id(p_trx_line_dist_index)) ||', '||
5464 'TAX_ID : '||TO_CHAR(p_tax_id) ||', '||
5465 'TAX_APPORTIONMENT_LINE_NUMBER : '||TO_CHAR(p_tax_apportionment_line_num)
5466 );
5467 END IF;
5468
5469 IF (g_level_statement >= g_current_runtime_level ) THEN
5470 FND_LOG.STRING(g_level_statement,
5471 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_adjusted',
5472 'Updating Tax_Apportionment_Line_Number in the tax distributions of Adjusted Doc...');
5473 END IF;
5474
5475 UPDATE zx_rec_nrec_dist zd
5476 SET tax_apportionment_line_number =
5477 (SELECT tax_apportionment_line_number
5478 FROM zx_lines zl
5479 WHERE zl.tax_line_id = zd.tax_line_id)
5480 WHERE application_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_application_id(p_trx_line_dist_index)
5481 AND entity_code = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_entity_code(p_trx_line_dist_index)
5482 AND event_class_code = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_event_class_code(p_trx_line_dist_index)
5483 AND trx_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_trx_id(p_trx_line_dist_index)
5484 AND trx_line_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_line_id(p_trx_line_dist_index)
5485 AND trx_level_type = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_trx_level_type(p_trx_line_dist_index)
5486 AND trx_line_dist_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.adjusted_doc_dist_id(p_trx_line_dist_index)
5487 AND tax_apportionment_line_number IS NULL
5488 AND NVL(reverse_flag, 'N') <> 'Y';
5489
5490 IF (g_level_statement >= g_current_runtime_level ) THEN
5491 FND_LOG.STRING(g_level_statement,
5492 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_adjusted',
5493 ' Rows updated : '|| TO_CHAR(SQL%ROWCOUNT));
5494 END IF;
5495
5496 FOR tax_dist_rec in get_tax_dists_csr LOOP
5497
5498 IF (g_level_statement >= g_current_runtime_level ) THEN
5499 FND_LOG.STRING(g_level_statement,
5500 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_adjusted',
5501 'Fetched Record: '||
5502 'REC_NREC_TAX_DIST_ID : '|| TO_CHAR(tax_dist_rec.rec_nrec_tax_dist_id) ||', '||
5503 'RECOVERY_RATE_CODE : '|| tax_dist_rec.Recovery_rate_code ||', '||
5504 'RECOVERY_RATE_ID : '|| TO_CHAR(tax_dist_rec.recovery_rate_id) ||', '||
5505 'REC_NREC_RATE : '|| TO_CHAR(tax_dist_rec.rec_nrec_rate) ||', '||
5506 'RECOVERABLE_FLAG : '|| tax_dist_rec.recoverable_flag ||', '||
5507 'RECOVERY_TYPE_CODE : '|| tax_dist_rec.recovery_type_code ||', '||
5508 'REC_TYPE_RULE_FLAG : '|| tax_dist_rec.rec_type_rule_flag ||', '||
5509 'REC_RATE_DET_RULE_FLAG : '|| tax_dist_rec.rec_rate_det_rule_flag ||', '||
5510 'DEF_REC_SETTLEMENT_OPTION_CODE : '|| tax_dist_rec.def_rec_settlement_option_code ||', '||
5511 'ACCOUNT_SOURCE_TAX_RATE_ID : '|| TO_CHAR(tax_dist_rec.account_source_tax_rate_id)
5512 );
5513 END IF;
5514
5515 l_rec_nrec_tax_dist_number := l_rec_nrec_tax_dist_number + 1;
5516 p_rnd_end_index := p_rnd_end_index + 1;
5517
5518 p_rec_nrec_dist_tbl(p_rnd_end_index).recoverable_flag :=
5519 tax_dist_rec.recoverable_flag;
5520 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_type_code :=
5521 tax_dist_rec.recovery_type_code;
5522 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_type_rule_flag :=
5523 tax_dist_rec.rec_type_rule_flag;
5524 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_rate_det_rule_flag:=
5525 tax_dist_rec.rec_rate_det_rule_flag;
5526 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_rate_id :=
5527 tax_dist_rec.recovery_rate_id;
5528 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_rate_code :=
5529 tax_dist_rec.recovery_rate_code;
5530 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_rate :=
5531 tax_dist_rec.rec_nrec_rate;
5532 p_rec_nrec_dist_tbl(p_rnd_end_index).adjusted_doc_tax_dist_id :=
5533 tax_dist_rec.rec_nrec_tax_dist_id;
5534 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_tax_dist_number :=
5535 l_rec_nrec_tax_dist_number;
5536 p_rec_nrec_dist_tbl(p_rnd_end_index).def_rec_settlement_option_code :=
5537 tax_dist_rec.def_rec_settlement_option_code;
5538 p_rec_nrec_dist_tbl(p_rnd_end_index).account_source_tax_rate_id :=
5539 tax_dist_rec.account_source_tax_rate_id;
5540
5541 END LOOP;
5542
5543 IF (g_level_procedure >= g_current_runtime_level ) THEN
5544
5545 FND_LOG.STRING(g_level_procedure,
5546 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_adjusted.END',
5547 'ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_adjusted(-)'||p_return_status);
5548 END IF;
5549
5550 EXCEPTION
5551 WHEN OTHERS THEN
5552 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5553 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5554
5555 IF (g_level_unexpected >= g_current_runtime_level ) THEN
5556 FND_LOG.STRING(g_level_unexpected,
5557 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_adjusted',
5558 p_error_buffer);
5559 FND_LOG.STRING(g_level_unexpected,
5560 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_adjusted.END',
5561 'ZX_TRD_INTERNAL_SERVICES_PVT.get_recovery_from_adjusted(-)');
5562 END IF;
5563
5564 END get_recovery_from_adjusted;
5565
5566 PROCEDURE enforce_recovery_from_ref(
5567 p_detail_tax_line_tbl IN ZX_TRD_SERVICES_PUB_PKG.TAX_LINE_TBL_TYPE,
5568 p_tax_line_index IN NUMBER,
5569 p_trx_line_dist_index IN NUMBER,
5570 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
5571 p_rnd_begin_index IN NUMBER,
5572 p_rnd_end_index OUT NOCOPY NUMBER,
5573 p_return_status OUT NOCOPY VARCHAR2,
5574 p_error_buffer OUT NOCOPY VARCHAR2) IS
5575
5576 CURSOR get_tax_dists_csr IS
5577 SELECT recoverable_flag,
5578 recovery_type_code,
5579 rec_type_rule_flag,
5580 rec_rate_det_rule_flag,
5581 recovery_rate_code,
5582 rec_nrec_tax_dist_id,
5583 rec_nrec_rate,
5584 orig_rec_nrec_rate,
5585 rec_rate_result_id,
5586 recovery_rate_id
5587 FROM zx_rec_nrec_dist
5588 WHERE application_id =
5589 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_application_id(
5590 p_trx_line_dist_index)
5591 AND entity_code =
5592 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_entity_code(
5593 p_trx_line_dist_index)
5594 AND event_class_code =
5595 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_event_class_code(
5596 p_trx_line_dist_index)
5597 AND trx_id =
5598 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_trx_id(
5599 p_trx_line_dist_index)
5600 AND trx_line_id =
5601 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_line_id(
5602 p_trx_line_dist_index)
5603 AND trx_level_type =
5604 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_trx_level_type(
5605 p_trx_line_dist_index)
5606 AND trx_line_dist_id =
5607 ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.ref_doc_dist_id(
5608 p_trx_line_dist_index)
5609 AND tax = p_detail_tax_line_tbl(p_tax_line_index).tax
5610 AND tax_regime_code = p_detail_tax_line_tbl(p_tax_line_index).tax_regime_code
5611 AND NVL(reverse_flag, 'N') <> 'Y'
5612 ORDER BY rec_nrec_tax_dist_id, recoverable_flag;
5613
5614 -- Added the cursor for Bug#14038095 --
5615 CURSOR get_tax_recovery_info_cur(c_tax_id ZX_TAXES_B.tax_id%TYPE) IS
5616 SELECT allow_recoverability_flag,
5617 primary_recovery_type_code,
5618 primary_rec_type_rule_flag,
5619 secondary_recovery_type_code,
5620 secondary_rec_type_rule_flag,
5621 primary_rec_rate_det_rule_flag,
5622 sec_rec_rate_det_rule_flag,
5623 def_primary_rec_rate_code,
5624 def_secondary_rec_rate_code,
5625 effective_from,
5626 effective_to,
5627 def_rec_settlement_option_code,
5628 tax_account_source_tax
5629 FROM ZX_TAXES_B
5630 WHERE tax_id = c_tax_id;
5631
5632 CURSOR get_maximum_tax_dist_num_csr is
5633 SELECT max(rec_nrec_tax_dist_number)
5634 FROM zx_rec_nrec_dist
5635 WHERE tax_line_id = p_detail_tax_line_tbl(p_tax_line_index).tax_line_id
5636 AND trx_line_dist_id = ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_tbl.trx_line_dist_id(p_trx_line_dist_index);
5637
5638 l_rec_nrec_tax_dist_number NUMBER;
5639 l_po_dist_count NUMBER;
5640 l_rnd_begin_index NUMBER;
5641 l_max_tax_dist_number NUMBER;
5642
5643 -- Added these variables for Bug#14038095 --
5644 l_tax ZX_TAXES_B.tax%TYPE;
5645 l_tax_id NUMBER;
5646 l_tax_regime_code ZX_STATUS_B.tax_regime_code%TYPE;
5647
5648 BEGIN
5649
5650 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5651 IF (g_level_procedure >= g_current_runtime_level ) THEN
5652 FND_LOG.STRING(g_level_procedure,
5653 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref.BEGIN',
5654 'ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref(+)');
5655 END IF;
5656
5657 p_return_status := FND_API.G_RET_STS_SUCCESS;
5658
5659 p_rnd_end_index := p_rnd_begin_index -1;
5660
5661 IF (g_level_procedure >= g_current_runtime_level ) THEN
5662 FND_LOG.STRING(g_level_procedure,
5663 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5664 'Begin Index : '||TO_CHAR(p_rnd_begin_index)||', End Index : '||TO_CHAR(p_rnd_end_index));
5665 END IF;
5666
5667 OPEN get_maximum_tax_dist_num_csr;
5668 FETCH get_maximum_tax_dist_num_csr INTO l_max_tax_dist_number;
5669 CLOSE get_maximum_tax_dist_num_csr;
5670
5671 l_max_tax_dist_number := NVL(l_max_tax_dist_number, 0);
5672
5673 l_rec_nrec_tax_dist_number:= l_max_tax_dist_number;
5674
5675 -- Start : Code Changes for Bug#14038095 --
5676 -- Do not populate plsql structure for tax distributions --
5677 -- with recoverable tax distribution info from PO if the --
5678 -- Allow tax recoverability is No at the Tax setup level --
5679 l_tax_id := p_detail_tax_line_tbl(p_tax_line_index).tax_id;
5680 l_tax := p_detail_tax_line_tbl(p_tax_line_index).tax;
5681 l_tax_regime_code := p_detail_tax_line_tbl(p_tax_line_index).tax_regime_code;
5682
5683 ZX_TDS_UTILITIES_PKG.populate_tax_cache (
5684 p_tax_id => l_tax_id,
5685 p_return_status => p_return_status,
5686 p_error_buffer => p_error_buffer);
5687
5688 IF NOT g_tax_recovery_info_tbl.EXISTS(l_tax_id) THEN
5689
5690 OPEN get_tax_recovery_info_cur(l_tax_id);
5691 FETCH get_tax_recovery_info_cur INTO
5692 g_tax_recovery_info_tbl(l_tax_id).allow_recoverability_flag,
5693 g_tax_recovery_info_tbl(l_tax_id).primary_recovery_type_code,
5694 g_tax_recovery_info_tbl(l_tax_id).primary_rec_type_rule_flag,
5695 g_tax_recovery_info_tbl(l_tax_id).secondary_recovery_type_code,
5696 g_tax_recovery_info_tbl(l_tax_id).secondary_rec_type_rule_flag,
5697 g_tax_recovery_info_tbl(l_tax_id).primary_rec_rate_det_rule_flag,
5698 g_tax_recovery_info_tbl(l_tax_id).sec_rec_rate_det_rule_flag,
5699 g_tax_recovery_info_tbl(l_tax_id).def_primary_rec_rate_code,
5700 g_tax_recovery_info_tbl(l_tax_id).def_secondary_rec_rate_code,
5701 g_tax_recovery_info_tbl(l_tax_id).effective_from,
5702 g_tax_recovery_info_tbl(l_tax_id).effective_to,
5703 g_tax_recovery_info_tbl(l_tax_id).def_rec_settlement_option_code,
5704 g_tax_recovery_info_tbl(l_tax_id).tax_account_source_tax;
5705
5706 IF get_tax_recovery_info_cur%NOTFOUND THEN
5707 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5708 IF (g_level_procedure >= g_current_runtime_level ) THEN
5709 FND_LOG.STRING(g_level_procedure,
5710 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref.END',
5711 'ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref(-)'||'error: can not find tax info for ' || l_tax_id);
5712 END IF;
5713 CLOSE get_tax_recovery_info_cur;
5714 RETURN;
5715 END IF;
5716
5717 CLOSE get_tax_recovery_info_cur;
5718
5719 g_tax_recovery_info_tbl(l_tax_id).tax_regime_code := l_tax_regime_code;
5720 g_tax_recovery_info_tbl(l_tax_id).tax := l_tax;
5721 g_tax_recovery_info_tbl(l_tax_id).tax_id := l_tax_id;
5722
5723 END IF;
5724
5725 IF (g_level_statement >= g_current_runtime_level ) THEN
5726 FND_LOG.STRING(g_level_statement,
5727 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5728 'Allow Tax Recoverability for Tax '||l_tax||' is '||
5729 NVL(g_tax_recovery_info_tbl(l_tax_id).allow_recoverability_flag,'N'));
5730 END IF;
5731 -- End : Code Changes for Bug#14038095 --
5732
5733 l_rnd_begin_index := p_rnd_end_index;
5734 l_po_dist_count := p_rnd_end_index;
5735
5736
5737 FOR tax_dist_rec in get_tax_dists_csr LOOP
5738
5739 -- Start : Code Changes for Bug#14038095 --
5740 --
5741 -- Do not populate plsql structure for tax distributions --
5742 -- with recoverable tax distribution info from PO if the --
5743 -- Allow tax recoverability is No at the Tax setup level --
5744 --
5745 IF NVL(g_tax_recovery_info_tbl(l_tax_id).allow_recoverability_flag,'N') = 'N' THEN
5746 --
5747 -- Populate only Non-Recoverable tax distribution from PO
5748 --
5749 IF NVL(tax_dist_rec.recoverable_flag,'N') = 'Y' THEN
5750 IF (g_level_statement >= g_current_runtime_level ) THEN
5751 FND_LOG.STRING(g_level_statement,
5752 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5753 'Do not copy the recoverable tax distribution from PO');
5754 END IF;
5755 NULL;
5756
5757 ELSE
5758 l_rec_nrec_tax_dist_number := l_rec_nrec_tax_dist_number + 1;
5759 p_rnd_end_index := p_rnd_end_index + 1;
5760
5761 IF (g_level_statement >= g_current_runtime_level ) THEN
5762 FND_LOG.STRING(g_level_statement,
5763 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5764 'Copy only the non-recoverable tax distribution from PO at index '||
5765 TO_CHAR(p_rnd_end_index));
5766 END IF;
5767
5768 p_rec_nrec_dist_tbl(p_rnd_end_index).recoverable_flag :=
5769 tax_dist_rec.recoverable_flag;
5770 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_type_code :=
5771 tax_dist_rec.recovery_type_code;
5772 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_type_rule_flag :=
5773 tax_dist_rec.rec_type_rule_flag;
5774 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_rate_det_rule_flag :=
5775 tax_dist_rec.rec_rate_det_rule_flag;
5776 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_rate_code :=
5777 tax_dist_rec.recovery_rate_code;
5778 p_rec_nrec_dist_tbl(p_rnd_end_index).ref_doc_tax_dist_id :=
5779 tax_dist_rec.rec_nrec_tax_dist_id;
5780 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_tax_dist_number:=
5781 l_rec_nrec_tax_dist_number;
5782 -- bug 5386805: populate rec_rate_result_id from ref_document
5783 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_rate_result_id :=
5784 tax_dist_rec.rec_rate_result_id;
5785 END IF;
5786 -- End : Code Changes for Bug#14038095 --
5787 ELSE
5788 --
5789 -- populate the both Recoverable and Non-Recoverable tax distributions
5790 --
5791 l_rec_nrec_tax_dist_number := l_rec_nrec_tax_dist_number + 1;
5792 p_rnd_end_index := p_rnd_end_index + 1;
5793
5794 IF (g_level_statement >= g_current_runtime_level ) THEN
5795 FND_LOG.STRING(g_level_statement,
5796 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5797 'Copy tax distribution from PO at index '||
5798 TO_CHAR(p_rnd_end_index));
5799 END IF;
5800
5801 p_rec_nrec_dist_tbl(p_rnd_end_index).recoverable_flag :=
5802 tax_dist_rec.recoverable_flag;
5803 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_type_code :=
5804 tax_dist_rec.recovery_type_code;
5805 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_type_rule_flag :=
5806 tax_dist_rec.rec_type_rule_flag;
5807 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_rate_det_rule_flag :=
5808 tax_dist_rec.rec_rate_det_rule_flag;
5809 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_rate_code :=
5810 tax_dist_rec.recovery_rate_code;
5811 p_rec_nrec_dist_tbl(p_rnd_end_index).ref_doc_tax_dist_id :=
5812 tax_dist_rec.rec_nrec_tax_dist_id;
5813 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_tax_dist_number:=
5814 l_rec_nrec_tax_dist_number;
5815 -- bug 5386805: populate rec_rate_result_id from ref_document
5816 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_rate_result_id :=
5817 tax_dist_rec.rec_rate_result_id;
5818 END IF;
5819
5820 IF l_po_dist_count <> p_rnd_end_index THEN -- Added this IF condition for Bug#14038095 --
5821 -- This means that new tax distribution record is added to plsql structure --
5822 --
5823 IF (g_level_statement >= g_current_runtime_level ) THEN
5824 FND_LOG.STRING(g_level_statement,
5825 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5826 'Index : '||TO_CHAR(p_rnd_end_index) ||
5827 ', Ref_Doc_Tax_Dist_Id : '||TO_CHAR(tax_dist_rec.rec_nrec_tax_dist_id) ||
5828 ', Recoverable_Flag : '||tax_dist_rec.recoverable_flag ||
5829 ', Rec_Nrec_Rate : '||TO_CHAR(tax_dist_rec.rec_nrec_rate) ||
5830 ', Recovery_Rate_Code : '||tax_dist_rec.recovery_rate_code ||
5831 ', Recovery_Rate_Id : '||TO_CHAR(tax_dist_rec.recovery_rate_id));
5832 END IF;
5833
5834 -- Bug 12870975 : Added code to Copy the rec_nrec_rate and recovery_rate_id
5835 -- from PO in case of Zero Amount reference tax line for recoverable tax dist
5836 --
5837 IF (p_detail_tax_line_tbl(p_tax_line_index).other_doc_source = 'REFERENCE' AND
5838 p_detail_tax_line_tbl(p_tax_line_index).unrounded_tax_amt = 0 AND
5839 p_detail_tax_line_tbl(p_tax_line_index).unrounded_taxable_amt = 0 AND
5840 p_detail_tax_line_tbl(p_tax_line_index).manually_entered_flag = 'Y' AND
5841 p_detail_tax_line_tbl(p_tax_line_index).freeze_until_overridden_flag ='Y')
5842 AND
5843 NVL(p_rec_nrec_dist_tbl(p_rnd_end_index).recoverable_flag,'N') = 'Y'
5844 THEN
5845 IF (g_level_statement >= g_current_runtime_level ) THEN
5846 FND_LOG.STRING(g_level_statement,
5847 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5848 'Copy Rec_Nrec_Rate and Recovery_Rate_Id from PO for recoverable '||
5849 'tax distribution of zero amount reference tax line');
5850 END IF;
5851
5852 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_rate :=
5853 tax_dist_rec.rec_nrec_rate;
5854 p_rec_nrec_dist_tbl(p_rnd_end_index).recovery_rate_id :=
5855 tax_dist_rec.recovery_rate_id;
5856 END IF;
5857
5858 -- bug 4012677: If user had overridden recovery rate %, the overridden
5859 -- rate % needs to be copied to invoice tax distributions
5860 --
5861 IF tax_dist_rec.orig_rec_nrec_rate IS NOT NULL THEN
5862 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_rate :=
5863 tax_dist_rec.rec_nrec_rate;
5864
5865 IF (g_level_statement >= g_current_runtime_level ) THEN
5866 FND_LOG.STRING(g_level_statement,
5867 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5868 'User had overridden recovery rate on PO, so copy the PO '||
5869 'recovery rate % to invoice tax distributions.');
5870 END IF;
5871 END IF;
5872
5873 l_po_dist_count := p_rnd_end_index; -- Added for Bug#14038095 --
5874
5875 END IF; -- l_count <> p_rnd_end_index
5876 END LOOP;
5877
5878 -- bugfix: 5166933. some tax lines on invoice are not present on PO,
5879 -- need to det appliacble recovery types for those tax lines.
5880
5881 IF l_rnd_begin_index = p_rnd_end_index THEN
5882
5883 IF (g_level_statement >= g_current_runtime_level ) THEN
5884 FND_LOG.STRING(g_level_statement,
5885 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5886 'Can not find tax distribution on PO, have to call the ' ||
5887 'normal det_appl_rec_type() to determine recovery type.');
5888 END IF;
5889
5890 det_appl_rec_type(
5891 p_detail_tax_line_tbl,
5892 p_tax_line_index,
5893 p_trx_line_dist_index,
5894 p_rec_nrec_dist_tbl,
5895 p_rnd_begin_index,
5896 p_rnd_end_index,
5897 p_return_status,
5898 p_error_buffer);
5899
5900 IF NVL(p_return_status,FND_API.G_RET_STS_ERROR)<>FND_API.G_RET_STS_SUCCESS
5901 THEN
5902 IF (g_level_error >= g_current_runtime_level ) THEN
5903 FND_LOG.STRING(g_level_error,
5904 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5905 'Incorrect return_status after calling ' ||
5906 'ZX_TDS_UTILITIES_PKG.det_appl_rec_type()');
5907 FND_LOG.STRING(g_level_error,
5908 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5909 'RETURN_STATUS = ' || p_return_status);
5910 FND_LOG.STRING(g_level_error,
5911 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref.END',
5912 'ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref(-)');
5913 END IF;
5914 RETURN;
5915 END IF;
5916 END IF;
5917
5918 IF (g_level_procedure >= g_current_runtime_level) THEN
5919 FND_LOG.STRING(g_level_procedure,
5920 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5921 'Begin Index : '||TO_CHAR(p_rnd_begin_index)||', End Index : '||TO_CHAR(p_rnd_end_index));
5922 FND_LOG.STRING(g_level_procedure,
5923 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref.END',
5924 'ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref(-)'||p_return_status);
5925 END IF;
5926
5927 EXCEPTION
5928 WHEN OTHERS THEN
5929 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5930 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5931
5932 IF (g_level_unexpected >= g_current_runtime_level ) THEN
5933 FND_LOG.STRING(g_level_unexpected,
5934 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref',
5935 p_error_buffer);
5936 FND_LOG.STRING(g_level_unexpected,
5937 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref.END',
5938 'ZX_TRD_INTERNAL_SERVICES_PVT.enforce_recovery_from_ref(-)');
5939 END IF;
5940
5941 END enforce_recovery_from_ref;
5942
5943 PROCEDURE round_and_adjust_prd_tax_amts (
5944 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
5945 p_rnd_begin_index IN NUMBER,
5946 p_rnd_end_index IN NUMBER,
5947 p_return_status OUT NOCOPY VARCHAR2,
5948 p_error_buffer OUT NOCOPY VARCHAR2) IS
5949
5950 l_rec_tax_index NUMBER :=NULL;
5951 l_nrec_tax_index NUMBER :=NULL;
5952
5953 l_rec_amt_largest NUMBER := 0;
5954 l_nrec_amt_largest NUMBER := 0;
5955 l_rec_amt_tax_curr_largest NUMBER := 0;
5956 l_nrec_amt_tax_curr_largest NUMBER := 0;
5957 l_rec_amt_funcl_curr_largest NUMBER := 0;
5958 l_nrec_amt_funcl_curr_largest NUMBER := 0;
5959
5960 l_total_prd_tax_amt NUMBER := 0;
5961 l_total_prd_tax_amt_tax_curr NUMBER := 0;
5962 l_total_prd_tax_amt_funcl_curr NUMBER := 0;
5963
5964 l_prd_tax_rnd_diff NUMBER;
5965 l_prd_tax_rnd_diff_tax_curr NUMBER;
5966 l_prd_tax_rnd_diff_funcl_curr NUMBER;
5967
5968 l_min_acct_unit_tax_curr zx_taxes_b.minimum_accountable_unit%TYPE;
5969 l_precision_tax_curr zx_taxes_b.tax_precision%TYPE;
5970 l_min_acct_unit_funcl_curr zx_taxes_b.minimum_accountable_unit%TYPE;
5971 l_precision_funcl_curr zx_taxes_b.tax_precision%TYPE;
5972 l_ledger_id gl_sets_of_books.set_of_books_id%TYPE;
5973
5974 l_error_buffer VARCHAR2(200);
5975 l_index NUMBER;
5976 l_tax_id zx_taxes_b.tax_id%TYPE;
5977
5978 BEGIN
5979
5980 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5981
5982 IF (g_level_procedure >= g_current_runtime_level ) THEN
5983 FND_LOG.STRING(g_level_procedure,
5984 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts.BEGIN',
5985 'ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts(+)');
5986 END IF;
5987
5988 p_return_status:= FND_API.G_RET_STS_SUCCESS;
5989
5990 IF p_rnd_begin_index IS NULL OR p_rnd_end_index IS NULL OR
5991 p_rnd_begin_index > p_rnd_end_index THEN
5992
5993 --p_return_status:= FND_API.G_RET_STS_ERROR;
5994 IF (g_level_error >= g_current_runtime_level ) THEN
5995 FND_LOG.STRING(g_level_error,
5996 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts ',
5997 'begin or end index is null, or begin index > end index');
5998 END IF;
5999 RETURN;
6000 END IF;
6001
6002 -- get minimum_accountable_unit and precision in functional currency
6003 --
6004 l_ledger_id := p_rec_nrec_dist_tbl(p_rnd_begin_index).ledger_id;
6005 IF p_rec_nrec_dist_tbl(p_rnd_begin_index).ledger_id IS NOT NULL THEN
6006 IF NOT ZX_TDS_UTILITIES_PKG.g_currency_rec_tbl.EXISTS(l_ledger_id) THEN
6007
6008 ZX_TDS_UTILITIES_PKG.populate_currency_cache (
6009 p_ledger_id => l_ledger_id,
6010 p_return_status => p_return_status,
6011 p_error_buffer => p_error_buffer);
6012
6013 IF NVL(p_return_status,FND_API.G_RET_STS_ERROR)<>FND_API.G_RET_STS_SUCCESS
6014 THEN
6015 IF (g_level_error >= g_current_runtime_level ) THEN
6016 FND_LOG.STRING(g_level_error,
6017 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts',
6018 'Incorrect return_status after calling ' ||
6019 'ZX_TDS_UTILITIES_PKG.populate_currency_cache()');
6020 FND_LOG.STRING(g_level_error,
6021 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts',
6022 'RETURN_STATUS = ' || p_return_status);
6023 FND_LOG.STRING(g_level_error,
6024 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts.END',
6025 'ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts(-)');
6026 END IF;
6027 RETURN;
6028 END IF;
6029 END IF;
6030
6031 l_min_acct_unit_funcl_curr := ZX_TDS_UTILITIES_PKG.g_currency_rec_tbl(
6032 l_ledger_id).minimum_accountable_unit;
6033 l_precision_funcl_curr := ZX_TDS_UTILITIES_PKG.g_currency_rec_tbl(
6034 l_ledger_id).precision;
6035 END IF;
6036
6037 FOR i IN p_rnd_begin_index .. p_rnd_end_index LOOP
6038 -- populate g_tax_rec_tbl if this tax_id has not been populated
6039 --
6040 l_tax_id := p_rec_nrec_dist_tbl(i).tax_id;
6041
6042 -- get l_min_acct_unit_tax_curr and l_precision_tax_curr from g_tax_rec_tbl
6043 --
6044 l_min_acct_unit_tax_curr :=
6045 ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).minimum_accountable_unit;
6046 l_precision_tax_curr :=
6047 ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(l_tax_id).tax_precision;
6048
6049 -- round prd_tax_amt
6050 --
6051 p_rec_nrec_dist_tbl(i).prd_tax_amt :=
6052 ZX_TDS_TAX_ROUNDING_PKG.round_tax(
6053 p_rec_nrec_dist_tbl(i).prd_tax_amt,
6054 p_rec_nrec_dist_tbl(i).Rounding_Rule_Code,
6055 p_rec_nrec_dist_tbl(i).minimum_accountable_unit,
6056 p_rec_nrec_dist_tbl(i).precision,
6057 p_return_status,
6058 p_error_buffer);
6059
6060 -- round prd_tax_amt_tax_curr
6061 --
6062 p_rec_nrec_dist_tbl(i).prd_tax_amt_tax_curr :=
6063 ZX_TDS_TAX_ROUNDING_PKG.round_tax(
6064 p_rec_nrec_dist_tbl(i).prd_tax_amt_tax_curr,
6065 p_rec_nrec_dist_tbl(i).Rounding_Rule_Code,
6066 l_min_acct_unit_tax_curr,
6067 l_precision_tax_curr,
6068 p_return_status,
6069 p_error_buffer);
6070
6071 IF NVL(p_return_status, FND_API.G_RET_STS_ERROR) <> FND_API.G_RET_STS_SUCCESS
6072 THEN
6073 IF (g_level_error >= g_current_runtime_level ) THEN
6074 FND_LOG.STRING(g_level_error,
6075 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts ',
6076 'Incorrect return_status after calling ' ||
6077 'ZX_TDS_TAX_ROUNDING_PKG.round_tax()');
6078 FND_LOG.STRING(g_level_error,
6079 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts ',
6080 'RETURN_STATUS = ' || p_return_status);
6081 FND_LOG.STRING(g_level_error,
6082 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts.END',
6083 'ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts (-)');
6084 END IF;
6085 RETURN;
6086 END IF;
6087
6088 -- round prd_tax_amt_funcl_curr
6089 --
6090 IF p_rec_nrec_dist_tbl(i).prd_tax_amt_funcl_curr IS NOT NULL THEN
6091 p_rec_nrec_dist_tbl(i).prd_tax_amt_funcl_curr :=
6092 round( p_rec_nrec_dist_tbl(i).prd_tax_amt_funcl_curr/
6093 l_min_acct_unit_funcl_curr) * l_min_acct_unit_funcl_curr;
6094 END IF;
6095
6096 -- Accumulate prd_tax_amt, prd_tax_amt_tax_curr, prd_tax_amt_funcl_curr
6097 --
6098 l_total_prd_tax_amt := l_total_prd_tax_amt +
6099 p_rec_nrec_dist_tbl(i).prd_tax_amt;
6100 l_total_prd_tax_amt_tax_curr := l_total_prd_tax_amt_tax_curr +
6101 p_rec_nrec_dist_tbl(i).prd_tax_amt_tax_curr;
6102 l_total_prd_tax_amt_funcl_curr := l_total_prd_tax_amt_funcl_curr +
6103 p_rec_nrec_dist_tbl(i).prd_tax_amt_funcl_curr;
6104
6105 IF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'N' THEN
6106 -- Record the largest prd_tax_amt, prd_tax_amt_tax_curr,
6107 -- prd_tax_amt_funcl_curr of non-recoverable tax dists
6108 --
6109 IF ABS(p_rec_nrec_dist_tbl(i).prd_tax_amt) >= ABS(l_nrec_amt_largest) THEN
6110 l_nrec_tax_index := i;
6111 l_nrec_amt_largest := p_rec_nrec_dist_tbl(i).prd_tax_amt;
6112 END IF;
6113
6114 ELSIF NVL(p_rec_nrec_dist_tbl(i).recoverable_flag, 'N') = 'Y' THEN
6115
6116 -- Record the largest prd_tax_amt, prd_tax_amt_tax_curr,
6117 -- prd_tax_amt_funcl_curr of non-zero recoverable tax dists
6118 --
6119 IF ABS(p_rec_nrec_dist_tbl(i).prd_tax_amt) >= ABS(l_rec_amt_largest) THEN
6120 l_rec_tax_index := i;
6121 l_rec_amt_largest := p_rec_nrec_dist_tbl(i).prd_tax_amt;
6122 END IF;
6123 END IF; -- recoverable_flag
6124 END LOOP;
6125
6126 l_prd_tax_rnd_diff :=
6127 p_rec_nrec_dist_tbl(p_rnd_begin_index).prd_total_tax_amt-l_total_prd_tax_amt;
6128
6129 IF l_prd_tax_rnd_diff < 0 THEN
6130
6131 -- Adjust rounding difference to the largest recoverable tax dists first.
6132 -- If there is no recoverable tax dists, adjust rounding
6133 -- difference to the largest nonrecoverable tax dists.
6134 --
6135 IF l_rec_tax_index IS NOT NULL THEN
6136
6137 p_rec_nrec_dist_tbl(l_rec_tax_index).prd_tax_amt :=
6138 p_rec_nrec_dist_tbl(l_rec_tax_index).prd_tax_amt + l_prd_tax_rnd_diff;
6139
6140 ELSIF l_nrec_tax_index IS NOT NULL THEN
6141
6142 p_rec_nrec_dist_tbl(l_nrec_tax_index).prd_tax_amt :=
6143 p_rec_nrec_dist_tbl(l_nrec_tax_index).prd_tax_amt + l_prd_tax_rnd_diff;
6144
6145 END IF;
6146
6147 ELSIF l_prd_tax_rnd_diff > 0 THEN
6148
6149 -- Adjust rounding_diff to the largest nonrecoverable tax dists first.
6150 -- if there is no nonrecoverable tax dists, adjust rounding_diff to the
6151 -- largest recoverable tax dists.
6152 --
6153 IF l_nrec_tax_index IS NOT NULL THEN
6154
6155 p_rec_nrec_dist_tbl(l_nrec_tax_index).prd_tax_amt :=
6156 p_rec_nrec_dist_tbl(l_nrec_tax_index).prd_tax_amt + l_prd_tax_rnd_diff;
6157
6158 ELSIF l_rec_tax_index IS NOT NULL THEN
6159
6160 p_rec_nrec_dist_tbl(l_rec_tax_index).prd_tax_amt :=
6161 p_rec_nrec_dist_tbl(l_rec_tax_index).prd_tax_amt + l_prd_tax_rnd_diff;
6162
6163 END IF;
6164 END IF; -- l_prd_tax_rnd_diff <> 0
6165
6166 l_prd_tax_rnd_diff_tax_curr :=
6167 p_rec_nrec_dist_tbl(p_rnd_begin_index).prd_total_tax_amt_tax_curr -
6168 l_total_prd_tax_amt_tax_curr;
6169 IF l_prd_tax_rnd_diff_tax_curr < 0 THEN
6170
6171 -- Adjust rounding_diff to the largest recoverable tax dists first.
6172 -- If there is no recoverable tax dists, adjust rounding_diff to the largest
6173 -- nonrecoverable tax dists.
6174 --
6175 IF l_rec_tax_index IS NOT NULL THEN
6176
6177 p_rec_nrec_dist_tbl(l_rec_tax_index).prd_tax_amt_tax_curr :=
6178 p_rec_nrec_dist_tbl(l_rec_tax_index).prd_tax_amt_tax_curr +
6179 l_prd_tax_rnd_diff_tax_curr;
6180 ELSIF l_nrec_tax_index IS NOT NULL THEN
6181
6182 p_rec_nrec_dist_tbl(l_nrec_tax_index).prd_tax_amt :=
6183 p_rec_nrec_dist_tbl(l_nrec_tax_index).prd_tax_amt +
6184 l_prd_tax_rnd_diff_tax_curr;
6185 END IF;
6186
6187 ELSIF l_prd_tax_rnd_diff_tax_curr > 0 THEN
6188
6189 -- Adjust rounding_diff to the largest nonrecoverable tax dists first.
6190 -- if there is no nonrecoverable tax dists, adjust rounding_diff to the
6191 -- largest recoverable tax dists.
6192 --
6193 IF l_nrec_tax_index IS NOT NULL THEN
6194
6195 p_rec_nrec_dist_tbl(l_nrec_tax_index).prd_tax_amt_tax_curr :=
6196 p_rec_nrec_dist_tbl(l_nrec_tax_index).prd_tax_amt_tax_curr +
6197 l_prd_tax_rnd_diff_tax_curr;
6198 ELSIF l_rec_tax_index IS NOT NULL THEN
6199
6200 p_rec_nrec_dist_tbl(l_rec_tax_index).prd_tax_amt_tax_curr :=
6201 p_rec_nrec_dist_tbl(l_rec_tax_index).prd_tax_amt_tax_curr +
6202 l_prd_tax_rnd_diff_tax_curr;
6203 END IF;
6204 END IF; -- l_prd_tax_rnd_diff_tax_curr <> 0
6205
6206 -- Functional currency
6207 --
6208 IF p_rec_nrec_dist_tbl(p_rnd_begin_index).prd_total_tax_amt_funcl_curr
6209 IS NOT NULL THEN
6210 l_prd_tax_rnd_diff_funcl_curr :=
6211 p_rec_nrec_dist_tbl(p_rnd_begin_index).prd_total_tax_amt_funcl_curr -
6212 l_total_prd_tax_amt_funcl_curr;
6213
6214 IF l_prd_tax_rnd_diff_funcl_curr < 0 THEN
6215 -- Adjust rounding_diff to the largest recoverable tax dists first.
6216 -- If there is no recoverable tax dists, adjust rounding_diff to
6217 -- the largest nonrecoverable tax dists.
6218 --
6219 IF l_rec_tax_index IS NOT NULL THEN
6220
6221 p_rec_nrec_dist_tbl(l_rec_tax_index).prd_tax_amt_funcl_curr :=
6222 p_rec_nrec_dist_tbl(l_rec_tax_index).prd_tax_amt_funcl_curr +
6223 l_prd_tax_rnd_diff_funcl_curr;
6224
6225 ELSIF l_nrec_tax_index IS NOT NULL THEN
6226
6227 p_rec_nrec_dist_tbl(l_nrec_tax_index).prd_tax_amt_funcl_curr :=
6228 p_rec_nrec_dist_tbl(l_nrec_tax_index).prd_tax_amt_funcl_curr +
6229 l_prd_tax_rnd_diff_funcl_curr;
6230 END IF;
6231
6232 ELSIF l_prd_tax_rnd_diff_funcl_curr > 0 THEN
6233
6234 -- Adjust rounding_diff to the largest nonrecoverable tax dists first.
6235 -- if there is no nonrecoverable tax dists, adjust rounding_diff to
6236 -- the largest recoverable tax dists.
6237 --
6238 IF l_nrec_tax_index IS NOT NULL THEN
6239
6240 p_rec_nrec_dist_tbl(l_nrec_tax_index).prd_tax_amt_funcl_curr :=
6241 p_rec_nrec_dist_tbl(l_nrec_tax_index).prd_tax_amt_funcl_curr+
6242 l_prd_tax_rnd_diff_funcl_curr;
6243
6244 ELSIF l_rec_tax_index IS NOT NULL THEN
6245
6246 p_rec_nrec_dist_tbl(l_rec_tax_index).prd_tax_amt_funcl_curr :=
6247 p_rec_nrec_dist_tbl(l_rec_tax_index).prd_tax_amt_funcl_curr+
6248 l_prd_tax_rnd_diff_funcl_curr;
6249 END IF;
6250 END IF; -- l_prd_tax_rnd_diff_funcl_curr <> 0
6251 END IF;
6252
6253 IF (g_level_procedure >= g_current_runtime_level ) THEN
6254
6255 FND_LOG.STRING(g_level_procedure,
6256 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts.END',
6257 'ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts (-)'||p_return_status);
6258 END IF;
6259
6260 EXCEPTION
6261
6262 WHEN OTHERS THEN
6263 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6264 l_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6265
6266 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6267 FND_LOG.STRING(g_level_unexpected,
6268 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts',
6269 l_error_buffer);
6270 FND_LOG.STRING(g_level_unexpected,
6271 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts.END',
6272 'ZX_TRD_INTERNAL_SERVICES_PVT.round_and_adjust_prd_tax_amts (-)');
6273 END IF;
6274
6275 END round_and_adjust_prd_tax_amts;
6276
6277 PROCEDURE get_variance_related_columns(
6278 p_detail_tax_line_tbl IN ZX_TRD_SERVICES_PUB_PKG.TAX_LINE_TBL_TYPE,
6279 p_tax_line_index IN NUMBER,
6280 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.REC_NREC_DIST_TBL_TYPE,
6281 p_rnd_begin_index IN NUMBER,
6282 p_rnd_end_index IN NUMBER,
6283 p_return_status OUT NOCOPY VARCHAR2,
6284 p_error_buffer OUT NOCOPY VARCHAR2) IS
6285
6286 l_dist_id NUMBER;
6287
6288 BEGIN
6289 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6290 IF (g_level_procedure >= g_current_runtime_level ) THEN
6291 FND_LOG.STRING(g_level_procedure,
6292 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns.BEGIN',
6293 'ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns(+)');
6294 END IF;
6295
6296 p_return_status:= FND_API.G_RET_STS_SUCCESS;
6297
6298 IF p_rnd_begin_index IS NULL OR p_rnd_end_index IS NULL OR
6299 p_rnd_begin_index > p_rnd_end_index THEN
6300
6301 --p_return_status:= FND_API.G_RET_STS_ERROR;
6302 IF (g_level_statement >= g_current_runtime_level ) THEN
6303 FND_LOG.STRING(g_level_statement,
6304 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns',
6305 'begin or end index is null, or begin index > end index');
6306 END IF;
6307 RETURN;
6308 END IF;
6309
6310 -- Bug 3631551: Populate variance determining factors that products pass in.
6311 --
6312 FOR i IN p_rnd_begin_index .. p_rnd_end_index LOOP
6313
6314 IF p_rec_nrec_dist_tbl(i).ref_doc_application_id IS NOT NULL THEN
6315
6316 IF p_rec_nrec_dist_tbl(i).recoverable_flag = 'N' THEN
6317 IF (g_level_statement >= g_current_runtime_level ) THEN
6318 FND_LOG.STRING(g_level_statement,
6319 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns',
6320 'recoverable_flag is N ');
6321 END IF;
6322
6323
6324 l_dist_id := p_rec_nrec_dist_tbl(i).trx_line_dist_id;
6325
6326 -- bug 6709478
6327 IF NVL(p_rec_nrec_dist_tbl(i).reverse_flag, 'N') <> 'Y' AND
6328 NVL(p_rec_nrec_dist_tbl(i).freeze_flag, 'N') <> 'Y'
6329 THEN
6330 IF (g_level_statement >= g_current_runtime_level ) THEN
6331 FND_LOG.STRING(g_level_statement,
6332 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns',
6333 'Reverse flag and Freeze flag are not Y ');
6334 END IF;
6335
6336 p_rec_nrec_dist_tbl(i).trx_line_dist_qty :=
6337 ZX_TRD_SERVICES_PUB_PKG.g_tax_variance_info_tbl(
6338 l_dist_id).trx_line_dist_qty;
6339 END IF;
6340
6341 p_rec_nrec_dist_tbl(i).ref_doc_trx_line_dist_qty :=
6342 ZX_TRD_SERVICES_PUB_PKG.g_tax_variance_info_tbl(
6343 l_dist_id).ref_doc_trx_line_dist_qty;
6344 p_rec_nrec_dist_tbl(i).price_diff :=
6345 ZX_TRD_SERVICES_PUB_PKG.g_tax_variance_info_tbl(l_dist_id).price_diff;
6346
6347 p_rec_nrec_dist_tbl(i).qty_diff :=
6348 p_rec_nrec_dist_tbl(i).trx_line_dist_qty -
6349 p_rec_nrec_dist_tbl(i).ref_doc_trx_line_dist_qty;
6350 p_rec_nrec_dist_tbl(i).ref_doc_curr_conv_rate :=
6351 ZX_TRD_SERVICES_PUB_PKG.g_tax_variance_info_tbl(
6352 l_dist_id).ref_doc_curr_conv_rate;
6353 p_rec_nrec_dist_tbl(i).applied_to_doc_curr_conv_rate :=
6354 ZX_TRD_SERVICES_PUB_PKG.g_tax_variance_info_tbl(
6355 l_dist_id).applied_to_doc_curr_conv_rate;
6356
6357 -- set rate_tax_factor
6358 --
6359 IF p_detail_tax_line_tbl(p_tax_line_index).tax_rate_type = 'PERCENTAGE' THEN
6360 p_rec_nrec_dist_tbl(i).rate_tax_factor := 1;
6361 ELSE -- quantity based tax rate
6362 p_rec_nrec_dist_tbl(i).rate_tax_factor := 0;
6363 END IF;
6364 END IF; -- p_rec_nrec_dist_tbl(i).recoverable_flag = 'N'
6365 ELSE
6366 IF (g_level_statement >= g_current_runtime_level ) THEN
6367 FND_LOG.STRING(g_level_statement,
6368 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns',
6369 'Ref doc application id is null');
6370 END IF;
6371
6372 END IF; -- ref_doc_application_id is not null
6373 END LOOP; -- i IN p_rnd_begin_index .. p_rnd_end_index
6374
6375 IF (g_level_procedure >= g_current_runtime_level ) THEN
6376
6377 FND_LOG.STRING(g_level_procedure,
6378 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns.END',
6379 'ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns(-)'||p_return_status);
6380 END IF;
6381
6382 EXCEPTION
6383 WHEN OTHERS THEN
6384 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6385 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6386
6387 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6388 FND_LOG.STRING(g_level_unexpected,
6389 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns',
6390 p_error_buffer);
6391 FND_LOG.STRING(g_level_unexpected,
6392 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns.END',
6393 'ZX_TRD_INTERNAL_SERVICES_PVT.get_variance_related_columns(-)');
6394 END IF;
6395
6396 END get_variance_related_columns;
6397
6398 PROCEDURE calc_variance_factors(
6399 p_return_status OUT NOCOPY VARCHAR2,
6400 p_error_buffer OUT NOCOPY VARCHAR2) IS
6401
6402 BEGIN
6403
6404 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6405
6406 IF (g_level_procedure >= g_current_runtime_level ) THEN
6407 FND_LOG.STRING(g_level_procedure,
6408 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors.BEGIN',
6409 'ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors(+)');
6410 END IF;
6411
6412 p_return_status:= FND_API.G_RET_STS_SUCCESS;
6413
6414
6415 -- Bugfix 5035461: added recoverable_flag and reverse_flag condition in
6416 -- the subquery.
6417
6418 -- Bug 11675911 / Bug 10621602, formula changes for retainage release invoices and standard invoice
6419 -- with retainage line. g_ret_doc_type will be 'R' or 'S'. g_retained_value is the retained percent.
6420
6421 IF ZX_TRD_SERVICES_PUB_PKG.g_retained_value is NOT NULL THEN
6422
6423 IF (g_level_procedure >= g_current_runtime_level ) THEN
6424 FND_LOG.STRING(g_level_procedure,
6425 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors',
6426 'g_retained_value is not NULL - Retainage flow');
6427 END IF;
6428
6429 IF ZX_TRD_SERVICES_PUB_PKG.g_ret_doc_type is NOT NULL AND
6430 ZX_TRD_SERVICES_PUB_PKG.g_ret_doc_type = 'S' THEN
6431
6432 IF (g_level_procedure >= g_current_runtime_level ) THEN
6433 FND_LOG.STRING(g_level_procedure,
6434 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors',
6435 'Flow - Standard invoice with retainage line');
6436 END IF;
6437
6438 -- Bug 11808769,For PO matched invoices, where quantity, price is NULL from purchase order,stamp AMOUNT as value for variance columns
6439 -- ref_per_trx_curr_unit_nr_amt, ref_doc_per_unit_nrec_tax_amt
6440
6441 UPDATE zx_rec_nrec_dist_gt gt
6442 SET per_trx_curr_unit_nr_amt =
6443 -- Bugfix 5218651: for amount based matching, when dist qty is 0 or null, return rec_nrec_tax_amt as per unit nr amount
6444 DECODE(gt.trx_line_dist_qty*gt.unit_price,0, NVL(gt.unrounded_rec_nrec_tax_amt,gt.rec_nrec_tax_amt),
6445 NVL(gt.unrounded_rec_nrec_tax_amt,gt.rec_nrec_tax_amt)/(gt.trx_line_dist_qty * gt.unit_price * (1 - (ZX_TRD_SERVICES_PUB_PKG.g_retained_value/100)))),
6446 per_unit_nrec_tax_amt =
6447 DECODE(gt.trx_line_dist_qty, 0, NVL(gt.unrounded_rec_nrec_tax_amt,gt.rec_nrec_tax_amt),
6448 NVL(gt.unrounded_rec_nrec_tax_amt,gt.rec_nrec_tax_amt)/gt.trx_line_dist_qty),
6449 (ref_doc_tax_dist_id,
6450 ref_doc_unit_price,
6451 ref_per_trx_curr_unit_nr_amt,
6452 ref_doc_per_unit_nrec_tax_amt)=
6453 (SELECT
6454 rec_nrec_tax_dist_id,
6455 --Bug 9470313
6456 Nvl(unit_price,0),
6457 DECODE(gt.ref_doc_trx_line_dist_qty,
6458 NULL, DECODE(Nvl(dist.unit_price,0), 0, NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt)/dist.trx_line_dist_amt, NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt)/dist.unit_price),
6459 DECODE(gt.ref_doc_trx_line_dist_qty*dist.unit_price, 0, NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt),
6460 NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt)/(gt.ref_doc_trx_line_dist_qty*dist.unit_price))),
6461 DECODE(Nvl(gt.ref_doc_trx_line_dist_qty,0), 0, NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt)/dist.trx_line_dist_amt,
6462 NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt)/gt.ref_doc_trx_line_dist_qty)
6463 FROM zx_rec_nrec_dist dist
6464 WHERE dist.application_id = gt.ref_doc_application_id
6465 AND dist.entity_code = gt.ref_doc_entity_code
6466 AND dist.event_class_code = gt.ref_doc_event_class_code
6467 AND dist.trx_id = gt.ref_doc_trx_id
6468 AND dist.trx_line_id = gt.ref_doc_line_id
6469 AND dist.trx_level_type = gt.ref_doc_trx_level_type
6470 AND (dist.trx_line_dist_id = gt.ref_doc_dist_id OR
6471 gt.tax_only_line_flag = 'Y')
6472 AND dist.tax_regime_code = gt.tax_regime_code
6473 AND dist.tax = gt.tax
6474 AND dist.recoverable_flag = 'N'
6475 AND NVL(dist.reverse_flag,'N') = 'N'
6476 AND dist.mrc_tax_dist_flag = 'N'
6477 )
6478 WHERE ref_doc_application_id IS NOT NULL
6479 AND recoverable_flag = 'N'
6480 AND NVL(reverse_flag,'N')='N'
6481 AND mrc_tax_dist_flag = 'N';
6482
6483 -- update ref_doc_unit_price if it is null (PO has no tax)
6484 --
6485 UPDATE zx_rec_nrec_dist_gt gt
6486 SET ref_doc_unit_price =
6487 (SELECT unit_price
6488 FROM zx_lines_det_factors line
6489 WHERE line.application_id = gt.ref_doc_application_id
6490 AND line.entity_code = gt.ref_doc_entity_code
6491 AND line.event_class_code = gt.ref_doc_event_class_code
6492 AND line.trx_id = gt.ref_doc_trx_id
6493 AND line.trx_line_id = gt.ref_doc_line_id
6494 AND line.trx_level_type = gt.ref_doc_trx_level_type
6495 ),
6496 ref_per_trx_curr_unit_nr_amt = 0,
6497 ref_doc_per_unit_nrec_tax_amt = 0
6498 WHERE ref_doc_application_id IS NOT NULL
6499 AND recoverable_flag = 'N'
6500 AND NVL(reverse_flag,'N')='N'
6501 AND mrc_tax_dist_flag = 'N'
6502 AND ref_doc_tax_dist_id IS NULL;
6503
6504 END IF; -- g_ret_doc_type 'S'
6505
6506 IF ZX_TRD_SERVICES_PUB_PKG.g_ret_doc_type is NOT NULL AND
6507 ZX_TRD_SERVICES_PUB_PKG.g_ret_doc_type = 'R' THEN
6508
6509 IF (g_level_procedure >= g_current_runtime_level ) THEN
6510 FND_LOG.STRING(g_level_procedure,
6511 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors',
6512 'Flow - retainage release invoice');
6513 END IF;
6514
6515 UPDATE zx_rec_nrec_dist_gt gt
6516 SET per_trx_curr_unit_nr_amt =
6517 -- Bugfix 5218651: for amount based matching, when dist qty is 0 or null, return rec_nrec_tax_amt as per unit nr amount
6518 DECODE(gt.trx_line_dist_qty*gt.unit_price,0, NVL(gt.unrounded_rec_nrec_tax_amt,gt.rec_nrec_tax_amt),
6519 NVL(gt.unrounded_rec_nrec_tax_amt,gt.rec_nrec_tax_amt)/(gt.trx_line_dist_qty * gt.unit_price * (ZX_TRD_SERVICES_PUB_PKG.g_retained_value/100))),
6520 per_unit_nrec_tax_amt =
6521 DECODE(gt.trx_line_dist_qty, 0, NVL(gt.unrounded_rec_nrec_tax_amt,gt.rec_nrec_tax_amt),
6522 NVL(gt.unrounded_rec_nrec_tax_amt,gt.rec_nrec_tax_amt)/gt.trx_line_dist_qty),
6523 (ref_doc_tax_dist_id,
6524 ref_doc_unit_price,
6525 ref_per_trx_curr_unit_nr_amt,
6526 ref_doc_per_unit_nrec_tax_amt)=
6527 (SELECT
6528 rec_nrec_tax_dist_id,
6529 --Bug 9470313
6530 Nvl(unit_price,0),
6531 DECODE(gt.ref_doc_trx_line_dist_qty,
6532 NULL, DECODE(Nvl(dist.unit_price,0), 0, NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt)/dist.trx_line_dist_amt, NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt)/dist.unit_price),
6533 DECODE(gt.ref_doc_trx_line_dist_qty*dist.unit_price, 0, NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt),
6534 (NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt))*(ZX_TRD_SERVICES_PUB_PKG.g_retained_value/100)/(gt.ref_doc_trx_line_dist_qty*dist.unit_price*(ZX_TRD_SERVICES_PUB_PKG.g_retained_value/100)))),
6535 DECODE(Nvl(gt.ref_doc_trx_line_dist_qty,0), 0, NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt)/dist.trx_line_dist_amt,
6536 NVL(dist.unrounded_rec_nrec_tax_amt, dist.rec_nrec_tax_amt)/gt.ref_doc_trx_line_dist_qty)
6537 FROM zx_rec_nrec_dist dist
6538 WHERE dist.application_id = gt.ref_doc_application_id
6539 AND dist.entity_code = gt.ref_doc_entity_code
6540 AND dist.event_class_code = gt.ref_doc_event_class_code
6541 AND dist.trx_id = gt.ref_doc_trx_id
6542 AND dist.trx_line_id = gt.ref_doc_line_id
6543 AND dist.trx_level_type = gt.ref_doc_trx_level_type
6544 AND (dist.trx_line_dist_id = gt.ref_doc_dist_id OR
6545 gt.tax_only_line_flag = 'Y')
6546 AND dist.tax_regime_code = gt.tax_regime_code
6547 AND dist.tax = gt.tax
6548 AND dist.recoverable_flag = 'N'
6549 AND NVL(dist.reverse_flag,'N') = 'N'
6550 AND dist.mrc_tax_dist_flag = 'N'
6551 )
6552 WHERE ref_doc_application_id IS NOT NULL
6553 AND recoverable_flag = 'N'
6554 AND NVL(reverse_flag,'N')='N'
6555 AND mrc_tax_dist_flag = 'N';
6556
6557 -- update ref_doc_unit_price if it is null (PO has no tax)
6558 --
6559 UPDATE zx_rec_nrec_dist_gt gt
6560 SET ref_doc_unit_price =
6561 (SELECT unit_price
6562 FROM zx_lines_det_factors line
6563 WHERE line.application_id = gt.ref_doc_application_id
6564 AND line.entity_code = gt.ref_doc_entity_code
6565 AND line.event_class_code = gt.ref_doc_event_class_code
6566 AND line.trx_id = gt.ref_doc_trx_id
6567 AND line.trx_line_id = gt.ref_doc_line_id
6568 AND line.trx_level_type = gt.ref_doc_trx_level_type
6569 ),
6570 ref_per_trx_curr_unit_nr_amt = 0,
6571 ref_doc_per_unit_nrec_tax_amt = 0
6572 WHERE ref_doc_application_id IS NOT NULL
6573 AND recoverable_flag = 'N'
6574 AND NVL(reverse_flag,'N')='N'
6575 AND mrc_tax_dist_flag = 'N'
6576 AND ref_doc_tax_dist_id IS NULL;
6577
6578 END IF; -- g_ret_doc_type 'R'
6579
6580 ELSE
6581 IF (g_level_procedure >= g_current_runtime_level ) THEN
6582 FND_LOG.STRING(g_level_procedure,
6583 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors',
6584 'No Retainage - Normal Flow');
6585 END IF;
6586
6587 -- Bug 10069028, As per PM, use unrounded_rec_nrec_tax_amt for variance calculation
6588
6589 UPDATE zx_rec_nrec_dist_gt gt
6590 SET per_trx_curr_unit_nr_amt =
6591 -- Bugfix 5218651: for amount based matching, when dist qty is 0 or null, return rec_nrec_tax_amt as per unit nr amount
6592 DECODE(gt.trx_line_dist_qty*gt.unit_price,0, NVL(gt.unrounded_rec_nrec_tax_amt,gt.rec_nrec_tax_amt),
6593 NVL(gt.unrounded_rec_nrec_tax_amt,gt.rec_nrec_tax_amt)/(gt.trx_line_dist_qty*gt.unit_price)),
6594 per_unit_nrec_tax_amt =
6595 DECODE(gt.trx_line_dist_qty, 0, NVL(gt.unrounded_rec_nrec_tax_amt,gt.rec_nrec_tax_amt),
6596 NVL(gt.unrounded_rec_nrec_tax_amt,gt.rec_nrec_tax_amt)/gt.trx_line_dist_qty),
6597 (ref_doc_tax_dist_id,
6598 ref_doc_unit_price,
6599 ref_per_trx_curr_unit_nr_amt,
6600 ref_doc_per_unit_nrec_tax_amt)=
6601 (SELECT
6602 rec_nrec_tax_dist_id,
6603 --Bug 9470313
6604 Nvl(unit_price,0),
6605 DECODE(gt.ref_doc_trx_line_dist_qty,
6606 NULL, DECODE(Nvl(dist.unit_price,0), 0, NVL(dist.unrounded_rec_nrec_tax_amt, dist.rec_nrec_tax_amt)/dist.trx_line_dist_amt, NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt)/dist.unit_price),
6607 DECODE(gt.ref_doc_trx_line_dist_qty*dist.unit_price, 0, NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt),
6608 NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt)/(gt.ref_doc_trx_line_dist_qty*dist.unit_price))),
6609 DECODE(Nvl(gt.ref_doc_trx_line_dist_qty,0), 0, NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt)/dist.trx_line_dist_amt,
6610 NVL(dist.unrounded_rec_nrec_tax_amt,dist.rec_nrec_tax_amt)/gt.ref_doc_trx_line_dist_qty)
6611 FROM zx_rec_nrec_dist dist
6612 WHERE dist.application_id = gt.ref_doc_application_id
6613 AND dist.entity_code = gt.ref_doc_entity_code
6614 AND dist.event_class_code = gt.ref_doc_event_class_code
6615 AND dist.trx_id = gt.ref_doc_trx_id
6616 AND dist.trx_line_id = gt.ref_doc_line_id
6617 AND dist.trx_level_type = gt.ref_doc_trx_level_type
6618 AND (dist.trx_line_dist_id = gt.ref_doc_dist_id OR
6619 gt.tax_only_line_flag = 'Y')
6620 AND dist.tax_regime_code = gt.tax_regime_code
6621 AND dist.tax = gt.tax
6622 AND dist.recoverable_flag = 'N'
6623 AND NVL(dist.reverse_flag,'N') = 'N'
6624 AND dist.mrc_tax_dist_flag = 'N'
6625 )
6626 WHERE ref_doc_application_id IS NOT NULL
6627 AND recoverable_flag = 'N'
6628 AND NVL(reverse_flag,'N')='N'
6629 AND mrc_tax_dist_flag = 'N';
6630
6631 -- update ref_doc_unit_price if it is null (PO has no tax)
6632 --
6633 -- Bug 10406032, update ref_per_trx_curr_unit_nr_amt and ref_doc_per_unit_nrec_tax_amt to 0 if PO has no tax.
6634 -- Bug 14648916, update per_trx_curr_unit_nr_amt and per_unit_nrec_tax_amt based on rounded rec_nrec_tax_amt
6635
6636 UPDATE zx_rec_nrec_dist_gt gt
6637 SET ref_doc_unit_price =
6638 (SELECT unit_price
6639 FROM zx_lines_det_factors line
6640 WHERE line.application_id = gt.ref_doc_application_id
6641 AND line.entity_code = gt.ref_doc_entity_code
6642 AND line.event_class_code = gt.ref_doc_event_class_code
6643 AND line.trx_id = gt.ref_doc_trx_id
6644 AND line.trx_line_id = gt.ref_doc_line_id
6645 AND line.trx_level_type = gt.ref_doc_trx_level_type
6646 ),
6647 ref_per_trx_curr_unit_nr_amt = 0,
6648 ref_doc_per_unit_nrec_tax_amt = 0,
6649 per_trx_curr_unit_nr_amt =
6650 DECODE(gt.trx_line_dist_qty*gt.unit_price,0, gt.rec_nrec_tax_amt,
6651 gt.rec_nrec_tax_amt/(gt.trx_line_dist_qty*gt.unit_price)),
6652 per_unit_nrec_tax_amt =
6653 DECODE(gt.trx_line_dist_qty, 0, gt.rec_nrec_tax_amt,
6654 gt.rec_nrec_tax_amt/gt.trx_line_dist_qty)
6655 WHERE ref_doc_application_id IS NOT NULL
6656 AND recoverable_flag = 'N'
6657 AND NVL(reverse_flag,'N')='N'
6658 AND mrc_tax_dist_flag = 'N'
6659 AND ref_doc_tax_dist_id IS NULL;
6660
6661 END IF; --ZX_TRD_SERVICES_PUB_PKG.g_retained_value
6662
6663 IF (g_level_procedure >= g_current_runtime_level ) THEN
6664 FND_LOG.STRING(g_level_procedure,
6665 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors.END',
6666 'ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors(-)'||p_return_status);
6667 END IF;
6668
6669 EXCEPTION
6670 WHEN OTHERS THEN
6671 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6672 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6673
6674 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6675 FND_LOG.STRING(g_level_unexpected,
6676 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors',
6677 p_error_buffer);
6678 FND_LOG.STRING(g_level_unexpected,
6679 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors.END',
6680 'ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors(-)');
6681 END IF;
6682
6683 END calc_variance_factors;
6684
6685 /* =====================================================================*
6686 | Public Procedures create_mrc_tax_dists creates tax distributions |
6687 | for each reporting currency |
6688 * =====================================================================*/
6689 PROCEDURE create_mrc_tax_dists (
6690 p_event_class_rec IN zx_api_pub.event_class_rec_type,
6691 p_rec_nrec_dist_tbl IN OUT NOCOPY ZX_TRD_SERVICES_PUB_PKG.rec_nrec_dist_tbl_type,
6692 p_rnd_begin_index IN NUMBER,
6693 p_rnd_end_index IN OUT NOCOPY NUMBER,
6694 p_return_status OUT NOCOPY VARCHAR2,
6695 p_error_buffer OUT NOCOPY VARCHAR2) IS
6696
6697 CURSOR get_mrc_tax_line_info_csr(
6698 c_trx_line_id zx_lines.trx_line_id%TYPE,
6699 c_trx_level_type zx_lines.trx_level_type%TYPE,
6700 c_tax_line_number zx_lines.tax_line_number%TYPE) IS
6701 SELECT ledger_id,
6702 reporting_currency_code,
6703 currency_conversion_rate,
6704 currency_conversion_date,
6705 currency_conversion_type,
6706 minimum_accountable_unit,
6707 precision,
6708 tax_line_id,
6709 summary_tax_line_id,
6710 tax_amt
6711 FROM zx_lines
6712 WHERE application_id = p_event_class_rec.application_id
6713 AND entity_code = p_event_class_rec.entity_code
6714 AND event_class_code = p_event_class_rec.event_class_code
6715 AND trx_id = p_event_class_rec.trx_id
6716 AND trx_line_id = c_trx_line_id
6717 AND trx_level_type = c_trx_level_type
6718 AND tax_line_number = c_tax_line_number
6719 AND mrc_tax_line_flag = 'Y';
6720
6721 l_rnd_begin_index NUMBER;
6722 l_end_index NUMBER;
6723
6724 BEGIN
6725
6726 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6727
6728 IF (g_level_statement >= g_current_runtime_level ) THEN
6729 FND_LOG.STRING(g_level_statement,
6730 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.create_mrc_tax_dists.BEGIN',
6731 'ZX_TRD_INTERNAL_SERVICES_PVT.create_mrc_tax_dists(+)');
6732 END IF;
6733
6734 p_return_status := FND_API.G_RET_STS_SUCCESS;
6735
6736 IF p_rnd_begin_index IS NULL OR p_rnd_end_index IS NULL OR
6737 p_rnd_begin_index > p_rnd_end_index THEN
6738
6739 --p_return_status := FND_API.G_RET_STS_ERROR;
6740 IF (g_level_statement >= g_current_runtime_level ) THEN
6741 FND_LOG.STRING(g_level_statement,
6742 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.create_mrc_tax_dists',
6743 'begin or end index is null, or begin index > end index');
6744 END IF;
6745 RETURN;
6746 END IF;
6747
6748 l_end_index := p_rnd_end_index;
6749
6750 -- create tax distributions in Reporting Currency
6751 --
6752 FOR mrc_line_rec IN get_mrc_tax_line_info_csr (
6753 p_rec_nrec_dist_tbl(p_rnd_begin_index).trx_line_id,
6754 p_rec_nrec_dist_tbl(p_rnd_begin_index).trx_level_type,
6755 p_rec_nrec_dist_tbl(p_rnd_begin_index).tax_line_number) LOOP
6756
6757 l_rnd_begin_index := p_rnd_end_index + 1;
6758
6759 FOR j IN p_rnd_begin_index .. l_end_index LOOP
6760
6761 p_rnd_end_index := p_rnd_end_index + 1;
6762 p_rec_nrec_dist_tbl(p_rnd_end_index) := p_rec_nrec_dist_tbl(j);
6763
6764 -- set MRC related columns
6765 --
6766 SELECT zx_rec_nrec_dist_s.NEXTVAL INTO
6767 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_tax_dist_id FROM DUAL;
6768
6769 p_rec_nrec_dist_tbl(p_rnd_end_index).unrounded_rec_nrec_tax_amt :=
6770 p_rec_nrec_dist_tbl(j).unrounded_rec_nrec_tax_amt *
6771 mrc_line_rec.currency_conversion_rate;
6772
6773 p_rec_nrec_dist_tbl(p_rnd_end_index).unrounded_taxable_amt :=
6774 p_rec_nrec_dist_tbl(j).unrounded_taxable_amt *
6775 mrc_line_rec.currency_conversion_rate;
6776
6777 p_rec_nrec_dist_tbl(p_rnd_end_index).ledger_id := mrc_line_rec.ledger_id;
6778 p_rec_nrec_dist_tbl(p_rnd_end_index).currency_conversion_date :=
6779 mrc_line_rec.currency_conversion_date;
6780 p_rec_nrec_dist_tbl(p_rnd_end_index).currency_conversion_type :=
6781 mrc_line_rec.currency_conversion_type;
6782 p_rec_nrec_dist_tbl(p_rnd_end_index).currency_conversion_rate :=
6783 mrc_line_rec.currency_conversion_rate;
6784 p_rec_nrec_dist_tbl(p_rnd_end_index).minimum_accountable_unit :=
6785 mrc_line_rec.minimum_accountable_unit;
6786 p_rec_nrec_dist_tbl(p_rnd_end_index).precision := mrc_line_rec.precision;
6787 p_rec_nrec_dist_tbl(p_rnd_end_index).trx_currency_code :=
6788 mrc_line_rec.reporting_currency_code;
6789 p_rec_nrec_dist_tbl(p_rnd_end_index).tax_line_id :=
6790 mrc_line_rec.tax_line_id;
6791 p_rec_nrec_dist_tbl(p_rnd_end_index).summary_tax_line_id :=
6792 mrc_line_rec.summary_tax_line_id;
6793
6794 p_rec_nrec_dist_tbl(p_rnd_end_index).mrc_tax_dist_flag := 'Y';
6795 p_rec_nrec_dist_tbl(p_rnd_end_index).mrc_link_to_tax_dist_id :=
6796 p_rec_nrec_dist_tbl(j).rec_nrec_tax_dist_id;
6797
6798 p_rec_nrec_dist_tbl(p_rnd_end_index).reversed_tax_dist_id := NULL;
6799 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_tax_amt_tax_curr := NULL;
6800 p_rec_nrec_dist_tbl(p_rnd_end_index).rec_nrec_tax_amt_funcl_curr := NULL;
6801 p_rec_nrec_dist_tbl(p_rnd_end_index).tax_currency_conversion_date := NULL;
6802 p_rec_nrec_dist_tbl(p_rnd_end_index).tax_currency_conversion_type := NULL;
6803 p_rec_nrec_dist_tbl(p_rnd_end_index).tax_currency_conversion_rate := NULL;
6804 p_rec_nrec_dist_tbl(p_rnd_end_index).tax_currency_code := NULL;
6805 p_rec_nrec_dist_tbl(p_rnd_end_index).taxable_amt_tax_curr := NULL;
6806 p_rec_nrec_dist_tbl(p_rnd_end_index).taxable_amt_funcl_curr := NULL;
6807 p_rec_nrec_dist_tbl(p_rnd_end_index).prd_tax_amt := NULL;
6808 p_rec_nrec_dist_tbl(p_rnd_end_index).prd_tax_amt_tax_curr := NULL;
6809 p_rec_nrec_dist_tbl(p_rnd_end_index).prd_tax_amt_funcl_curr := NULL;
6810 p_rec_nrec_dist_tbl(p_rnd_end_index).prd_total_tax_amt := NULL;
6811 p_rec_nrec_dist_tbl(p_rnd_end_index).prd_total_tax_amt_tax_curr := NULL;
6812 p_rec_nrec_dist_tbl(p_rnd_end_index).prd_total_tax_amt_funcl_curr := NULL;
6813 p_rec_nrec_dist_tbl(p_rnd_end_index).func_curr_rounding_adjustment := NULL;
6814
6815 p_rec_nrec_dist_tbl(p_rnd_end_index).trx_line_dist_tax_amt := NULL;
6816 p_rec_nrec_dist_tbl(p_rnd_end_index).orig_rec_nrec_rate:= NULL;
6817 p_rec_nrec_dist_tbl(p_rnd_end_index).orig_rec_rate_code := NULL;
6818 p_rec_nrec_dist_tbl(p_rnd_end_index).orig_rec_nrec_tax_amt := NULL;
6819 p_rec_nrec_dist_tbl(p_rnd_end_index).orig_rec_nrec_tax_amt_tax_curr := NULL;
6820 p_rec_nrec_dist_tbl(p_rnd_end_index).price_diff := NULL;
6821 p_rec_nrec_dist_tbl(p_rnd_end_index).qty_diff := NULL;
6822 p_rec_nrec_dist_tbl(p_rnd_end_index).per_trx_curr_unit_nr_amt := NULL;
6823 p_rec_nrec_dist_tbl(p_rnd_end_index).ref_per_trx_curr_unit_nr_amt := NULL;
6824 p_rec_nrec_dist_tbl(p_rnd_end_index).unit_price := NULL;
6825 p_rec_nrec_dist_tbl(p_rnd_end_index).ref_doc_unit_price := NULL;
6826 p_rec_nrec_dist_tbl(p_rnd_end_index).per_unit_nrec_tax_amt:= NULL;
6827 p_rec_nrec_dist_tbl(p_rnd_end_index).ref_doc_per_unit_nrec_tax_amt := NULL;
6828
6829 END LOOP; -- j IN p_rnd_begin_index .. l_end_index LOOP
6830
6831 ZX_TRD_INTERNAL_SERVICES_PVT.round_rec_nrec_amt(
6832 p_rec_nrec_dist_tbl,
6833 l_rnd_begin_index,
6834 p_rnd_end_index,
6835 mrc_line_rec.tax_amt,
6836 NULL,
6837 NULL,
6838 p_return_status,
6839 p_error_buffer);
6840
6841 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6842 IF (g_level_statement >= g_current_runtime_level ) THEN
6843 FND_LOG.STRING(g_level_statement,
6844 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.create_mrc_tax_dists',
6845 'After calling ROUND_REC_NREC_AMT p_return_status = '
6846 || p_return_status);
6847 FND_LOG.STRING(g_level_statement,
6848 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.create_mrc_tax_dists.END',
6849 'ZX_TRD_SERVICES_PUB_PKG.create_mrc_tax_dists(-)');
6850 END IF;
6851 RETURN;
6852 END IF;
6853 END LOOP; -- mrc_line_rec IN get_mrc_tax_line_info_csr LOOP
6854
6855 IF (g_level_procedure >= g_current_runtime_level ) THEN
6856 FND_LOG.STRING(g_level_procedure,
6857 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.create_mrc_tax_dists.END',
6858 'ZX_TRD_INTERNAL_SERVICES_PVT.create_mrc_tax_dists(-)');
6859 END IF;
6860
6861 EXCEPTION
6862 WHEN OTHERS THEN
6863 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6864
6865 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6866 FND_LOG.STRING(g_level_unexpected,
6867 'ZX.PLSQL.ZX_TDS_MRC_PROCESSING_PKG.create_mrc_det_tax_lines',
6868 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
6869 FND_LOG.STRING(g_level_unexpected,
6870 'ZX.PLSQL.ZX_TRD_INTERNAL_SERVICES_PVT.create_mrc_tax_dists.END',
6871 'ZX_TRD_INTERNAL_SERVICES_PVT.create_mrc_tax_dists(-)');
6872 END IF;
6873 END create_mrc_tax_dists;
6874
6875 END ZX_TRD_INTERNAL_SERVICES_PVT;