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