[Home] [Help]
PACKAGE BODY: APPS.ZX_TRD_SERVICES_PUB_PKG
Source
1 PACKAGE BODY ZX_TRD_SERVICES_PUB_PKG AS
2 /* $Header: zxmwrecdmsrvpubb.pls 120.139.12010000.6 2009/01/14 19:29:17 tsen ship $ */
3
4 /* Declare constants */
5
6 G_PKG_NAME CONSTANT VARCHAR2(30) := 'zx_trd_services_pub_pkg';
7 G_MSG_UERROR CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_UNEXP_ERROR;
8 G_MSG_ERROR CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_ERROR;
9 G_MSG_SUCCESS CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_SUCCESS;
10
11 G_MSG_HIGH CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_DEBUG_HIGH;
12 G_MSG_MEDIUM CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_DEBUG_MEDIUM;
13 G_MSG_LOW CONSTANT NUMBER := FND_MSG_PUB.G_MSG_LVL_DEBUG_LOW;
14
15 TYPE l_jursidiction_id_rec_type IS RECORD(
16 location_id NUMBER,
17 location_type VARCHAR2(30),
18 tax_jurisdiction_id NUMBER
19 );
20
21 TYPE l_jursidiction_id_tbl_type IS TABLE OF l_jursidiction_id_rec_type INDEX BY BINARY_INTEGER;
22 l_jursidiction_id_tbl l_jursidiction_id_tbl_type;
23
24 p_error_buffer VARCHAR2(200);
25
26 /* dummy variables */
27 NUMBER_DUMMY CONSTANT NUMBER(15) := -999999999999999;
28 VAR_30_DUMMY CONSTANT VARCHAR2(30) := '@@@###$$$***===';
29 DATE_DUMMY CONSTANT DATE := TO_DATE('01-01-1951', 'DD-MM-YYYY');
30
31 PROCEDURE fetch_tax_lines (
32 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
33 p_tax_line_tbl OUT NOCOPY tax_line_tbl_type,
34 x_return_status OUT NOCOPY VARCHAR2);
35
36 PROCEDURE fetch_tax_distributions(
37 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
38 p_tax_line_id IN NUMBER,
39 p_trx_line_dist_id IN NUMBER,
40 p_rec_nrec_dist_tbl IN OUT NOCOPY rec_nrec_dist_tbl_type,
41 p_rec_nrec_dist_begin_index IN NUMBER,
42 p_rec_nrec_dist_end_index OUT NOCOPY NUMBER,
43 x_return_status OUT NOCOPY VARCHAR2);
44
45 PROCEDURE populate_trx_line_info(
46 p_tax_line_tbl IN tax_line_tbl_type,
47 p_index IN NUMBER,
48 x_return_status OUT NOCOPY VARCHAR2);
49
50 PROCEDURE insert_item_dist(
51 p_tax_line_rec IN zx_lines%ROWTYPE,
52 x_return_status OUT NOCOPY VARCHAR2);
53
54 PROCEDURE insert_global_table(
55 p_rec_nrec_dist_tbl IN OUT NOCOPY rec_nrec_dist_tbl_type,
56 p_rec_nrec_dist_begin_index IN OUT NOCOPY NUMBER,
57 p_rec_nrec_dist_end_index IN OUT NOCOPY NUMBER,
58 x_return_status OUT NOCOPY VARCHAR2);
59
60 PROCEDURE populate_mandatory_columns(
61 p_rec_nrec_dist_tbl IN OUT NOCOPY REC_NREC_DIST_TBL_TYPE,
62 x_return_status OUT NOCOPY VARCHAR2);
63
64 PROCEDURE delete_unnecessary_tax_dists(
65 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
66 x_return_status OUT NOCOPY VARCHAR2);
67
68 PROCEDURE get_tax_jurisdiction_id(
69 p_tax_line_id IN NUMBER,
70 p_tax_rate_id IN NUMBER,
71 p_tax_jurisdiction_id OUT NOCOPY NUMBER,
72 x_return_status OUT NOCOPY VARCHAR2);
73
74 g_current_runtime_level NUMBER;
75 g_level_statement CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
76 g_level_procedure CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
77 g_level_exception CONSTANT NUMBER := FND_LOG.LEVEL_EXCEPTION;
78 g_level_event CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
79 g_level_unexpected CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
80
81 l_regime_not_effective varchar2(2000);
82 l_tax_not_effective varchar2(2000);
83 l_tax_status_not_effective varchar2(2000);
84 l_tax_rate_percentage_invalid varchar2(2000);
85 l_jur_code_not_effective varchar2(2000);
86 l_tax_rate_not_effective varchar2(2000);
87 l_tax_rate_not_active varchar2(2000);
88
89 /* =============================================================================*
90 | PUBLIC PROCEDURE determine_recovery |
91 | |
92 | DESCRIPTION |
93 | This procedure is used to determine the recoverable and non-recovearble |
94 | tax distributions for the first time or when after the tax distributions |
95 | were determined and then tax lines and/or item distributions are updated |
96 | |
97 | This procedure will be called directly by TSRM service. |
98 | |
99 * =============================================================================*/
100
101 PROCEDURE determine_recovery(
102 p_event_class_rec IN ZX_API_PUB.event_class_rec_type,
103 x_return_status OUT NOCOPY VARCHAR2) IS
104
105 CURSOR get_item_dist_csr(
106 c_trx_line_id zx_lines.trx_line_id%TYPE,
107 c_trx_level_type zx_lines.trx_level_type%TYPE) IS
108 SELECT /*+ INDEX(ZX_ITM_DISTRIBUTIONS_GT ZX_ITM_DISTRIBUTIONS_GT_U1 ZX_ITM_DISTRIBUTIONS_GT_U1) */
109 trx_line_dist_id,
110 trx_line_id,
111 trx_level_type,
112 dist_level_action,
113 item_dist_number,
114 dist_intended_use,
115 task_id,
116 award_id,
117 project_id,
118 expenditure_type,
119 expenditure_organization_id,
120 expenditure_item_date,
121 trx_line_dist_amt,
122 trx_line_dist_qty,
123 ref_doc_application_id,
124 ref_doc_entity_code,
125 ref_doc_event_class_code,
126 ref_doc_trx_id,
127 ref_doc_line_id,
128 ref_doc_trx_level_type,
129 ref_doc_dist_id,
130 ref_doc_curr_conv_rate,
131 trx_line_dist_tax_amt,
132 account_ccid,
133 account_string,
134 price_diff,
135 ref_doc_trx_line_dist_qty,
136 ref_doc_curr_conv_rate,
137 applied_to_doc_curr_conv_rate,
138 -- applied_from_application_id, commented out for bug 5580045
139 -- applied_from_event_class_code,
140 -- applied_from_entity_code,
141 -- applied_from_trx_id,
142 -- applied_from_line_id,
143 applied_from_dist_id, -- add for CR3066321
144 -- adjusted_doc_application_id,
145 -- adjusted_doc_event_class_code,
146 -- adjusted_doc_entity_code,
147 -- adjusted_doc_trx_id,
148 -- adjusted_doc_line_id,
149 adjusted_doc_dist_id,
150 overriding_recovery_rate,
151 -- applied_from_trx_level_type,
152 -- adjusted_doc_trx_level_type,
153 trx_line_dist_date -- AP passes account_date
154 FROM zx_itm_distributions_gt
155 WHERE trx_id = p_event_class_rec.trx_id
156 AND application_id = p_event_class_rec.application_id
157 AND entity_code = p_event_class_rec.entity_code
158 AND event_class_code = p_event_class_rec.event_class_code
159 AND trx_line_id = c_trx_line_id
160 AND trx_level_type = c_trx_level_type;
161
162 CURSOR get_pseuso_line_info_csr(
163 c_trx_line_id zx_lines.trx_line_id%TYPE,
164 c_trx_level_type zx_lines.trx_level_type%TYPE) IS
165 SELECT trx_line_id,
166 trx_level_type,
167 line_intended_use,
168 line_amt,
169 trx_line_quantity,
170 ref_doc_application_id,
171 ref_doc_entity_code,
172 ref_doc_event_class_code,
173 ref_doc_trx_id,
174 ref_doc_line_id,
175 ref_doc_trx_level_type,
176 account_ccid,
177 account_string,
178 ref_doc_line_quantity,
179 -- applied_from_application_id, -- commented out for bug 5580045
180 -- applied_from_event_class_code,
181 -- applied_from_entity_code,
182 -- applied_from_trx_id,
183 -- applied_from_line_id,
184 -- adjusted_doc_application_id,
185 -- adjusted_doc_event_class_code,
186 -- adjusted_doc_entity_code,
187 -- adjusted_doc_trx_id,
188 -- adjusted_doc_line_id,
189 -- applied_from_trx_level_type,
190 -- adjusted_doc_trx_level_type,
191 nvl(trx_line_gl_date, trx_date) -- item dist gl date
192 FROM zx_lines_det_factors
193 WHERE application_id = p_event_class_rec.application_id
194 AND event_class_code = p_event_class_rec.event_class_code
195 AND entity_code = p_event_class_rec.entity_code
196 AND trx_id = p_event_class_rec.trx_id
197 AND trx_line_id = c_trx_line_id
198 AND trx_level_type = c_trx_level_type;
199
200 TYPE NUMERIC_TBL_TYPE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
201 TYPE VARCHAR_30_TBL_TYPE IS TABLE OF VARCHAR2(30) INDEX BY BINARY_INTEGER;
202 TYPE VARCHAR_150_TBL_TYPE IS TABLE OF VARCHAR2(150) INDEX BY BINARY_INTEGER;
203 TYPE VARCHAR_2000_TBL_TYPE IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
204 TYPE DATE_TBL_TYPE IS TABLE OF DATE INDEX BY BINARY_INTEGER;
205
206 trx_line_dist_id_tbl NUMERIC_TBL_TYPE;
207 trx_line_id_tbl NUMERIC_TBL_TYPE;
208 trx_level_type_tbl VARCHAR_30_TBL_TYPE;
209 dist_level_action_tbl VARCHAR_30_TBL_TYPE;
210 item_dist_number_tbl NUMERIC_TBL_TYPE;
211 dist_intended_use_tbl VARCHAR_30_TBL_TYPE;
212 task_id_tbl NUMERIC_TBL_TYPE;
213 award_id_tbl NUMERIC_TBL_TYPE;
214 project_id_tbl NUMERIC_TBL_TYPE;
215 expenditure_type_tbl VARCHAR_30_TBL_TYPE;
216 expenditure_org_id_tbl NUMERIC_TBL_TYPE;
217 expenditure_item_date_tbl DATE_TBL_TYPE;
218 gl_date_tbl DATE_TBL_TYPE;
219 trx_line_dist_amt_tbl NUMERIC_TBL_TYPE;
220 trx_line_dist_quantity_tbl NUMERIC_TBL_TYPE;
221 ref_doc_application_id_tbl NUMERIC_TBL_TYPE;
222 ref_doc_entity_code_tbl VARCHAR_30_TBL_TYPE;
223 ref_doc_event_class_code_tbl VARCHAR_30_TBL_TYPE;
224 ref_doc_trx_id_tbl NUMERIC_TBL_TYPE;
225 ref_doc_line_id_tbl NUMERIC_TBL_TYPE;
226 ref_doc_trx_level_type_tbl VARCHAR_30_TBL_TYPE;
227 ref_doc_dist_id_tbl NUMERIC_TBL_TYPE;
228 ref_doc_curr_conv_rate_tbl NUMERIC_TBL_TYPE;
229 trx_line_dist_tax_amt_tbl NUMERIC_TBL_TYPE;
230 account_ccid_tbl NUMERIC_TBL_TYPE;
231 account_string_tbl VARCHAR_2000_TBL_TYPE;
232 price_diff_tbl NUMERIC_TBL_TYPE;
233 ref_doc_trx_line_dist_qty_tbl NUMERIC_TBL_TYPE;
234 applied_to_curr_conv_rate_tbl NUMERIC_TBL_TYPE;
235
236 /* These columns won't be needed since we get them from tax line instead, commented out for bug 5580045
237 applied_from_appli_id_tbl NUMERIC_TBL_TYPE;
238 applied_from_evnt_cls_code_tbl VARCHAR_30_TBL_TYPE;
239 applied_from_entity_code_tbl VARCHAR_30_TBL_TYPE;
240 applied_from_trx_id_tbl NUMERIC_TBL_TYPE;
241 applied_from_line_id_tbl NUMERIC_TBL_TYPE;
242 adjusted_doc_appli_id_tbl NUMERIC_TBL_TYPE;
243 adjusted_doc_evnt_cls_code_tbl VARCHAR_30_TBL_TYPE;
244 adjusted_doc_entity_code_tbl VARCHAR_30_TBL_TYPE;
245 adjusted_doc_trx_id_tbl NUMERIC_TBL_TYPE;
246 adjusted_doc_line_id_tbl NUMERIC_TBL_TYPE;
247 applied_from_trx_level_tp_tbl VARCHAR_30_TBL_TYPE;
248 adjusted_doc_trx_level_tp_tbl VARCHAR_30_TBL_TYPE;
249 */
250
251 applied_from_dist_id_tbl NUMERIC_TBL_TYPE;
252 adjusted_doc_dist_id_tbl NUMERIC_TBL_TYPE;
253 overriding_recovery_rate_tbl NUMERIC_TBL_TYPE;
254
255 l_tax_line_tbl tax_line_tbl_type;
256 tax_line_counter NUMBER;
257
258 l_counter NUMBER;
259 l_old_trx_line_id zx_lines.trx_line_id%TYPE;
260 l_old_trx_level_type zx_lines.trx_level_type%TYPE;
261 l_trx_line_id zx_lines.trx_line_id%TYPE;
262 l_trx_level_type zx_lines.trx_level_type%TYPE;
263 l_rec_nrec_dist_tbl rec_nrec_dist_tbl_type;
264
265 -- begin and end index for tax distribution for the same tax line and item dist
266 l_rec_nrec_dist_begin_index NUMBER;
267 l_rec_nrec_dist_end_index NUMBER;
268
269 -- begin index for tax distribution for the same tax line
270 l_dist_tbl_begin_index NUMBER;
271 l_action VARCHAR2(30);
272 l_trx_line_dist_tbl_type ZX_GLOBAL_STRUCTURES_PKG.trx_line_dist_rec_type;
273
274 l_exist_frozen_tax_dist_flag VARCHAR2(1);
275
276 BEGIN
277
278 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
279
280 IF (g_level_procedure >= g_current_runtime_level ) THEN
281 FND_LOG.STRING(g_level_procedure,
282 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.BEGIN',
283 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(+) ');
284 END IF;
285
286 x_return_status:= FND_API.G_RET_STS_SUCCESS;
287 -- g_variance_calc_flag := 'N';
288
289 l_old_trx_line_id := NUMBER_DUMMY;
290 l_old_trx_level_type := VAR_30_DUMMY;
291
292 --
293 -- init msg record to be passed back to TSRM
294 --
295 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.application_id :=
296 p_event_class_rec.application_id;
297 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.entity_code :=
298 p_event_class_rec.entity_code;
299 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.event_class_code :=
300 p_event_class_rec.event_class_code;
301 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_id :=
302 p_event_class_rec.trx_id;
303 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id := NULL;
304 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type := NULL;
305 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.summary_tax_line_number :=
306 NULL;
307 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.tax_line_id := NULL;
308 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_dist_id := NULL;
309
310 SELECT ZX_REC_NREC_DIST_S.nextval
311 INTO ZX_TRD_SERVICES_PUB_PKG.g_tax_dist_id
312 FROM dual;
313
314 -- For a update event in quote calls(only PO has such case now),
315 -- no need to Update_Item_Dist_Changed_Flag, since all tax lines have been
316 -- brought back to zx_detail_tax_lines_gt (bug 4313177).
317
318 IF (p_event_class_rec.tax_event_type_code = 'RE-DISTRIBUTE')
319 AND p_event_class_rec.quote_flag <> 'Y'
320 THEN
321
322 -- call TRL service to update Item_Dist_Changed_Flag on ZX_LINES.
323 --
324 ZX_TRL_MANAGE_TAX_PKG.Update_Item_Dist_Changed_Flag(
325 x_return_status,
326 p_event_class_rec);
327
328 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
329 IF (g_level_statement >= g_current_runtime_level ) THEN
330 FND_LOG.STRING(g_level_statement,
331 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
332 'After calling TRL, x_return_status = '|| x_return_status);
333 FND_LOG.STRING(g_level_statement,
334 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
335 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
336 END IF;
337 RETURN;
338 END IF;
339 END IF;
340
341 /*======================================================================*
342 | Fetch tax lines for recovery calculation |
343 *======================================================================*/
344
345 fetch_tax_lines ( p_event_class_rec,
346 l_tax_line_tbl,
347 x_return_status);
348
349 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
350 IF (g_level_statement >= g_current_runtime_level ) THEN
351 FND_LOG.STRING(g_level_statement,
352 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
353 'After calling fetch tax lines, x_return_status = '
354 || x_return_status);
355 FND_LOG.STRING(g_level_statement,
356 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
357 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
358 END IF;
359 RETURN;
360 END IF;
361
362 tax_line_counter := l_tax_line_tbl.count;
363
364 l_rec_nrec_dist_end_index := 0;
365
366 -- populate header information,
367 -- this is the same for every tax line so only need to do it once.
368 --
369 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.APPLICATION_ID(1) := p_event_class_rec.APPLICATION_ID;
370 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ENTITY_CODE(1) := p_event_class_rec.ENTITY_CODE;
371 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.EVENT_CLASS_CODE(1):= p_event_class_rec.EVENT_CLASS_CODE;
372 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.EVENT_TYPE_CODE(1) := p_event_class_rec.EVENT_TYPE_CODE;
373 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TAX_EVENT_CLASS_CODE(1):= p_event_class_rec.TAX_EVENT_CLASS_CODE;
374 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TAX_EVENT_TYPE_CODE(1) := p_event_class_rec.TAX_EVENT_TYPE_CODE;
375 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_ID(1) := p_event_class_rec.TRX_ID;
376 -- Initialize l_rec_nrec_dist_tbl
377 l_rec_nrec_dist_tbl.delete;
378
379 IF tax_line_counter = 0 THEN
380 IF (g_level_statement >= g_current_runtime_level ) THEN
381 FND_LOG.STRING(g_level_statement,
382 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
383 'there is no tax lines that need to be processed ');
384
385 FND_LOG.STRING(g_level_statement,
386 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
387 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)'||x_return_status);
388 END IF;
389 RETURN;
390
391 ELSE
392
393 l_exist_frozen_tax_dist_flag := 'N';
394
395 FOR i IN 1 .. tax_line_counter LOOP
396 l_trx_line_id := l_tax_line_tbl(i).trx_line_id;
397 l_trx_level_type := l_tax_line_tbl(i).trx_level_type;
398 l_dist_tbl_begin_index := l_rec_nrec_dist_end_index + 1;
399
400 IF l_tax_line_tbl(i).associated_child_frozen_flag = 'Y' AND
401 l_tax_line_tbl(i).cancel_flag = 'N'
402 THEN
403 l_exist_frozen_tax_dist_flag := 'Y';
404 END IF;
405
406
407 IF l_trx_line_id <> l_old_trx_line_id OR
408 l_trx_level_type <> l_old_trx_level_type THEN -- for a new trx line
409
410 -- Fetch all the trx line info from detail tax line table and populate
411 -- the global PL/SQL table ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.
412 -- This only needs to be done for a new trx line.
413
414
415 populate_trx_line_info( l_tax_line_tbl,
416 i,
417 x_return_status);
418
419 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
420 IF (g_level_statement >= g_current_runtime_level ) THEN
421 FND_LOG.STRING(g_level_statement,
422 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
423 'After calling populate_trx_line_info, x_return_status = '
424 || x_return_status);
425 FND_LOG.STRING(g_level_statement,
426 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
427 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
428 END IF;
429 RETURN;
430 END IF;
431
432 IF l_tax_line_tbl(i).tax_only_line_flag = 'Y' THEN
433
434 -- to handle tax only lines, create dummy item distributions and
435 -- populate this dummy item distributions into pl/sql tables,
436 --
437 OPEN get_pseuso_line_info_csr(
438 l_tax_line_tbl(i).trx_line_id,
439 l_tax_line_tbl(i).trx_level_type);
440 FETCH get_pseuso_line_info_csr INTO
441 trx_line_id_tbl(1),
442 trx_level_type_tbl(1),
443 dist_intended_use_tbl(1),
444 trx_line_dist_amt_tbl(1),
445 trx_line_dist_quantity_tbl(1),
446 ref_doc_application_id_tbl(1),
447 ref_doc_entity_code_tbl(1) ,
448 ref_doc_event_class_code_tbl(1),
449 ref_doc_trx_id_tbl(1),
450 ref_doc_line_id_tbl(1),
451 ref_doc_trx_level_type_tbl(1),
452 account_ccid_tbl(1),
453 account_string_tbl(1),
454 ref_doc_trx_line_dist_qty_tbl(1),
455 -- applied_from_appli_id_tbl(1),
456 -- applied_from_evnt_cls_code_tbl(1),
457 -- applied_from_entity_code_tbl(1),
458 -- applied_from_trx_id_tbl(1),
459 -- applied_from_line_id_tbl(1),
460 -- adjusted_doc_appli_id_tbl(1),
461 -- adjusted_doc_evnt_cls_code_tbl(1),
462 -- adjusted_doc_entity_code_tbl(1),
463 -- adjusted_doc_trx_id_tbl(1),
464 -- adjusted_doc_line_id_tbl(1),
465 -- applied_from_trx_level_tp_tbl(1),
466 -- adjusted_doc_trx_level_tp_tbl(1),
467 gl_date_tbl(1);
468 CLOSE get_pseuso_line_info_csr;
469
470 trx_line_dist_id_tbl(1) := trx_line_id_tbl(1);
471 dist_level_action_tbl(1) := 'CREATE';
472 item_dist_number_tbl(1) := 1;
473 task_id_tbl(1) := NULL;
474 award_id_tbl(1) := NULL;
475 project_id_tbl(1) := NULL;
476 expenditure_type_tbl(1) := NULL;
477 expenditure_org_id_tbl(1) := NULL;
478 expenditure_item_date_tbl(1) := NULL;
479 trx_line_dist_tax_amt_tbl(1) := l_tax_line_tbl(i).tax_amt;
480 ref_doc_dist_id_tbl(1) := NULL;
481 price_diff_tbl(1) := NULL;
482 ref_doc_curr_conv_rate_tbl(1) := NULL;
483 applied_to_curr_conv_rate_tbl(1) := NULL;
484
485 applied_from_dist_id_tbl(1) := NULL;
486 adjusted_doc_dist_id_tbl(1) := NULL;
487 overriding_recovery_rate_tbl(1) := NULL;
488
489 IF (g_level_statement >= g_current_runtime_level ) THEN
490 FND_LOG.STRING(g_level_statement,
491 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
492 'trx_line_dist_id_tbl '
493 ||to_char(trx_line_dist_id_tbl(1)));
494 END IF;
495 ELSE
496
497 -- Fetch item distributions of this transaction line from
498 -- zx_itm_distributions_gt into pl/sql tables
499 --
500 OPEN get_item_dist_csr(l_trx_line_id, l_trx_level_type);
501 FETCH get_item_dist_csr BULK COLLECT INTO
502 trx_line_dist_id_tbl,
503 trx_line_id_tbl,
504 trx_level_type_tbl,
505 dist_level_action_tbl,
506 item_dist_number_tbl,
507 dist_intended_use_tbl,
508 task_id_tbl,
509 award_id_tbl,
510 project_id_tbl,
511 expenditure_type_tbl,
512 expenditure_org_id_tbl,
513 expenditure_item_date_tbl,
514 trx_line_dist_amt_tbl,
515 trx_line_dist_quantity_tbl,
516 ref_doc_application_id_tbl,
517 ref_doc_entity_code_tbl,
518 ref_doc_event_class_code_tbl,
519 ref_doc_trx_id_tbl,
520 ref_doc_line_id_tbl,
521 ref_doc_trx_level_type_tbl,
522 ref_doc_dist_id_tbl,
523 ref_doc_curr_conv_rate_tbl,
524 trx_line_dist_tax_amt_tbl,
525 account_ccid_tbl,
526 account_string_tbl,
527 price_diff_tbl,
528 ref_doc_trx_line_dist_qty_tbl,
529 ref_doc_curr_conv_rate_tbl,
530 applied_to_curr_conv_rate_tbl,
531 -- applied_from_appli_id_tbl,
532 -- applied_from_evnt_cls_code_tbl,
533 -- applied_from_entity_code_tbl,
534 -- applied_from_trx_id_tbl,
535 -- applied_from_line_id_tbl,
536 applied_from_dist_id_tbl,
537 -- adjusted_doc_appli_id_tbl,
538 -- adjusted_doc_evnt_cls_code_tbl,
539 -- adjusted_doc_entity_code_tbl,
540 -- adjusted_doc_trx_id_tbl,
541 -- adjusted_doc_line_id_tbl,
542 adjusted_doc_dist_id_tbl,
543 overriding_recovery_rate_tbl,
544 -- applied_from_trx_level_tp_tbl,
545 -- adjusted_doc_trx_level_tp_tbl,
546 gl_date_tbl;
547 CLOSE get_item_dist_csr;
548
549 END IF; -- tax_only_line_flag = 'Y'
550 END IF; -- trx_line_id <> l_old_trx_line_id
551
552 IF l_tax_line_tbl(i).cancel_flag = 'Y' THEN -- cancelled tax line
553
554 -- For cancelled tax line, reverse frozen tax distributions and cancel others.
555 --
556
557 ZX_TRD_INTERNAL_SERVICES_PVT.cancel_tax_line(
558 l_tax_line_tbl,
559 i,
560 l_rec_nrec_dist_tbl,
561 l_dist_tbl_begin_index,
562 l_rec_nrec_dist_end_index,
563 p_event_class_rec,
564 x_return_status,
565 p_error_buffer);
566
567 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
568 IF (g_level_statement >= g_current_runtime_level ) THEN
569 FND_LOG.STRING(g_level_statement,
570 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
571 'After calling cancel_tax_line x_return_status = '
572 || x_return_status);
573 FND_LOG.STRING(g_level_statement,
574 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
575 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
576 END IF;
577 RETURN;
578 END IF;
579
580 ELSE -- cancel_flag <> 'Y'
581
582 IF p_event_class_rec.tax_variance_calc_flag = 'Y' THEN
583
584 -- populate g_tax_variance_info_tbl
585 --
586 IF trx_line_dist_id_tbl.COUNT > 0 AND
587 ref_doc_application_id_tbl(trx_line_dist_id_tbl.FIRST) IS NOT NULL
588 THEN
589
590 g_variance_calc_flag := 'Y';
591
592 FOR j IN trx_line_dist_id_tbl.FIRST .. trx_line_dist_id_tbl.LAST LOOP
593
594 g_tax_variance_info_tbl(
595 trx_line_dist_id_tbl(j)).trx_line_dist_qty :=
596 trx_line_dist_quantity_tbl(j);
597 g_tax_variance_info_tbl(
598 trx_line_dist_id_tbl(j)).price_diff := price_diff_tbl(j);
599 g_tax_variance_info_tbl(
600 trx_line_dist_id_tbl(j)).ref_doc_trx_line_dist_qty :=
601 ref_doc_trx_line_dist_qty_tbl(j);
602 g_tax_variance_info_tbl(
603 trx_line_dist_id_tbl(j)).ref_doc_curr_conv_rate :=
604 ref_doc_curr_conv_rate_tbl(j);
605 g_tax_variance_info_tbl(
606 trx_line_dist_id_tbl(j)).applied_to_doc_curr_conv_rate :=
607 applied_to_curr_conv_rate_tbl(j);
608 END LOOP;
609 END IF; -- ref_doc_dist_id_tbl(j) IS NOT NULL
610 END IF; -- p_event_class_rec.tax_variance_calc_flag = 'Y'
611
612 -- populate item distribution information into
613 -- ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL
614 --
615 IF NVL(l_tax_line_tbl(i).process_for_recovery_flag,'N') = 'N' THEN
616
617 -- there is no change on the tax line, i.e., item dist is either
618 -- updated or new
619 --
620 FOR j IN NVL(trx_line_dist_id_tbl.FIRST, 0) .. NVL(trx_line_dist_id_tbl.LAST, -1)
621 LOOP
622 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_ID(1) := trx_line_id_tbl(j);
623 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LEVEL_TYPE(1) := trx_level_type_tbl(j);
624 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_ID(1) := trx_line_dist_id_tbl(j);
625 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.DIST_LEVEL_ACTION(1) := dist_level_action_tbl(j);
626 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ITEM_DIST_NUMBER(1) := item_dist_number_tbl(j);
627 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.LINE_INTENDED_USE(1) := dist_intended_use_tbl(j);
628 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TASK_ID(1) := task_id_tbl(j);
629 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.AWARD_ID(1) := award_id_tbl(j);
630 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.PROJECT_ID(1) := project_id_tbl(j);
631 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.EXPENDITURE_TYPE(1) := expenditure_type_tbl(j);
632 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.EXPENDITURE_ORGANIZATION_ID(1):= expenditure_org_id_tbl(j);
633 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.EXPENDITURE_ITEM_DATE(1) := expenditure_item_date_tbl(j);
634 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_AMT(1) := trx_line_dist_amt_tbl(j);
635 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_QUANTITY(1) := trx_line_dist_quantity_tbl(j);
636 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_APPLICATION_ID(1) := ref_doc_application_id_tbl(j);
637 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_ENTITY_CODE(1) := ref_doc_entity_code_tbl(j);
638 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_EVENT_CLASS_CODE(1) := ref_doc_event_class_code_tbl(j);
639 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_TRX_ID(1) := ref_doc_trx_id_tbl(j);
640 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_LINE_ID(1) := ref_doc_line_id_tbl(j);
641 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_TRX_LEVEL_TYPE(1) := ref_doc_trx_level_type_tbl(j);
642 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_DIST_ID(1) := ref_doc_dist_id_tbl(j);
643 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_CURR_CONV_RATE(1) := ref_doc_curr_conv_rate_tbl(j);
644 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_TAX_AMT(1) := trx_line_dist_tax_amt_tbl(j);
645 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ACCOUNT_CCID(1) := account_ccid_tbl(j);
646 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ACCOUNT_STRING(1):= account_string_tbl(j);
647 -- get the applied from and adjusted to doc trx line keys from tax line bug 5580045
648 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_application_id(1) :=
649 l_tax_line_tbl(i).applied_from_application_id;
650 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_event_class_code(1) :=
651 l_tax_line_tbl(i).applied_from_event_class_code;
652 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_entity_code(1) :=
653 l_tax_line_tbl(i).applied_from_entity_code;
654 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_trx_id(1) :=
655 l_tax_line_tbl(i).applied_from_trx_id;
656 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_line_id(1) :=
657 l_tax_line_tbl(i).applied_from_line_id;
658 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_dist_id(1) := applied_from_dist_id_tbl(j);
659 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_application_id(1) :=
660 l_tax_line_tbl(i).adjusted_doc_application_id;
661 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_event_class_code(1) :=
662 l_tax_line_tbl(i).adjusted_doc_event_class_code;
663 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_entity_code(1) :=
664 l_tax_line_tbl(i).adjusted_doc_entity_code;
665 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_trx_id(1) :=
666 l_tax_line_tbl(i).adjusted_doc_trx_id;
667 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_line_id(1) :=
668 l_tax_line_tbl(i).adjusted_doc_line_id;
669 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_dist_id(1) := adjusted_doc_dist_id_tbl(j);
670 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.overriding_recovery_rate(1) := overriding_recovery_rate_tbl(j);
671 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_trx_level_type(1) :=
672 l_tax_line_tbl(i).applied_from_trx_level_type;
673 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_trx_level_type(1) :=
674 l_tax_line_tbl(i).adjusted_doc_trx_level_type;
675 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trx_line_gl_date(1) := gl_date_tbl(j); -- store gl date in trx_line_gl_date
676
677 l_rec_nrec_dist_begin_index := l_rec_nrec_dist_end_index + 1;
678 l_action := ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.DIST_LEVEL_ACTION(1);
679
680 IF l_action = 'CREATE' or l_action = 'UPDATE' THEN
681
682 -- get new tax distributions for this tax line and item dist
683
684 ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist(
685 l_tax_line_tbl,
686 i,
687 1,
688 l_rec_nrec_dist_tbl,
689 l_rec_nrec_dist_begin_index,
690 l_rec_nrec_dist_end_index,
691 p_event_class_rec,
692 x_return_status,
693 p_error_buffer);
694
695 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
696 IF (g_level_statement >= g_current_runtime_level ) THEN
697 FND_LOG.STRING(g_level_statement,
698 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
699 'After calling calc_tax_dist x_return_status = '
700 || x_return_status);
701 FND_LOG.STRING(g_level_statement,
702 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
703 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
704 END IF;
705 RETURN;
706 END IF;
707 ELSIF l_action = 'NO_ACTION' THEN
708
709 -- this tax line or item dist has no change, but other item dist might
710 --
711 fetch_tax_distributions(
712 p_event_class_rec,
713 l_tax_line_tbl(i).tax_line_id,
714 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_ID(1),
715 l_rec_nrec_dist_tbl,
716 l_rec_nrec_dist_begin_index,
717 l_rec_nrec_dist_end_index,
718 x_return_status);
719
720 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
721 IF (g_level_statement >= g_current_runtime_level ) THEN
722 FND_LOG.STRING(g_level_statement,
723 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
724 'After calling fetch_tax_distributions x_return_status = '
725 || x_return_status);
726 FND_LOG.STRING(g_level_statement,
727 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
728 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
729 END IF;
730 RETURN;
731 END IF;
732 ELSE -- wrong l_action
733 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR; -- bug 4893261
734 IF (g_level_statement >= g_current_runtime_level ) THEN
735 FND_LOG.STRING(g_level_statement,
736 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
737 'wrong dist level action code. l_action= '||l_action );
738 FND_LOG.STRING(g_level_statement,
739 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
740 'RETURN_STATUS = ' || x_return_status);
741 END IF;
742 RETURN;
743 END IF; -- l_action
744 END LOOP; -- loop through trx_line_dist_id_tbl
745
746 ELSE -- this is a new or updated tax line
747
748 FOR j IN NVL(trx_line_dist_id_tbl.FIRST, 0) .. NVL(trx_line_dist_id_tbl.LAST,-1)
749 LOOP
750 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_ID(1) := trx_line_id_tbl(j);
751 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_Level_type(1) := trx_level_type_tbl(j);
752 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_ID(1) := trx_line_dist_id_tbl(j);
753 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.DIST_LEVEL_ACTION(1) := dist_level_action_tbl(j);
754 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ITEM_DIST_NUMBER(1) := item_dist_number_tbl(j);
755 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.LINE_INTENDED_USE(1) := dist_intended_use_tbl(j);
756 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TASK_ID(1) := task_id_tbl(j);
757 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.AWARD_ID(1) := award_id_tbl(j);
758 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.PROJECT_ID(1) := project_id_tbl(j);
759 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.EXPENDITURE_TYPE(1) := expenditure_type_tbl(j);
760 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.EXPENDITURE_ORGANIZATION_ID(1):= expenditure_org_id_tbl(j);
761 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.EXPENDITURE_ITEM_DATE(1) := expenditure_item_date_tbl(j);
762 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_AMT(1) := trx_line_dist_amt_tbl(j);
763 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_QUANTITY(1) := trx_line_dist_quantity_tbl(j);
764 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_APPLICATION_ID(1) := ref_doc_application_id_tbl(j);
765 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_ENTITY_CODE(1) := ref_doc_entity_code_tbl(j);
766 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_EVENT_CLASS_CODE(1) := ref_doc_event_class_code_tbl(j);
767 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_TRX_ID(1) := ref_doc_trx_id_tbl(j);
768 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_LINE_ID(1) := ref_doc_line_id_tbl(j);
769 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_TRX_LEVEL_TYPE(1) := ref_doc_trx_level_type_tbl(j);
770 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_DIST_ID(1) := ref_doc_dist_id_tbl(j);
771 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.REF_DOC_CURR_CONV_RATE(1) := ref_doc_curr_conv_rate_tbl(j);
772 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.TRX_LINE_DIST_TAX_AMT(1) := trx_line_dist_tax_amt_tbl(j);
773 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ACCOUNT_CCID(1) := account_ccid_tbl(j);
774 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ACCOUNT_STRING(1) := account_string_tbl(j);
775
776 -- get the applied from and adjusted to doc trx line keys from tax line bug 5580045
777 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_application_id(1) :=
778 l_tax_line_tbl(i).applied_from_application_id;
779 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_event_class_code(1) :=
780 l_tax_line_tbl(i).applied_from_event_class_code;
781 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_entity_code(1) :=
782 l_tax_line_tbl(i).applied_from_entity_code;
783 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_trx_id(1) :=
784 l_tax_line_tbl(i).applied_from_trx_id;
785 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_line_id(1) :=
786 l_tax_line_tbl(i).applied_from_line_id;
787 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_dist_id(1) := applied_from_dist_id_tbl(j);
788 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_application_id(1) :=
789 l_tax_line_tbl(i).adjusted_doc_application_id;
790 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_event_class_code(1) :=
791 l_tax_line_tbl(i).adjusted_doc_event_class_code;
792 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_entity_code(1) :=
793 l_tax_line_tbl(i).adjusted_doc_entity_code;
794 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_trx_id(1) :=
795 l_tax_line_tbl(i).adjusted_doc_trx_id;
796 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_line_id(1) :=
797 l_tax_line_tbl(i).adjusted_doc_line_id;
798 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_dist_id(1) := adjusted_doc_dist_id_tbl(j);
799 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.overriding_recovery_rate(1) := overriding_recovery_rate_tbl(j);
800 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.applied_from_trx_level_type(1) :=
801 l_tax_line_tbl(i).applied_from_trx_level_type;
802 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.adjusted_doc_trx_level_type(1) :=
803 l_tax_line_tbl(i).adjusted_doc_trx_level_type;
804 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trx_line_gl_date(1) := gl_date_tbl(j); -- store gl date in trx_line_gl_date
805
806 l_rec_nrec_dist_begin_index := l_rec_nrec_dist_end_index + 1;
807 l_action := ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.DIST_LEVEL_ACTION(1);
808
809 IF (g_level_statement >= g_current_runtime_level ) THEN
810 FND_LOG.STRING(g_level_statement,
811 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
812 'dist level action = ' || l_action);
813 END IF;
814
815 IF l_action = 'CREATE' OR l_action = 'UPDATE' OR l_action = 'NO_ACTION'
816 THEN
817 -- get new tax distributions for this tax line and item dist
818 --
819
820 ZX_TRD_INTERNAL_SERVICES_PVT.calc_tax_dist(
821 l_tax_line_tbl,
822 i,
823 1,
824 l_rec_nrec_dist_tbl,
825 l_rec_nrec_dist_begin_index,
826 l_rec_nrec_dist_end_index,
827 p_event_class_rec,
828 x_return_status,
829 p_error_buffer);
830
831 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
832 IF (g_level_statement >= g_current_runtime_level ) THEN
833 FND_LOG.STRING(g_level_statement,
834 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
835 'After calling calc_tax_dist x_return_status = '
836 || x_return_status);
837 FND_LOG.STRING(g_level_statement,
838 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
839 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
840 END IF;
841 RETURN;
842 END IF;
843
844 ELSE -- wrong l_action
845 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
846 IF (g_level_statement >= g_current_runtime_level ) THEN
847 FND_LOG.STRING(g_level_statement,
848 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
849 'wrong dist level action code ' );
850
851 END IF;
852 RETURN;
853 END IF; -- l_action
854 END LOOP; -- loop through trx_line_dist_id_tbl
855 END IF; -- process for recovery flag
856
857 -- calculate recovery/non tax amount
858 --
859
860 IF trx_line_dist_id_tbl.COUNT > 0 THEN
861 ZX_TRD_INTERNAL_SERVICES_PVT.get_rec_nrec_dist_amt(
862 l_tax_line_tbl,
863 i,
864 l_rec_nrec_dist_tbl,
865 l_dist_tbl_begin_index,
866 l_rec_nrec_dist_end_index,
867 x_return_status,
868 p_error_buffer);
869
870 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
871 IF (g_level_statement >= g_current_runtime_level ) THEN
872 FND_LOG.STRING(g_level_statement,
873 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
874 'After calling get_rec_nrec_dist_amt x_return_status = '
875 || x_return_status);
876 FND_LOG.STRING(g_level_statement,
877 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
878 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
879 END IF;
880 RETURN;
881 END IF;
882
883 -- perform rounding
884
885 ZX_TRD_INTERNAL_SERVICES_PVT.round_rec_nrec_amt(
886 l_rec_nrec_dist_tbl,
887 l_dist_tbl_begin_index,
888 l_rec_nrec_dist_end_index,
889 l_tax_line_tbl(i).tax_amt,
890 l_tax_line_tbl(i).tax_amt_tax_curr,
891 l_tax_line_tbl(i).tax_amt_funcl_curr,
892 x_return_status,
893 p_error_buffer);
894
895 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
896 IF (g_level_statement >= g_current_runtime_level ) THEN
897 FND_LOG.STRING(g_level_statement,
898 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
899 'After calling ROUND_REC_NREC_AMT x_return_status = '
900 || x_return_status);
901 FND_LOG.STRING(g_level_statement,
902 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
903 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
904 END IF;
905 RETURN;
906 END IF;
907
908 -- Bug 4352593: comment out the call to MRC processing procedure
909 --
910 -- IF p_event_class_rec.enable_mrc_flag = 'Y' THEN
911 -- -- create MRC tax distributions
912 -- --
913 --
914 -- ZX_TRD_INTERNAL_SERVICES_PVT.create_mrc_tax_dists(
915 -- p_event_class_rec,
916 -- l_rec_nrec_dist_tbl,
917 -- l_dist_tbl_begin_index,
918 -- l_rec_nrec_dist_end_index,
919 -- x_return_status,
920 -- p_error_buffer);
921 --
922 -- IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
923 -- IF (g_level_statement >= g_current_runtime_level ) THEN
924 -- FND_LOG.STRING(g_level_statement,
925 -- 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
926 -- 'After calling create_mrc_tax_dists x_return_status = '
927 -- || x_return_status);
928 -- FND_LOG.STRING(g_level_statement,
929 -- 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
930 -- 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
931 -- END IF;
932 -- RETURN;
933 -- END IF;
934 -- END IF; -- p_event_class_rec.enable_mrc_flag = 'Y'
935 END IF; -- trx_line_dist_id_tbl.COUNT > 0
936 END IF; -- cancel flag
937
938 -- insert into global temporary table
939 insert_global_table(
940 l_rec_nrec_dist_tbl,
941 l_dist_tbl_begin_index,
942 l_rec_nrec_dist_end_index,
943 x_return_status);
944
945 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
946 IF (g_level_statement >= g_current_runtime_level ) THEN
947 FND_LOG.STRING(g_level_statement,
948 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
949 'After calling insert_global_table x_return_status = '
950 || x_return_status);
951 FND_LOG.STRING(g_level_statement,
952 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
953 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
954 END IF;
955 RETURN;
956 END IF;
957
958 l_old_trx_line_id := l_trx_line_id;
959 l_old_trx_level_type := l_trx_level_type;
960
961 END LOOP; -- loop through l_tax_line_tbl
962 END IF; -- tax line counter.COUNT = 0 OR ELSE 0
963
964 -- populate mandatory columns before inserting.
965 populate_mandatory_columns(l_rec_nrec_dist_tbl,x_return_status);
966
967 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
968 IF (g_level_statement >= g_current_runtime_level ) THEN
969 FND_LOG.STRING(g_level_statement,
970 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
971 'After calling populate_mandatory_columns x_return_status = '
972 || x_return_status);
973 FND_LOG.STRING(g_level_statement,
974 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
975 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
976 END IF;
977 RETURN;
978 END IF;
979
980 FORALL ctr IN NVL(l_rec_nrec_dist_tbl.FIRST,0) .. NVL(l_rec_nrec_dist_tbl.LAST,-1)
981 INSERT INTO zx_rec_nrec_dist_gt VALUES l_rec_nrec_dist_tbl(ctr);
982
983 -- when is tax_variance_calc_flag is 'Y', calculate variance factors for all
984 -- the tax distributions in global table zx_rec_nrec_dist_gt
985
986 IF l_exist_frozen_tax_dist_flag = 'Y' THEN
987
988 delete_unnecessary_tax_dists(p_event_class_rec => p_event_class_rec,
989 x_return_status => x_return_status);
990
991 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
992 IF g_level_statement >= g_current_runtime_level THEN
993 FND_LOG.STRING(g_level_statement,
994 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
995 'After calling delete_unnecessary_tax_dists, x_return_status = '
996 || x_return_status);
997 FND_LOG.STRING(g_level_statement,
998 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
999 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
1000 END IF;
1001 RETURN;
1002 END IF;
1003 END IF;
1004
1005
1006 IF (g_level_procedure >= g_current_runtime_level ) THEN
1007
1008 FND_LOG.STRING(g_level_procedure,
1009 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
1010 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)'||x_return_status);
1011 END IF;
1012
1013 EXCEPTION
1014 WHEN OTHERS THEN
1015 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1016 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1017
1018 IF (g_level_unexpected >= g_current_runtime_level ) THEN
1019 FND_LOG.STRING(g_level_unexpected,
1020 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY',
1021 p_error_buffer);
1022 FND_LOG.STRING(g_level_unexpected,
1023 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY.END',
1024 'ZX_TRD_SERVICES_PUB_PKG.DETERMINE_RECOVERY(-)');
1025
1026 END IF;
1027
1028 END DETERMINE_RECOVERY;
1029
1030 /* =============================================================================*
1031 | PUBLIC PROCEDURE override_recovery |
1032 | |
1033 | DESCRIPTION |
1034 | This procedure is used to get the recoverable and non-recovearble tax |
1035 | distributions after user makes changes on the tax distribution UI. |
1036 | |
1037 | This procedure will be called directly by TSRM service. |
1038 | |
1039 * =============================================================================*/
1040
1041 PROCEDURE OVERRIDE_RECOVERY(
1042 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
1043 x_return_status OUT NOCOPY VARCHAR2) IS
1044
1045 l_tax_line_id NUMBER;
1046 l_rec_nrec_dist_tbl rec_nrec_dist_tbl_type;
1047 l_rec_nrec_dist_begin_index NUMBER;
1048 l_rec_nrec_dist_end_index NUMBER;
1049 i NUMBER;
1050
1051 CURSOR fetch_tax_line_id_csr IS
1052 SELECT tax_line_id,
1053 tax_amt,
1054 tax_amt_tax_curr,
1055 tax_amt_funcl_curr
1056 FROM zx_lines
1057 WHERE trx_id =
1058 p_event_class_rec.trx_id
1059 AND application_id =
1060 p_event_class_rec.application_id
1061 AND entity_code =
1062 p_event_class_rec.entity_code
1063 AND event_class_code =
1064 p_event_class_rec.event_class_code
1065 AND Reporting_Only_Flag = 'N' -- do not process reporting only lines
1066 AND Process_For_Recovery_Flag = 'Y'
1067 AND mrc_tax_line_flag = 'N';
1068
1069 CURSOR fetch_tax_distributions_csr(l_tax_line_id NUMBER) IS
1070 SELECT *
1071 FROM zx_rec_nrec_dist
1072 WHERE trx_id = p_event_class_rec.trx_id
1073 AND application_id = p_event_class_rec.application_id
1074 AND entity_code = p_event_class_rec.entity_code
1075 AND event_class_code = p_event_class_rec.event_class_code
1076 AND tax_line_id = l_tax_line_id
1077 AND NVL(freeze_flag, 'N') = 'N'
1078 AND NVL(reverse_flag, 'N') = 'N'
1079 AND mrc_tax_dist_flag = 'N';
1080
1081 l_tax_line_amt NUMBER;
1082 l_tax_line_amt_tax_curr NUMBER;
1083 l_tax_line_amt_funcl_curr NUMBER;
1084
1085 BEGIN
1086
1087 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1088
1089 IF (g_level_procedure >= g_current_runtime_level ) THEN
1090 FND_LOG.STRING(g_level_procedure,
1091 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY.BEGIN',
1092 'ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY(+)');
1093 END IF;
1094
1095 x_return_status:= FND_API.G_RET_STS_SUCCESS;
1096
1097 -- Initialize p_tax_line_tbl
1098 l_rec_nrec_dist_tbl.delete;
1099 g_variance_calc_flag := 'N';
1100
1101 --
1102 -- init msg record to be passed back to TSRM
1103 --
1104 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.application_id :=
1105 p_event_class_rec.application_id;
1106 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.entity_code :=
1107 p_event_class_rec.entity_code;
1108 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.event_class_code :=
1109 p_event_class_rec.event_class_code;
1110 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_id :=
1111 p_event_class_rec.trx_id;
1112 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_id := NULL;
1113 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_level_type := NULL;
1114 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.summary_tax_line_number :=
1115 NULL;
1116 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.tax_line_id := NULL;
1117 ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec.trx_line_dist_id := NULL;
1118
1119
1120 OPEN fetch_tax_line_id_csr;
1121
1122 i := 1;
1123
1124 LOOP
1125 FETCH fetch_tax_line_id_csr INTO l_tax_line_id, l_tax_line_amt,
1126 l_tax_line_amt_tax_curr, l_tax_line_amt_funcl_curr;
1127
1128 -- Bug 5985143. Recovery rate and amount were not getting changed after changing recovery rate code in distributions form.
1129 -- After changes to payables code, when user clicks on OK button, application hangs.
1130 -- There is not exit condition to the above. Hence added exit condition when cursor doesn't return any row.
1131
1132 EXIT WHEN fetch_tax_line_id_csr%notfound;
1133
1134 OPEN fetch_tax_distributions_csr(l_tax_line_id);
1135
1136 l_rec_nrec_dist_begin_index := i;
1137
1138 LOOP
1139
1140 FETCH fetch_tax_distributions_csr into l_rec_nrec_dist_tbl(i);
1141
1142 EXIT WHEN fetch_tax_distributions_csr%notfound;
1143
1144 IF p_event_class_rec.tax_variance_calc_flag = 'Y' AND
1145 l_rec_nrec_dist_tbl(i).recoverable_flag = 'N' AND
1146 l_rec_nrec_dist_tbl(i).ref_doc_application_id IS NOT NULL THEN
1147
1148 g_variance_calc_flag := 'Y';
1149
1150 END IF;
1151
1152 i := i + 1;
1153
1154 END LOOP;
1155
1156 l_rec_nrec_dist_end_index := i - 1;
1157
1158 CLOSE fetch_tax_distributions_csr;
1159
1160 -- on UI, recovery rate and non-recovery rate has already been determined.
1161 -- and the unrounded rec/non-rec tax distribution amount has already been calculated.
1162 -- perform rounding
1163
1164 IF l_rec_nrec_dist_end_index >= l_rec_nrec_dist_begin_index THEN
1165 ZX_TRD_INTERNAL_SERVICES_PVT.ROUND_REC_NREC_AMT(
1166 l_rec_nrec_dist_tbl,
1167 l_rec_nrec_dist_begin_index,
1168 l_rec_nrec_dist_end_index,
1169 l_tax_line_amt,
1170 l_tax_line_amt_tax_curr,
1171 l_tax_line_amt_funcl_curr,
1172 x_return_status,
1173 p_error_buffer
1174 );
1175
1176 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1177
1178 IF (g_level_statement >= g_current_runtime_level ) THEN
1179 FND_LOG.STRING(g_level_statement,
1180 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY',
1181 'After calling ROUND_REC_NREC_AMT x_return_status = '
1182 || x_return_status);
1183 FND_LOG.STRING(g_level_statement,
1184 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY.END',
1185 'ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY(-)');
1186 END IF;
1187 RETURN;
1188
1189 END IF;
1190
1191 -- Bug 4352593: comment out the call to MRC processing procedure
1192 --
1193 -- IF p_event_class_rec.enable_mrc_flag = 'Y' THEN
1194 -- -- create MRC tax distributions
1195 -- --
1196 -- IF (g_level_statement >= g_current_runtime_level ) THEN
1197 -- FND_LOG.STRING(g_level_statement,
1198 -- 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY',
1199 -- 'create MRC tax distributions' );
1200 -- END IF;
1201 --
1202 -- ZX_TRD_INTERNAL_SERVICES_PVT.create_mrc_tax_dists(
1203 -- p_event_class_rec,
1204 -- l_rec_nrec_dist_tbl,
1205 -- l_rec_nrec_dist_begin_index,
1206 -- l_rec_nrec_dist_end_index,
1207 -- x_return_status,
1208 -- p_error_buffer);
1209 --
1210 -- IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1211 -- IF (g_level_statement >= g_current_runtime_level ) THEN
1212 -- FND_LOG.STRING(g_level_statement,
1213 -- 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY',
1214 -- 'After calling create_mrc_tax_dists x_return_status = '
1215 -- || x_return_status);
1216 -- FND_LOG.STRING(g_level_statement,
1217 -- 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY.END',
1218 -- 'ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY(-)');
1219 -- END IF;
1220 -- RETURN;
1221 -- END IF;
1222 -- END IF; -- p_event_class_rec.enable_mrc_flag = 'Y'
1223 END IF; -- l_rec_nrec_dist_end_index >= l_rec_nrec_dist_begin_index
1224
1225 -- insert into global temporary table
1226 insert_global_table(
1227 l_rec_nrec_dist_tbl,
1228 l_rec_nrec_dist_begin_index,
1229 l_rec_nrec_dist_end_index,
1230 x_return_status);
1231
1232 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1233
1234 IF (g_level_statement >= g_current_runtime_level ) THEN
1235 FND_LOG.STRING(g_level_statement,
1236 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY',
1237 'After calling insert_global_table x_return_status = '
1238 || x_return_status);
1239 FND_LOG.STRING(g_level_statement,
1240 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY.END',
1241 'ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY(-)');
1242 END IF;
1243 RETURN;
1244
1245 END IF;
1246
1247 i := l_rec_nrec_dist_end_index + 1;
1248
1249 END LOOP;
1250
1251 CLOSE fetch_tax_line_id_csr;
1252
1253 -- populate mandatory columns before inserting.
1254 populate_mandatory_columns(l_rec_nrec_dist_tbl, x_return_status);
1255
1256 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1257
1258 IF (g_level_statement >= g_current_runtime_level ) THEN
1259 FND_LOG.STRING(g_level_statement,
1260 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY',
1261 'After calling populate_mandatory_columns x_return_status = '
1262 || x_return_status);
1263 FND_LOG.STRING(g_level_statement,
1264 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY.END',
1265 'ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY(-)');
1266 END IF;
1267 RETURN;
1268
1269 END IF;
1270
1271 FORALL ctr IN NVL(l_rec_nrec_dist_tbl.FIRST,0) .. NVL(l_rec_nrec_dist_tbl.LAST,-1)
1272 INSERT INTO zx_rec_nrec_dist_gt VALUES l_rec_nrec_dist_tbl(ctr);
1273
1274 -- bug fix 3313938: add tax_variance_calc_flag check.
1275 IF g_variance_calc_flag = 'Y' THEN
1276 -- when is tax_variance_calc_flag is 'Y', calculate variance factors for
1277 -- all the tax distributions in global table zx_rec_nrec_dist_gt
1278
1279 ZX_TRD_INTERNAL_SERVICES_PVT.calc_variance_factors(
1280 x_return_status,
1281 p_error_buffer
1282 );
1283
1284 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1285
1286 IF (g_level_statement >= g_current_runtime_level ) THEN
1287 FND_LOG.STRING(g_level_statement,
1288 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY',
1289 'After calling calc_variance_factors ' ||
1290 'x_return_status = ' || x_return_status);
1291 FND_LOG.STRING(g_level_statement,
1292 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY.END',
1293 'ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY(-)');
1294 END IF;
1295 RETURN;
1296
1297 END IF;
1298 END IF;
1299
1300 IF (g_level_procedure >= g_current_runtime_level ) THEN
1301
1302 FND_LOG.STRING(g_level_procedure,
1303 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY.END',
1304 'ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY(-)'||x_return_status);
1305 END IF;
1306
1307 EXCEPTION
1308 WHEN OTHERS THEN
1309 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1310 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1311
1312 IF (g_level_unexpected >= g_current_runtime_level ) THEN
1313 FND_LOG.STRING(g_level_unexpected,
1314 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY',
1315 p_error_buffer);
1316 FND_LOG.STRING(g_level_unexpected,
1317 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY.END',
1318 'ZX_TRD_SERVICES_PUB_PKG.OVERRIDE_RECOVERY(-)');
1319
1320 END IF;
1321
1322 END OVERRIDE_RECOVERY;
1323
1324 /* =============================================================================*
1325 | PUBLIC PROCEDURE REVERSE_TAX_DIST |
1326 | |
1327 | DESCRIPTION |
1328 | This procedure is used to reverse all the frozen tax distributions on UI, |
1329 | it reads all the reversed tax distribution ids from global temporary table |
1330 | zx_tax_dist_id_gt and put all the returned tax distributions to PL/SQL table|
1331 | p_rec_nrec_dist_tbl. UI needs to delete all the tax distributions uses want|
1332 | to freeze and insert all the tax distributions from p_rec_nrec_dist_tbl to |
1333 | tax reporsitory. |
1334 | |
1335 | This procedure will be called from the tax distribution UI. |
1336 | |
1337 * =============================================================================*/
1338
1339 PROCEDURE REVERSE_TAX_DIST(
1340 p_rec_nrec_dist_tbl OUT NOCOPY REC_NREC_DIST_TBL_TYPE,
1341 x_return_status OUT NOCOPY VARCHAR2)
1342 is
1343
1344 l_index number;
1345
1346 CURSOR get_rec_nrec_dist_cur is
1347 SELECT *
1348 FROM zx_rec_nrec_dist
1349 WHERE rec_nrec_tax_dist_id IN (SELECT tax_dist_id FROM zx_tax_dist_id_gt);
1350
1351 BEGIN
1352
1353 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1354
1355 IF (g_level_procedure >= g_current_runtime_level ) THEN
1356 FND_LOG.STRING(g_level_procedure,
1357 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.REVERSE_TAX_DIST.BEGIN',
1358 'ZX_TRD_SERVICES_PUB_PKG.REVERSE_TAX_DIST(+)');
1359 END IF;
1360 x_return_status:= FND_API.G_RET_STS_SUCCESS;
1361
1362 l_index:= 1;
1363
1364 OPEN get_rec_nrec_dist_cur;
1365
1366 LOOP
1367 FETCH get_rec_nrec_dist_cur INTO p_rec_nrec_dist_tbl(l_index);
1368 EXIT when get_rec_nrec_dist_cur%NOTFOUND;
1369
1370 -- get g_tax_dist_id
1371 --
1372 SELECT ZX_REC_NREC_DIST_S.nextval
1373 INTO ZX_TRD_SERVICES_PUB_PKG.g_tax_dist_id
1374 FROM dual;
1375
1376 p_rec_nrec_dist_tbl(l_index).Reverse_Flag:= 'Y';
1377
1378 l_index:= l_index + 1;
1379 p_rec_nrec_dist_tbl(l_index):= p_rec_nrec_dist_tbl(l_index-1);
1380 -- reversed tax dist id is the original rec nrec tax dist id.
1381 p_rec_nrec_dist_tbl(l_index).reversed_tax_dist_id := p_rec_nrec_dist_tbl(l_index-1).rec_nrec_tax_dist_id;
1382 p_rec_nrec_dist_tbl(l_index).freeze_flag:= 'N';
1383 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_dist_id:= ZX_TRD_SERVICES_PUB_PKG.g_tax_dist_id;
1384
1385 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt :=
1386 -p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt;
1387 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr :=
1388 -p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_tax_curr;
1389 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr :=
1390 -p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_amt_funcl_curr;
1391 p_rec_nrec_dist_tbl(l_index).unrounded_rec_nrec_tax_amt:=
1392 -p_rec_nrec_dist_tbl(l_index).unrounded_rec_nrec_tax_amt;
1393 p_rec_nrec_dist_tbl(l_index).trx_line_dist_amt :=
1394 -p_rec_nrec_dist_tbl(l_index).trx_line_dist_amt;
1395 p_rec_nrec_dist_tbl(l_index).trx_line_dist_tax_amt :=
1396 -p_rec_nrec_dist_tbl(l_index).trx_line_dist_tax_amt;
1397 p_rec_nrec_dist_tbl(l_index).orig_rec_nrec_tax_amt :=
1398 -p_rec_nrec_dist_tbl(l_index).orig_rec_nrec_tax_amt;
1399 p_rec_nrec_dist_tbl(l_index).orig_rec_nrec_tax_amt_tax_curr :=
1400 -p_rec_nrec_dist_tbl(l_index).orig_rec_nrec_tax_amt_tax_curr;
1401 p_rec_nrec_dist_tbl(l_index).taxable_amt :=
1402 -p_rec_nrec_dist_tbl(l_index).taxable_amt;
1403 p_rec_nrec_dist_tbl(l_index).taxable_amt_tax_curr :=
1404 -p_rec_nrec_dist_tbl(l_index).taxable_amt_tax_curr;
1405 p_rec_nrec_dist_tbl(l_index).taxable_amt_funcl_curr :=
1406 -p_rec_nrec_dist_tbl(l_index).taxable_amt_funcl_curr;
1407 p_rec_nrec_dist_tbl(l_index).unrounded_taxable_amt:=
1408 -p_rec_nrec_dist_tbl(l_index).unrounded_taxable_amt;
1409 p_rec_nrec_dist_tbl(l_index).prd_tax_amt :=
1410 -p_rec_nrec_dist_tbl(l_index).prd_tax_amt;
1411 p_rec_nrec_dist_tbl(l_index).prd_tax_amt_tax_curr :=
1412 -p_rec_nrec_dist_tbl(l_index).prd_tax_amt_tax_curr;
1413 p_rec_nrec_dist_tbl(l_index).prd_tax_amt_funcl_curr :=
1414 -p_rec_nrec_dist_tbl(l_index).prd_tax_amt_funcl_curr;
1415 p_rec_nrec_dist_tbl(l_index).prd_total_tax_amt:=
1416 -p_rec_nrec_dist_tbl(l_index).prd_total_tax_amt;
1417 p_rec_nrec_dist_tbl(l_index).prd_total_tax_amt_tax_curr :=
1418 -p_rec_nrec_dist_tbl(l_index).prd_total_tax_amt_tax_curr;
1419 p_rec_nrec_dist_tbl(l_index).prd_total_tax_amt_funcl_curr :=
1420 -p_rec_nrec_dist_tbl(l_index).prd_total_tax_amt_funcl_curr;
1421 p_rec_nrec_dist_tbl(l_index).per_trx_curr_unit_nr_amt :=
1422 -p_rec_nrec_dist_tbl(l_index).per_trx_curr_unit_nr_amt;
1423 p_rec_nrec_dist_tbl(l_index).ref_per_trx_curr_unit_nr_amt :=
1424 -p_rec_nrec_dist_tbl(l_index).ref_per_trx_curr_unit_nr_amt;
1425 p_rec_nrec_dist_tbl(l_index).per_unit_nrec_tax_amt :=
1426 -p_rec_nrec_dist_tbl(l_index).per_unit_nrec_tax_amt;
1427 p_rec_nrec_dist_tbl(l_index).ref_doc_per_unit_nrec_tax_amt :=
1428 -p_rec_nrec_dist_tbl(l_index).ref_doc_per_unit_nrec_tax_amt;
1429 p_rec_nrec_dist_tbl(l_index).trx_line_dist_qty :=
1430 -p_rec_nrec_dist_tbl(l_index).trx_line_dist_qty;
1431 p_rec_nrec_dist_tbl(l_index).ref_doc_trx_line_dist_qty :=
1432 -p_rec_nrec_dist_tbl(l_index).ref_doc_trx_line_dist_qty;
1433
1434 p_rec_nrec_dist_tbl(l_index).created_by := fnd_global.user_id;
1435 p_rec_nrec_dist_tbl(l_index).creation_date := sysdate;
1436 p_rec_nrec_dist_tbl(l_index).last_updated_by := fnd_global.user_id;
1437 p_rec_nrec_dist_tbl(l_index).last_update_login := fnd_global.login_id;
1438 p_rec_nrec_dist_tbl(l_index).last_update_date := sysdate;
1439 p_rec_nrec_dist_tbl(l_index).object_version_number := 1;
1440
1441 -- bug 6706941: populate gl_date for the reversed tax distribution
1442 --
1443 p_rec_nrec_dist_tbl(l_index).gl_date :=
1444 AP_UTILITIES_PKG.get_reversal_gl_date(
1445 p_date => p_rec_nrec_dist_tbl(l_index).gl_date,
1446 p_org_id => p_rec_nrec_dist_tbl(l_index).internal_organization_id);
1447
1448 l_index:= l_index + 1;
1449
1450 -- get g_tax_dist_id
1451 --
1452 SELECT ZX_REC_NREC_DIST_S.nextval
1453 INTO ZX_TRD_SERVICES_PUB_PKG.g_tax_dist_id
1454 FROM dual;
1455
1456 -- ZX_TRD_SERVICES_PUB_PKG.g_tax_dist_id:= ZX_TRD_SERVICES_PUB_PKG.g_tax_dist_id + 1;
1457
1458 p_rec_nrec_dist_tbl(l_index):= p_rec_nrec_dist_tbl(l_index - 2);
1459 p_rec_nrec_dist_tbl(l_index).rec_nrec_tax_dist_id:= ZX_TRD_SERVICES_PUB_PKG.g_tax_dist_id;
1460 p_rec_nrec_dist_tbl(l_index).Freeze_Flag:= 'N';
1461 p_rec_nrec_dist_tbl(l_index).Reverse_Flag:= 'N';
1462 p_rec_nrec_dist_tbl(l_index).created_by := fnd_global.user_id;
1463 p_rec_nrec_dist_tbl(l_index).creation_date := sysdate;
1464 p_rec_nrec_dist_tbl(l_index).last_updated_by := fnd_global.user_id;
1465 p_rec_nrec_dist_tbl(l_index).last_update_login := fnd_global.login_id;
1466 p_rec_nrec_dist_tbl(l_index).last_update_date := sysdate;
1467 p_rec_nrec_dist_tbl(l_index).object_version_number := 1;
1468
1469 l_index:= l_index + 1;
1470 -- ZX_TRD_SERVICES_PUB_PKG.g_tax_dist_id:= ZX_TRD_SERVICES_PUB_PKG.g_tax_dist_id + 1;
1471
1472 END LOOP;
1473
1474 CLOSE get_rec_nrec_dist_cur;
1475
1476 IF (g_level_procedure >= g_current_runtime_level ) THEN
1477
1478 FND_LOG.STRING(g_level_procedure,
1479 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.REVERSE_TAX_DIST.END',
1480 'ZX_TRD_SERVICES_PUB_PKG.REVERSE_TAX_DIST(-)'||x_return_status);
1481 END IF;
1482
1483 EXCEPTION
1484 WHEN OTHERS THEN
1485 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1486 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1487
1488 IF (g_level_unexpected >= g_current_runtime_level ) THEN
1489 FND_LOG.STRING(g_level_unexpected,
1490 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.REVERSE_TAX_DIST',
1491 p_error_buffer);
1492 FND_LOG.STRING(g_level_unexpected,
1493 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.REVERSE_TAX_DIST.END',
1494 'ZX_TRD_SERVICES_PUB_PKG.REVERSE_TAX_DIST(-)');
1495
1496 END IF;
1497
1498 END REVERSE_TAX_DIST;
1499
1500
1501 /* ======================================================================*
1502 | PUBLIC PROCEDURE validate_document_for_tax |
1503 | |
1504 | This procedure is called from TSRM for validate docuemnt service |
1505 | for tax |
1506 | |
1507 * ======================================================================*/
1508
1509 PROCEDURE VALIDATE_DOCUMENT_FOR_TAX(
1510 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
1511 p_transaction_rec IN ZX_API_PUB.transaction_rec_type,
1512 x_hold_status OUT NOCOPY zx_api_pub.hold_codes_tbl_type,
1513 x_validate_status OUT NOCOPY VARCHAR2, -- bug fix 3541452
1514 x_return_status OUT NOCOPY VARCHAR2) IS
1515
1516 CURSOR get_hold_status_csr IS
1517 select
1518 distinct tax_hold_code - tax_hold_released_code
1519 from ZX_LINES
1520 where tax_hold_code > 0
1521 and trx_id = p_transaction_rec.trx_id
1522 and application_id = p_transaction_rec.application_id
1523 and entity_code = p_transaction_rec.entity_code
1524 and event_class_code = p_transaction_rec.event_class_code
1525 and mrc_tax_line_flag = 'N'
1526 and nvl(cancel_flag,'N') <> 'Y' ;
1527
1528 l_code NUMBER;
1529 l_tax_variance VARCHAR2(1);
1530 l_tax_amount_range VARCHAR2(1);
1531
1532 BEGIN
1533
1534 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1535
1536 IF (g_level_procedure >= g_current_runtime_level ) THEN
1537 FND_LOG.STRING(g_level_procedure,
1538 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX.BEGIN',
1539 'ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX(+)');
1540 END IF;
1541
1542 x_return_status:= FND_API.G_RET_STS_SUCCESS;
1543
1544 l_code := NULL;
1545 l_tax_variance := 'N';
1546 l_tax_amount_range := 'N';
1547
1548 x_hold_status.DELETE;
1549
1550 IF p_event_class_rec.tax_tol_amt_range IS NOT NULL
1551 OR p_event_class_rec.tax_tolerance IS NOT NULL
1552 THEN
1553 -- need special handling for historical data
1554
1555 OPEN get_hold_status_csr;
1556
1557 LOOP
1558 FETCH get_hold_status_csr INTO l_code;
1559 EXIT when get_hold_status_csr%NOTFOUND;
1560 IF l_code = 1 THEN
1561 IF l_tax_variance = 'N' THEN
1562 x_hold_status(x_hold_status.count + 1) := ZX_TDS_CALC_SERVICES_PUB_PKG.G_TAX_VARIANCE_HOLD;
1563 l_tax_variance := 'Y';
1564
1565 IF (g_level_statement >= g_current_runtime_level ) THEN
1566 FND_LOG.STRING(g_level_statement,
1567 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX',
1568 'hold code : tax variance ');
1569 END IF;
1570 END IF;
1571 ELSIF l_code = 2 THEN
1572 IF l_tax_amount_range = 'N' THEN
1573 x_hold_status(x_hold_status.count + 1) := ZX_TDS_CALC_SERVICES_PUB_PKG.G_TAX_AMT_RANGE_HOLD;
1574 l_tax_amount_range := 'Y';
1575
1576 IF (g_level_statement >= g_current_runtime_level ) THEN
1577 FND_LOG.STRING(g_level_statement,
1578 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX',
1579 'hold code : tax amount range');
1580 END IF;
1581 END IF;
1582 ELSIF l_code = 3 THEN
1583 IF l_tax_variance = 'N' THEN
1584 x_hold_status(x_hold_status.count + 1) := ZX_TDS_CALC_SERVICES_PUB_PKG.G_TAX_VARIANCE_HOLD;
1585 l_tax_variance := 'Y';
1586
1587 IF (g_level_statement >= g_current_runtime_level ) THEN
1588 FND_LOG.STRING(g_level_statement,
1589 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX',
1590 'hold code : tax variance ');
1591 END IF;
1592 END IF;
1593 IF l_tax_amount_range = 'N' THEN
1594 x_hold_status(x_hold_status.count + 1) := ZX_TDS_CALC_SERVICES_PUB_PKG.G_TAX_AMT_RANGE_HOLD;
1595 l_tax_amount_range := 'Y';
1596
1597 IF (g_level_statement >= g_current_runtime_level ) THEN
1598 FND_LOG.STRING(g_level_statement,
1599 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX',
1600 'hold code : tax amount range');
1601 END IF;
1602 END IF;
1603 END IF;
1604
1605 END LOOP;
1606 CLOSE get_hold_status_csr;
1607 END IF; -- IF p_event_class_rec.tax_tol_amt_range IS NOT NULL
1608
1609 -- bug fix 3541452 begin
1610 x_validate_status := 'Y';
1611
1612 IF p_event_class_rec.prod_family_grp_code = 'O2C' THEN
1613 INSERT ALL
1614 WHEN (REGIME_NOT_EFFECTIVE = 'Y') THEN
1615
1616 INTO ZX_VALIDATION_ERRORS_GT(
1617 application_id,
1618 entity_code,
1619 event_class_code,
1620 trx_id,
1621 trx_line_id,
1622 trx_level_type,
1623 message_name,
1624 message_text
1625 )
1626 VALUES(
1627 application_id,
1628 entity_code,
1629 event_class_code,
1630 trx_id,
1631 trx_line_id,
1632 trx_level_type,
1633 'ZX_REGIME_NOT_EFFECTIVE',
1634 l_regime_not_effective
1635 )
1636 WHEN (TAX_NOT_EFFECTIVE = 'Y') THEN
1637
1638 INTO ZX_VALIDATION_ERRORS_GT(
1639 application_id,
1640 entity_code,
1641 event_class_code,
1642 trx_id,
1643 trx_line_id,
1644 trx_level_type,
1645 message_name,
1646 message_text
1647 )
1648 VALUES(
1649 application_id,
1650 entity_code,
1651 event_class_code,
1652 trx_id,
1653 trx_line_id,
1654 trx_level_type,
1655 'ZX_TAX_NOT_EFFECTIVE',
1656 l_tax_not_effective
1657 )
1658
1659 WHEN (TAX_STATUS_NOT_EFFECTIVE = 'Y') THEN
1660
1661 INTO ZX_VALIDATION_ERRORS_GT(
1662 application_id,
1663 entity_code,
1664 event_class_code,
1665 trx_id,
1666 trx_line_id,
1667 trx_level_type,
1668 message_name,
1669 message_text
1670 )
1671 VALUES(
1672 application_id,
1673 entity_code,
1674 event_class_code,
1675 trx_id,
1676 trx_line_id,
1677 trx_level_type,
1678 'ZX_TAX_STATUS_NOT_EFFECTIVE',
1679 l_tax_status_not_effective
1680 )
1681 WHEN (TAX_RATE_ID_NOT_EFFECTIVE = 'Y') THEN
1682
1683 INTO ZX_VALIDATION_ERRORS_GT(
1684 application_id,
1685 entity_code,
1686 event_class_code,
1687 trx_id,
1688 trx_line_id,
1689 trx_level_type,
1690 message_name,
1691 message_text
1692 )
1693 VALUES(
1694 application_id,
1695 entity_code,
1696 event_class_code,
1697 trx_id,
1698 trx_line_id,
1699 trx_level_type,
1700 'ZX_TAX_RATE_NOT_EFFECTIVE',
1701 l_tax_rate_not_effective
1702 )
1703
1704 WHEN (TAX_RATE_ID_NOT_ACTIVE = 'Y') THEN
1705
1706 INTO ZX_VALIDATION_ERRORS_GT(
1707 application_id,
1708 entity_code,
1709 event_class_code,
1710 trx_id,
1711 trx_line_id,
1712 trx_level_type,
1713 message_name,
1714 message_text
1715 )
1716 VALUES(
1717 application_id,
1718 entity_code,
1719 event_class_code,
1720 trx_id,
1721 trx_line_id,
1722 trx_level_type,
1723 'ZX_TAX_RATE_NOT_ACTIVE',
1724 l_tax_rate_not_active
1725 )
1726
1727 WHEN (TAX_RATE_PERCENTAGE_INVALID = 'Y') THEN
1728
1729 INTO ZX_VALIDATION_ERRORS_GT(
1730 application_id,
1731 entity_code,
1732 event_class_code,
1733 trx_id,
1734 trx_line_id,
1735 trx_level_type,
1736 message_name,
1737 message_text
1738 )
1739 VALUES(
1740 application_id,
1741 entity_code,
1742 event_class_code,
1743 trx_id,
1744 trx_line_id,
1745 trx_level_type,
1746 'ZX_TAX_RATE_PERCENTAGE_INVALID',
1747 l_tax_rate_percentage_invalid
1748 )
1749 WHEN (JUR_CODE_NOT_EFFECTIVE = 'Y') THEN
1750
1751 INTO ZX_VALIDATION_ERRORS_GT(
1752 application_id,
1753 entity_code,
1754 event_class_code,
1755 trx_id,
1756 trx_line_id,
1757 trx_level_type,
1758 message_name,
1759 message_text
1760 )
1761 VALUES(
1762 application_id,
1763 entity_code,
1764 event_class_code,
1765 trx_id,
1766 trx_line_id,
1767 trx_level_type,
1768 'ZX_JUR_CODE_NOT_EFFECTIVE',
1769 l_jur_code_not_effective
1770 )
1771 SELECT
1772 line.application_id,
1773 line.entity_code,
1774 line.event_class_code,
1775 line.trx_id,
1776 line.trx_line_id,
1777 line.trx_level_type,
1778 -- Check for Regime Effectivity
1779 CASE WHEN line.tax_determine_date
1780 BETWEEN regime.effective_from
1781 AND nvl(regime.effective_to, line.trx_date)
1782 THEN 'N'
1783 ELSE 'Y' END REGIME_NOT_EFFECTIVE,
1784
1785 -- Check for Tax Effectivity
1786 CASE WHEN line.tax_determine_date
1787 BETWEEN tax.effective_from
1788 AND nvl(tax.effective_to, line.trx_date)
1789 THEN 'N'
1790 ELSE 'Y' END TAX_NOT_EFFECTIVE,
1791
1792 -- Check for Status Effectivity
1793 CASE WHEN line.tax_determine_date
1794 BETWEEN status.effective_from
1795 AND nvl(status.effective_to, line.trx_date)
1796 THEN 'N'
1797 ELSE 'Y' END TAX_STATUS_NOT_EFFECTIVE,
1798
1799 -- Check for Rate Id Date Effectivity
1800 CASE WHEN line.tax_determine_date
1801 BETWEEN rate.effective_from
1802 AND nvl(rate.effective_to, line.trx_date)
1803 THEN 'N'
1804 ELSE 'Y' END TAX_RATE_ID_NOT_EFFECTIVE,
1805
1806 -- Check Rate Id is Active
1807 CASE WHEN rate.active_flag = 'Y'
1808 THEN 'N'
1809 ELSE 'Y' END TAX_RATE_ID_NOT_ACTIVE,
1810
1811 -- Check for Rate Percentage
1812 CASE WHEN (rate.tax_rate_id = line.tax_rate_id
1813 AND (line.tax_exemption_id IS NULL AND exempt_rate_modifier IS NULL)
1814 AND line.tax_provider_id IS NULL
1815 AND (line.tax_exception_id is NULL AND exception_rate IS NULL)
1816 AND rate.percentage_rate <> line.tax_rate
1817 AND rate.allow_adhoc_tax_rate_flag <> 'Y'
1818 AND line.tax_determine_date
1819 BETWEEN rate.effective_from
1820 AND nvl(rate.effective_to, line.trx_date))
1821 THEN 'Y'
1822 ELSE 'N' END TAX_RATE_PERCENTAGE_INVALID,
1823
1824 -- Check for Jurisdiction Code Effectivity
1825 CASE WHEN line.tax_determine_date
1826 BETWEEN jur.effective_from
1827 AND nvl(jur.effective_to, line.trx_date)
1828 THEN 'N'
1829 ELSE 'Y' END JUR_CODE_NOT_EFFECTIVE
1830
1831 FROM
1832 ZX_LINES line ,
1833 ZX_REGIMES_B regime ,
1834 ZX_TAXES_B tax ,
1835 ZX_STATUS_B status ,
1836 ZX_RATES_B rate ,
1837 ZX_JURISDICTIONS_B jur
1838 WHERE line.APPLICATION_ID = p_transaction_rec.APPLICATION_ID
1839 AND line.ENTITY_CODE = p_transaction_rec.ENTITY_CODE
1840 AND line.EVENT_CLASS_CODE = p_transaction_rec.EVENT_CLASS_CODE
1841 AND line.TRX_ID = p_transaction_rec.TRX_ID
1842 and regime.tax_regime_code = line.tax_regime_code
1843 and tax.tax_id = line.tax_id
1844 and status.tax_status_id = line.tax_status_id
1845 and rate.tax_rate_id = line.tax_rate_id
1846 and jur.tax_jurisdiction_id = line.tax_jurisdiction_id
1847 and line.mrc_tax_line_flag = 'N';
1848
1849 IF SQL%ROWCOUNT >0 THEN
1850 x_validate_status := 'N';
1851 END IF;
1852 END IF; -- IF prod_family_grp_code = 'O2C'
1853 -- bug fix 3541452 end
1854
1855
1856 IF (g_level_procedure >= g_current_runtime_level ) THEN
1857
1858 FND_LOG.STRING(g_level_procedure,
1859 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX.END',
1860 'ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX(-)'||x_return_status);
1861 END IF;
1862
1863 EXCEPTION
1864 WHEN OTHERS THEN
1865 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1866
1867 IF get_hold_status_csr%ISOPEN THEN
1868 CLOSE get_hold_status_csr;
1869 END IF;
1870
1871 IF (g_level_unexpected >= g_current_runtime_level ) THEN
1872 FND_LOG.STRING(g_level_unexpected,
1873 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX',
1874 'x_hold_status.tax_variance = '||l_tax_variance);
1875 FND_LOG.STRING(g_level_unexpected,
1876 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX',
1877 'x_hold_status.tax_amount_range = '||l_tax_amount_range);
1878 FND_LOG.STRING(g_level_unexpected,
1879 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX',
1880 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
1881 FND_LOG.STRING(g_level_unexpected,
1882 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX.END',
1883 'ZX_TRD_SERVICES_PUB_PKG.VALIDATE_DOCUMENT_FOR_TAX(-)');
1884
1885 END IF;
1886
1887 END VALIDATE_DOCUMENT_FOR_TAX;
1888
1889 /* ======================================================================*
1890 | PUBLIC PROCEDURE reverse_distributions |
1891 | |
1892 | This procedure is called from TSRM for reverse whole docuemnt |
1893 | distributions service |
1894 | |
1895 * ======================================================================*/
1896
1897 PROCEDURE REVERSE_DISTRIBUTIONS(
1898 x_return_status OUT NOCOPY VARCHAR2) IS
1899
1900 TYPE num_tbl_type IS TABLE OF zx_rec_nrec_dist.rec_nrec_tax_dist_id%TYPE
1901 INDEX BY BINARY_INTEGER;
1902 TYPE char30_tbl_type IS TABLE OF zx_rec_nrec_dist.entity_code%TYPE
1903 INDEX BY BINARY_INTEGER;
1904 TYPE char150_tbl_type IS TABLE OF zx_rec_nrec_dist.trx_number%TYPE
1905 INDEX BY BINARY_INTEGER;
1906 TYPE date_tbl_type IS TABLE OF zx_rec_nrec_dist.gl_date%TYPE
1907 INDEX BY BINARY_INTEGER;
1908
1909 l_rvrsed_tax_dist_id_tbl num_tbl_type;
1910 l_rvrsng_appln_id_tbl num_tbl_type;
1911 l_rvrsng_entity_code_tbl char30_tbl_type;
1912 l_rvrsng_evnt_cls_code_tbl char30_tbl_type;
1913 l_rvrsng_trx_id_tbl num_tbl_type;
1914 l_rvrsng_trx_line_id_tbl num_tbl_type;
1915 l_rvrsng_trx_level_type_tbl char30_tbl_type;
1916 l_rvrsng_tax_line_id_tbl num_tbl_type;
1917 l_rvrsng_trx_line_dist_id_tbl num_tbl_type;
1918 l_summary_tax_line_id_tbl num_tbl_type;
1919 l_rvrsng_trx_number_tbl char150_tbl_type;
1920
1921 l_org_id_tbl num_tbl_type;
1922 l_gl_date_tbl date_tbl_type;
1923
1924 BEGIN
1925
1926 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
1927
1928 IF (g_level_procedure >= g_current_runtime_level ) THEN
1929 FND_LOG.STRING(g_level_procedure,
1930 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.REVERSE_DISTRIBUTIONS.BEGIN',
1931 'ZX_TRD_SERVICES_PUB_PKG.REVERSE_DISTRIBUTIONS(+)');
1932 END IF;
1933
1934 x_return_status:= FND_API.G_RET_STS_SUCCESS;
1935
1936 SELECT zd.rec_nrec_tax_dist_id,
1937 gt.reversing_appln_id,
1938 gt.reversing_entity_code,
1939 gt.reversing_evnt_cls_code,
1940 gt.reversing_trx_id,
1941 gt.reversing_trx_line_id,
1942 gt.reversing_trx_level_type,
1943 zl.tax_line_id,
1944 gt.reversing_trx_line_dist_id,
1945 zl.summary_tax_line_id,
1946 zl.trx_number,
1947 zd.internal_organization_id,
1948 zd.gl_date
1949 BULK COLLECT INTO
1950 l_rvrsed_tax_dist_id_tbl,
1951 l_rvrsng_appln_id_tbl,
1952 l_rvrsng_entity_code_tbl,
1953 l_rvrsng_evnt_cls_code_tbl,
1954 l_rvrsng_trx_id_tbl,
1955 l_rvrsng_trx_line_id_tbl,
1956 l_rvrsng_trx_level_type_tbl,
1957 l_rvrsng_tax_line_id_tbl,
1958 l_rvrsng_trx_line_dist_id_tbl,
1959 l_summary_tax_line_id_tbl,
1960 l_rvrsng_trx_number_tbl,
1961 l_org_id_tbl,
1962 l_gl_date_tbl
1963 FROM zx_rec_nrec_dist zd, zx_reverse_dist_gt gt, zx_lines zl
1964 WHERE zd.application_id = gt.reversed_appln_id
1965 AND zd.entity_code = gt.reversed_entity_code
1966 AND zd.event_class_code = gt.reversed_evnt_cls_code
1967 AND zd.trx_id = gt.reversed_trx_id
1968 AND zd.trx_line_id = gt.reversed_trx_line_id
1969 AND zd.trx_level_type = gt.reversed_trx_level_type
1970 AND zd.tax_line_id = NVL(gt.reversed_tax_line_id, zd.tax_line_id)
1971 AND zd.trx_line_dist_id = gt.reversed_trx_line_dist_id
1972 AND nvl(zd.Reverse_Flag, 'N') = 'N'
1973 AND zl.application_id = gt.reversing_appln_id
1974 AND zl.entity_code = gt.reversing_entity_code
1975 AND zl.event_class_code = gt.reversing_evnt_cls_code
1976 AND zl.trx_id = gt.reversing_trx_id
1977 AND zl.trx_line_id = gt.reversing_trx_line_id
1978 AND zl.trx_level_type = gt.reversing_trx_level_type
1979 AND ((zl.reversed_tax_line_id IS NOT NULL AND
1980 zl.reversed_tax_line_id = zd.tax_line_id
1981 ) OR
1982 (zl.reversed_tax_line_id IS NULL AND
1983 zl.tax_line_id = gt.reversing_tax_line_id
1984 )
1985 );
1986
1987 -- bug 6706941: populate gl_date fro reversal tax distributions
1988 --
1989 FOR i IN NVL(l_gl_date_tbl.FIRST, 0) .. NVL(l_gl_date_tbl.LAST, -1) LOOP
1990
1991 -- bug 6706941: populate gl_date for the reversed tax distribution
1992 --
1993 l_gl_date_tbl(i) := AP_UTILITIES_PKG.get_reversal_gl_date(
1994 p_date => l_gl_date_tbl(i),
1995 p_org_id => l_org_id_tbl(i));
1996
1997 END LOOP;
1998
1999 -- Insert the reversing tax distributions
2000
2001 FORALL i IN NVL(l_rvrsed_tax_dist_id_tbl.FIRST, 0)..
2002 NVL(l_rvrsed_tax_dist_id_tbl.LAST, -1)
2003 INSERT INTO ZX_REC_NREC_DIST(
2004 REC_NREC_TAX_DIST_ID,
2005 APPLICATION_ID,
2006 ENTITY_CODE,
2007 EVENT_CLASS_CODE,
2008 EVENT_TYPE_CODE,
2009 TAX_EVENT_CLASS_CODE,
2010 TAX_EVENT_TYPE_CODE,
2011 TRX_ID,
2012 TRX_LINE_ID,
2013 TRX_LEVEL_TYPE,
2014 TRX_LINE_NUMBER,
2015 TAX_LINE_ID,
2016 TAX_LINE_NUMBER,
2017 TRX_LINE_DIST_ID,
2018 ITEM_DIST_NUMBER,
2019 CONTENT_OWNER_ID,
2020 REC_NREC_TAX_DIST_NUMBER,
2021 TAX_REGIME_ID,
2022 TAX_REGIME_CODE,
2023 TAX_ID,
2024 TAX,
2025 TAX_STATUS_ID,
2026 TAX_STATUS_CODE,
2027 TAX_RATE_ID,
2028 TAX_RATE_CODE,
2029 TAX_RATE,
2030 INCLUSIVE_FLAG,
2031 RECOVERY_TYPE_ID,
2032 RECOVERY_TYPE_CODE,
2033 RECOVERY_RATE_ID,
2034 RECOVERY_RATE_CODE,
2035 REC_NREC_RATE,
2036 REC_TYPE_RULE_FLAG,
2037 NEW_REC_RATE_CODE_FLAG,
2038 RECOVERABLE_FLAG,
2039 REVERSE_FLAG,
2040 HISTORICAL_FLAG,
2041 REVERSED_TAX_DIST_ID,
2042 REC_NREC_TAX_AMT,
2043 REC_NREC_TAX_AMT_TAX_CURR,
2044 REC_NREC_TAX_AMT_FUNCL_CURR,
2045 -- INVOICE_PRICE_VARIANCE,
2046 -- EXCHANGE_RATE_VARIANCE,
2047 -- BASE_INVOICE_PRICE_VARIANCE,
2048 INTENDED_USE,
2049 PROJECT_ID,
2050 TASK_ID,
2051 AWARD_ID,
2052 EXPENDITURE_TYPE,
2053 EXPENDITURE_ORGANIZATION_ID,
2054 EXPENDITURE_ITEM_DATE,
2055 REC_RATE_DET_RULE_FLAG,
2056 LEDGER_ID,
2057 SUMMARY_TAX_LINE_ID,
2058 RECORD_TYPE_CODE,
2059 CURRENCY_CONVERSION_DATE,
2060 CURRENCY_CONVERSION_TYPE,
2061 CURRENCY_CONVERSION_RATE,
2062 TAX_CURRENCY_CONVERSION_DATE,
2063 TAX_CURRENCY_CONVERSION_TYPE,
2064 TAX_CURRENCY_CONVERSION_RATE,
2065 TRX_CURRENCY_CODE,
2066 TAX_CURRENCY_CODE,
2067 TRX_LINE_DIST_AMT,
2068 TRX_LINE_DIST_TAX_AMT,
2069 ORIG_REC_NREC_RATE,
2070 ORIG_REC_RATE_CODE,
2071 ORIG_REC_NREC_TAX_AMT,
2072 ORIG_REC_NREC_TAX_AMT_TAX_CURR,
2073 UNROUNDED_REC_NREC_TAX_AMT,
2074 APPLICABILITY_RESULT_ID,
2075 REC_RATE_RESULT_ID,
2076 BACKWARD_COMPATIBILITY_FLAG,
2077 OVERRIDDEN_FLAG,
2078 SELF_ASSESSED_FLAG,
2079 FREEZE_FLAG,
2080 POSTING_FLAG,
2081 ATTRIBUTE_CATEGORY,
2082 ATTRIBUTE1,
2083 ATTRIBUTE2,
2084 ATTRIBUTE3,
2085 ATTRIBUTE4,
2086 ATTRIBUTE5,
2087 ATTRIBUTE6,
2088 ATTRIBUTE7,
2089 ATTRIBUTE8,
2090 ATTRIBUTE9,
2091 ATTRIBUTE10,
2092 ATTRIBUTE11,
2093 ATTRIBUTE12,
2094 ATTRIBUTE13,
2095 ATTRIBUTE14,
2096 ATTRIBUTE15,
2097 GLOBAL_ATTRIBUTE_CATEGORY,
2098 GLOBAL_ATTRIBUTE1,
2099 GLOBAL_ATTRIBUTE2,
2100 GLOBAL_ATTRIBUTE3,
2101 GLOBAL_ATTRIBUTE4,
2102 GLOBAL_ATTRIBUTE5,
2103 GLOBAL_ATTRIBUTE6,
2104 GLOBAL_ATTRIBUTE7,
2105 GLOBAL_ATTRIBUTE8,
2106 GLOBAL_ATTRIBUTE9,
2107 GLOBAL_ATTRIBUTE10,
2108 GLOBAL_ATTRIBUTE11,
2109 GLOBAL_ATTRIBUTE12,
2110 GLOBAL_ATTRIBUTE13,
2111 GLOBAL_ATTRIBUTE14,
2112 GLOBAL_ATTRIBUTE15,
2113 GL_DATE,
2114 CREATED_BY,
2115 CREATION_DATE,
2116 LAST_UPDATED_BY,
2117 LAST_UPDATE_LOGIN,
2118 LAST_UPDATE_DATE,
2119 REF_DOC_APPLICATION_ID,
2120 REF_DOC_ENTITY_CODE,
2121 REF_DOC_EVENT_CLASS_CODE,
2122 REF_DOC_TRX_ID,
2123 REF_DOC_LINE_ID,
2124 REF_DOC_TRX_LEVEL_TYPE,
2125 REF_DOC_DIST_ID,
2126 MINIMUM_ACCOUNTABLE_UNIT,
2127 PRECISION,
2128 ROUNDING_RULE_CODE,
2129 TAXABLE_AMT,
2130 TAXABLE_AMT_TAX_CURR,
2131 TAXABLE_AMT_FUNCL_CURR,
2132 TAX_ONLY_LINE_FLAG,
2133 UNROUNDED_TAXABLE_AMT,
2134 LEGAL_ENTITY_ID,
2135 ACCOUNT_CCID,
2136 ACCOUNT_STRING,
2137 PRD_TAX_AMT,
2138 PRD_TAX_AMT_TAX_CURR,
2139 PRD_TAX_AMT_FUNCL_CURR,
2140 PRD_TOTAL_TAX_AMT,
2141 PRD_TOTAL_TAX_AMT_TAX_CURR,
2142 PRD_TOTAL_TAX_AMT_FUNCL_CURR,
2143 APPLIED_FROM_TAX_DIST_ID,
2144 ADJUSTED_DOC_TAX_DIST_ID,
2145 FUNC_CURR_ROUNDING_ADJUSTMENT,
2146 GLOBAL_ATTRIBUTE16,
2147 GLOBAL_ATTRIBUTE17,
2148 GLOBAL_ATTRIBUTE18,
2149 GLOBAL_ATTRIBUTE19,
2150 GLOBAL_ATTRIBUTE20,
2151 LAST_MANUAL_ENTRY,
2152 TAX_APPORTIONMENT_LINE_NUMBER,
2153 REF_DOC_TAX_DIST_ID,
2154 MRC_TAX_DIST_FLAG,
2155 MRC_LINK_TO_TAX_DIST_ID,
2156 TAX_APPORTIONMENT_FLAG,
2157 RATE_TAX_FACTOR,
2158 REF_DOC_PER_UNIT_NREC_TAX_AMT,
2159 PER_UNIT_NREC_TAX_AMT,
2160 TRX_LINE_DIST_QTY,
2161 REF_DOC_TRX_LINE_DIST_QTY,
2162 PRICE_DIFF,
2163 QTY_DIFF,
2164 PER_TRX_CURR_UNIT_NR_AMT,
2165 REF_PER_TRX_CURR_UNIT_NR_AMT,
2166 REF_DOC_CURR_CONV_RATE,
2167 UNIT_PRICE,
2168 REF_DOC_UNIT_PRICE,
2169 APPLIED_TO_DOC_CURR_CONV_RATE,
2170 TRX_NUMBER,
2171 OBJECT_VERSION_NUMBER,
2172 INTERNAL_ORGANIZATION_ID,
2173 DEF_REC_SETTLEMENT_OPTION_CODE,
2174 TAX_JURISDICTION_ID,
2175 ACCOUNT_SOURCE_TAX_RATE_ID
2176 )
2177 SELECT
2178 ZX_REC_NREC_DIST_S.NEXTVAL,
2179 l_rvrsng_appln_id_tbl(i), -- GT.REVERSING_APPLN_ID,
2180 l_rvrsng_entity_code_tbl(i), -- GT.REVERSING_ENTITY_CODE,
2181 l_rvrsng_evnt_cls_code_tbl(i), -- GT.REVERSING_EVNT_CLS_CODE,
2182 ZD.EVENT_TYPE_CODE,
2183 ZD.TAX_EVENT_CLASS_CODE,
2184 ZD.TAX_EVENT_TYPE_CODE,
2185 l_rvrsng_trx_id_tbl(i), -- GT.REVERSING_TRX_ID,
2186 l_rvrsng_trx_line_id_tbl(i), -- GT.REVERSING_TRX_LINE_ID,
2187 l_rvrsng_trx_level_type_tbl(i), -- GT.REVERSING_TRX_LEVEL_TYPE,
2188 ZD.TRX_LINE_NUMBER,
2189 l_rvrsng_tax_line_id_tbl(i), -- GT.REVERSING_TAX_LINE_ID,
2190 ZD.TAX_LINE_NUMBER,
2191 l_rvrsng_trx_line_dist_id_tbl(i), -- GT.REVERSING_TRX_LINE_DIST_ID,
2192 ZD.ITEM_DIST_NUMBER,
2193 ZD.CONTENT_OWNER_ID,
2194 ZD.REC_NREC_TAX_DIST_NUMBER,
2195 ZD.TAX_REGIME_ID,
2196 ZD.TAX_REGIME_CODE,
2197 ZD.TAX_ID,
2198 ZD.TAX,
2199 ZD.TAX_STATUS_ID,
2200 ZD.TAX_STATUS_CODE,
2201 ZD.TAX_RATE_ID,
2202 ZD.TAX_RATE_CODE,
2203 ZD.TAX_RATE,
2204 ZD.INCLUSIVE_FLAG,
2205 ZD.RECOVERY_TYPE_ID,
2206 ZD.RECOVERY_TYPE_CODE,
2207 ZD.RECOVERY_RATE_ID,
2208 ZD.RECOVERY_RATE_CODE,
2209 ZD.REC_NREC_RATE,
2210 ZD.REC_TYPE_RULE_FLAG,
2211 ZD.NEW_REC_RATE_CODE_FLAG,
2212 ZD.RECOVERABLE_FLAG,
2213 'Y', -- ZD.REVERSE_FLAG,
2214 ZD.HISTORICAL_FLAG,
2215 ZD.REC_NREC_TAX_DIST_ID, -- REVERSED_TAX_DIST_ID,
2216 -ZD.REC_NREC_TAX_AMT,
2217 -ZD.REC_NREC_TAX_AMT_TAX_CURR,
2218 -ZD.REC_NREC_TAX_AMT_FUNCL_CURR,
2219 -- -ZD.INVOICE_PRICE_VARIANCE,
2220 -- -ZD.EXCHANGE_RATE_VARIANCE,
2221 -- -ZD.BASE_INVOICE_PRICE_VARIANCE,
2222 ZD.INTENDED_USE,
2223 ZD.PROJECT_ID,
2224 ZD.TASK_ID,
2225 ZD.AWARD_ID,
2226 ZD.EXPENDITURE_TYPE,
2227 ZD.EXPENDITURE_ORGANIZATION_ID,
2228 ZD.EXPENDITURE_ITEM_DATE,
2229 ZD.REC_RATE_DET_RULE_FLAG,
2230 ZD.LEDGER_ID,
2231 l_summary_tax_line_id_tbl(i), -- ZL.SUMMARY_TAX_LINE_ID,
2232 ZD.RECORD_TYPE_CODE,
2233 ZD.CURRENCY_CONVERSION_DATE,
2234 ZD.CURRENCY_CONVERSION_TYPE,
2235 ZD.CURRENCY_CONVERSION_RATE,
2236 ZD.TAX_CURRENCY_CONVERSION_DATE,
2237 ZD.TAX_CURRENCY_CONVERSION_TYPE,
2238 ZD.TAX_CURRENCY_CONVERSION_RATE,
2239 ZD.TRX_CURRENCY_CODE,
2240 ZD.TAX_CURRENCY_CODE,
2241 -ZD.TRX_LINE_DIST_AMT,
2242 -ZD.TRX_LINE_DIST_TAX_AMT,
2243 ZD.ORIG_REC_NREC_RATE,
2244 ZD.ORIG_REC_RATE_CODE,
2245 -ZD.ORIG_REC_NREC_TAX_AMT,
2246 -ZD.ORIG_REC_NREC_TAX_AMT_TAX_CURR,
2247 -ZD.UNROUNDED_REC_NREC_TAX_AMT,
2248 ZD.APPLICABILITY_RESULT_ID,
2249 ZD.REC_RATE_RESULT_ID,
2250 ZD.BACKWARD_COMPATIBILITY_FLAG,
2251 ZD.OVERRIDDEN_FLAG,
2252 ZD.SELF_ASSESSED_FLAG,
2253 'N', -- ZD.FREEZE_FLAG
2254 ZD.POSTING_FLAG,
2255 ZD.ATTRIBUTE_CATEGORY,
2256 ZD.ATTRIBUTE1,
2257 ZD.ATTRIBUTE2,
2258 ZD.ATTRIBUTE3,
2259 ZD.ATTRIBUTE4,
2260 ZD.ATTRIBUTE5,
2261 ZD.ATTRIBUTE6,
2262 ZD.ATTRIBUTE7,
2263 ZD.ATTRIBUTE8,
2264 ZD.ATTRIBUTE9,
2265 ZD.ATTRIBUTE10,
2266 ZD.ATTRIBUTE11,
2267 ZD.ATTRIBUTE12,
2268 ZD.ATTRIBUTE13,
2269 ZD.ATTRIBUTE14,
2270 ZD.ATTRIBUTE15,
2271 ZD.GLOBAL_ATTRIBUTE_CATEGORY,
2272 ZD.GLOBAL_ATTRIBUTE1,
2273 ZD.GLOBAL_ATTRIBUTE2,
2274 ZD.GLOBAL_ATTRIBUTE3,
2275 ZD.GLOBAL_ATTRIBUTE4,
2276 ZD.GLOBAL_ATTRIBUTE5,
2277 ZD.GLOBAL_ATTRIBUTE6,
2278 ZD.GLOBAL_ATTRIBUTE7,
2279 ZD.GLOBAL_ATTRIBUTE8,
2280 ZD.GLOBAL_ATTRIBUTE9,
2281 ZD.GLOBAL_ATTRIBUTE10,
2282 ZD.GLOBAL_ATTRIBUTE11,
2283 ZD.GLOBAL_ATTRIBUTE12,
2284 ZD.GLOBAL_ATTRIBUTE13,
2285 ZD.GLOBAL_ATTRIBUTE14,
2286 ZD.GLOBAL_ATTRIBUTE15,
2287 l_gl_date_tbl(i), -- ZD.GL_DATE,
2288 FND_GLOBAL.USER_ID, -- CREATED_BY,
2289 SYSDATE, -- CREATION_DATE,
2290 FND_GLOBAL.USER_ID, -- LAST_UPDATED_BY,
2291 FND_GLOBAL.LOGIN_ID, -- LAST_UPDATE_LOGIN,
2292 SYSDATE, -- LAST_UPDATE_DATE,
2293 ZD.REF_DOC_APPLICATION_ID,
2294 ZD.REF_DOC_ENTITY_CODE,
2295 ZD.REF_DOC_EVENT_CLASS_CODE,
2296 ZD.REF_DOC_TRX_ID,
2297 ZD.REF_DOC_LINE_ID,
2298 ZD.REF_DOC_TRX_LEVEL_TYPE,
2299 ZD.REF_DOC_DIST_ID,
2300 ZD.MINIMUM_ACCOUNTABLE_UNIT,
2301 ZD.PRECISION,
2302 ZD.ROUNDING_RULE_CODE,
2303 -ZD.TAXABLE_AMT,
2304 -ZD.TAXABLE_AMT_TAX_CURR,
2305 -ZD.TAXABLE_AMT_FUNCL_CURR,
2306 ZD.TAX_ONLY_LINE_FLAG,
2307 -ZD.UNROUNDED_TAXABLE_AMT,
2308 ZD.LEGAL_ENTITY_ID,
2309 ZD.ACCOUNT_CCID,
2310 ZD.ACCOUNT_STRING,
2311 -ZD.PRD_TAX_AMT,
2312 -ZD.PRD_TAX_AMT_TAX_CURR,
2313 -ZD.PRD_TAX_AMT_FUNCL_CURR,
2314 -ZD.PRD_TOTAL_TAX_AMT,
2315 -ZD.PRD_TOTAL_TAX_AMT_TAX_CURR,
2316 -ZD.PRD_TOTAL_TAX_AMT_FUNCL_CURR,
2317 ZD.APPLIED_FROM_TAX_DIST_ID,
2318 ZD.ADJUSTED_DOC_TAX_DIST_ID,
2319 ZD.FUNC_CURR_ROUNDING_ADJUSTMENT,
2320 ZD.GLOBAL_ATTRIBUTE16,
2321 ZD.GLOBAL_ATTRIBUTE17,
2322 ZD.GLOBAL_ATTRIBUTE18,
2323 ZD.GLOBAL_ATTRIBUTE19,
2324 ZD.GLOBAL_ATTRIBUTE20,
2325 ZD.LAST_MANUAL_ENTRY,
2326 ZD.TAX_APPORTIONMENT_LINE_NUMBER,
2327 ZD.REF_DOC_TAX_DIST_ID,
2328 ZD.MRC_TAX_DIST_FLAG,
2329 ZD.MRC_LINK_TO_TAX_DIST_ID,
2330 ZD.TAX_APPORTIONMENT_FLAG,
2331 ZD.RATE_TAX_FACTOR,
2332 -ZD.REF_DOC_PER_UNIT_NREC_TAX_AMT,
2333 -ZD.PER_UNIT_NREC_TAX_AMT,
2334 -ZD.TRX_LINE_DIST_QTY,
2335 -ZD.REF_DOC_TRX_LINE_DIST_QTY,
2336 ZD.PRICE_DIFF,
2337 -ZD.QTY_DIFF,
2338 -ZD.PER_TRX_CURR_UNIT_NR_AMT,
2339 -ZD.REF_PER_TRX_CURR_UNIT_NR_AMT,
2340 ZD.REF_DOC_CURR_CONV_RATE,
2341 ZD.UNIT_PRICE,
2342 ZD.REF_DOC_UNIT_PRICE,
2343 ZD.APPLIED_TO_DOC_CURR_CONV_RATE,
2344 l_rvrsng_trx_number_tbl(i),
2345 1,
2346 ZD.INTERNAL_ORGANIZATION_ID,
2347 ZD.DEF_REC_SETTLEMENT_OPTION_CODE,
2348 ZD.TAX_JURISDICTION_ID,
2349 ZD.ACCOUNT_SOURCE_TAX_RATE_ID
2350 FROM zx_rec_nrec_dist zd
2351 WHERE zd.rec_nrec_tax_dist_id = l_rvrsed_tax_dist_id_tbl(i);
2352
2353 -- Update the REVERSE_FLAG of the original dist line to 'Y'
2354 FORALL i IN NVL(l_rvrsed_tax_dist_id_tbl.FIRST, 0)..
2355 NVL(l_rvrsed_tax_dist_id_tbl.LAST, -1)
2356 UPDATE ZX_REC_NREC_DIST
2357 SET REVERSE_FLAG = 'Y'
2358 WHERE REC_NREC_TAX_DIST_ID = l_rvrsed_tax_dist_id_tbl(i);
2359
2360 IF (g_level_procedure >= g_current_runtime_level ) THEN
2361 FND_LOG.STRING(g_level_procedure,
2362 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.REVERSE_DISTRIBUTIONS.END',
2363 'ZX_TRD_SERVICES_PUB_PKG.REVERSE_DISTRIBUTIONS(-)'||
2364 'RETURN_STATUS = ' || x_return_status);
2365 END IF;
2366
2367 EXCEPTION
2368 WHEN DUP_VAL_ON_INDEX THEN
2369 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2370
2371 IF (g_level_unexpected >= g_current_runtime_level ) THEN
2372 FND_LOG.STRING(g_level_unexpected,
2373 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.REVERSE_DISTRIBUTIONS',
2374 'Tax Lines Distribution Record Already Exists');
2375 FND_LOG.STRING(g_level_unexpected,
2376 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.REVERSE_DISTRIBUTIONS',
2377 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2378 END IF;
2379
2380 WHEN OTHERS THEN
2381 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
2382
2383 IF (g_level_unexpected >= g_current_runtime_level ) THEN
2384 FND_LOG.STRING(g_level_unexpected,
2385 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.REVERSE_DISTRIBUTIONS',
2386 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
2387 END IF;
2388
2389 IF (g_level_unexpected >= g_current_runtime_level ) THEN
2390 FND_LOG.STRING(g_level_unexpected,
2391 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.REVERSE_DISTRIBUTIONS.END',
2392 'ZX_TRD_SERVICES_PUB_PKG.REVERSE_DISTRIBUTIONS(-)');
2393 END IF;
2394
2395 END REVERSE_DISTRIBUTIONS;
2396
2397
2398 /* ======================================================================*
2399 | PUBLIC PROCEDURE get_ccid |
2400 | |
2401 | This procedure is called from TSRM to derive CCID for a tax |
2402 | distribution. |
2403 | |
2404 * ======================================================================*/
2405
2406 PROCEDURE GET_CCID(
2407 p_gl_date IN DATE,
2408 p_tax_rate_id IN NUMBER,
2409 p_rec_rate_id IN NUMBER,
2410 p_Self_Assessed_Flag IN VARCHAR2,
2411 p_Recoverable_Flag IN VARCHAR2,
2412 p_tax_jurisdiction_id IN NUMBER,
2413 p_tax_regime_id IN NUMBER,
2414 p_tax_id IN NUMBER,
2415 p_tax_status_id IN NUMBER,
2416 p_org_id IN NUMBER,
2417 p_revenue_expense_ccid IN NUMBER,
2418 p_ledger_id IN NUMBER,
2419 p_account_source_tax_rate_id IN NUMBER,
2420 p_rec_nrec_tax_dist_id IN NUMBER,
2421 p_rec_nrec_ccid OUT NOCOPY NUMBER,
2422 p_tax_liab_ccid OUT NOCOPY NUMBER,
2423 x_return_status OUT NOCOPY VARCHAR2) IS
2424
2425
2426 Cursor get_rec_nrec_ccid_cur(c_tax_account_entity_id number,
2427 c_tax_account_entity_code VARCHAR2,
2428 c_org_id NUMBER) is
2429 select interim_tax_ccid, tax_account_ccid, non_rec_account_ccid
2430 from zx_accounts
2431 where TAX_ACCOUNT_ENTITY_ID = c_tax_account_entity_id
2432 AND tax_account_entity_code = c_tax_account_entity_code
2433 AND internal_organization_id = c_org_id;
2434
2435 Cursor is_ccid_valid(l_ccid number) is
2436 select 'x'
2437 from gl_code_combinations
2438 where code_combination_id = l_ccid
2439 and enabled_flag = 'Y'
2440 and p_gl_date between nvl(start_date_active,p_gl_date) and nvl(end_date_active, p_gl_date);
2441
2442 Cursor get_def_rec_settle_option_code(c_tax_rate_id IN NUMBER) is
2443 select def_rec_settlement_option_code
2444 from zx_rates_b
2445 where tax_rate_id = c_tax_rate_id;
2446
2447 l_tax_rate_id NUMBER;
2448 l_ccid NUMBER;
2449 l_val char;
2450 l_interim_tax_ccid NUMBER;
2451 l_nrec_ccid NUMBER;
2452 l_rec_ccid NUMBER;
2453 l_tax_liab_ccid NUMBER;
2454 l_def_rec_settle_option_code ZX_RATES_B.DEF_REC_SETTLEMENT_OPTION_CODE%type;
2455 l_error_buffer VARCHAR2(2000);
2456
2457 BEGIN
2458 -- rewritten this API for bug 5645569. Per this bug
2459 --When Self Assessed Flag is 'N', then
2460 --
2461 -- - Tax liability account should always be returned as NULL, for both
2462 -- Recoverable and non-recoverable distributions
2463 -- - For recoverable tax distributions, the REC_NREC_ACCOUNT_CCID should be
2464 -- obtained by joining to ZX_ACCOUNTS using Receovery Rate Id first.
2465 -- If account is not found using recovery rate id, then the account should
2466 -- be obtained from ZX_ACCOUNTS using tax_rate_id. If default reocovery
2467 -- settlement option code is DEFERRED, then return the interim_tax_ccid
2468 -- otherwise return tax_account_ccid.
2469 -- - For non-recoverable tax distributions, the REC_NREC_ACCOUNT_CCID should be
2470 -- obtained from ZX_ACCOUNTS using Tax Rate Id first. The account returned
2471 -- should be the Non-Recoverable or Expense Account from zx_accounts. If
2472 -- account is not found usnig this logic then the API should return the
2473 -- Item/Expense Account passed in (p_revenue_expense_ccid). (We do not make
2474 -- use of default recovery settlement option code in this case)
2475 --
2476 --When Self Assessed Flag is 'Y', then
2477 -- - REC_NREC_ACCOUNT_CCID should be derived in the same manner as previously,
2478 -- for both recoverable and non-recoverable tax distributions.
2479 --
2480 -- - The Tax Liability Account should be derived using regular tax rate_id.
2481 -- the CCID to be returned in this case is the TAX_ACCOUNT_CCID.
2482
2483
2484 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
2485
2486 IF (g_level_procedure >= g_current_runtime_level ) THEN
2487
2488 FND_LOG.STRING(g_level_procedure,
2489 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2490 'ZX_TRD_SERVICES_PUB_PKG.GET_CCID(+)');
2491
2492 END IF;
2493
2494 IF (g_level_statement >= g_current_runtime_level ) THEN
2495
2496 FND_LOG.STRING(g_level_statement,
2497 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2498 'Input Parameters:');
2499 FND_LOG.STRING(g_level_statement,
2500 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2501 'GL Date:'||p_gl_date );
2502 FND_LOG.STRING(g_level_statement,
2503 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2504 'Tax Rate Id:'||p_tax_rate_id);
2505 FND_LOG.STRING(g_level_statement,
2506 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2507 'Recovery Rate Id:'||p_rec_rate_id);
2508 FND_LOG.STRING(g_level_statement,
2509 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2510 'Self Assessed Flag:'||p_Self_Assessed_Flag);
2511 FND_LOG.STRING(g_level_statement,
2512 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2513 'Recoverable Flag:'|| p_Recoverable_Flag);
2514 FND_LOG.STRING(g_level_statement,
2515 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2516 'Org Id:'|| p_org_id);
2517 FND_LOG.STRING(g_level_statement,
2518 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2519 'Ledger Id:'|| p_ledger_id);
2520 FND_LOG.STRING(g_level_statement,
2521 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2522 'Tax regime id:'||p_tax_regime_id);
2523 FND_LOG.STRING(g_level_statement,
2524 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2525 'Tax Id:'|| p_tax_id);
2526 FND_LOG.STRING(g_level_statement,
2527 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2528 'Tax Status Id:'|| p_tax_status_id);
2529 FND_LOG.STRING(g_level_statement,
2530 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2531 'revenue_expense_ccid:'|| p_revenue_expense_ccid);
2532 FND_LOG.STRING(g_level_statement,
2533 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2534 'Account Source Tax Rate Id:'|| p_account_source_tax_rate_id);
2535 END IF;
2536
2537 x_return_status := FND_API.G_RET_STS_SUCCESS;
2538
2539 IF p_Recoverable_Flag = 'Y' then
2540 --start - Bug Fix - 5950624
2541 OPEN get_def_rec_settle_option_code(p_tax_rate_id);
2542 FETCH get_def_rec_settle_option_code INTO l_def_rec_settle_option_code;
2543 CLOSE get_def_rec_settle_option_code;
2544
2545 IF l_def_rec_settle_option_code IS NULL THEN
2546 --end - Bug Fix - 5950624
2547 IF ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl.exists(p_tax_id) then
2548 l_def_rec_settle_option_code :=
2549 nvl(ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_tax_id).def_rec_settlement_option_code,'IMMEDIATE');
2550 ELSE
2551 ZX_TDS_UTILITIES_PKG.populate_tax_cache (
2552 p_tax_id => p_tax_id,
2553 p_return_status => x_return_status,
2554 p_error_buffer => l_error_buffer);
2555 l_def_rec_settle_option_code :=
2556 nvl(ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_tax_id).def_rec_settlement_option_code,'IMMEDIATE');
2557 END IF;
2558 END IF;
2559
2560 IF (g_level_statement >= g_current_runtime_level ) THEN
2561
2562 FND_LOG.STRING(g_level_statement,
2563 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2564 'l_def_rec_settle_option_code: '|| l_def_rec_settle_option_code);
2565 END IF;
2566
2567
2568 IF p_account_source_tax_rate_id is NOT NULL then
2569
2570 BEGIN
2571
2572 IF (g_level_statement >= g_current_runtime_level ) THEN
2573 FND_LOG.STRING(g_level_statement,
2574 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2575 'Getting account information using account source tax rate id:'||p_account_source_tax_rate_id);
2576 END IF;
2577
2578 IF ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl.exists(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)) THEN
2579
2580 IF (g_level_statement >= g_current_runtime_level ) THEN
2581
2582 FND_LOG.STRING(g_level_statement,
2583 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2584 'Getting from cache for p_account_sourece_tax_rate_id ');
2585 END IF;
2586 l_interim_tax_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid;
2587
2588 l_rec_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid;
2589
2590 l_nrec_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid;
2591
2592 ELSE
2593 IF (g_level_statement >= g_current_runtime_level ) THEN
2594
2595 FND_LOG.STRING(g_level_statement,
2596 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2597 'Getting from database for p_account_sourece_tax_rate_id ');
2598 END IF;
2599 open get_rec_nrec_ccid_cur(p_account_source_tax_rate_id, 'RATES',p_org_id);
2600 fetch get_rec_nrec_ccid_cur into l_interim_tax_ccid, l_rec_ccid, l_nrec_ccid;
2601 close get_rec_nrec_ccid_cur;
2602
2603 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid := l_interim_tax_ccid;
2604
2605 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid := l_rec_ccid;
2606
2607 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid := l_nrec_ccid;
2608
2609
2610 END IF;
2611 EXCEPTION
2612 WHEN TOO_MANY_ROWS THEN
2613 IF (g_level_exception >= g_current_runtime_level ) THEN
2614 FND_LOG.STRING(g_level_exception,
2615 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2616 'There are more than one set of accounts defined for this tax rate id: '||p_account_source_tax_rate_id||
2617 ' Please specify ledger in the input structure while calling get_ccid API.');
2618 END IF;
2619 IF get_rec_nrec_ccid_cur%ISOPEN THEN
2620 close get_rec_nrec_ccid_cur;
2621 END IF;
2622 WHEN OTHERS THEN
2623 IF (g_level_exception >= g_current_runtime_level ) THEN
2624 FND_LOG.STRING(g_level_exception,
2625 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2626 'EXCEPTION: OTHERS: '||SQLCODE||' ; '||SQLERRM);
2627 END IF;
2628 IF get_rec_nrec_ccid_cur%ISOPEN THEN
2629 close get_rec_nrec_ccid_cur;
2630 END IF;
2631 END;
2632
2633 IF l_def_rec_settle_option_code = 'DEFERRED' THEN
2634 l_ccid := l_interim_tax_ccid;
2635 ELSE
2636 l_ccid := l_rec_ccid;
2637 END IF;
2638
2639 END IF;
2640
2641 IF l_ccid is null THEN
2642
2643 BEGIN
2644 IF (g_level_statement >= g_current_runtime_level ) THEN
2645 FND_LOG.STRING(g_level_statement,
2646 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2647 'Getting account information using recovery rate id:'||p_rec_rate_id);
2648 END IF;
2649
2650 IF
2651 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl.exists(to_char(p_rec_rate_id)||'RATES'||to_char(p_org_id)) THEN
2652
2653 IF (g_level_statement >= g_current_runtime_level ) THEN
2654
2655 FND_LOG.STRING(g_level_statement,
2656 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2657 'Getting from cache for p_rec_rate_id ');
2658 END IF;
2659 l_interim_tax_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_rec_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid;
2660
2661 l_rec_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_rec_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid;
2662
2663 l_nrec_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_rec_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid;
2664
2665 ELSE
2666
2667 IF (g_level_statement >= g_current_runtime_level ) THEN
2668
2669 FND_LOG.STRING(g_level_statement,
2670 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2671 'Getting from database for p_rec_rate_id ');
2672 END IF;
2673 open get_rec_nrec_ccid_cur(p_rec_rate_id, 'RATES',p_org_id);
2674 fetch get_rec_nrec_ccid_cur into l_interim_tax_ccid, l_rec_ccid, l_nrec_ccid;
2675 close get_rec_nrec_ccid_cur;
2676
2677 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_rec_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid := l_interim_tax_ccid;
2678
2679 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_rec_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid := l_rec_ccid;
2680
2681 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_rec_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid := l_nrec_ccid;
2682
2683
2684 END IF;
2685 EXCEPTION
2686 WHEN TOO_MANY_ROWS THEN
2687 IF (g_level_exception >= g_current_runtime_level ) THEN
2688 FND_LOG.STRING(g_level_exception,
2689 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2690 'There are more than one set of accounts defined for this tax rate id: '||p_rec_rate_id||
2691 ' Please specify ledger in the input structure while calling get_ccid API.');
2692 END IF;
2693 IF get_rec_nrec_ccid_cur%ISOPEN THEN
2694 close get_rec_nrec_ccid_cur;
2695 END IF;
2696 WHEN OTHERS THEN
2697 IF (g_level_exception >= g_current_runtime_level ) THEN
2698 FND_LOG.STRING(g_level_exception,
2699 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2700 'EXCEPTION: OTHERS: '||SQLCODE||' ; '||SQLERRM);
2701 END IF;
2702 IF get_rec_nrec_ccid_cur%ISOPEN THEN
2703 close get_rec_nrec_ccid_cur;
2704 END IF;
2705 END;
2706
2707 IF l_def_rec_settle_option_code = 'DEFERRED' then
2708 l_ccid := l_interim_tax_ccid;
2709 ELSE
2710 l_ccid := l_rec_ccid;
2711 END IF;
2712
2713 IF l_ccid is null THEN
2714
2715 BEGIN
2716
2717 IF (g_level_statement >= g_current_runtime_level ) THEN
2718 FND_LOG.STRING(g_level_statement,
2719 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2720 'Getting account information using tax rate id:'||p_tax_rate_id);
2721 END IF;
2722
2723 IF
2724 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl.exists(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)) THEN
2725
2726 IF (g_level_statement >= g_current_runtime_level ) THEN
2727
2728 FND_LOG.STRING(g_level_statement,
2729 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2730 'Getting from cache for p_tax_rate_id ');
2731 END IF;
2732
2733 l_interim_tax_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid;
2734
2735 l_rec_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid;
2736
2737 l_nrec_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid;
2738
2739 ELSE
2740 IF (g_level_statement >= g_current_runtime_level ) THEN
2741
2742 FND_LOG.STRING(g_level_statement,
2743 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2744 'Getting from database for p_tax_rate_id ');
2745 END IF;
2746 open get_rec_nrec_ccid_cur(p_tax_rate_id, 'RATES',p_org_id);
2747 fetch get_rec_nrec_ccid_cur into l_interim_tax_ccid, l_rec_ccid, l_nrec_ccid;
2748 close get_rec_nrec_ccid_cur;
2749
2750 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid := l_interim_tax_ccid;
2751
2752 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid := l_rec_ccid;
2753
2754 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid := l_nrec_ccid;
2755
2756 END IF;
2757
2758 EXCEPTION
2759 WHEN TOO_MANY_ROWS THEN
2760 IF (g_level_exception >= g_current_runtime_level ) THEN
2761 FND_LOG.STRING(g_level_exception,
2762 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2763 'There are more than one set of accounts defined for this tax rate id: '||p_tax_rate_id||
2764 ' Please specify ledger in the input structure while calling get_ccid API.');
2765 END IF;
2766 IF get_rec_nrec_ccid_cur%ISOPEN THEN
2767 close get_rec_nrec_ccid_cur;
2768 END IF;
2769 WHEN OTHERS THEN
2770 IF (g_level_exception >= g_current_runtime_level ) THEN
2771 FND_LOG.STRING(g_level_exception,
2772 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2773 'EXCEPTION: OTHERS: '||SQLCODE||' ; '||SQLERRM);
2774 END IF;
2775 IF get_rec_nrec_ccid_cur%ISOPEN THEN
2776 close get_rec_nrec_ccid_cur;
2777 END IF;
2778 END;
2779
2780 IF l_def_rec_settle_option_code = 'DEFERRED' then
2781 l_ccid := l_interim_tax_ccid;
2782 ELSE
2783 l_ccid := l_rec_ccid;
2784 END IF;
2785
2786 END IF; -- l_ccid is null
2787 END IF; -- l_ccid is null
2788
2789
2790 ELSIF p_Recoverable_Flag <> 'Y' then
2791
2792 IF p_account_source_tax_rate_id is NOT NULL then
2793
2794 BEGIN
2795
2796 IF (g_level_statement >= g_current_runtime_level ) THEN
2797 FND_LOG.STRING(g_level_statement,
2798 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2799 'Getting account information using account source tax rate id:'||p_account_source_tax_rate_id);
2800 END IF;
2801
2802 IF
2803 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl.exists(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)) THEN
2804
2805 IF (g_level_statement >= g_current_runtime_level ) THEN
2806
2807 FND_LOG.STRING(g_level_statement,
2808 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2809 'Getting from cache for p_account_source_tax_rate_id ');
2810 END IF;
2811 l_interim_tax_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid;
2812
2813 l_rec_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid;
2814
2815 l_nrec_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid;
2816
2817 ELSE
2818 IF (g_level_statement >= g_current_runtime_level ) THEN
2819
2820 FND_LOG.STRING(g_level_statement,
2821 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2822 'Getting from database for p_account_source_tax_rate_id ');
2823 END IF;
2824
2825 open get_rec_nrec_ccid_cur(p_account_source_tax_rate_id, 'RATES',p_org_id);
2826 fetch get_rec_nrec_ccid_cur into l_interim_tax_ccid, l_rec_ccid, l_nrec_ccid;
2827 close get_rec_nrec_ccid_cur;
2828
2829 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid := l_interim_tax_ccid;
2830
2831 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid := l_rec_ccid;
2832
2833 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid := l_nrec_ccid;
2834
2835 END IF;
2836 EXCEPTION
2837 WHEN TOO_MANY_ROWS THEN
2838 IF (g_level_exception >= g_current_runtime_level ) THEN
2839 FND_LOG.STRING(g_level_exception,
2840 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2841 'There are more than one set of accounts defined for this tax rate id: '||p_account_source_tax_rate_id||
2842 ' Please specify ledger in the input structure while calling get_ccid API.');
2843 END IF;
2844 IF get_rec_nrec_ccid_cur%ISOPEN THEN
2845 close get_rec_nrec_ccid_cur;
2846 END IF;
2847 WHEN OTHERS THEN
2848 IF (g_level_exception >= g_current_runtime_level ) THEN
2849 FND_LOG.STRING(g_level_exception,
2850 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2851 'EXCEPTION: OTHERS: '||SQLCODE||' ; '||SQLERRM);
2852 END IF;
2853 IF get_rec_nrec_ccid_cur%ISOPEN THEN
2854 close get_rec_nrec_ccid_cur;
2855 END IF;
2856 END;
2857
2858 l_ccid := l_nrec_ccid;
2859
2860 END IF;
2861
2862 IF l_ccid is null THEN
2863
2864 BEGIN
2865
2866 IF (g_level_statement >= g_current_runtime_level ) THEN
2867 FND_LOG.STRING(g_level_statement,
2868 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2869 'Getting account information using tax rate id:'||p_tax_rate_id);
2870 END IF;
2871
2872 IF
2873 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl.exists(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)) THEN
2874
2875 IF (g_level_statement >= g_current_runtime_level ) THEN
2876
2877 FND_LOG.STRING(g_level_statement,
2878 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2879 'Getting from cache for p_tax_rate_id ');
2880 END IF;
2881
2882 l_interim_tax_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid;
2883
2884 l_rec_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid;
2885
2886 l_nrec_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid;
2887
2888 ELSE
2889 IF (g_level_statement >= g_current_runtime_level ) THEN
2890
2891 FND_LOG.STRING(g_level_statement,
2892 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2893 'Getting from database for p_tax_rate_id ');
2894 END IF;
2895
2896 open get_rec_nrec_ccid_cur(p_tax_rate_id, 'RATES', p_org_id);
2897 fetch get_rec_nrec_ccid_cur into l_interim_tax_ccid, l_rec_ccid, l_nrec_ccid;
2898 close get_rec_nrec_ccid_cur;
2899
2900 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid := l_interim_tax_ccid;
2901
2902 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid := l_rec_ccid;
2903
2904 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid := l_nrec_ccid;
2905
2906 END IF;
2907 EXCEPTION
2908 WHEN TOO_MANY_ROWS THEN
2909 IF (g_level_exception >= g_current_runtime_level ) THEN
2910 FND_LOG.STRING(g_level_exception,
2911 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2912 'There are more than one set of accounts defined for this tax rate id: '||p_tax_rate_id||
2913 ' Please specify ledger in the input structure while calling get_ccid API.');
2914 END IF;
2915 IF get_rec_nrec_ccid_cur%ISOPEN THEN
2916 close get_rec_nrec_ccid_cur;
2917 END IF;
2918 WHEN OTHERS THEN
2919 IF (g_level_exception >= g_current_runtime_level ) THEN
2920 FND_LOG.STRING(g_level_exception,
2921 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2922 'EXCEPTION: OTHERS: '||SQLCODE||' ; '||SQLERRM);
2923 END IF;
2924 IF get_rec_nrec_ccid_cur%ISOPEN THEN
2925 close get_rec_nrec_ccid_cur;
2926 END IF;
2927 END;
2928
2929 l_ccid := l_nrec_ccid;
2930
2931 END IF;
2932
2933 IF l_ccid is null THEN
2934
2935 l_ccid := p_revenue_expense_ccid;
2936
2937 END IF;
2938
2939 END IF; -- p_Recoverable_Flag = 'Y'
2940
2941 IF l_ccid is not null THEN -- Validate the CCID
2942 -- If ccid is invalid, EBTax will not nullify it and raise an error for
2943 -- normal rec or nrec case. AP will check if the ccid is valid and if it
2944 -- is not valid, it will place invoice on hold
2945
2946 /*open is_ccid_valid(l_ccid);
2947 fetch is_ccid_valid into l_val;
2948
2949 if is_ccid_valid%notfound then
2950 l_ccid := null;
2951 end if;
2952
2953 close is_ccid_valid;*/
2954
2955 p_rec_nrec_ccid := l_ccid;
2956
2957
2958 END IF; -- Validate the CCID
2959
2960 IF p_Self_Assessed_Flag = 'Y' THEN
2961
2962 -- return liability account only for self assessed taxes
2963 -- The Tax Liability Account should be derived using regular tax rate_id.
2964 -- the CCID to be returned in this case is the TAX_ACCOUNT_CCID.
2965
2966 BEGIN
2967
2968
2969 IF (g_level_statement >= g_current_runtime_level ) THEN
2970 FND_LOG.STRING(g_level_statement,
2971 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
2972 'Getting Liability account information using tax rate id:'||p_tax_rate_id);
2973 END IF;
2974
2975
2976 IF
2977 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl.exists(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)) THEN
2978
2979 IF (g_level_statement >= g_current_runtime_level ) THEN
2980
2981 FND_LOG.STRING(g_level_statement,
2982 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2983 'Getting from cache for p_tax_rate_id ');
2984 END IF;
2985 l_interim_tax_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid;
2986
2987 -- Bug 7299892 --
2988 l_tax_liab_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid;
2989
2990 l_nrec_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid;
2991
2992 else
2993
2994 IF (g_level_statement >= g_current_runtime_level ) THEN
2995
2996 FND_LOG.STRING(g_level_statement,
2997 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
2998 'Getting from database for p_tax_rate_id ');
2999 END IF;
3000 open get_rec_nrec_ccid_cur(p_tax_rate_id, 'RATES',p_org_id);
3001 fetch get_rec_nrec_ccid_cur into l_interim_tax_ccid, l_tax_liab_ccid, l_nrec_ccid;
3002 close get_rec_nrec_ccid_cur;
3003
3004 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid := l_interim_tax_ccid;
3005 --Bug 7299892 --
3006
3007
3008 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid := l_tax_liab_ccid;
3009
3010 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_tax_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid := l_nrec_ccid;
3011
3012 END IF;
3013 IF l_tax_liab_ccid IS NULL AND p_Recoverable_Flag <> 'Y' THEN
3014 IF (g_level_statement >= g_current_runtime_level ) THEN
3015 FND_LOG.STRING(g_level_statement,
3016 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
3017 'Getting Liability account information using Account source tax rate id:'||p_account_source_tax_rate_id);
3018 END IF;
3019 IF
3020 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl.exists(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)) THEN
3021
3022 IF (g_level_statement >= g_current_runtime_level ) THEN
3023
3024 FND_LOG.STRING(g_level_statement,
3025 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
3026 'Getting from cache for p_account_source_tax_rate_id ');
3027 END IF;
3028
3029 l_interim_tax_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid;
3030
3031 -- Bug 7299892 --
3032
3033 l_tax_liab_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid;
3034
3035 l_nrec_ccid := ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid;
3036
3037 else
3038 IF (g_level_statement >= g_current_runtime_level ) THEN
3039
3040 FND_LOG.STRING(g_level_statement,
3041 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.BEGIN',
3042 'Getting from database for p_account_source_tax_rate_id ');
3043 END IF;
3044 open get_rec_nrec_ccid_cur(p_account_source_tax_rate_id, 'RATES',p_org_id);
3045 fetch get_rec_nrec_ccid_cur into l_interim_tax_ccid, l_tax_liab_ccid, l_nrec_ccid;
3046 close get_rec_nrec_ccid_cur;
3047
3048 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(P_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).interim_tax_ccid := l_interim_tax_ccid;
3049
3050 -- Bug 7299892 --
3051
3052 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).tax_account_ccid := l_tax_liab_ccid;
3053
3054 ZX_GLOBAL_STRUCTURES_PKG.rec_nrec_ccid_tbl(to_char(p_account_source_tax_rate_id)||'RATES'||to_char(p_org_id)).non_rec_account_ccid := l_nrec_ccid;
3055
3056 END IF;
3057
3058 END IF;
3059 EXCEPTION
3060 WHEN TOO_MANY_ROWS THEN
3061 IF (g_level_exception >= g_current_runtime_level ) THEN
3062 FND_LOG.STRING(g_level_exception,
3063 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
3064 'There are more than one set of accounts defined for this tax rate id: '||p_tax_rate_id||
3065 ' Please specify ledger in the input structure while calling get_ccid API.');
3066 END IF;
3067 IF get_rec_nrec_ccid_cur%ISOPEN THEN
3068 close get_rec_nrec_ccid_cur;
3069 END IF;
3070 WHEN OTHERS THEN
3071 IF (g_level_exception >= g_current_runtime_level ) THEN
3072 FND_LOG.STRING(g_level_exception,
3073 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
3074 'EXCEPTION: OTHERS: '||SQLCODE||' ; '||SQLERRM);
3075 END IF;
3076 IF get_rec_nrec_ccid_cur%ISOPEN THEN
3077 close get_rec_nrec_ccid_cur;
3078 END IF;
3079 END;
3080
3081 -- validate l_tax_liab_ccid if it is different from l_ccid
3082 IF l_tax_liab_ccid is not NULL
3083 AND l_ccid is NOT NULL
3084 AND l_tax_liab_ccid <> l_ccid THEN
3085
3086 -- If l_tax_liab_ccid is invalid, EBTax will continue to nullify and raise an error for
3087 -- self assessed case.
3088
3089 /*open is_ccid_valid(l_tax_liab_ccid);
3090 fetch is_ccid_valid into l_val;
3091
3092 if is_ccid_valid%notfound then
3093 l_tax_liab_ccid := null;
3094 end if;
3095 close is_ccid_valid;*/
3096 null;
3097 END IF;
3098
3099 p_tax_liab_ccid := l_tax_liab_ccid;
3100
3101 END IF; -- p_Self_Assessed_Flag = 'Y'
3102
3103
3104 IF p_rec_nrec_ccid is null THEN
3105 IF p_Recoverable_Flag = 'Y' THEN -- bug 4893261
3106 x_return_status := FND_API.G_RET_STS_ERROR;
3107 FND_MESSAGE.SET_NAME('ZX', 'ZX_INVALID_REC_CCID');
3108 FND_MSG_PUB.Add;
3109 IF (g_level_statement >= g_current_runtime_level ) THEN
3110
3111 FND_LOG.STRING(g_level_statement,
3112 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
3113 'error: p_Recoverable_Flag is Y, but p_rec_nrec_ccid is null');
3114
3115 END IF;
3116 ELSIF p_Recoverable_Flag = 'N' THEN
3117 x_return_status := FND_API.G_RET_STS_ERROR; -- bug 4893261,
3118 FND_MESSAGE.SET_NAME('ZX', 'ZX_INVALID_NREC_CCID');
3119 FND_MSG_PUB.Add;
3120 IF (g_level_statement >= g_current_runtime_level ) THEN
3121
3122 FND_LOG.STRING(g_level_statement,
3123 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
3124 'error: p_Recoverable_Flag is N, but p_rec_nrec_ccid is null');
3125
3126 END IF;
3127 END IF;
3128 END IF;
3129
3130 --bug 6448736 Need to error if tax liabilty account is not defined
3131 --at the tax rate level of the self assessed tax
3132 --bug 6807089 need to display proper error message when the ccid is invalid.
3133
3134 IF p_Self_Assessed_Flag = 'Y' AND p_tax_liab_ccid IS NULL THEN
3135 x_return_status := FND_API.G_RET_STS_ERROR;
3136 FND_MESSAGE.SET_NAME('ZX', 'ZX_INVALID_LIAB_CCID');
3137 FND_MSG_PUB.Add;
3138 IF (g_level_statement >= g_current_runtime_level ) THEN
3139
3140 FND_LOG.STRING(g_level_statement,
3141 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
3142 'error: p_Self_Assessed_Flag is Y, but p_tax_liab_ccid
3143 is null');
3144
3145 END IF;
3146 END IF;
3147
3148 IF (g_level_procedure >= g_current_runtime_level ) THEN
3149
3150 FND_LOG.STRING(g_level_procedure,
3151 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.END',
3152 'ZX_TRD_SERVICES_PUB_PKG.GET_CCID(-)'||
3153 ' p_rec_nrec_ccid = '||p_rec_nrec_ccid||
3154 ' p_tax_liab_ccid = '||p_tax_liab_ccid||
3155 ' return status = '||x_return_status);
3156
3157 END IF;
3158
3159 EXCEPTION
3160 WHEN OTHERS THEN
3161 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3162
3163 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3164 FND_LOG.STRING(g_level_unexpected,
3165 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID',
3166 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3167 END IF;
3168
3169 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3170 FND_LOG.STRING(g_level_unexpected,
3171 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_CCID.END',
3172 'ZX_TRD_SERVICES_PUB_PKG.GET_CCID(-)');
3173 END IF;
3174
3175 END GET_CCID;
3176
3177
3178 /* ======================================================================*
3179 | PUBLIC PROCEDURE get_output_tax_ccid |
3180 | |
3181 | This procedure is called from TSRM to derive CCID for a tax |
3182 | distribution. |
3183 | |
3184 * ======================================================================*/
3185
3186 PROCEDURE GET_OUTPUT_TAX_CCID(
3187 p_gl_date IN DATE,
3188 p_tax_rate_id IN NUMBER,
3189 p_location_segment_id IN NUMBER,
3190 p_tax_line_id IN NUMBER,
3191 p_org_id IN NUMBER,
3192 p_ledger_id IN NUMBER,
3193 p_event_class_code IN VARCHAR2,
3194 p_entity_code IN VARCHAR2,
3195 p_application_id IN NUMBER,
3196 p_document_id IN NUMBER,
3197 p_document_line_id IN NUMBER,
3198 p_trx_level_type IN VARCHAR2,
3199 p_tax_account_ccid OUT NOCOPY NUMBER,
3200 p_interim_tax_ccid OUT NOCOPY NUMBER,
3201 p_adj_ccid OUT NOCOPY NUMBER,
3202 p_edisc_ccid OUT NOCOPY NUMBER,
3203 p_unedisc_ccid OUT NOCOPY NUMBER,
3204 p_finchrg_ccid OUT NOCOPY NUMBER,
3205 p_adj_non_rec_tax_ccid OUT NOCOPY NUMBER,
3206 p_edisc_non_rec_tax_ccid OUT NOCOPY NUMBER,
3207 p_unedisc_non_rec_tax_ccid OUT NOCOPY NUMBER,
3208 p_finchrg_non_rec_tax_ccid OUT NOCOPY NUMBER,
3209 x_return_status OUT NOCOPY VARCHAR2) IS
3210
3211 Cursor get_loc_account_ccid(p_loc_segment_id number, p_org_id number) is
3212 select tax_account_ccid, interim_tax_ccid, adj_ccid, edisc_ccid,
3213 unedisc_ccid, finchrg_ccid, adj_non_rec_tax_ccid, edisc_non_rec_tax_ccid,
3214 unedisc_non_rec_tax_ccid, finchrg_non_rec_tax_ccid
3215 from ar_location_accounts_all
3216 where location_segment_id = p_loc_segment_id
3217 and org_id = p_org_id;
3218
3219 Cursor get_zx_account_ccid(c_tax_account_entity_id number, c_tax_account_entity_code varchar2, c_org_id number,
3220 c_ledger_id number) is
3221 select tax_account_ccid, interim_tax_ccid, adj_ccid, edisc_ccid,
3222 unedisc_ccid, finchrg_ccid, adj_non_rec_tax_ccid, edisc_non_rec_tax_ccid,
3223 unedisc_non_rec_tax_ccid, finchrg_non_rec_tax_ccid
3224 from zx_accounts
3225 where TAX_ACCOUNT_ENTITY_ID = c_tax_account_entity_id
3226 and tax_account_entity_code = c_tax_account_entity_code
3227 and internal_organization_id = c_org_id
3228 and ledger_id = c_ledger_id;
3229
3230 Cursor is_ccid_valid(l_ccid number) is
3231 select 'x'
3232 from gl_code_combinations
3233 where code_combination_id = l_ccid
3234 and enabled_flag = 'Y'
3235 and p_gl_date between nvl(start_date_active,p_gl_date) and nvl(end_date_active, p_gl_date);
3236
3237 Cursor line_acc_src_tax_rate_id(p_tax_line_id IN NUMBER) is
3238 select account_source_tax_rate_id
3239 from zx_lines
3240 where tax_line_id = p_tax_line_id;
3241
3242 Cursor get_location_segment_id_csr(p_tax_line_id IN NUMBER) is
3243 select location_segment_id
3244 from ra_customer_trx_lines_all inv, zx_lines cm, zx_lines zxinv
3245 where cm.tax_line_id = p_tax_line_id
3246 and cm.adjusted_doc_trx_id = inv.customer_trx_id
3247 and cm.adjusted_doc_tax_line_id = inv.tax_line_id
3248 and inv.line_type = 'TAX'
3249 and cm.adjusted_doc_tax_line_id = zxinv.tax_line_id
3250 and cm.tax_provider_id is not null
3251 and zxinv.record_type_code = 'MIGRATED';
3252
3253
3254 l_content_owner_id NUMBER;
3255 l_tax_id NUMBER;
3256 l_tax_jurisdiction_id NUMBER;
3257 l_acc_src_tax_rate_id NUMBER;
3258 l_tax_rate_id NUMBER;
3259 l_def_rec_settle_option_code VARCHAR2(30);
3260 l_ccid NUMBER;
3261 l_val char;
3262 l_location_segment_id NUMBER;
3263
3264 BEGIN
3265
3266 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
3267
3268 IF (g_level_procedure >= g_current_runtime_level ) THEN
3269
3270 FND_LOG.STRING(g_level_procedure,
3271 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.BEGIN',
3272 'ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID(+)');
3273
3274 END IF;
3275
3276 IF (g_level_statement >= g_current_runtime_level ) THEN
3277
3278 FND_LOG.STRING(g_level_statement,
3279 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.BEGIN',
3280 'Input Parameters:');
3281 FND_LOG.STRING(g_level_statement,
3282 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.BEGIN',
3283 'GL Date:'||p_gl_date );
3284 FND_LOG.STRING(g_level_statement,
3285 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.BEGIN',
3286 'Tax Rate Id:'||p_tax_rate_id);
3287 FND_LOG.STRING(g_level_statement,
3288 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.BEGIN',
3289 'Location Segment Id:'||p_location_segment_id);
3290 FND_LOG.STRING(g_level_statement,
3291 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.BEGIN',
3292 'Tax Line Id:'|| p_tax_line_id);
3293 FND_LOG.STRING(g_level_statement,
3294 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.BEGIN',
3295 'Org Id:'|| p_org_id);
3296 FND_LOG.STRING(g_level_statement,
3297 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.BEGIN',
3298 'Ledger Id:'|| p_ledger_id);
3299 END IF;
3300
3301
3302 x_return_status := FND_API.G_RET_STS_SUCCESS;
3303
3304 IF p_location_segment_id IS NULL THEN
3305 -- Get location_segment_id in case of credit memo for a migrated transaction
3306 open get_location_segment_id_csr(p_tax_line_id ) ;
3307 fetch get_location_segment_id_csr into l_location_segment_id;
3308 close get_location_segment_id_csr;
3309 ELSE
3310 l_location_segment_id := p_location_segment_id;
3311 END IF;
3312
3313
3314 IF l_location_segment_id IS NOT NULL THEN
3315
3316 IF (g_level_statement >= g_current_runtime_level ) THEN
3317
3318 FND_LOG.STRING(g_level_statement,
3319 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID',
3320 'Getting accounts using Location Segment.. '||to_char(l_location_segment_id));
3321
3322 END IF;
3323
3324 open get_loc_account_ccid(l_location_segment_id, p_org_id);
3325 fetch get_loc_account_ccid into p_tax_account_ccid, p_interim_tax_ccid,
3326 p_adj_ccid, p_edisc_ccid,
3327 p_unedisc_ccid, p_finchrg_ccid,
3328 p_adj_non_rec_tax_ccid, p_edisc_non_rec_tax_ccid,
3329 p_unedisc_non_rec_tax_ccid, p_finchrg_non_rec_tax_ccid;
3330 close get_loc_account_ccid;
3331
3332 IF p_tax_account_ccid is not null THEN
3333
3334 open is_ccid_valid(p_tax_account_ccid);
3335 fetch is_ccid_valid into l_val;
3336
3337 if is_ccid_valid%notfound then
3338 p_tax_account_ccid := null;
3339 end if;
3340
3341 close is_ccid_valid;
3342
3343 END IF; -- p_tax_account_ccid is not null
3344
3345
3346 END IF; --location segment id not null
3347
3348 -- Getting the tax jurisdiction id to derive accounts only for
3349 -- VERTEX tax calculation for migated records only.
3350 get_tax_jurisdiction_id(
3351 p_tax_line_id,
3352 p_tax_rate_id,
3353 l_tax_jurisdiction_id,
3354 x_return_status);
3355
3356 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
3357 IF (g_level_statement >= g_current_runtime_level ) THEN
3358 FND_LOG.STRING(g_level_statement,
3359 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID',
3360 'After calling get_tax_jurisdiction_id, x_return_status = '|| x_return_status);
3361 FND_LOG.STRING(g_level_statement,
3362 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.END',
3363 'ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID(-)');
3364 END IF;
3365 RETURN;
3366 END IF;
3367
3368 IF p_tax_account_ccid IS NULL THEN
3369 IF p_tax_line_id IS NOT NULL THEN
3370 IF (g_level_statement >= g_current_runtime_level ) THEN
3371 FND_LOG.STRING(g_level_statement,
3372 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID',
3373 'Getting account information for the jurisdiction id '||to_char(l_tax_jurisdiction_id));
3374 END IF;
3375 IF l_tax_jurisdiction_id IS NOT NULL THEN
3376 open get_zx_account_ccid(l_tax_jurisdiction_id, 'JURISDICTION', p_org_id, p_ledger_id);
3377 fetch get_zx_account_ccid into p_tax_account_ccid, p_interim_tax_ccid,
3378 p_adj_ccid, p_edisc_ccid,
3379 p_unedisc_ccid, p_finchrg_ccid,
3380 p_adj_non_rec_tax_ccid, p_edisc_non_rec_tax_ccid,
3381 p_unedisc_non_rec_tax_ccid, p_finchrg_non_rec_tax_ccid;
3382
3383 close get_zx_account_ccid;
3384
3385
3386 IF (g_level_statement >= g_current_runtime_level ) THEN
3387 FND_LOG.STRING(g_level_statement,
3388 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID',
3389 'Tax account for jurisdiction_id '||to_char(l_tax_jurisdiction_id)||
3390 ' is: '||to_char(p_tax_account_ccid));
3391 END IF;
3392 IF p_tax_account_ccid is not null THEN
3393
3394 open is_ccid_valid(p_tax_account_ccid);
3395 fetch is_ccid_valid into l_val;
3396
3397 if is_ccid_valid%notfound then
3398 p_tax_account_ccid := null;
3399 end if;
3400
3401 close is_ccid_valid;
3402
3403 END IF; -- p_tax_account_ccid is not null
3404 END IF; --l_tax_jurisdiction_id is not null
3405 END IF; --p_tax_line_id is not null
3406 END IF; --p_tax_account_ccid is null
3407
3408 l_tax_rate_id := p_tax_rate_id;
3409
3410 IF p_tax_account_ccid IS NULL THEN
3411
3412 IF p_tax_line_id IS NOT NULL THEN
3413
3414 IF (g_level_statement >= g_current_runtime_level ) THEN
3415 FND_LOG.STRING(g_level_statement,
3416 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID',
3417 'Getting account source tax rate id for tax line id '||to_char(p_tax_line_id));
3418 END IF;
3419
3420 open line_acc_src_tax_rate_id(p_tax_line_id);
3421 fetch line_acc_src_tax_rate_id into l_acc_src_tax_rate_id;
3422 IF l_acc_src_tax_rate_id IS NOT NULL THEN
3423 open get_zx_account_ccid(l_acc_src_tax_rate_id, 'RATES', p_org_id, p_ledger_id);
3424 fetch get_zx_account_ccid into p_tax_account_ccid, p_interim_tax_ccid,
3425 p_adj_ccid, p_edisc_ccid,
3426 p_unedisc_ccid, p_finchrg_ccid,
3427 p_adj_non_rec_tax_ccid, p_edisc_non_rec_tax_ccid,
3428 p_unedisc_non_rec_tax_ccid, p_finchrg_non_rec_tax_ccid;
3429
3430 close get_zx_account_ccid;
3431
3432
3433 IF (g_level_statement >= g_current_runtime_level ) THEN
3434 FND_LOG.STRING(g_level_statement,
3435 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID',
3436 'Tax account for acct_source_tax_rate_id '||to_char(l_acc_src_tax_rate_id)||
3437 ' is: '||to_char(p_tax_account_ccid));
3438 END IF;
3439
3440 IF p_tax_account_ccid is not null THEN
3441
3442 open is_ccid_valid(p_tax_account_ccid);
3443 fetch is_ccid_valid into l_val;
3444
3445 if is_ccid_valid%notfound then
3446 p_tax_account_ccid := null;
3447 end if;
3448
3449 close is_ccid_valid;
3450
3451 END IF; -- p_tax_account_ccid is not null
3452
3453 END IF; --l_acc_src_tax_rate_id is not null check
3454 END IF; -- p_tax_line_id is not null check
3455 END IF;
3456
3457 IF p_tax_account_ccid is null THEN
3458 IF l_tax_rate_id is not null THEN
3459
3460 IF (g_level_statement >= g_current_runtime_level ) THEN
3461 FND_LOG.STRING(g_level_statement,
3462 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID',
3463 'Getting account information using tax rate id: '||to_char(l_tax_rate_id));
3464 END IF;
3465
3466 open get_zx_account_ccid(l_tax_rate_id, 'RATES', p_org_id, p_ledger_id);
3467 fetch get_zx_account_ccid into p_tax_account_ccid, p_interim_tax_ccid,
3468 p_adj_ccid, p_edisc_ccid,
3469 p_unedisc_ccid, p_finchrg_ccid,
3470 p_adj_non_rec_tax_ccid, p_edisc_non_rec_tax_ccid,
3471 p_unedisc_non_rec_tax_ccid, p_finchrg_non_rec_tax_ccid;
3472
3473 close get_zx_account_ccid;
3474
3475 IF p_tax_account_ccid is not null THEN
3476
3477 open is_ccid_valid(p_tax_account_ccid);
3478 fetch is_ccid_valid into l_val;
3479
3480 if is_ccid_valid%notfound then
3481 p_tax_account_ccid := null;
3482 end if;
3483
3484 close is_ccid_valid;
3485
3486 END IF; -- p_tax_account_ccid is not null
3487
3488 END IF; -- l_tax_rate_id is not null check
3489 END IF;
3490
3491
3492 IF p_interim_tax_ccid is not null THEN
3493
3494 open is_ccid_valid(p_interim_tax_ccid);
3495 fetch is_ccid_valid into l_val;
3496
3497 if is_ccid_valid%notfound then
3498 p_interim_tax_ccid := null;
3499 end if;
3500
3501 close is_ccid_valid;
3502
3503 END IF; -- p_interim_tax_ccid is not null
3504
3505 IF (g_level_procedure >= g_current_runtime_level ) THEN
3506
3507 FND_LOG.STRING(g_level_procedure,
3508 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.END',
3509 'ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID(-)'||
3510 ' tax_account_ccid = ' || p_tax_account_ccid ||
3511 ' interim_tax_ccid = ' || p_interim_tax_ccid ||
3512 ' adj_ccid = ' || p_adj_ccid ||
3513 ' edisc_ccid = ' || p_edisc_ccid ||
3514 ' unedisc_ccid = ' || p_unedisc_ccid ||
3515 ' finchrg_ccid = ' || p_finchrg_ccid ||
3516 ' adj_non_rec_tax_ccid = ' || p_adj_non_rec_tax_ccid ||
3517 ' edisc_non_rec_tax_ccid = ' || p_edisc_non_rec_tax_ccid ||
3518 ' unedisc_non_rec_tax_ccid = ' ||p_unedisc_non_rec_tax_ccid ||
3519 ' finchrg_non_rec_tax_ccid = ' ||p_finchrg_non_rec_tax_ccid ||
3520 ' RETURN_STATUS = ' || x_return_status);
3521
3522 END IF;
3523
3524
3525
3526 EXCEPTION
3527 WHEN OTHERS THEN
3528 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3529
3530 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3531 FND_LOG.STRING(g_level_unexpected,
3532 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID',
3533 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3534 END IF;
3535
3536 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3537 FND_LOG.STRING(g_level_unexpected,
3538 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.END',
3539 'ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID(-)');
3540 END IF;
3541
3542 END GET_OUTPUT_TAX_CCID;
3543
3544
3545 /* ======================================================================*
3546 | PRIVATE PROCEDURE insert_item_dist |
3547 | |
3548 | This procedure is insert dummy item distributions into the global |
3549 | temporary table for the tax only tax line. |
3550 | |
3551 * ======================================================================*/
3552
3553 PROCEDURE insert_item_dist(
3554 p_tax_line_rec IN zx_lines%ROWTYPE,
3555 x_return_status OUT NOCOPY VARCHAR2) IS
3556
3557 BEGIN
3558
3559 IF (g_level_procedure >= g_current_runtime_level ) THEN
3560 FND_LOG.STRING(g_level_procedure,
3561 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.INSERT_ITEM_DIST.BEGIN',
3562 'ZX_TRD_SERVICES_PUB_PKG.INSERT_ITEM_DIST(+)');
3563 END IF;
3564
3565 INSERT INTO zx_itm_distributions_gt(
3566 --internal_organization_id,
3567 application_id,
3568 entity_code,
3569 event_class_code,
3570 -- event_type_code,
3571 trx_id ,
3572 trx_line_id,
3573 trx_level_type,
3574 trx_line_dist_id,
3575 dist_level_action,
3576 trx_line_dist_date,
3577 --set_of_books_id,
3578 --trx_currency_code,
3579 --currency_conversion_date,
3580 --currency_conversion_rate,
3581 --currency_conversion_type,
3582 --minimum_accountable_unit,
3583 --precision,
3584 item_dist_number,
3585 dist_intended_use,
3586 tax_inclusion_flag,
3587 tax_code,
3588 task_id ,
3589 award_id,
3590 project_id,
3591 expenditure_type,
3592 expenditure_organization_id,
3593 expenditure_item_date,
3594 trx_line_dist_amt,
3595 trx_line_dist_qty,
3596 trx_line_quantity,
3597 account_ccid,
3598 account_string,
3599 --trx_number, -- check later
3600 ref_doc_application_id,
3601 ref_doc_entity_code,
3602 ref_doc_event_class_code,
3603 ref_doc_trx_id,
3604 ref_doc_line_id,
3605 ref_doc_trx_level_type,
3606 ref_doc_dist_id,
3607 ref_doc_curr_conv_rate,
3608 --content_owner_id, -- check later
3609 --tax_event_class_code, -- check later
3610 --tax_event_type_code,
3611 --doc_event_status,
3612 trx_line_dist_tax_amt,
3613 --quote_flag,
3614 historical_flag)
3615 SELECT
3616 --p_tax_line_rec.internal_organization_id,
3617 application_id,
3618 entity_code,
3619 event_class_code,
3620 -- event_type_code,
3621 trx_id,
3622 trx_line_id,
3623 trx_level_type,
3624 -99, -- p_tax_line_rec.TRX_LINE_DIST_ID
3625 'CREATE', -- p_tax_line_rec.DIST_LEVEL_ACTION
3626 nvl(trx_line_gl_date, trx_date), -- trx_line_dist_date
3627 --p_tax_line_rec.ledger_id, -- set_of_books_id
3628 --p_tax_line_rec.trx_currency_code,
3629 --p_tax_line_rec.currency_conversion_date,
3630 --p_tax_line_rec.currency_conversion_rate,
3631 --p_tax_line_rec.currency_conversion_type,
3632 --p_tax_line_rec.minimum_accountable_unit,
3633 --p_tax_line_rec.precision,
3634 1, -- item dist number
3635 line_intended_use, -- copy line intended use to dist
3636 p_tax_line_rec.tax_amt_included_flag, -- tax_inclusion_flag
3637 p_tax_line_rec.tax_code,
3638 NULL, -- TASK_ID
3639 NULL, -- AWARD_ID
3640 NULL, -- PROJECT_ID
3641 NULL, -- EXPENDITURE_TYPE
3642 NULL, -- EXPENDITURE_ORGANIZATION_ID
3643 NULL, -- EXPENDITURE_ITEM_DATE
3644 line_amt,
3645 trx_line_quantity,
3646 trx_line_quantity,
3647 account_ccid,
3648 account_string,
3649 --p_tax_line_rec.trx_number,
3650 ref_doc_application_id,
3651 ref_doc_entity_code,
3652 ref_doc_event_class_code,
3653 ref_doc_trx_id,
3654 ref_doc_line_id,
3655 ref_doc_trx_level_type,
3656 NULL, -- REF_DOC_DIST_ID
3657 NULL, -- REF_DOC_CURR_CONV_RATE
3658 --p_tax_line_rec.content_owner_id,
3659 --p_tax_line_rec.tax_event_class_code,
3660 --p_tax_line_rec.tax_event_type_code,
3661 --p_tax_line_rec.doc_event_status,
3662 p_tax_line_rec.tax_amt,
3663 -- 'N', -- Quote_Flag what should it be?
3664 Historical_Flag
3665 FROM zx_lines_det_factors
3666 WHERE application_id = p_tax_line_rec.application_id
3667 AND event_class_code = p_tax_line_rec.event_class_code
3668 AND entity_code = p_tax_line_rec.entity_code
3669 AND trx_id = p_tax_line_rec.trx_id
3670 AND trx_line_id = p_tax_line_rec.trx_line_id
3671 AND trx_level_type = p_tax_line_rec.trx_level_type;
3672
3673 IF (g_level_procedure >= g_current_runtime_level ) THEN
3674 FND_LOG.STRING(g_level_procedure,
3675 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.INSERT_ITEM_DIST.END',
3676 'ZX_TRD_SERVICES_PUB_PKG.INSERT_ITEM_DIST(-)');
3677 END IF;
3678
3679 EXCEPTION
3680 WHEN DUP_VAL_ON_INDEX THEN
3681 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3682
3683 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3684 FND_LOG.STRING(g_level_unexpected,
3685 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.insert_item_dist',
3686 'TRL Record Already Exists');
3687 FND_LOG.STRING(g_level_unexpected,
3688 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.insert_item_dist',
3689 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3690 END IF;
3691
3692 WHEN OTHERS THEN
3693 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR ;
3694
3695 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3696 FND_LOG.STRING(g_level_unexpected,
3697 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.insert_item_dist',
3698 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3699 END IF;
3700
3701 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3702 FND_LOG.STRING(g_level_unexpected,
3703 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.insert_item_dist.END',
3704 'ZX_TRD_SERVICES_PUB_PKG.INSERT_ITEM_DIST(-)');
3705 END IF;
3706 END insert_item_dist;
3707
3708
3709 /* ======================================================================*
3710 | PRIVATE PROCEDURE fetch_tax_lines |
3711 | |
3712 | This procedure is used to fetch all the tax lines that need to be |
3713 | for recovery. |
3714 | |
3715 * ======================================================================*/
3716
3717 PROCEDURE fetch_tax_lines (
3718 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
3719 p_tax_line_tbl OUT NOCOPY tax_line_tbl_type,
3720 x_return_status OUT NOCOPY VARCHAR2) IS
3721
3722 detail_ctr number;
3723
3724 CURSOR fetch_tax_lines_csr IS
3725 SELECT * FROM zx_lines
3726 WHERE trx_id = p_event_class_rec.trx_id
3727 AND application_id = p_event_class_rec.application_id
3728 AND entity_code = p_event_class_rec.entity_code
3729 AND event_class_code = p_event_class_rec.event_class_code
3730 AND Reporting_Only_Flag = 'N' -- do not process reporting only lines
3731 AND (Process_For_Recovery_Flag = 'Y' OR Item_Dist_Changed_Flag = 'Y')
3732 AND mrc_tax_line_flag = 'N'
3733 --6900725
3734 ORDER BY trx_line_id, trx_level_type, account_source_tax_rate_id nulls first ;
3735
3736 CURSOR fetch_tax_lines_gt_csr IS
3737 SELECT /*+ INDEX(ZX_DETAIL_TAX_LINES_GT ZX_DETAIL_TAX_LINES_GT_U1) */
3738 *
3739 FROM zx_detail_tax_lines_gt
3740 WHERE application_id = p_event_class_rec.application_id
3741 AND entity_code = p_event_class_rec.entity_code
3742 AND event_class_code = p_event_class_rec.event_class_code
3743 AND trx_id = p_event_class_rec.trx_id
3744 AND reporting_only_flag = 'N'
3745 AND process_for_recovery_flag = 'Y'
3746 AND mrc_tax_line_flag = 'N'
3747 --6900725
3748 ORDER BY trx_line_id, trx_level_type, account_source_tax_rate_id nulls first;
3749
3750 BEGIN
3751
3752 IF (g_level_procedure >= g_current_runtime_level ) THEN
3753 FND_LOG.STRING(g_level_procedure,
3754 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.fetch_tax_lines.BEGIN',
3755 'ZX_TRD_SERVICES_PUB_PKG.fetch_tax_lines(+)');
3756 END IF;
3757
3758 x_return_status:= FND_API.G_RET_STS_SUCCESS;
3759
3760 -- Initialize p_tax_line_tbl
3761 p_tax_line_tbl.delete;
3762
3763
3764 detail_ctr := 1;
3765
3766 IF (nvl(p_event_class_rec.Quote_Flag,'N') = 'N') THEN
3767
3768
3769 OPEN fetch_tax_lines_csr;
3770
3771 LOOP
3772 FETCH fetch_tax_lines_csr into p_tax_line_tbl(detail_ctr);
3773 EXIT when fetch_tax_lines_csr%notfound;
3774 detail_ctr := detail_ctr + 1;
3775
3776 END LOOP;
3777
3778 CLOSE fetch_tax_lines_csr;
3779
3780 ELSE
3781
3782 OPEN fetch_tax_lines_gt_csr;
3783
3784 LOOP
3785 FETCH fetch_tax_lines_gt_csr into p_tax_line_tbl(detail_ctr);
3786 EXIT when fetch_tax_lines_gt_csr%notfound;
3787 detail_ctr := detail_ctr + 1;
3788
3789 END LOOP;
3790 CLOSE fetch_tax_lines_gt_csr;
3791
3792 END IF;
3793
3794 IF (g_level_procedure >= g_current_runtime_level ) THEN
3795
3796 FND_LOG.STRING(g_level_procedure,
3797 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.fetch_tax_lines.END',
3798 'ZX_TRD_SERVICES_PUB_PKG.fetch_tax_lines(-)'||x_return_status);
3799 END IF;
3800
3801 EXCEPTION
3802 WHEN OTHERS THEN
3803 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3804
3805 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3806 FND_LOG.STRING(g_level_unexpected,
3807 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.fetch_tax_lines',
3808 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3809 FND_LOG.STRING(g_level_unexpected,
3810 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.fetch_tax_lines.END',
3811 'ZX_TRD_SERVICES_PUB_PKG.fetch_tax_lines(-)');
3812 END IF;
3813
3814 END fetch_tax_lines;
3815
3816
3817 /* ======================================================================*
3818 | PRIVATE PROCEDURE fetch_tax_distributions |
3819 | |
3820 | This procedure is used to fetch all the tax distributions from |
3821 | ZX_REC_NREC_DIST table to the PL/SQL table p_rec_nrec_dist_tbl |
3822 | |
3823 * ======================================================================*/
3824
3825 PROCEDURE fetch_tax_distributions(
3826 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
3827 p_tax_line_id IN NUMBER,
3828 p_trx_line_dist_id IN NUMBER,
3829 p_rec_nrec_dist_tbl IN OUT NOCOPY rec_nrec_dist_tbl_type,
3830 p_rec_nrec_dist_begin_index IN NUMBER,
3831 p_rec_nrec_dist_end_index OUT NOCOPY NUMBER,
3832 x_return_status OUT NOCOPY VARCHAR2) IS
3833
3834 CURSOR fetch_tax_distributions_csr IS
3835 SELECT * FROM zx_rec_nrec_dist
3836 WHERE trx_id =
3837 p_event_class_rec.trx_id
3838 AND application_id =
3839 p_event_class_rec.application_id
3840 AND entity_code =
3841 p_event_class_rec.entity_code
3842 AND event_class_code =
3843 p_event_class_rec.event_class_code
3844 AND tax_line_id = p_tax_line_id
3845 AND trx_line_dist_id = p_trx_line_dist_id
3846 AND nvl(Reverse_Flag,'N') = 'N';
3847
3848 i NUMBER;
3849
3850 BEGIN
3851
3852 IF (g_level_procedure>= g_current_runtime_level ) THEN
3853 FND_LOG.STRING(g_level_procedure,
3854 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.fetch_tax_distributions.BEGIN',
3855 'ZX_TRD_SERVICES_PUB_PKG.fetch_tax_distributions(+)'||
3856 ' tax_line_id = ' || p_tax_line_id||
3857 ' trx_line_dist_id = ' || p_trx_line_dist_id);
3858
3859 END IF;
3860
3861 x_return_status:= FND_API.G_RET_STS_SUCCESS;
3862
3863 -- Initialize p_tax_line_tbl
3864 -- p_rec_nrec_dist_tbl.delete;
3865
3866 OPEN fetch_tax_distributions_csr;
3867
3868 i := p_rec_nrec_dist_begin_index;
3869
3870 FETCH fetch_tax_distributions_csr into p_rec_nrec_dist_tbl(i);
3871
3872 IF fetch_tax_distributions_csr%NOTFOUND THEN
3873
3874 -- there is no tax distribution for the tax line and item dist, error out
3875 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3876 CLOSE fetch_tax_distributions_csr;
3877 IF (g_level_statement >= g_current_runtime_level ) THEN
3878
3879 FND_LOG.STRING(g_level_statement,
3880 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.fetch_tax_distributions.END',
3881 'ZX_TRD_SERVICES_PUB_PKG.fetch_tax_distributions(-)'||' unexpected: No tax dist');
3882 END IF;
3883 RETURN;
3884
3885 END IF;
3886
3887 LOOP
3888 EXIT when fetch_tax_distributions_csr%notfound;
3889 i := i + 1;
3890 FETCH fetch_tax_distributions_csr into p_rec_nrec_dist_tbl(i);
3891 END LOOP;
3892
3893 --p_rec_nrec_dist_end_index := fetch_tax_distributions_csr%ROWCOUNT + p_rec_nrec_dist_begin_index - 1;
3894 p_rec_nrec_dist_end_index := p_rec_nrec_dist_tbl.count;
3895
3896 CLOSE fetch_tax_distributions_csr;
3897
3898 IF (g_level_procedure >= g_current_runtime_level ) THEN
3899
3900 FND_LOG.STRING(g_level_procedure,
3901 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.fetch_tax_distributions.END',
3902 'ZX_TRD_SERVICES_PUB_PKG.fetch_tax_distributions(-)'||x_return_status);
3903 END IF;
3904
3905 EXCEPTION
3906 WHEN OTHERS THEN
3907 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3908
3909 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3910 FND_LOG.STRING(g_level_unexpected,
3911 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.fetch_tax_distributions',
3912 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3913 FND_LOG.STRING(g_level_unexpected,
3914 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.fetch_tax_distributions.END',
3915 'ZX_TRD_SERVICES_PUB_PKG.fetch_tax_distributions(-)');
3916 END IF;
3917
3918 END fetch_tax_distributions;
3919
3920 /* ======================================================================*
3921 | PRIVATE PROCEDURE populate_trx_line_info |
3922 | |
3923 | This procedure is used to populate the trx line information from the |
3924 | to the tax line table to the global PL/SQL table |
3925 | ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL |
3926 | |
3927 * ======================================================================*/
3928
3929 PROCEDURE populate_trx_line_info(
3930 p_tax_line_tbl IN tax_line_tbl_type,
3931 p_index IN NUMBER,
3932 x_return_status OUT NOCOPY VARCHAR2) IS
3933
3934 CURSOR get_trx_info_csr IS
3935 SELECT internal_organization_id,
3936 trx_line_id,
3937 trx_level_type,
3938 trx_date,
3939 ledger_id,
3940 trx_currency_code,
3941 currency_conversion_date,
3942 currency_conversion_rate,
3943 currency_conversion_type,
3944 minimum_accountable_unit,
3945 precision,
3946 trx_shipping_date,
3947 trx_receipt_date,
3948 legal_entity_id,
3949 establishment_id,
3950 trx_line_number,
3951 trx_line_date,
3952 trx_business_category,
3953 line_intended_use,
3954 user_defined_fisc_class,
3955 line_amt,
3956 trx_line_quantity,
3957 unit_price,
3958 exempt_certificate_number,
3959 exempt_reason,
3960 cash_discount,
3961 volume_discount,
3962 trading_discount,
3963 transfer_charge,
3964 transportation_charge,
3965 insurance_charge,
3966 other_charge,
3967 product_id,
3968 product_fisc_classification,
3969 product_org_id,
3970 uom_code,
3971 product_type,
3972 product_code,
3973 product_category,
3974 account_ccid,
3975 account_string,
3976 total_inc_tax_amt,
3977 ship_to_location_id,
3978 ship_from_location_id,
3979 bill_to_location_id,
3980 bill_from_location_id,
3981 default_taxation_country,
3982 -- Start : Added columns for Bug#7008557
3983 first_pty_org_id,
3984 rdng_ship_to_pty_tx_prof_id,
3985 rdng_ship_from_pty_tx_prof_id,
3986 rdng_bill_to_pty_tx_prof_id,
3987 rdng_bill_from_pty_tx_prof_id,
3988 rdng_ship_to_pty_tx_p_st_id,
3989 rdng_ship_from_pty_tx_p_st_id,
3990 rdng_bill_to_pty_tx_p_st_id,
3991 rdng_bill_from_pty_tx_p_st_id,
3992 ship_to_party_tax_prof_id,
3993 ship_from_party_tax_prof_id,
3994 bill_to_party_tax_prof_id,
3995 bill_from_party_tax_prof_id,
3996 ship_to_site_tax_prof_id,
3997 ship_from_site_tax_prof_id,
3998 bill_to_site_tax_prof_id,
3999 bill_from_site_tax_prof_id,
4000 ship_third_pty_acct_id,
4001 bill_third_pty_acct_id,
4002 document_sub_type,
4003 -- End : Added columns for Bug#7008557
4004 tax_reporting_flag
4005 FROM zx_lines_det_factors
4006 WHERE application_id = p_tax_line_tbl(p_index).application_id
4007 AND entity_code = p_tax_line_tbl(p_index).entity_code
4008 AND event_class_code = p_tax_line_tbl(p_index).event_class_code
4009 AND trx_id = p_tax_line_tbl(p_index).trx_id
4010 AND trx_line_id = p_tax_line_tbl(p_index).trx_line_id
4011 AND trx_level_type = p_tax_line_tbl(p_index).trx_level_type;
4012
4013 l_index NUMBER := 1;
4014
4015 BEGIN
4016
4017 IF (g_level_procedure >= g_current_runtime_level ) THEN
4018 FND_LOG.STRING(g_level_procedure,
4019 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_trx_line_info.BEGIN',
4020 'ZX_TRD_SERVICES_PUB_PKG.populate_trx_line_info(+)');
4021 END IF;
4022
4023 x_return_status := FND_API.G_RET_STS_SUCCESS;
4024 l_index := 1;
4025
4026 OPEN get_trx_info_csr;
4027 FETCH get_trx_info_csr INTO
4028 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.internal_organization_id(l_index),
4029 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trx_line_id(l_index),
4030 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trx_level_type(l_index),
4031 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trx_date(l_index),
4032 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ledger_id(l_index),
4033 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trx_currency_code(l_index),
4034 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.currency_conversion_date(l_index),
4035 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.currency_conversion_rate(l_index),
4036 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.currency_conversion_type(l_index),
4037 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.minimum_accountable_unit(l_index),
4038 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.precision(l_index),
4039 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trx_shipping_date(l_index),
4040 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trx_receipt_date(l_index),
4041 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.legal_entity_id(l_index),
4042 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.establishment_id(l_index),
4043 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trx_line_number(l_index),
4044 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trx_line_date(l_index),
4045 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trx_business_category(l_index),
4046 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_Tbl.line_intended_use(l_index),
4047 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.user_defined_fisc_class(l_index),
4048 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.line_amt(l_index),
4049 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trx_line_quantity(l_index),
4050 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.unit_price(l_index),
4051 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.exempt_certificate_number(l_index),
4052 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.exempt_reason(l_index),
4053 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.cash_discount(l_index),
4054 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.volume_discount(l_index),
4055 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.trading_discount(l_index),
4056 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.transfer_charge(l_index),
4057 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.transportation_charge(l_index),
4058 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.insurance_charge(l_index),
4059 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.other_charge(l_index),
4060 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.product_id(l_index),
4061 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.product_fisc_classification(l_index),
4062 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.product_org_id(l_index),
4063 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.uom_code(l_index),
4064 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.product_type(l_index),
4065 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.product_code(l_index),
4066 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.product_category(l_index),
4067 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.account_ccid(l_index),
4068 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.account_string(l_index),
4069 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.total_inc_tax_amt(l_index),
4070 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ship_to_location_id(l_index),
4071 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ship_from_location_id(l_index),
4072 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.bill_to_location_id(l_index),
4073 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.bill_from_location_id(l_index),
4074 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.default_taxation_country(l_index),
4075 -- Start : Added code for Bug#7008557
4076 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.first_pty_org_id(l_index),
4077 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.rdng_ship_to_pty_tx_prof_id(l_index),
4078 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.rdng_ship_from_pty_tx_prof_id(l_index),
4079 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.rdng_bill_to_pty_tx_prof_id(l_index),
4080 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.rdng_bill_from_pty_tx_prof_id(l_index),
4081 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.rdng_ship_to_pty_tx_p_st_id(l_index),
4082 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.rdng_ship_from_pty_tx_p_st_id(l_index),
4083 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.rdng_bill_to_pty_tx_p_st_id(l_index),
4084 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.rdng_bill_from_pty_tx_p_st_id(l_index),
4085 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ship_to_party_tax_prof_id(l_index),
4086 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ship_from_party_tax_prof_id(l_index),
4087 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.bill_to_party_tax_prof_id(l_index),
4088 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.bill_from_party_tax_prof_id(l_index),
4089 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ship_to_site_tax_prof_id(l_index),
4090 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ship_from_site_tax_prof_id(l_index),
4091 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.bill_to_site_tax_prof_id(l_index),
4092 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.bill_from_site_tax_prof_id(l_index),
4093 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ship_third_pty_acct_id(l_index),
4094 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.bill_third_pty_acct_id(l_index),
4095 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.document_sub_type(l_index),
4096 -- End : Added code for Bug#7008557
4097 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.tax_reporting_flag(l_index);
4098 IF get_trx_info_csr%NOTFOUND THEN
4099 IF (g_level_statement >= g_current_runtime_level ) THEN
4100 FND_LOG.STRING(g_level_statement,
4101 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_trx_line_info',
4102 'NO DATA found in zx_lines_det_factors for trx line'||
4103 p_tax_line_tbl(p_index).trx_line_id);
4104 END IF;
4105 END IF;
4106 CLOSE get_trx_info_csr;
4107
4108 IF (g_level_procedure >= g_current_runtime_level ) THEN
4109
4110 FND_LOG.STRING(g_level_procedure,
4111 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_trx_line_info.END',
4112 'ZX_TRD_SERVICES_PUB_PKG.populate_trx_line_info(-)'||x_return_status);
4113 END IF;
4114
4115 EXCEPTION
4116 WHEN OTHERS THEN
4117 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4118
4119 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4120 FND_LOG.STRING(g_level_unexpected,
4121 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_trx_line_info',
4122 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
4123 FND_LOG.STRING(g_level_unexpected,
4124 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_trx_line_info.END',
4125 'ZX_TRD_SERVICES_PUB_PKG.populate_trx_line_info(-)');
4126 END IF;
4127
4128 END populate_trx_line_info;
4129
4130 /* =============================================================================*
4131 | PRIVATE PROCEDURE insert_global_table |
4132 | |
4133 | DESCRIPTION |
4134 | This procedure is used to insert rec/non-rec tax distributions from the |
4135 | PL/SQL table to the global tempoarary table zx_rec_nrec_dist_gt when there |
4136 | are more than 1000 records in the PL/SQL table |
4137 |
4138 * =============================================================================*/
4139
4140 PROCEDURE insert_global_table(
4141 p_rec_nrec_dist_tbl IN OUT NOCOPY rec_nrec_dist_tbl_type,
4142 p_rec_nrec_dist_begin_index IN OUT NOCOPY NUMBER,
4143 p_rec_nrec_dist_end_index IN OUT NOCOPY NUMBER,
4144 x_return_status OUT NOCOPY VARCHAR2) IS
4145
4146 BEGIN
4147
4148 IF (g_level_procedure >= g_current_runtime_level ) THEN
4149 FND_LOG.STRING(g_level_procedure,
4150 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.insert_global_table.BEGIN',
4151 'ZX_TRD_SERVICES_PUB_PKG.insert_global_table(+)');
4152 END IF;
4153
4154 x_return_status:= FND_API.G_RET_STS_SUCCESS;
4155
4156 IF p_rec_nrec_dist_tbl.count > 1000 THEN
4157
4158 -- insert into global temporary table when there are more than 1000 tax distributions.
4159
4160
4161 -- populate mandatory columns before inserting.
4162 populate_mandatory_columns(p_rec_nrec_dist_tbl, x_return_status);
4163
4164 IF (x_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4165
4166 IF (g_level_statement >= g_current_runtime_level ) THEN
4167 FND_LOG.STRING(g_level_statement,
4168 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.insert_global_table',
4169 'After calling populate_mandatory_columns x_return_status = '
4170 || x_return_status);
4171 FND_LOG.STRING(g_level_statement,
4172 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.insert_global_table.END',
4173 'ZX_TRD_SERVICES_PUB_PKG.insert_global_table(-)');
4174 END IF;
4175 RETURN;
4176
4177 END IF;
4178
4179
4180 FORALL ctr IN NVL(p_rec_nrec_dist_tbl.FIRST,0) .. NVL(p_rec_nrec_dist_tbl.LAST,-1)
4181 INSERT INTO zx_rec_nrec_dist_gt VALUES p_rec_nrec_dist_tbl(ctr);
4182
4183 -- reinitialize the PL/SQL table.
4184 p_rec_nrec_dist_tbl.delete;
4185 p_rec_nrec_dist_end_index := 0;
4186 p_rec_nrec_dist_begin_index := 1;
4187
4188 END IF;
4189
4190 IF (g_level_procedure >= g_current_runtime_level ) THEN
4191
4192 FND_LOG.STRING(g_level_procedure,
4193 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.insert_global_table.END',
4194 'ZX_TRD_SERVICES_PUB_PKG.insert_global_table(-)'||x_return_status);
4195 END IF;
4196
4197 EXCEPTION
4198 WHEN OTHERS THEN
4199 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4200
4201 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4202 FND_LOG.STRING(g_level_unexpected,
4203 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.insert_global_table',
4204 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
4205 FND_LOG.STRING(g_level_unexpected,
4206 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.insert_global_table.END',
4207 'ZX_TRD_SERVICES_PUB_PKG.insert_global_table(-)');
4208 END IF;
4209
4210
4211 END insert_global_table;
4212
4213 /* =============================================================================*
4214 | PRIVATE PROCEDURE populate_mandatory_columns |
4215 | |
4216 | DESCRIPTION |
4217 | This procedure is used to populate mandatory columns into PL/SQL table |
4218 | |
4219 * =============================================================================*/
4220
4221 PROCEDURE populate_mandatory_columns(
4222 p_rec_nrec_dist_tbl IN OUT NOCOPY REC_NREC_DIST_TBL_TYPE,
4223 x_return_status OUT NOCOPY VARCHAR2)
4224
4225 IS
4226
4227 i NUMBER;
4228
4229 BEGIN
4230
4231 IF (g_level_procedure >= g_current_runtime_level ) THEN
4232 FND_LOG.STRING(g_level_procedure,
4233 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns.BEGIN',
4234 'populate_mandatory_columns(+)');
4235 END IF;
4236
4237 x_return_status:= FND_API.G_RET_STS_SUCCESS;
4238
4239 IF p_rec_nrec_dist_tbl.count <> 0 THEN
4240
4241 FOR i IN NVL(p_rec_nrec_dist_tbl.FIRST,0) .. NVL(p_rec_nrec_dist_tbl.LAST,-1)
4242 LOOP
4243 --
4244 -- populate rec_nrec_tax_dist_id if it is null
4245 --
4246 IF p_rec_nrec_dist_tbl(i).rec_nrec_tax_dist_id IS NULL THEN
4247
4248 -- get g_tax_dist_id
4249 --
4250 SELECT ZX_REC_NREC_DIST_S.nextval
4251 INTO ZX_TRD_SERVICES_PUB_PKG.g_tax_dist_id
4252 FROM dual;
4253
4254 p_rec_nrec_dist_tbl(i).rec_nrec_tax_dist_id :=
4255 ZX_TRD_SERVICES_PUB_PKG.g_tax_dist_id;
4256
4257 END IF;
4258
4259 -- populate the object_version_number
4260 p_rec_nrec_dist_tbl(i).object_version_number
4261 := NVL(p_rec_nrec_dist_tbl(i).object_version_number, 1);
4262
4263 -- populate who columns if it is null
4264
4265 IF p_rec_nrec_dist_tbl(i).created_by IS NULL THEN
4266
4267 p_rec_nrec_dist_tbl(i).created_by := fnd_global.user_id;
4268
4269 END IF;
4270
4271 IF p_rec_nrec_dist_tbl(i).creation_date IS NULL THEN
4272 p_rec_nrec_dist_tbl(i).creation_date := sysdate;
4273 END IF;
4274
4275 p_rec_nrec_dist_tbl(i).last_updated_by := fnd_global.user_id;
4276 p_rec_nrec_dist_tbl(i).last_update_login := fnd_global.login_id;
4277 p_rec_nrec_dist_tbl(i).last_update_date := sysdate;
4278
4279 -- populate mrc flag if it is null
4280
4281 IF p_rec_nrec_dist_tbl(i).mrc_tax_dist_flag IS NULL THEN
4282 p_rec_nrec_dist_tbl(i).mrc_tax_dist_flag := 'N';
4283 END IF;
4284
4285 IF p_rec_nrec_dist_tbl(i).REC_NREC_TAX_DIST_NUMBER IS NULL THEN
4286
4287 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR; -- bug 4893261
4288
4289 IF (g_level_procedure >= g_current_runtime_level ) THEN
4290 FND_LOG.STRING(g_level_procedure,
4291 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns',
4292 'error: tax dist number is null ');
4293
4294 FND_LOG.STRING(g_level_procedure,
4295 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns.END',
4296 'populate_mandatory_columns(-)');
4297 END IF;
4298 RETURN;
4299
4300 END IF;
4301
4302 IF p_rec_nrec_dist_tbl(i).REC_NREC_RATE IS NULL THEN
4303 x_return_status := FND_API.G_RET_STS_ERROR;
4304
4305 IF (g_level_procedure >= g_current_runtime_level ) THEN
4306 FND_LOG.STRING(g_level_procedure,
4307 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns',
4308 'error: rec nrec rate is null ');
4309
4310 FND_LOG.STRING(g_level_procedure,
4311 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns.END',
4312 'populate_mandatory_columns(-)');
4313 END IF;
4314 RETURN;
4315
4316 END IF;
4317
4318 IF p_rec_nrec_dist_tbl(i).Recoverable_Flag IS NULL THEN
4319
4320 x_return_status := FND_API.G_RET_STS_ERROR;
4321 IF (g_level_procedure >= g_current_runtime_level ) THEN
4322
4323 FND_LOG.STRING(g_level_procedure,
4324 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns',
4325 'error: RECOVERABLE FLG is null ');
4326 FND_LOG.STRING(g_level_procedure,
4327 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns.END',
4328 'populate_mandatory_columns(-)');
4329 END IF;
4330 RETURN;
4331
4332 END IF;
4333
4334 IF p_rec_nrec_dist_tbl(i).REC_NREC_TAX_AMT IS NULL THEN
4335
4336 x_return_status := FND_API.G_RET_STS_ERROR;
4337
4338 IF (g_level_procedure >= g_current_runtime_level ) THEN
4339 FND_LOG.STRING(g_level_procedure,
4340 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns',
4341 'error: tax dist amount is null ');
4342 FND_LOG.STRING(g_level_procedure,
4343 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns.END',
4344 'populate_mandatory_columns(-)');
4345 END IF;
4346 RETURN;
4347
4348 END IF;
4349
4350
4351 END LOOP;
4352
4353 else
4354
4355 IF (g_level_statement >= g_current_runtime_level ) THEN
4356 FND_LOG.STRING(g_level_statement,
4357 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns',
4358 'No record in p_rec_nrec_dist_tbl ... ');
4359 END IF;
4360
4361 end if;
4362
4363 IF (g_level_procedure >= g_current_runtime_level ) THEN
4364
4365 FND_LOG.STRING(g_level_procedure,
4366 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns.END',
4367 'ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns(-)'||x_return_status);
4368 END IF;
4369
4370 EXCEPTION
4371 WHEN OTHERS THEN
4372 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4373
4374 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4375 FND_LOG.STRING(g_level_unexpected,
4376 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns',
4377 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
4378 FND_LOG.STRING(g_level_unexpected,
4379 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns.END',
4380 'ZX_TRD_SERVICES_PUB_PKG.populate_mandatory_columns(-)');
4381 END IF;
4382
4383 END populate_mandatory_columns;
4384
4385
4386 PROCEDURE update_exchange_rate (
4387 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
4388 p_ledger_id IN NUMBER,
4389 p_currency_conversion_rate IN NUMBER,
4390 p_currency_conversion_type IN VARCHAR2,
4391 p_currency_conversion_date IN DATE,
4392 x_return_status OUT NOCOPY VARCHAR2 ) IS
4393
4394 CURSOR get_rec_nrec_tax_dists_csr IS
4395 SELECT rec_nrec_tax_dist_id,
4396 tax_line_id,
4397 recoverable_flag,
4398 rec_nrec_tax_amt,
4399 taxable_amt,
4400 rec_nrec_tax_amt_funcl_curr,
4401 taxable_amt_funcl_curr,
4402 unrounded_rec_nrec_tax_amt,
4403 unrounded_taxable_amt,
4404 NVL(p_ledger_id, ledger_id) ledger_id,
4405 trx_currency_code,
4406 tax_rate,
4407 0
4408 FROM zx_rec_nrec_dist
4409 WHERE application_id = p_event_class_rec.application_id
4410 AND entity_code = p_event_class_rec.entity_code
4411 AND event_class_code = p_event_class_rec.event_class_code
4412 AND trx_id = p_event_class_rec.trx_id
4413 AND NVL(Reverse_Flag, 'N') = 'N'
4414 AND NVL(mrc_tax_dist_flag, 'N') = 'N'
4415 ORDER BY tax_line_id, unrounded_rec_nrec_tax_amt DESC;
4416
4417 CURSOR get_tax_line_amt_csr(p_tax_line_id NUMBER) IS
4418 SELECT tax_amt_funcl_curr
4419 FROM zx_lines
4420 WHERE tax_line_id = p_tax_line_id;
4421
4422 CURSOR get_mau_info_csr IS
4423 SELECT nvl( cur.minimum_accountable_unit, power( 10, (-1 * precision))),
4424 cur.currency_code
4425 FROM fnd_currencies cur, gl_sets_of_books sob
4426 WHERE sob.set_of_books_id = p_ledger_id
4427 AND cur.currency_code = sob.currency_code;
4428
4429 TYPE rec_nrec_tax_dist_id_tbl_type IS TABLE OF
4430 zx_rec_nrec_dist.rec_nrec_tax_dist_id%TYPE INDEX BY BINARY_INTEGER;
4431
4432 TYPE tax_line_id_tbl_type IS TABLE OF zx_rec_nrec_dist.tax_line_id%TYPE
4433 INDEX BY BINARY_INTEGER;
4434
4435 TYPE recoverable_flg_tbl_type IS TABLE OF
4436 zx_rec_nrec_dist.Recoverable_Flag%TYPE INDEX BY BINARY_INTEGER;
4437
4438 TYPE rec_nrec_tax_amt_tbl_type IS TABLE OF
4439 zx_rec_nrec_dist.rec_nrec_tax_amt%TYPE INDEX BY BINARY_INTEGER;
4440
4441 TYPE taxable_amt_tbl_type IS TABLE OF zx_rec_nrec_dist.taxable_amt%TYPE
4442 INDEX BY BINARY_INTEGER;
4443
4444 TYPE tax_amt_funcl_curr_tbl_type IS TABLE OF
4445 zx_rec_nrec_dist.rec_nrec_tax_amt_funcl_curr%TYPE INDEX BY BINARY_INTEGER;
4446
4447 TYPE txable_amt_funcl_curr_tbl_type IS TABLE OF
4448 zx_rec_nrec_dist.taxable_amt_funcl_curr%TYPE INDEX BY BINARY_INTEGER;
4449
4450 TYPE unrounded_tax_amt_tbl_type IS TABLE OF
4451 zx_rec_nrec_dist.unrounded_rec_nrec_tax_amt%TYPE INDEX BY BINARY_INTEGER;
4452
4453 TYPE unrounded_taxable_amt_tbl_type IS TABLE OF
4454 zx_rec_nrec_dist.unrounded_taxable_amt%TYPE INDEX BY BINARY_INTEGER;
4455
4456 TYPE ledger_id_tbl_type IS TABLE OF zx_rec_nrec_dist.ledger_id%TYPE
4457 INDEX BY BINARY_INTEGER;
4458
4459 TYPE trx_currency_code_tbl_type IS TABLE OF zx_rec_nrec_dist.trx_currency_code%TYPE
4460 INDEX BY BINARY_INTEGER;
4461
4462 TYPE rec_nrec_rate_tbl_type IS TABLE OF zx_rec_nrec_dist.rec_nrec_rate%TYPE
4463 INDEX BY BINARY_INTEGER;
4464 TYPE func_curr_rnd_adjust_tbl_type IS TABLE OF
4465 zx_rec_nrec_dist.func_curr_rounding_adjustment%TYPE INDEX BY BINARY_INTEGER;
4466
4467 l_rec_nrec_tax_dist_id_tbl rec_nrec_tax_dist_id_tbl_type;
4468 l_tax_line_id_tbl tax_line_id_tbl_type;
4469 l_recoverable_flg_tbl recoverable_flg_tbl_type;
4470 l_rec_nrec_tax_amt_tbl rec_nrec_tax_amt_tbl_type;
4471 l_taxable_amt_tbl taxable_amt_tbl_type;
4472 l_tax_amt_funcl_curr_tbl tax_amt_funcl_curr_tbl_type;
4473 l_taxable_amt_funcl_curr_tbl txable_amt_funcl_curr_tbl_type;
4474 l_unrounded_tax_amt_tbl unrounded_tax_amt_tbl_type;
4475 l_unrounded_taxable_amt_tbl unrounded_taxable_amt_tbl_type;
4476 l_ledger_id_tbl ledger_id_tbl_type;
4477 l_trx_currency_code_tbl trx_currency_code_tbl_type;
4478 l_rec_nrec_rate_tbl rec_nrec_rate_tbl_type;
4479 l_func_curr_rnd_adjustment_tbl func_curr_rnd_adjust_tbl_type;
4480
4481 TYPE index_info_tbl_type IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
4482
4483 l_non_zero_rec_tax_lines_tbl index_info_tbl_type;
4484 l_non_zero_nrec_tax_lines_tbl index_info_tbl_type;
4485
4486 l_num_of_min_units NUMBER;
4487 l_num_of_multiples NUMBER;
4488 l_remainder NUMBER;
4489 l_index NUMBER;
4490
4491 l_non_zero_rec_tax_line_index NUMBER;
4492 l_non_zero_nrec_tax_line_index NUMBER;
4493
4494 l_error_buffer VARCHAR2(200);
4495
4496 l_sum_of_rnd_rec_tax_amt NUMBER;
4497 l_sum_of_rnd_nrec_tax_amt NUMBER;
4498
4499 l_total_unrounded_rec_tax_amt NUMBER;
4500 l_total_unrounded_nrec_tax_amt NUMBER;
4501 l_rnd_total_rec_tax_amt NUMBER;
4502 l_rnd_total_nrec_tax_amt NUMBER;
4503 l_total_tax_line_amt NUMBER;
4504
4505 l_rec_tax_rounding_diff NUMBER;
4506 l_nrec_tax_rounding_diff NUMBER;
4507
4508 l_tax_line_rounding_diff NUMBER;
4509
4510 l_current_tax_line_id zx_rec_nrec_dist.tax_line_id%TYPE;
4511 l_rec_begin_index NUMBER;
4512 l_nrec_begin_index NUMBER;
4513
4514 l_minimum_accountable_unit NUMBER;
4515 l_funcl_currency_code fnd_currencies.currency_code%TYPE;
4516
4517 BEGIN
4518
4519 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
4520
4521 IF (g_level_procedure >= g_current_runtime_level ) THEN
4522 FND_LOG.STRING(g_level_procedure,
4523 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.update_exchange_rate.BEGIN',
4524 'ZX_TRD_SERVICES_PUB_PKG.update_exchange_rate(+)');
4525 END IF;
4526
4527 x_return_status := FND_API.G_RET_STS_SUCCESS;
4528
4529 OPEN get_rec_nrec_tax_dists_csr;
4530
4531 FETCH get_rec_nrec_tax_dists_csr BULK COLLECT INTO
4532 l_rec_nrec_tax_dist_id_tbl,
4533 l_tax_line_id_tbl,
4534 l_recoverable_flg_tbl,
4535 l_rec_nrec_tax_amt_tbl,
4536 l_taxable_amt_tbl,
4537 l_tax_amt_funcl_curr_tbl,
4538 l_taxable_amt_funcl_curr_tbl,
4539 l_unrounded_tax_amt_tbl,
4540 l_unrounded_taxable_amt_tbl,
4541 l_ledger_id_tbl,
4542 l_trx_currency_code_tbl,
4543 l_rec_nrec_rate_tbl,
4544 l_func_curr_rnd_adjustment_tbl;
4545
4546 CLOSE get_rec_nrec_tax_dists_csr;
4547
4548 IF l_rec_nrec_tax_dist_id_tbl.FIRST IS NULL THEN
4549
4550 IF (g_level_statement >= g_current_runtime_level ) THEN
4551 FND_LOG.STRING(g_level_statement,
4552 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.update_exchange_rate',
4553 'No tax distributions are fetched from ZX_REC_NREC_DIST.');
4554 END IF;
4555 RETURN;
4556 ELSE
4557
4558 -- Initialize l_current_tax_line_id to tax_line_id of the first record
4559 --
4560 l_current_tax_line_id := l_tax_line_id_tbl(l_rec_nrec_tax_dist_id_tbl.FIRST);
4561
4562 -- Initialize plsql tables and local variables
4563 --
4564 l_non_zero_rec_tax_lines_tbl.DELETE;
4565 l_non_zero_nrec_tax_lines_tbl.DELETE;
4566
4567 l_non_zero_rec_tax_line_index := 0;
4568 l_non_zero_nrec_tax_line_index := 0;
4569
4570 l_sum_of_rnd_rec_tax_amt := 0;
4571 l_sum_of_rnd_nrec_tax_amt := 0;
4572
4573 l_total_unrounded_rec_tax_amt := 0;
4574 l_total_unrounded_nrec_tax_amt := 0;
4575 l_rnd_total_rec_tax_amt := 0;
4576 l_rnd_total_nrec_tax_amt := 0;
4577
4578 l_total_tax_line_amt := 0;
4579
4580 END IF;
4581
4582 -- get the l_minimum_accountable_unit
4583 --
4584 OPEN get_mau_info_csr;
4585 FETCH get_mau_info_csr INTO
4586 l_minimum_accountable_unit, l_funcl_currency_code;
4587 CLOSE get_mau_info_csr;
4588
4589 IF (g_level_statement >= g_current_runtime_level ) THEN
4590 FND_LOG.STRING(g_level_statement,
4591 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.update_exchange_rate',
4592 'l_minimum_accountable_unit = ' || l_minimum_accountable_unit);
4593 END IF;
4594
4595 -- loop through the table of l_rec_nrec_tax_dists_tbl
4596 --
4597 FOR i IN NVL(l_rec_nrec_tax_dist_id_tbl.FIRST,0).. NVL(l_rec_nrec_tax_dist_id_tbl.LAST,-1)
4598 LOOP
4599
4600 -- If rec_nrec_tax_amt is zero, set rec_nrec_tax_amt_funcl_curr to zero.
4601 -- Otherwise, convert rec_nrec_tax_amt to functional currency.
4602 --
4603 IF l_rec_nrec_tax_amt_tbl(i) = 0 THEN
4604
4605 l_tax_amt_funcl_curr_tbl(i) := 0;
4606
4607 ELSE
4608 IF l_funcl_currency_code <> l_trx_currency_code_tbl(i) THEN
4609 -- convert tax amount to functional currency and
4610 -- perform rounding for rec_nrec_tax_amt_funcl_curr
4611 --
4612 l_tax_amt_funcl_curr_tbl(i) :=
4613 GL_CURRENCY_API.convert_amount (
4614 x_set_of_books_id => p_ledger_id,
4615 x_from_currency => l_trx_currency_code_tbl(i),
4616 x_conversion_date => p_currency_conversion_date,
4617 x_conversion_type => p_currency_conversion_type,
4618 x_amount => l_unrounded_tax_amt_tbl(i));
4619 ELSE
4620 l_tax_amt_funcl_curr_tbl(i) :=
4621 round(l_tax_amt_funcl_curr_tbl(i)/l_minimum_accountable_unit) *
4622 l_minimum_accountable_unit;
4623 END IF;
4624
4625 END IF;
4626
4627 IF (l_tax_line_id_tbl(i) = l_current_tax_line_id)
4628 THEN
4629
4630 -- For tax line with the same tax_line_id, or for the first tax line:
4631 --
4632 -- 1. Accumulate the converted recoverable tax amount and
4633 -- non-recoverable tax amount separately.
4634 -- 2. Record the non-zero recoverable and non-recoverable tax
4635 -- distributions in separate plsql tables
4636 -- 3. Record the rounded-to-zero recoverable and non-recoverable
4637 -- tax distributions in separate plsql tables
4638 -- 4. Accumulate tax amount of unrounded recoverable tax distributions.
4639 -- (not converted).
4640 -- 5. Accumulate tax amount of unrounded non-recoverable distributions.
4641 -- (not converted).
4642
4643 IF l_recoverable_flg_tbl(i) = 'N' THEN
4644
4645 -- Accumulate tax amount of converted non-recoverable tax lines
4646 --
4647 l_sum_of_rnd_nrec_tax_amt := l_sum_of_rnd_nrec_tax_amt +
4648 l_tax_amt_funcl_curr_tbl(i);
4649
4650 -- Record the non-zero non-recoverable tax lines
4651 --
4652 IF (l_rec_nrec_tax_amt_tbl(i) <> 0) THEN
4653
4654 l_non_zero_nrec_tax_line_index := l_non_zero_nrec_tax_line_index + 1;
4655
4656 l_non_zero_nrec_tax_lines_tbl(l_non_zero_nrec_tax_line_index) := i;
4657
4658
4659 END IF;
4660
4661 -- Accumulate unrounded non-recoverable tax amount(not converted)
4662 --
4663 l_total_unrounded_nrec_tax_amt := l_total_unrounded_nrec_tax_amt +
4664 l_unrounded_tax_amt_tbl(i);
4665
4666
4667 ELSIF l_recoverable_flg_tbl(i) = 'Y' THEN
4668
4669 -- Accumulate amount of converted recoverable tax lines
4670 --
4671 l_sum_of_rnd_rec_tax_amt := l_sum_of_rnd_rec_tax_amt +
4672 l_tax_amt_funcl_curr_tbl(i);
4673
4674 -- Record the non-zero recoverable tax lines
4675 --
4676 IF l_rec_nrec_tax_amt_tbl(i) <> 0 THEN
4677
4678 l_non_zero_rec_tax_line_index := l_non_zero_rec_tax_line_index + 1;
4679
4680 l_non_zero_rec_tax_lines_tbl(l_non_zero_rec_tax_line_index) := i;
4681
4682
4683 END IF;
4684
4685 -- Accumulate unrounded recoverable tax amount(not converted)
4686 --
4687 l_total_unrounded_rec_tax_amt := l_total_unrounded_rec_tax_amt +
4688 l_unrounded_tax_amt_tbl(i);
4689
4690
4691 END IF; -- l_recoverable_flg_tbl(i)
4692
4693 IF ( i = l_rec_nrec_tax_dist_id_tbl.LAST OR
4694 l_current_tax_line_id <> l_tax_line_id_tbl(i+1)) THEN
4695
4696 -- If this is the last tax line with the same tax_line_id:,
4697 --
4698 -- 1. Convert the unrounded accumulatve recoverable tax amount to
4699 -- functional currency and perform rounding.
4700 -- 2. Convert the unrounded accumulatve non-recoverable tax amount to
4701 -- functional currency and perform rounding.
4702 -- 3. Calculate rounding difference for recoverable tax.
4703 -- 4. Calculate rounding difference for non-recoverable tax.
4704 -- 5. If rounding difference exists, adjust it to recoverable or
4705 -- non-recoverable tax distribution repeecttively.
4706 -- 6. Get tax amount from zx_lines for this tax_line_id
4707 -- 7. Calculate rounding difference for all tax distributions with
4708 -- the same tax_line_id.
4709 -- 8. If rounding difference > 0, adjust it to the largest
4710 -- non_recoverable tax distribution. If rounding difference < 0,
4711 -- adjust it to the largest recoverable tax distribution.
4712
4713 IF l_funcl_currency_code <> l_trx_currency_code_tbl(i) THEN
4714
4715 -- convert accumulative unrounded recoverable tax amt to functional
4716 -- currency and perform rounding
4717 --
4718 l_rnd_total_rec_tax_amt :=
4719 GL_CURRENCY_API.convert_amount (
4720 x_set_of_books_id => p_ledger_id,
4721 x_from_currency => l_trx_currency_code_tbl(i),
4722 x_conversion_date => p_currency_conversion_date,
4723 x_conversion_type => p_currency_conversion_type,
4724 x_amount => l_total_unrounded_rec_tax_amt);
4725
4726 -- convert accumulative unrounded non-recoverable tax amt to functional
4727 -- currency and perform rounding
4728 --
4729 l_rnd_total_nrec_tax_amt :=
4730 GL_CURRENCY_API.convert_amount (
4731 x_set_of_books_id => p_ledger_id,
4732 x_from_currency => l_trx_currency_code_tbl(i),
4733 x_conversion_date => p_currency_conversion_date,
4734 x_conversion_type => p_currency_conversion_type,
4735 x_amount => l_total_unrounded_nrec_tax_amt);
4736
4737 ELSE
4738 -- round l_rnd_total_rec_tax_amt (recoverable tax dists)
4739 --
4740 l_rnd_total_rec_tax_amt :=
4741 round(l_rnd_total_rec_tax_amt/l_minimum_accountable_unit) *
4742 l_minimum_accountable_unit;
4743
4744 -- round l_rnd_total_nrec_tax_amt (non-recoverable tax dists)
4745 --
4746 l_rnd_total_nrec_tax_amt :=
4747 round(l_rnd_total_nrec_tax_amt/l_minimum_accountable_unit) *
4748 l_minimum_accountable_unit;
4749
4750 END IF;
4751
4752
4753 -- calculate rounding difference for recoverable and non-recoverable
4754 -- tax distributions
4755 --
4756 l_rec_tax_rounding_diff := l_rnd_total_rec_tax_amt -
4757 l_sum_of_rnd_rec_tax_amt;
4758 l_nrec_tax_rounding_diff := l_rnd_total_nrec_tax_amt -
4759 l_sum_of_rnd_nrec_tax_amt;
4760
4761 -- Adjust rounding difference for recoverable tax distributions
4762 --
4763 IF l_rec_tax_rounding_diff <> 0 THEN
4764
4765 l_num_of_min_units := ABS(TRUNC(l_rec_tax_rounding_diff/
4766 l_minimum_accountable_unit));
4767
4768
4769 IF l_non_zero_rec_tax_lines_tbl.COUNT > 0 THEN
4770
4771
4772 l_num_of_multiples := TRUNC(l_num_of_min_units/
4773 l_non_zero_rec_tax_lines_tbl.COUNT);
4774 l_remainder := MOD(l_num_of_min_units,
4775 l_non_zero_rec_tax_lines_tbl.COUNT);
4776
4777 IF l_num_of_multiples <> 0 THEN
4778
4779
4780 FOR j IN NVL(l_non_zero_rec_tax_lines_tbl.FIRST, 0)..
4781 NVL(l_non_zero_rec_tax_lines_tbl.LAST, -1)
4782 LOOP
4783
4784 l_index := l_non_zero_rec_tax_lines_tbl(j);
4785
4786 l_tax_amt_funcl_curr_tbl(l_index) :=
4787 l_tax_amt_funcl_curr_tbl(l_index) +
4788 l_minimum_accountable_unit *
4789 l_num_of_multiples * SIGN(l_rec_tax_rounding_diff);
4790
4791
4792 END LOOP;
4793 END IF; -- l_num_of_multiples <> 0
4794
4795 IF l_remainder <> 0 THEN
4796
4797
4798 FOR j IN 1 .. l_remainder LOOP
4799
4800 l_index := l_non_zero_rec_tax_lines_tbl(j);
4801
4802 l_tax_amt_funcl_curr_tbl(l_index) :=
4803 l_tax_amt_funcl_curr_tbl(l_index) +
4804 l_minimum_accountable_unit *
4805 SIGN(l_rec_tax_rounding_diff);
4806
4807
4808 END LOOP;
4809 END IF; -- l_remainder <> 0
4810
4811 -- Reset the value of l_sum_of_rnd_rec_tax_amt after adjustment
4812 --
4813 l_sum_of_rnd_rec_tax_amt := l_sum_of_rnd_rec_tax_amt +
4814 l_rec_tax_rounding_diff;
4815
4816 ELSIF l_non_zero_nrec_tax_lines_tbl.COUNT > 0 THEN
4817
4818
4819
4820 l_num_of_multiples := TRUNC(l_num_of_min_units/
4821 l_non_zero_nrec_tax_lines_tbl.COUNT);
4822 l_remainder := MOD(l_num_of_min_units,
4823 l_non_zero_nrec_tax_lines_tbl.COUNT);
4824
4825 IF l_num_of_multiples <> 0 THEN
4826
4827
4828
4829 FOR j IN NVL(l_non_zero_nrec_tax_lines_tbl.FIRST, 0) ..
4830 NVL(l_non_zero_nrec_tax_lines_tbl.LAST, -1)
4831 LOOP
4832
4833 l_index := l_non_zero_nrec_tax_lines_tbl(j);
4834
4835 l_tax_amt_funcl_curr_tbl(l_index) :=
4836 l_tax_amt_funcl_curr_tbl(l_index) +
4837 l_minimum_accountable_unit *
4838 l_num_of_multiples * SIGN(l_rec_tax_rounding_diff);
4839
4840
4841 END LOOP;
4842
4843 END IF; -- l_num_of_multiples <> 0
4844
4845 IF l_remainder <> 0 THEN
4846
4847
4848
4849 FOR j IN 1 .. l_remainder LOOP
4850
4851 l_index := l_non_zero_nrec_tax_lines_tbl(j);
4852
4853 l_tax_amt_funcl_curr_tbl(l_index) :=
4854 l_tax_amt_funcl_curr_tbl(l_index) +
4855 l_minimum_accountable_unit *
4856 SIGN(l_rec_tax_rounding_diff);
4857
4858
4859
4860 END LOOP;
4861
4862 END IF; -- l_remainder <> 0
4863
4864 -- Reset the value of l_sum_of_rnd_nrec_tax_amt after adjustment
4865 --
4866 l_sum_of_rnd_nrec_tax_amt := l_sum_of_rnd_nrec_tax_amt +
4867 l_rec_tax_rounding_diff;
4868
4869 END IF; -- l_non_zero_rec(or nrec)_tax_lines_tbl.COUNT > 0
4870
4871 END IF; -- l_rec_tax_rounding_diff <> 0
4872
4873 -- Adjust rounding difference for recoverable tax distributions
4874 --
4875 IF l_nrec_tax_rounding_diff <> 0 THEN
4876
4877 l_num_of_min_units := ABS(TRUNC(l_nrec_tax_rounding_diff/
4878 l_minimum_accountable_unit));
4879
4880
4881
4882 IF l_non_zero_nrec_tax_lines_tbl.COUNT > 0 THEN
4883
4884
4885 l_num_of_multiples := TRUNC(l_num_of_min_units/
4886 l_non_zero_nrec_tax_lines_tbl.COUNT);
4887 l_remainder := MOD(l_num_of_min_units,
4888 l_non_zero_nrec_tax_lines_tbl.COUNT);
4889
4890 IF l_num_of_multiples <> 0 THEN
4891
4892
4893 FOR j IN NVL(l_non_zero_nrec_tax_lines_tbl.FIRST, 0) ..
4894 NVL(l_non_zero_nrec_tax_lines_tbl.LAST, -1)
4895 LOOP
4896
4897 l_index := l_non_zero_nrec_tax_lines_tbl(j);
4898
4899 l_tax_amt_funcl_curr_tbl(l_index) :=
4900 l_tax_amt_funcl_curr_tbl(l_index) +
4901 l_minimum_accountable_unit *
4902 l_num_of_multiples * SIGN(l_nrec_tax_rounding_diff);
4903
4904
4905
4906 END LOOP;
4907
4908 END IF; -- l_num_of_multiples <> 0
4909
4910 IF l_remainder <> 0 THEN
4911
4912
4913
4914 FOR j IN 1 .. l_remainder LOOP
4915
4916 l_index := l_non_zero_nrec_tax_lines_tbl(j);
4917
4918 l_tax_amt_funcl_curr_tbl(l_index) :=
4919 l_tax_amt_funcl_curr_tbl(l_index) +
4920 l_minimum_accountable_unit *
4921 SIGN(l_nrec_tax_rounding_diff);
4922
4923
4924
4925 END LOOP;
4926
4927 END IF; -- l_remaunder <> 0
4928
4929 -- Reset the value of l_sum_of_rnd_nrec_tax_amt after adjustment
4930 --
4931 l_sum_of_rnd_nrec_tax_amt := l_sum_of_rnd_nrec_tax_amt +
4932 l_nrec_tax_rounding_diff;
4933
4934 ELSIF l_non_zero_rec_tax_lines_tbl.COUNT > 0 THEN
4935
4936
4937
4938 l_num_of_multiples := TRUNC(l_num_of_min_units/
4939 l_non_zero_rec_tax_lines_tbl.COUNT);
4940 l_remainder := MOD(l_num_of_min_units,
4941 l_non_zero_rec_tax_lines_tbl.COUNT);
4942
4943 IF l_num_of_multiples <> 0 THEN
4944
4945
4946
4947 FOR j IN NVL(l_non_zero_rec_tax_lines_tbl.FIRST,0) ..
4948 NVL(l_non_zero_rec_tax_lines_tbl.LAST,-1)
4949 LOOP
4950
4951 l_index := l_non_zero_rec_tax_lines_tbl(j);
4952
4953 l_tax_amt_funcl_curr_tbl(l_index) :=
4954 l_tax_amt_funcl_curr_tbl(l_index) +
4955 l_minimum_accountable_unit *
4956 l_num_of_multiples * SIGN(l_nrec_tax_rounding_diff);
4957
4958
4959
4960 END LOOP;
4961
4962 END IF; -- l_num_of_multiples <> 0
4963
4964 IF l_remainder <> 0 THEN
4965
4966
4967
4968 FOR j IN 1 .. l_remainder LOOP
4969
4970 l_index := l_non_zero_rec_tax_lines_tbl(j);
4971
4972 l_tax_amt_funcl_curr_tbl(l_index) :=
4973 l_tax_amt_funcl_curr_tbl(l_index) +
4974 l_minimum_accountable_unit *
4975 SIGN(l_nrec_tax_rounding_diff);
4976
4977
4978
4979 END LOOP;
4980
4981 END IF; -- l_remaunder <> 0
4982
4983 -- Reset the value of l_sum_of_rnd_nrec_tax_amt after adjustment
4984 --
4985 l_sum_of_rnd_rec_tax_amt := l_sum_of_rnd_rec_tax_amt +
4986 l_nrec_tax_rounding_diff;
4987
4988 END IF; -- l_non_zero_nrec(or rec)_tax_lines_tbl.COUNT <> 0
4989
4990 END IF; -- l_nrec_tax_rounding_diff <> 0
4991
4992 -- check rounding difference between tax line in zx_lines and
4993 -- the tax distributions in zx_rec_nrec_tax_dist with the same
4994 -- tax_line_id.
4995 --
4996 -- get the tax_amt for this tax_line_id in zx_lines
4997 --
4998 OPEN get_tax_line_amt_csr(l_tax_line_id_tbl(i));
4999 FETCH get_tax_line_amt_csr INTO l_total_tax_line_amt;
5000 CLOSE get_tax_line_amt_csr;
5001
5002
5003
5004 -- calculate rounding difference for amount of tax line
5005 --
5006 l_tax_line_rounding_diff := l_total_tax_line_amt -
5007 (l_sum_of_rnd_rec_tax_amt + l_sum_of_rnd_nrec_tax_amt);
5008
5009
5010
5011 IF l_tax_line_rounding_diff > 0 THEN
5012
5013 -- Adjust this rounding difference to the largest non-zero
5014 -- non-recoverabletax distribution (check first), or adjust it to
5015 -- the largest non-zero recoverable tax distribution.
5016 --
5017 IF l_non_zero_nrec_tax_lines_tbl.COUNT > 0 THEN
5018
5019 l_nrec_begin_index := l_non_zero_nrec_tax_lines_tbl.FIRST;
5020
5021 l_tax_amt_funcl_curr_tbl(l_nrec_begin_index) :=
5022 l_tax_amt_funcl_curr_tbl(l_nrec_begin_index) +
5023 l_tax_line_rounding_diff;
5024
5025 -- store rounding adjustment in functional currency
5026 --
5027 l_func_curr_rnd_adjustment_tbl(l_nrec_begin_index) :=
5028 l_tax_line_rounding_diff;
5029
5030
5031 ELSIF l_non_zero_rec_tax_lines_tbl.COUNT > 0 THEN
5032
5033 l_rec_begin_index := l_non_zero_rec_tax_lines_tbl.FIRST;
5034
5035 l_tax_amt_funcl_curr_tbl(l_rec_begin_index) :=
5036 l_tax_amt_funcl_curr_tbl(l_rec_begin_index) +
5037 l_tax_line_rounding_diff;
5038
5039 -- store rounding adjustment in functional currency
5040 --
5041 l_func_curr_rnd_adjustment_tbl(l_rec_begin_index) :=
5042 l_tax_line_rounding_diff;
5043
5044
5045
5046 END IF;
5047
5048 ElSIF l_tax_line_rounding_diff < 0 THEN
5049
5050 -- Adjust this rounding difference to the largest non-zero
5051 -- recoverabletax distribution (check first), or adjust it to
5052 -- the largest non-zero non-recoverable tax distribution.
5053 --
5054 IF l_non_zero_rec_tax_lines_tbl.COUNT > 0 THEN
5055
5056 l_rec_begin_index := l_non_zero_rec_tax_lines_tbl.FIRST;
5057
5058 l_tax_amt_funcl_curr_tbl(l_rec_begin_index) :=
5059 l_tax_amt_funcl_curr_tbl(l_rec_begin_index) +
5060 l_tax_line_rounding_diff;
5061
5062 -- store rounding adjustment in functional currency
5063 --
5064 l_func_curr_rnd_adjustment_tbl(l_rec_begin_index) :=
5065 l_tax_line_rounding_diff;
5066
5067
5068
5069 ELSIF l_non_zero_nrec_tax_lines_tbl.COUNT > 0 THEN
5070
5071 l_nrec_begin_index := l_non_zero_nrec_tax_lines_tbl.FIRST;
5072
5073 l_tax_amt_funcl_curr_tbl(l_nrec_begin_index) :=
5074 l_tax_amt_funcl_curr_tbl(l_nrec_begin_index) +
5075 l_tax_line_rounding_diff;
5076
5077 -- store rounding adjustment in functional currency
5078 --
5079 l_func_curr_rnd_adjustment_tbl(l_nrec_begin_index) :=
5080 l_tax_line_rounding_diff;
5081
5082
5083 END IF;
5084 END IF;
5085 END IF; -- end of the same tax_line_id
5086 ELSE -- start of new tax_line_id
5087
5088 -- For tax distribution with new tax_line_id and l_begin_index:
5089 -- Reset l_current_tax_line_id
5090 --
5091
5092 l_current_tax_line_id := l_tax_line_id_tbl(i);
5093
5094
5095
5096 -- If this tax distribution has a new tax_line_id, and it is the
5097 -- only tax distribution with this tax_line_id, no adjustment
5098 -- is needed because rounding difference will not exist.
5099 --
5100
5101 -- If this tax distribution has a new tax_line_id and it is not the only
5102 -- tax distributions that has this tax_line_id, adjustment will be done
5103 -- when the last tax distribution with this current tax_line_id is
5104 -- processed, if rounding difference exists,.
5105 --
5106
5107 IF (i = l_rec_nrec_tax_dist_id_tbl.LAST OR
5108 l_current_tax_line_id <> l_tax_line_id_tbl(i+1))
5109 THEN
5110
5111 -- If a tax line has only one tax distribution, there should not
5112 -- be rounding difference between the tax_amt_funcl_curr of the tax
5113 -- line in zx_lines and rec_nrec_tax_amt_funcl_curr of the tax
5114 -- distributions in zx_rec_nrec_tax_dist with the same tax_line_id.
5115 -- They are all converted from the same unrounded_tax_amt.
5116 -- So, no action is required here.
5117
5118 NULL;
5119
5120 ELSE
5121 -- Tax distribution has new tax_line_id, but there are multiple tax
5122 -- tax distributions with the same tax_line_id.
5123 --
5124
5125
5126 -- Initialize the PLSQL tables and local variables if a tax line in
5127 -- zx_lines has multiple tax distributions in rec_nrec_tax_dist.
5128 --
5129 l_non_zero_rec_tax_lines_tbl.DELETE;
5130 l_non_zero_nrec_tax_lines_tbl.DELETE;
5131
5132 l_non_zero_rec_tax_line_index := 0;
5133 l_non_zero_nrec_tax_line_index := 0;
5134
5135 l_sum_of_rnd_rec_tax_amt := 0;
5136 l_sum_of_rnd_nrec_tax_amt := 0;
5137
5138 l_total_unrounded_rec_tax_amt := 0;
5139 l_total_unrounded_nrec_tax_amt := 0;
5140
5141 l_rnd_total_rec_tax_amt := 0;
5142 l_rnd_total_nrec_tax_amt := 0;
5143 l_total_tax_line_amt := 0;
5144
5145 l_rec_tax_rounding_diff := 0;
5146 l_nrec_tax_rounding_diff := 0;
5147
5148 -- For new tax_line_id, reset plsql tables and local variables
5149 --
5150 IF l_recoverable_flg_tbl(i) = 'N' THEN
5151
5152 -- For non-recoverable tax line
5153 --
5154 l_sum_of_rnd_nrec_tax_amt := l_tax_amt_funcl_curr_tbl(i);
5155 l_total_unrounded_nrec_tax_amt := l_unrounded_tax_amt_tbl(i);
5156 l_total_unrounded_rec_tax_amt := 0;
5157
5158 IF (l_rec_nrec_tax_amt_tbl(i) <> 0) THEN
5159
5160 -- Record this rnon-zero non-recoverable tax lines
5161 --
5162 l_non_zero_nrec_tax_line_index := 1;
5163
5164 l_non_zero_nrec_tax_lines_tbl(1) := i;
5165
5166 END IF;
5167
5168 ELSIF l_recoverable_flg_tbl(i) = 'Y' THEN
5169
5170 -- For recoverable tax line
5171 --
5172 l_sum_of_rnd_rec_tax_amt := l_tax_amt_funcl_curr_tbl(i);
5173 l_total_unrounded_rec_tax_amt := l_unrounded_tax_amt_tbl(i);
5174 l_total_unrounded_nrec_tax_amt := 0;
5175
5176 IF l_rec_nrec_tax_amt_tbl(i) <> 0 THEN
5177
5178 -- Record this non-zero recoverable tax lines
5179 --
5180 l_non_zero_rec_tax_line_index := 1;
5181
5182 l_non_zero_rec_tax_lines_tbl(1) := i;
5183
5184 END IF;
5185
5186 END IF; -- check Recoverable_Flag
5187
5188
5189
5190 END IF; -- check if this is the only tax dist with this tax_line_id
5191
5192 END IF; -- check tax_line_id
5193 END LOOP;
5194
5195 -- update taxable_amt_funcl_curr from tax_amt_funcl_curr/tax_rate.
5196 -- If tax_rate = 0, get taxable_amt_funcl_curr by converting
5197 -- taxable_amt to functional currency
5198 --
5199 FOR i IN NVL(l_rec_nrec_tax_dist_id_tbl.FIRST, 0).. NVL(l_rec_nrec_tax_dist_id_tbl.LAST, -1)
5200 LOOP
5201
5202
5203
5204 -- convert taxable_amt to functional currency and perform rounding
5205 -- for taxable_amt_funcl_curr
5206 --
5207 IF l_rec_nrec_rate_tbl(i) <> 0 THEN
5208
5209 l_taxable_amt_funcl_curr_tbl(i) := l_tax_amt_funcl_curr_tbl(i)/
5210 l_rec_nrec_rate_tbl(i);
5211
5212 -- rounding to the correct precision and minumum accountable units
5213 --
5214 l_taxable_amt_funcl_curr_tbl(i) := round(l_taxable_amt_funcl_curr_tbl(i)/
5215 l_minimum_accountable_unit ) * l_minimum_accountable_unit;
5216
5217 ELSE
5218
5219 IF l_funcl_currency_code <> l_trx_currency_code_tbl(i) THEN
5220 l_taxable_amt_funcl_curr_tbl(i) :=
5221 GL_CURRENCY_API.convert_amount (
5222 x_set_of_books_id => p_ledger_id,
5223 x_from_currency => l_trx_currency_code_tbl(i),
5224 x_conversion_date => p_currency_conversion_date,
5225 x_conversion_type => p_currency_conversion_type,
5226 x_amount => l_unrounded_taxable_amt_tbl(i));
5227 ELSE
5228 l_taxable_amt_funcl_curr_tbl(i) :=
5229 round(l_taxable_amt_funcl_curr_tbl(i)/l_minimum_accountable_unit) *
5230 l_minimum_accountable_unit;
5231 END IF;
5232 END IF;
5233
5234
5235
5236 END LOOP;
5237
5238
5239
5240 -- Update Table ZX_REC_NREC_DIST
5241 --
5242 FORALL i IN NVL(l_rec_nrec_tax_dist_id_tbl.FIRST,0) .. NVL(l_rec_nrec_tax_dist_id_tbl.LAST,-1)
5243
5244 UPDATE zx_rec_nrec_dist
5245 SET currency_conversion_rate = p_currency_conversion_rate,
5246 currency_conversion_type = p_currency_conversion_type,
5247 currency_conversion_date = p_currency_conversion_date,
5248 rec_nrec_tax_amt_funcl_curr = l_tax_amt_funcl_curr_tbl(i),
5249 taxable_amt_funcl_curr = l_taxable_amt_funcl_curr_tbl(i),
5250 func_curr_rounding_adjustment = l_func_curr_rnd_adjustment_tbl(i),
5251 object_version_number = object_version_number + 1
5252 WHERE rec_nrec_tax_dist_id = l_rec_nrec_tax_dist_id_tbl(i)
5253 AND application_id = p_event_class_rec.application_id
5254 AND entity_code = p_event_class_rec.entity_code
5255 AND event_class_code = p_event_class_rec.event_class_code
5256 AND trx_id = p_event_class_rec.trx_id;
5257
5258 IF (g_level_procedure >= g_current_runtime_level ) THEN
5259 FND_LOG.STRING(g_level_procedure,
5260 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.update_exchange_rate.END',
5261 'ZX_TRD_SERVICES_PUB_PKG.update_exchange_rate(-)');
5262 END IF;
5263
5264 EXCEPTION
5265
5266 WHEN OTHERS THEN
5267
5268 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5269 l_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5270
5271 IF (g_level_unexpected >= g_current_runtime_level ) THEN
5272 FND_LOG.STRING(g_level_unexpected,
5273 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.update_exchange_rate',
5274 l_error_buffer);
5275 FND_LOG.STRING(g_level_unexpected,
5276 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.update_exchange_rate.END',
5277 'ZX_TRD_SERVICES_PUB_PKG.update_exchange_rate(-)');
5278 END IF;
5279
5280 END update_exchange_rate;
5281
5282 /* =============================================================================*
5283 | PUBLIC FUNCTION round_amt_to_mau |
5284 | |
5285 | DESCRIPTION: |
5286 | This procedure is used to round the amount to minimum_accountable_unit |
5287 | |
5288 * =============================================================================*/
5289
5290 FUNCTION round_amt_to_mau (
5291 p_ledger_id NUMBER,
5292 p_unrounded_amt NUMBER ) RETURN NUMBER IS
5293
5294 CURSOR get_mau_info_csr IS
5295 SELECT nvl( cur.minimum_accountable_unit, power( 10, (-1 * precision)))
5296 FROM fnd_currencies cur, gl_sets_of_books sob
5297 WHERE sob.set_of_books_id = p_ledger_id
5298 AND cur.currency_code = sob.currency_code;
5299
5300 l_rounded_amt_to_mau NUMBER;
5301 l_mau NUMBER;
5302 l_error_buffer VARCHAR2(200);
5303
5304 BEGIN
5305
5306 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5307
5308 IF (g_level_statement >= g_current_runtime_level ) THEN
5309 FND_LOG.STRING(g_level_statement,
5310 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.round_amt_to_mau.BEGIN',
5311 'ZX_TRD_SERVICES_PUB_PKG.round_amt_to_mau(+)');
5312 END IF;
5313
5314 -- get the l_minimum_accountable_unit
5315 --
5316 OPEN get_mau_info_csr;
5317 FETCH get_mau_info_csr INTO l_mau;
5318 CLOSE get_mau_info_csr;
5319
5320 -- rounding to the correct precision and minumum accountable units
5321 --
5322 l_rounded_amt_to_mau := round(p_unrounded_amt/l_mau ) * l_mau;
5323
5324 IF (g_level_statement >= g_current_runtime_level ) THEN
5325
5326 FND_LOG.STRING(g_level_statement,
5327 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.round_amt_to_mau.END',
5328 'ZX_TRD_SERVICES_PUB_PKG.round_amt_to_mau(-)'||
5329 ' rounded amt to mau '||l_rounded_amt_to_mau);
5330 END IF;
5331
5332 RETURN l_rounded_amt_to_mau;
5333
5334 EXCEPTION
5335 WHEN OTHERS THEN
5336 l_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5337
5338 IF (g_level_unexpected >= g_current_runtime_level ) THEN
5339 FND_LOG.STRING(g_level_unexpected,
5340 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.round_amt_to_mau',
5341 l_error_buffer);
5342 FND_LOG.STRING(g_level_unexpected,
5343 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.round_amt_to_mau.END',
5344 'ZX_TRD_SERVICES_PUB_PKG.round_amt_to_mau(-)');
5345 END IF;
5346 RAISE;
5347 END round_amt_to_mau;
5348
5349 /* =============================================================================*
5350 | PUBLIC FUNCTION get_tax_hold_rls_val_frm_code |
5351 | |
5352 | DESCRIPTION: |
5353 | This function is used to get the correpsonding numeric value of the input |
5354 | tax_hold_release_code. |
5355 | |
5356 | Called from ZX_TRL_MANAGE_TAX_PKG.RELEASE_DOCUMENT_TAX_HOLD() |
5357 | |
5358 * =============================================================================*/
5359
5360 FUNCTION get_tax_hold_rls_val_frm_code (
5361 p_tax_hold_released_code IN VARCHAR2
5362 ) RETURN NUMBER IS
5363 l_tax_hold_release_value NUMBER;
5364 BEGIN
5365 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5366
5367 IF (g_level_statement >= g_current_runtime_level ) THEN
5368 FND_LOG.STRING(g_level_statement,
5369 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.get_tax_hold_rls_val_frm_code.BEGIN',
5370 'ZX_TRD_SERVICES_PUB_PKG.get_tax_hold_rls_val_frm_code(+)');
5371 END IF;
5372
5373 IF p_tax_hold_released_code = ZX_TDS_CALC_SERVICES_PUB_PKG.G_TAX_VARIANCE_CORRECTED THEN
5374 l_tax_hold_release_value := ZX_TDS_CALC_SERVICES_PUB_PKG.g_tax_variance_corrected_val;
5375 ELSIF p_tax_hold_released_code = ZX_TDS_CALC_SERVICES_PUB_PKG.G_TAX_AMT_RANGE_CORRECTED THEN
5376 l_tax_hold_release_value := ZX_TDS_CALC_SERVICES_PUB_PKG.g_tax_amt_range_corrected_val;
5377 ELSE
5378 l_tax_hold_release_value := 0;
5379 END IF;
5380
5381 IF (g_level_statement >= g_current_runtime_level ) THEN
5382 FND_LOG.STRING(g_level_statement,
5383 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.get_tax_hold_rls_val_frm_code.END',
5384 'ZX_TRD_SERVICES_PUB_PKG.get_tax_hold_rls_val_frm_code(-)');
5385 END IF;
5386 RETURN l_tax_hold_release_value;
5387
5388 END get_tax_hold_rls_val_frm_code;
5389
5390 /* =============================================================================*
5391 | PUBLIC FUNCTION get_prod_total_tax_amt |
5392 | |
5393 | DESCRIPTION: |
5394 | This function is called by TSRM to get the pro-rated tax amount in |
5395 | transaction/functional/tax currency |
5396 | |
5397 | HISTORY: |
5398 | Aug-11-2004 Created for bug fix 3551605 |
5399 | |
5400 * =============================================================================*/
5401
5402 FUNCTION get_prod_total_tax_amt(
5403 p_prepay_tax_amt NUMBER,
5404 p_line_amt NUMBER,
5405 p_prepay_line_amt NUMBER ) RETURN NUMBER IS
5406
5407 l_prd_total_tax_amt NUMBER;
5408
5409 BEGIN
5410
5411 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5412
5413 IF (g_level_procedure >= g_current_runtime_level ) THEN
5414 FND_LOG.STRING(g_level_procedure,
5415 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.get_prod_total_tax_amt.BEGIN',
5416 'ZX_TRD_SERVICES_PUB_PKG.get_prod_total_tax_amt(+)');
5417 END IF;
5418
5419 IF NVL(p_prepay_line_amt, 0) <> 0 THEN
5420 l_prd_total_tax_amt := p_prepay_tax_amt * p_line_amt / p_prepay_line_amt;
5421
5422 ELSE
5423 IF (g_level_statement >= g_current_runtime_level ) THEN
5424 FND_LOG.STRING(g_level_statement,
5425 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.get_prod_total_tax_amt',
5426 'p_prepay_line_amt is '||NVL(TO_CHAR(p_prepay_line_amt), 'NULL'));
5427 END IF;
5428
5429 END IF;
5430
5431 IF (g_level_procedure >= g_current_runtime_level ) THEN
5432 FND_LOG.STRING(g_level_procedure,
5433 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.get_prod_total_tax_amt.END',
5434 'ZX_TRD_SERVICES_PUB_PKG.get_prod_total_tax_amt(-)');
5435 END IF;
5436
5437 return l_prd_total_tax_amt;
5438
5439 END get_prod_total_tax_amt;
5440
5441 /* =============================================================================*
5442 | PUBLIC PROCEDURE is_recoverability_affected |
5443 | |
5444 | DESCRIPTION: |
5445 | This procedure is called by TSRM to check if the item's project |
5446 | information like project_id, task_id, can be changed. |
5447 | |
5448 | HISTORY: |
5449 | Apr-05-2005 Created for bug fix 4220119 |
5450 * =============================================================================*/
5451 PROCEDURE is_recoverability_affected(
5452 p_pa_item_info_tbl IN OUT NOCOPY ZX_API_PUB.pa_item_info_tbl_type,
5453 x_return_status OUT NOCOPY VARCHAR2) IS
5454
5455 CURSOR get_tax_dists_csr(
5456 c_application_id zx_rec_nrec_dist.application_id%TYPE,
5457 c_entity_code zx_rec_nrec_dist.entity_code%TYPE,
5458 c_event_class_code zx_rec_nrec_dist.entity_code%TYPE,
5459 c_trx_id zx_rec_nrec_dist.trx_id%TYPE,
5460 c_trx_line_id zx_rec_nrec_dist.trx_line_id%TYPE,
5461 c_trx_level_type zx_rec_nrec_dist.trx_level_type%TYPE,
5462 c_item_expense_dist_id zx_rec_nrec_dist.trx_line_dist_id %TYPE) IS
5463 SELECT *
5464 FROM zx_rec_nrec_dist
5465 WHERE trx_line_dist_id = c_item_expense_dist_id
5466 AND application_id = c_application_id
5467 AND entity_code = c_entity_code
5468 AND event_class_code = c_event_class_code
5469 AND trx_id = c_trx_id
5470 AND trx_line_id = c_trx_line_id
5471 AND trx_level_type = c_trx_level_type;
5472
5473 CURSOR check_migrated_rule_code_csr(
5474 c_tax_rate_id zx_rates_b.tax_rate_id%TYPE) IS
5475 SELECT rates.recovery_rule_code
5476 FROM zx_rates_b rates
5477 WHERE rates.tax_rate_id = c_tax_rate_id;
5478
5479 CURSOR check_current_rule_csr(
5480 c_rec_rate_result_id zx_rec_nrec_dist.rec_rate_result_id%TYPE) IS
5481 SELECT rules.service_type_code,
5482 rules.priority,
5483 factor_dtls.determining_factor_code
5484 FROM zx_process_results results,
5485 zx_rules_b rules,
5486 zx_det_factor_templ_b factors,
5487 zx_det_factor_templ_dtl factor_dtls
5488 WHERE results.result_id = c_rec_rate_result_id
5489 AND rules.tax_rule_id = results.tax_rule_id
5490 AND factors.det_factor_templ_code = rules.det_factor_templ_code
5491 AND factor_dtls.det_factor_templ_id = factors.det_factor_templ_id;
5492
5493 CURSOR check_other_rules_csr(
5494 c_service_type_code zx_rules_b.service_type_code%TYPE,
5495 c_priority zx_rules_b.priority%TYPE,
5496 c_application_id NUMBER,
5497 c_entity_code VARCHAR2,
5498 c_event_class_code VARCHAR2,
5499 c_tax zx_taxes_b.tax%TYPE,
5500 c_tax_regime_code zx_regimes_b.tax_regime_code%TYPE,
5501 c_recovery_type_code zx_rules_b.recovery_type_code%TYPE,
5502 -- c_reference_application_id zx_rules_b.application_id%TYPE,
5503 c_tax_line_id zx_lines.tax_line_id%TYPE) IS
5504 SELECT rules.service_type_code,
5505 rules.priority,
5506 factor_dtls.determining_factor_code
5507 FROM zx_sco_rules_b_v rules,
5508 zx_lines lines,
5509 zx_evnt_cls_mappings mappings,
5510 zx_det_factor_templ_b factors,
5511 zx_det_factor_templ_dtl factor_dtls
5512 WHERE rules.service_type_code = c_service_type_code
5513 AND rules.tax = c_tax -- In phase 1, tax and regime should not be NULL
5514 AND rules.tax_regime_code = c_tax_regime_code
5515 AND rules.system_default_flag <> 'Y'
5516 AND rules.enabled_flag = 'Y'
5517 AND rules.priority < c_priority
5518 AND rules.recovery_type_code = c_recovery_type_code
5519 AND EXISTS (SELECT result_id
5520 FROM zx_process_results results
5521 WHERE results.tax_rule_id = rules.tax_rule_id
5522 AND results.enabled_flag = 'Y')
5523 AND mappings.event_class_code = c_event_class_code
5524 AND mappings.application_id = c_application_id
5525 AND mappings.entity_code = c_entity_code
5526 AND (rules.application_id = mappings.reference_application_id OR
5527 rules. application_id IS NULL)
5528 AND lines.tax_line_id = c_tax_line_id
5529 AND lines.tax_determine_date >= effective_from
5530 AND (lines.tax_determine_date <= effective_to OR
5531 rules.effective_to IS NULL)
5532 AND factors.det_factor_templ_code = rules.det_factor_templ_code
5533 AND factor_dtls.det_factor_templ_id = factors.det_factor_templ_id;
5534
5535 l_service_type_code zx_rules_b.service_type_code%TYPE;
5536 l_priority zx_rules_b.priority%TYPE;
5537 l_recovery_rule_code zx_rates_b.recovery_rule_code%TYPE;
5538 l_error_buffer VARCHAR2(200);
5539
5540 BEGIN
5541
5542 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5543
5544 IF (g_level_procedure >= g_current_runtime_level ) THEN
5545 FND_LOG.STRING(g_level_procedure,
5546 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.is_recoverability_affected.BEGIN',
5547 'ZX_TRD_SERVICES_PUB_PKG.is_recoverability_affected(+)');
5548 END IF;
5549
5550 x_return_status:= FND_API.G_RET_STS_SUCCESS;
5551
5552 -- loop through the item distribution data structure passed by product
5553 --
5554 FOR i IN NVL(p_pa_item_info_tbl.FIRST, 0) .. NVL(p_pa_item_info_tbl.LAST, -1)
5555 LOOP
5556
5557 -- initialize p_pa_item_info_tbl(i).recoverability_affected to FALSE
5558 --
5559 p_pa_item_info_tbl(i).recoverability_affected := FALSE;
5560
5561 -- loop through the tax distributions of each item distribution
5562 --
5563 FOR tax_dist_rec IN get_tax_dists_csr(
5564 p_pa_item_info_tbl(i).application_id,
5565 p_pa_item_info_tbl(i).entity_code,
5566 p_pa_item_info_tbl(i).event_class_code,
5567 p_pa_item_info_tbl(i).trx_id,
5568 p_pa_item_info_tbl(i).trx_line_id,
5569 p_pa_item_info_tbl(i).trx_level_type,
5570 p_pa_item_info_tbl(i).item_expense_dist_id)
5571 LOOP
5572
5573 IF tax_dist_rec.rec_rate_result_id IS NULL THEN
5574
5575 IF tax_dist_rec.historical_flag = 'Y' THEN
5576
5577 -- check recovery rule code defined in 11i
5578 --
5579 OPEN check_migrated_rule_code_csr(tax_dist_rec.tax_rate_id);
5580 FETCH check_migrated_rule_code_csr INTO l_recovery_rule_code;
5581 CLOSE check_migrated_rule_code_csr;
5582
5583 IF l_recovery_rule_code IS NULL THEN
5584 p_pa_item_info_tbl(i).recoverability_affected := FALSE;
5585 ELSE
5586 p_pa_item_info_tbl(i).recoverability_affected := TRUE;
5587 END IF;
5588 EXIT; -- Exit processing other tax distributions
5589 END IF;
5590
5591 ELSE -- rec_rate_result_id IS NOT NULL:
5592
5593 -- Loop through the rule associated with the determining factor
5594 -- details defined in the rule associated with the current result id.
5595 -- IF any determining factor code is 'ACCOUNT_STRING', set
5596 -- recoverability_affected := TRUE and stop processing the
5597 -- current item distribution;
5598 --
5599 FOR det_factor_detail_rec IN
5600 check_current_rule_csr(tax_dist_rec.rec_rate_result_id) LOOP
5601
5602 l_service_type_code := det_factor_detail_rec.service_type_code;
5603 l_priority := det_factor_detail_rec.priority;
5604
5605 IF det_factor_detail_rec.determining_factor_code IN
5606 ('ACCOUNT_STRING', 'LINE_ACCOUNT') THEN
5607 p_pa_item_info_tbl(i).recoverability_affected := TRUE;
5608 EXIT; -- Exit processing other determining factor details
5609 END IF;
5610 END LOOP; -- det_factor_detail_rec IN ...
5611
5612 IF p_pa_item_info_tbl(i).recoverability_affected THEN
5613 EXIT; -- Exit processing other tax distributions
5614 ELSE
5615
5616 -- If recoverability_affected is still FALSE, need to check
5617 -- the other previously processed rules for this recovery rate.
5618 --
5619 FOR det_factor_detail_rec IN check_other_rules_csr(
5620 l_service_type_code,
5621 l_priority,
5622 tax_dist_rec.application_id,
5623 tax_dist_rec.entity_code,
5624 tax_dist_rec.event_class_code,
5625 tax_dist_rec.tax,
5626 tax_dist_rec.tax_regime_code,
5627 tax_dist_rec.recovery_type_code,
5628 tax_dist_rec.tax_line_id)
5629 LOOP
5630
5631 IF det_factor_detail_rec.determining_factor_code IN
5632 ('ACCOUNT_STRING', 'LINE_ACCOUNT') THEN
5633 p_pa_item_info_tbl(i).recoverability_affected := TRUE;
5634 EXIT; -- Exit processing other determining factor details
5635 END IF;
5636 END LOOP; -- det_factor_detail_rec IN check_other_rules_csr
5637
5638 -- If recoverability_affected := TRUE, exit processing other
5639 -- tax distributions
5640 --
5641 IF p_pa_item_info_tbl(i).recoverability_affected THEN
5642 EXIT; -- Exit processing other tax distributions
5643 END IF;
5644
5645 END IF; -- p_pa_item_info_tbl(i).recoverability_affected or ELSE
5646 END IF; -- tax_dist_rec.rec_rate_result_id IS NULL OR ELSE
5647 END LOOP; -- tax_dist_rec IN get_tax_dists_csr
5648 END LOOP; -- i IN p_pa_item_info_tbl.FIRST .. p_pa_item_info_tbl.LAST
5649
5650 IF (g_level_procedure >= g_current_runtime_level ) THEN
5651 FND_LOG.STRING(g_level_procedure,
5652 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.is_recoverability_affected.END',
5653 'ZX_TRD_SERVICES_PUB_PKG.is_recoverability_affected(-)');
5654 END IF;
5655
5656 EXCEPTION
5657 WHEN OTHERS THEN
5658 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5659 l_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5660
5661 IF (g_level_unexpected >= g_current_runtime_level ) THEN
5662 FND_LOG.STRING(g_level_unexpected,
5663 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.is_recoverability_affected',
5664 l_error_buffer);
5665 FND_LOG.STRING(g_level_unexpected,
5666 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.is_recoverability_affected.END',
5667 'ZX_TRD_SERVICES_PUB_PKG.ZX_TRD_SERVICES_PUB_PKG(-)');
5668 END IF;
5669
5670 END is_recoverability_affected;
5671
5672 FUNCTION GET_RECOVERABLE_CCID(
5673 p_rec_nrec_dist_id IN NUMBER,
5674 p_tax_line_id IN NUMBER,
5675 p_gl_date IN DATE,
5676 p_tax_rate_id IN NUMBER,
5677 p_rec_rate_id IN NUMBER,
5678 p_ledger_id IN NUMBER,
5679 p_source_rate_id IN NUMBER,
5680 p_content_owner_id IN NUMBER) RETURN NUMBER IS
5681
5682 /* Note - this function is called from view zx_ap_def_tax_extract_v
5683 This view is used only during payment accounting, where we need not check
5684 the def_recovery_setlement_option_code like we do in get_ccid procedure
5685 */
5686
5687 Cursor get_rec_ccid_cur(c_tax_account_entity_id number,
5688 c_ledger_id number,
5689 c_internal_org_id number) is
5690 select tax_account_ccid
5691 from zx_accounts
5692 where TAX_ACCOUNT_ENTITY_ID = c_tax_account_entity_id
5693 and TAX_ACCOUNT_ENTITY_CODE = 'RATES'
5694 and ledger_id = c_ledger_id
5695 and internal_organization_id = c_internal_org_id;
5696
5697 Cursor is_ccid_valid(l_ccid number) is
5698 select 'x'
5699 from gl_code_combinations
5700 where code_combination_id = l_ccid
5701 and enabled_flag = 'Y'
5702 and p_gl_date between nvl(start_date_active,p_gl_date) and nvl(end_date_active, p_gl_date);
5703
5704 l_ccid NUMBER;
5705 l_val char;
5706 l_internal_org_id NUMBER;
5707 l_error_buffer VARCHAR2(200);
5708
5709 BEGIN
5710
5711 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5712
5713 IF (g_level_procedure >= g_current_runtime_level ) THEN
5714 FND_LOG.STRING(g_level_procedure,
5715 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_RECOVERABLE_CCID.BEGIN',
5716 'ZX_TRD_SERVICES_PUB_PKG.GET_RECOVERABLE_CCID(+)');
5717 END IF;
5718
5719 BEGIN
5720
5721 SELECT INTERNAL_ORGANIZATION_ID
5722 INTO l_internal_org_id
5723 FROM ZX_LINES
5724 WHERE tax_line_id = p_tax_line_id;
5725
5726 EXCEPTION
5727 WHEN OTHERS THEN
5728
5729 l_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5730 IF (g_level_unexpected >= g_current_runtime_level ) THEN
5731 FND_LOG.STRING(g_level_unexpected,
5732 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_RECOVERABLE_CCID',
5733 'Exception in ZX_TRD_SERVICES_PUB_PKG.GET_RECOVERABLE_CCID: '||l_error_buffer);
5734 END IF;
5735
5736 return(null);
5737
5738 END;
5739
5740
5741 open get_rec_ccid_cur(nvl(p_source_rate_id,p_tax_rate_id),
5742 p_ledger_id,
5743 l_internal_org_id);
5744 fetch get_rec_ccid_cur into l_ccid;
5745
5746 close get_rec_ccid_cur;
5747
5748 IF l_ccid is not null THEN
5749
5750 open is_ccid_valid(l_ccid);
5751 fetch is_ccid_valid into l_val;
5752
5753 if is_ccid_valid%notfound then
5754 l_ccid := null;
5755 end if;
5756
5757 close is_ccid_valid;
5758
5759 END IF; -- l_ccid is not null
5760
5761 IF l_ccid is null THEN
5762
5763 open get_rec_ccid_cur(p_rec_rate_id, p_ledger_id, l_internal_org_id);
5764 fetch get_rec_ccid_cur into l_ccid;
5765
5766 close get_rec_ccid_cur;
5767
5768 if l_ccid is not null then
5769
5770 open is_ccid_valid(l_ccid);
5771 fetch is_ccid_valid into l_val;
5772
5773 if is_ccid_valid%notfound then
5774 l_ccid := null;
5775 end if;
5776
5777 close is_ccid_valid;
5778
5779 end if; -- l_ccid is not null
5780
5781 END IF; -- l_ccid is null
5782
5783 IF (g_level_procedure >= g_current_runtime_level ) THEN
5784 FND_LOG.STRING(g_level_procedure,
5785 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_RECOVERABLE_CCID.BEGIN',
5786 'ZX_TRD_SERVICES_PUB_PKG.GET_RECOVERABLE_CCID(-)'||
5787 ' ccid = '||l_ccid);
5788 END IF;
5789
5790 return(l_ccid);
5791
5792 EXCEPTION
5793 WHEN OTHERS THEN
5794
5795 l_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5796 IF (g_level_unexpected >= g_current_runtime_level ) THEN
5797 FND_LOG.STRING(g_level_unexpected,
5798 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_RECOVERABLE_CCID',
5799 'Exception in ZX_TRD_SERVICES_PUB_PKG.GET_RECOVERABLE_CCID: '||l_error_buffer);
5800 END IF;
5801 return(null);
5802 END GET_RECOVERABLE_CCID;
5803
5804
5805 /* =============================================================================*
5806 | PUBLIC PROCEDURE delete_unnecessary_tax_dists |
5807 | |
5808 | DESCRIPTION: |
5809 | This procedure is called if associate_child_frozen_flag on detail tax |
5810 | lines is 'Y' after tax dists are inserted into zx_rec_nrec_dist_gt. |
5811 | If there is no change on tax_line and item distribution, the reversed |
5812 | tax_distributions and the new created tax distributions, which are |
5813 | created for the frozen taxdistributions, will be deleted. |
5814 | |
5815 | When there are frozen tax distributions and recovery redetermination is |
5816 | needed for the parent tax line, we reverse the existing frozen tax |
5817 | distributions and create new tax distributions. If there is no difference |
5818 | between the existing frozen tax distribution and the corresponding new |
5819 | tax distribution (excluding reverse flag and frozen flag), we should |
5820 | honor the existing frozen tax distribution and remove the newly created |
5821 | tax distributions. In the following example, suppose there is a frozen |
5822 | tax distribution D1, during internal processing, we create a negative |
5823 | D2 and a positive D3. |
5824 | D1 frozen |
5825 | D2 negative D1 reverse |
5826 | D3 same as D1 |
5827 | If D3 is exactly the same as D1 (excluding reverse flag and frozen flag), |
5828 | we delete both D2 and D3 and simply keep D1. |
5829 | |
5830 | The columns used for the comparison reviewed by Helen |
5831 | |
5832 | application_id | |
5833 | entity_code | |
5834 | event_class_code | |
5835 | trx_id | -- through tax_line_id |
5836 | trx_line_id | |
5837 | tax_level_type | |
5838 | tax_regime_id | |
5839 | tax_id | |
5840 | tax_line_id |
5841 | trx_line_dist_id |
5842 | tax_status_id |
5843 | tax_rate_id |
5844 | inclusive_flag |
5845 | recovery_type_id |
5846 | recovery_type_code |
5847 | recovery_rate_id |
5848 | recoverable_flag |
5849 | rec_nrec_tax_amt |
5850 | intended_use |
5851 | project_id | |
5852 | task_id | |
5853 | award_id | For reporting purpose |
5854 | expenditure_type | |
5855 | expenditure_organization_id | |
5856 | expenditure_item_date | |
5857 | currency_conversion_date |
5858 | currency_conversion_type |
5859 | currency_conversion_rate |
5860 | tax_currency_conversion_date |
5861 | tax_currency_conversion_type |
5862 | tax_currency_conversion_rate |
5863 | trx_currency_code |
5864 | tax_currency_code |
5865 | backward_compatibility_flag |
5866 | self_assessed_flag |
5867 | ref_doc_application_id | |
5868 | ref_doc_entity_code | |
5869 | ref_doc_event_class_code | through ref_doc_tax_dist_id |
5870 | ref_doc_trx_id | |
5871 | ref_doc_line_id | |
5872 | ref_doc_dist_id | |
5873 | tax_only_line_flag |
5874 | account_ccid |
5875 | |
5876 * =============================================================================*/
5877 PROCEDURE delete_unnecessary_tax_dists(
5878 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
5879 x_return_status OUT NOCOPY VARCHAR2) IS
5880
5881 TYPE NUMERIC_TBL_TYPE IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
5882
5883 l_reversed_tax_dist_id_tbl NUMERIC_TBL_TYPE;
5884 l_rec_nrec_tax_Dist_id_tbl1 NUMERIC_TBL_TYPE;
5885 l_rec_nrec_tax_Dist_id_tbl2 NUMERIC_TBL_TYPE;
5886
5887 BEGIN
5888
5889 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
5890
5891 IF (g_level_procedure >= g_current_runtime_level ) THEN
5892 FND_LOG.STRING(g_level_procedure,
5893 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.delete_unnecessary_tax_dists.BEGIN',
5894 'ZX_TRD_SERVICES_PUB_PKG.delete_unnecessary_tax_dists(+)');
5895 END IF;
5896
5897 x_return_status:= FND_API.G_RET_STS_SUCCESS;
5898
5899 -- Modified code as part of bug#7515711 to ensure that additional distributions
5900 -- are not created for Historical Invoices on re-validation.
5901
5902 SELECT REC_NREC_TAX_DIST_ID, REVERSED_TAX_DIST_ID
5903 BULK COLLECT INTO l_rec_nrec_tax_Dist_id_tbl1, l_reversed_tax_dist_id_tbl
5904 FROM ZX_REC_NREC_DIST_GT gt
5905 WHERE ( reversed_tax_dist_id IS NOT NULL
5906 AND EXISTS
5907 (SELECT 1 FROM ZX_REC_NREC_DIST_GT gt1
5908 WHERE gt1.tax_line_id = gt.tax_line_id
5909 AND gt1.trx_line_dist_id = gt.trx_line_dist_id
5910 AND gt1.tax_status_id = gt.tax_status_id
5911 AND gt1.tax_rate_id = gt.tax_rate_id
5912 AND gt1.recoverable_flag = gt.recoverable_flag
5913 AND NVL(gt1.inclusive_flag, 'N') = NVL(gt.inclusive_flag, 'N')
5914 AND NVL(gt1.recovery_type_id, -999) = NVL(gt.recovery_type_id, -999)
5915 AND NVL(gt1.recovery_type_code, 'x') = NVL(gt.recovery_type_code, 'x')
5916 AND NVL(gt1.recovery_rate_code, 'x') = NVL(gt.recovery_rate_code, 'x')
5917 /*AND NVL(gt1.project_id, -999) = NVL(gt.project_id, -999)
5918 AND NVL(gt1.task_id, -999) = NVL(gt.task_id, -999)
5919 AND NVL(gt1.award_id, -999) = NVL(gt.award_id, -999)
5920 AND NVL(gt1.expenditure_type, 'x') = NVL(gt.expenditure_type, 'x')
5921 AND NVL(gt1.expenditure_organization_id, -999) = NVL(gt.expenditure_organization_id, -999)
5922 AND NVL(TRUNC(gt1.expenditure_item_date), DATE_DUMMY) = NVL(TRUNC(gt.expenditure_item_date), DATE_DUMMY)*/
5923 AND DECODE(gt1.HISTORICAL_FLAG, 'N', NVL(gt1.project_id, -999), -999)
5924 = DECODE(gt.HISTORICAL_FLAG, 'N', NVL(gt.project_id, -999), -999)
5925 AND DECODE(gt1.HISTORICAL_FLAG, 'N', NVL(gt1.task_id, -999), -999)
5926 = DECODE(gt.HISTORICAL_FLAG, 'N', NVL(gt.task_id, -999), -999)
5927 AND DECODE(gt1.HISTORICAL_FLAG, 'N', NVL(gt1.award_id, -999), -999)
5928 = DECODE(gt.HISTORICAL_FLAG, 'N', NVL(gt.award_id, -999), -999)
5929 AND DECODE(gt1.HISTORICAL_FLAG, 'N', NVL(gt1.expenditure_type, 'x'), 'x')
5930 = DECODE(gt.HISTORICAL_FLAG, 'N', NVL(gt.expenditure_type, 'x'), 'x')
5931 AND DECODE(gt1.HISTORICAL_FLAG, 'N', NVL(gt1.expenditure_organization_id, -999), -999)
5932 = DECODE(gt.HISTORICAL_FLAG, 'N', NVL(gt.expenditure_organization_id, -999), -999)
5933 AND DECODE(gt1.HISTORICAL_FLAG, 'N', NVL(TRUNC(gt1.expenditure_item_date), DATE_DUMMY), DATE_DUMMY)
5934 = DECODE(gt.HISTORICAL_FLAG, 'N', NVL(TRUNC(gt.expenditure_item_date), DATE_DUMMY), DATE_DUMMY)
5935 AND NVL(TRUNC(gt1.currency_conversion_date), DATE_DUMMY) = NVL(TRUNC(gt.currency_conversion_date), DATE_DUMMY)
5936 AND NVL(gt1.currency_conversion_type, 'x') = NVL(gt.currency_conversion_type, 'x')
5937 AND NVL(gt1.currency_conversion_rate, 1) = NVL(gt.currency_conversion_rate, 1)
5938 AND NVL(TRUNC(gt1.tax_currency_conversion_date), DATE_DUMMY) = NVL(TRUNC(gt.tax_currency_conversion_date), DATE_DUMMY)
5939 AND NVL(gt1.tax_currency_conversion_type, 'x') = NVL(gt.tax_currency_conversion_type, 'x')
5940 AND NVL(gt1.tax_currency_conversion_rate, 1) = NVL(gt.tax_currency_conversion_rate, 1)
5941 AND NVL(gt1.trx_currency_code, 'x') = NVL(gt.trx_currency_code, 'x')
5942 AND NVL(gt1.tax_currency_code, 'x') = NVL(gt.tax_currency_code, 'x')
5943 AND NVL(gt1.backward_compatibility_flag, 'x') = NVL(gt.backward_compatibility_flag, 'x')
5944 AND NVL(gt1.self_assessed_flag, 'N') = NVL(gt.self_assessed_flag, 'N')
5945 AND NVL(gt1.intended_use, 'x') = NVL(gt.intended_use, 'x')
5946 AND NVL(gt1.tax_only_line_flag, 'N') = NVL(gt.tax_only_line_flag, 'N')
5947 --AND NVL(gt1.account_ccid, -999) = NVL(gt.account_ccid, -999)
5948 AND gt1.rec_nrec_tax_amt = -gt.rec_nrec_tax_amt
5949 AND gt1.trx_line_dist_amt = -gt.trx_line_dist_amt -- bug 6709478
5950 AND gt1.trx_line_dist_tax_amt = -gt.trx_line_dist_tax_amt -- bug 6709478
5951 AND gt1.rec_nrec_tax_dist_number > gt.rec_nrec_tax_dist_number
5952 AND gt1.freeze_flag = 'N'
5953 AND gt1.reverse_flag = 'N'
5954 )
5955 );
5956 --RETURNING reversed_tax_dist_id BULK COLLECT INTO l_reversed_tax_dist_id_tbl;
5957
5958 IF l_rec_nrec_tax_Dist_id_tbl1.count > 0 THEN
5959
5960 SELECT rec_nrec_tax_dist_id
5961 BULK COLLECT INTO l_rec_nrec_tax_Dist_id_tbl2
5962 FROM ZX_REC_NREC_DIST_GT gt
5963 WHERE ( gt.freeze_flag = 'N'
5964 AND gt.reverse_flag = 'N'
5965 AND EXISTS
5966 (SELECT 1 FROM ZX_REC_NREC_DIST_GT gt1
5967 WHERE gt1.tax_line_id = gt.tax_line_id
5968 AND gt1.trx_line_dist_id = gt.trx_line_dist_id
5969 AND gt1.tax_status_id = gt.tax_status_id
5970 AND gt1.tax_rate_id = gt.tax_rate_id
5971 AND gt1.recoverable_flag = gt.recoverable_flag
5972 AND NVL(gt1.inclusive_flag, 'N') = NVL(gt.inclusive_flag, 'N')
5973 AND NVL(gt1.recovery_type_id, -999) = NVL(gt.recovery_type_id, -999)
5974 AND NVL(gt1.recovery_type_code, 'x') = NVL(gt.recovery_type_code, 'x')
5975 AND NVL(gt1.recovery_rate_code, 'x') = NVL(gt.recovery_rate_code, 'x')
5976 /*AND NVL(gt1.project_id, -999) = NVL(gt.project_id, -999)
5977 AND NVL(gt1.task_id, -999) = NVL(gt.task_id, -999)
5978 AND NVL(gt1.award_id, -999) = NVL(gt.award_id, -999)
5979 AND NVL(gt1.expenditure_type, 'x') = NVL(gt.expenditure_type, 'x')
5980 AND NVL(gt1.expenditure_organization_id, -999) = NVL(gt.expenditure_organization_id, -999)
5981 AND NVL(TRUNC(gt1.expenditure_item_date), DATE_DUMMY) = NVL(TRUNC(gt.expenditure_item_date), DATE_DUMMY)*/
5982 AND DECODE(gt1.HISTORICAL_FLAG, 'N', NVL(gt1.project_id, -999), -999)
5983 = DECODE(gt.HISTORICAL_FLAG, 'N', NVL(gt.project_id, -999), -999)
5984 AND DECODE(gt1.HISTORICAL_FLAG, 'N', NVL(gt1.task_id, -999), -999)
5985 = DECODE(gt.HISTORICAL_FLAG, 'N', NVL(gt.task_id, -999), -999)
5986 AND DECODE(gt1.HISTORICAL_FLAG, 'N', NVL(gt1.award_id, -999), -999)
5987 = DECODE(gt.HISTORICAL_FLAG, 'N', NVL(gt.award_id, -999), -999)
5988 AND DECODE(gt1.HISTORICAL_FLAG, 'N', NVL(gt1.expenditure_type, 'x'), 'x')
5989 = DECODE(gt.HISTORICAL_FLAG, 'N', NVL(gt.expenditure_type, 'x'), 'x')
5990 AND DECODE(gt1.HISTORICAL_FLAG, 'N', NVL(gt1.expenditure_organization_id, -999), -999)
5991 = DECODE(gt.HISTORICAL_FLAG, 'N', NVL(gt.expenditure_organization_id, -999), -999)
5992 AND DECODE(gt1.HISTORICAL_FLAG, 'N', NVL(TRUNC(gt1.expenditure_item_date), DATE_DUMMY), DATE_DUMMY)
5993 = DECODE(gt.HISTORICAL_FLAG, 'N', NVL(TRUNC(gt.expenditure_item_date), DATE_DUMMY), DATE_DUMMY)
5994 AND NVL(TRUNC(gt1.currency_conversion_date), DATE_DUMMY) = NVL(TRUNC(gt.currency_conversion_date), DATE_DUMMY)
5995 AND NVL(gt1.currency_conversion_type, 'x') = NVL(gt.currency_conversion_type, 'x')
5996 AND NVL(gt1.currency_conversion_rate, 1) = NVL(gt.currency_conversion_rate, 1)
5997 AND NVL(TRUNC(gt1.tax_currency_conversion_date), DATE_DUMMY) = NVL(TRUNC(gt.tax_currency_conversion_date), DATE_DUMMY)
5998 AND NVL(gt1.tax_currency_conversion_type, 'x') = NVL(gt.tax_currency_conversion_type, 'x')
5999 AND NVL(gt1.tax_currency_conversion_rate, 1) = NVL(gt.tax_currency_conversion_rate, 1)
6000 AND NVL(gt1.trx_currency_code, 'x') = NVL(gt.trx_currency_code, 'x')
6001 AND NVL(gt1.tax_currency_code, 'x') = NVL(gt.tax_currency_code, 'x')
6002 AND NVL(gt1.backward_compatibility_flag, 'x') = NVL(gt.backward_compatibility_flag, 'x')
6003 AND NVL(gt1.self_assessed_flag, 'N') = NVL(gt.self_assessed_flag, 'N')
6004 AND NVL(gt1.intended_use, 'x') = NVL(gt.intended_use, 'x')
6005 AND NVL(gt1.tax_only_line_flag, 'N') = NVL(gt.tax_only_line_flag, 'N')
6006 --AND NVL(gt1.account_ccid, -999) = NVL(gt.account_ccid, -999)
6007 AND gt1.rec_nrec_tax_amt = gt.rec_nrec_tax_amt
6008 AND gt1.trx_line_dist_amt = gt.trx_line_dist_amt -- bug 6709478
6009 AND gt1.trx_line_dist_tax_amt = gt.trx_line_dist_tax_amt -- bug 6709478
6010 AND gt1.rec_nrec_tax_dist_number < gt.rec_nrec_tax_dist_number
6011 AND gt1.freeze_flag = 'Y'
6012 AND gt1.reverse_flag = 'Y'
6013 )
6014 );
6015
6016 END IF;
6017
6018 -- This will take care that one set should not deleted.
6019 -- Both the negetive and positive additional distributions should be deleted.
6020
6021 IF l_rec_nrec_tax_Dist_id_tbl1.COUNT > 0 AND l_rec_nrec_tax_Dist_id_tbl2.COUNT > 0 THEN
6022
6023 FORALL j in l_rec_nrec_tax_Dist_id_tbl1.FIRST .. l_rec_nrec_tax_Dist_id_tbl1.LAST
6024 DELETE FROM zx_rec_nrec_dist_gt
6025 WHERE rec_nrec_tax_dist_id IN l_rec_nrec_tax_Dist_id_tbl1(j);
6026
6027 FORALL j in l_rec_nrec_tax_Dist_id_tbl2.FIRST .. l_rec_nrec_tax_Dist_id_tbl2.LAST
6028 DELETE FROM zx_rec_nrec_dist_gt
6029 WHERE rec_nrec_tax_dist_id IN l_rec_nrec_tax_Dist_id_tbl2(j);
6030
6031 END IF;
6032
6033 IF l_reversed_tax_dist_id_tbl.COUNT > 0 AND l_rec_nrec_tax_Dist_id_tbl1.count > 0
6034 AND l_rec_nrec_tax_Dist_id_tbl2.COUNT > 0 THEN
6035
6036 FORALL i IN l_reversed_tax_dist_id_tbl.FIRST .. l_reversed_tax_dist_id_tbl.LAST
6037 UPDATE zx_rec_nrec_dist_gt gt
6038 SET reverse_flag = 'N'
6039 WHERE rec_nrec_tax_dist_id = l_reversed_tax_dist_id_tbl(i);
6040
6041 END IF;
6042
6043
6044 IF (g_level_procedure >= g_current_runtime_level ) THEN
6045 FND_LOG.STRING(g_level_procedure,
6046 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.delete_unnecessary_tax_dists.END',
6047 'ZX_TRD_SERVICES_PUB_PKG.delete_unnecessary_tax_dists(-)');
6048 END IF;
6049
6050 EXCEPTION
6051 WHEN OTHERS THEN
6052 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6053
6054 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6055 FND_LOG.STRING(g_level_unexpected,
6056 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.delete_unnecessary_tax_dists',
6057 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
6058 FND_LOG.STRING(g_level_unexpected,
6059 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.delete_unnecessary_tax_dists.END',
6060 'ZX_TRD_SERVICES_PUB_PKG.delete_unnecessary_tax_dists(-)');
6061 END IF;
6062
6063 END delete_unnecessary_tax_dists;
6064
6065 PROCEDURE update_posting_flag(
6066 p_tax_dist_id_tbl IN ZX_API_PUB.tax_dist_id_tbl_type,
6067 x_return_status OUT NOCOPY VARCHAR2) IS
6068
6069 l_error_buffer VARCHAR2(200);
6070
6071 BEGIN
6072
6073 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6074
6075 IF (g_level_procedure >= g_current_runtime_level ) THEN
6076 FND_LOG.STRING(g_level_procedure,
6077 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.update_posting_flag.BEGIN',
6078 'ZX_TRD_SERVICES_PUB_PKG.update_posting_flag(+)');
6079 END IF;
6080
6081 x_return_status:= FND_API.G_RET_STS_SUCCESS;
6082
6083 FORALL i IN NVL(p_tax_dist_id_tbl.FIRST, 0) .. NVL(p_tax_dist_id_tbl.LAST, -1)
6084 UPDATE ZX_Rec_Nrec_Dist
6085 SET posting_flag = 'A'
6086 WHERE rec_nrec_tax_dist_id = p_tax_dist_id_tbl(i);
6087
6088 IF (g_level_procedure >= g_current_runtime_level ) THEN
6089 FND_LOG.STRING(g_level_procedure,
6090 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.update_posting_flag.END',
6091 'ZX_TRD_SERVICES_PUB_PKG.update_posting_flag(-)');
6092 END IF;
6093
6094 EXCEPTION
6095 WHEN OTHERS THEN
6096 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6097 l_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6098
6099 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6100 FND_LOG.STRING(g_level_unexpected,
6101 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.update_posting_flag',
6102 l_error_buffer);
6103 FND_LOG.STRING(g_level_unexpected,
6104 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.update_posting_flag.END',
6105 'ZX_TRD_SERVICES_PUB_PKG.ZX_TRD_SERVICES_PUB_PKG(-)');
6106 END IF;
6107
6108 END update_posting_flag;
6109
6110 PROCEDURE get_tax_jurisdiction_id(
6111 p_tax_line_id IN NUMBER,
6112 p_tax_rate_id IN NUMBER,
6113 p_tax_jurisdiction_id OUT NOCOPY NUMBER,
6114 x_return_status OUT NOCOPY VARCHAR2) IS
6115
6116 l_error_buffer VARCHAR2(200);
6117
6118 Cursor line_acc_src_tax_rate_id(p_tax_line_id IN NUMBER) is
6119 select account_source_tax_rate_id
6120 from zx_lines
6121 where tax_line_id = p_tax_line_id;
6122
6123 Cursor get_location_id(c_tax_line_id number) is
6124 SELECT det.ship_to_location_id,det.ship_from_location_id,
6125 det.bill_to_location_id,det.bill_from_location_id,det.trx_date
6126 FROM zx_lines_det_factors det, zx_lines
6127 WHERE det.trx_id = zx_lines.trx_id
6128 and det.trx_line_id = zx_lines.trx_line_id
6129 and det.application_id = zx_lines.application_id
6130 and det.entity_code = zx_lines.entity_code
6131 and det.event_class_code = zx_lines.event_class_code
6132 and zx_lines.tax_line_id = c_tax_line_id;
6133
6134 Cursor get_geography_type(c_tax_rate_id number) is
6135 SELECT zone_geography_type,tax,tax_regime_code
6136 FROM ZX_SCO_TAXES_B_V
6137 WHERE (tax_regime_code,tax) =
6138 (SELECT tax_regime_code,tax from ZX_SCO_RATES_B_V
6139 WHERE tax_rate_id = c_tax_rate_id);
6140
6141 Cursor is_jurisdiction_acc_appl(c_tax_line_id number) is
6142 SELECT Count(*)
6143 FROM zx_lines
6144 WHERE tax_line_id = c_tax_line_id
6145 AND tax_provider_id IS NOT NULL;
6146
6147 l_content_owner_id NUMBER;
6148 l_tax_id NUMBER;
6149 l_acc_src_tax_rate_id NUMBER;
6150 l_tax_rate_id NUMBER;
6151 l_location_id NUMBER;
6152 l_ship_to_location_id NUMBER;
6153 l_ship_from_location_id NUMBER;
6154 l_bill_to_location_id NUMBER;
6155 l_bill_from_location_id NUMBER;
6156 l_place_of_supply_type_code VARCHAR2(100);
6157 l_trx_date DATE;
6158 l_location_type VARCHAR2(100);
6159 l_geography_type VARCHAR2(100);
6160 l_tax VARCHAR2(100);
6161 l_tax_regime_code VARCHAR2(100);
6162 l_inner_city_jurisdiction_flag VARCHAR2(1);
6163 l_geography_id NUMBER;
6164 l_zone_tbl HZ_GEO_GET_PUB.zone_tbl_type;
6165 l_lines_count NUMBER;
6166
6167 x_geography_id HZ_GEOGRAPHIES.geography_id%TYPE;
6168 x_geography_code HZ_GEOGRAPHIES.geography_code%TYPE;
6169 x_geography_name HZ_GEOGRAPHIES.geography_name%TYPE;
6170 l_geo_use_count NUMBER;
6171
6172 l_jursidiction_id_indx BINARY_INTEGER;
6173
6174 BEGIN
6175
6176 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6177
6178 IF (g_level_procedure >= g_current_runtime_level ) THEN
6179
6180 FND_LOG.STRING(g_level_procedure,
6181 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.BEGIN',
6182 'ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID(+)');
6183
6184 END IF;
6185
6186 x_return_status := FND_API.G_RET_STS_SUCCESS;
6187 p_tax_jurisdiction_id := NULL;
6188
6189 open is_jurisdiction_acc_appl(p_tax_line_id);
6190 fetch is_jurisdiction_acc_appl into l_lines_count;
6191 close is_jurisdiction_acc_appl;
6192
6193 IF l_lines_count = 0 THEN
6194 IF (g_level_procedure >= g_current_runtime_level ) THEN
6195 FND_LOG.STRING(g_level_procedure,
6196 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.BEGIN',
6197 'This processing is done only for partner tax calculation, this is not partner processing');
6198 FND_LOG.STRING(g_level_procedure,
6199 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_OUTPUT_TAX_CCID.BEGIN',
6200 'ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID(-)');
6201 END IF;
6202 RETURN;
6203 END IF;
6204
6205 open get_location_id(p_tax_line_id);
6206 fetch get_location_id into l_ship_to_location_id, l_ship_from_location_id,
6207 l_bill_to_location_id, l_bill_from_location_id, l_trx_date;
6208 close get_location_id;
6209
6210 -- deriving the location_id and location_type
6211 IF l_ship_to_location_id is not NULL then
6212 l_location_id := l_ship_to_location_id;
6213 l_location_type := 'SHIP_TO';
6214 ELSIF l_bill_to_location_id IS NOT NULL THEN
6215 l_location_id := l_bill_to_location_id;
6216 l_location_type := 'BILL_TO';
6217 ELSIF l_bill_from_location_id IS NOT NULL THEN
6218 l_location_id := l_bill_from_location_id;
6219 l_location_type := 'BILL_FROM';
6220 ELSIF l_ship_from_location_id IS NOT NULL THEN
6221 l_location_id := l_bill_from_location_id;
6222 l_location_type := 'SHIP_FROM';
6223 ELSE
6224 l_location_id := NULL;
6225 l_location_type := NULL;
6226 END IF;
6227
6228 l_jursidiction_id_indx := dbms_utility.get_hash_value(to_char(l_location_id)|| l_location_type,1,8192);
6229
6230 IF l_location_id is not null then
6231
6232 IF l_jursidiction_id_tbl.EXISTS(l_jursidiction_id_indx)
6233 AND l_jursidiction_id_tbl(l_jursidiction_id_indx).location_id = l_location_id
6234 AND l_jursidiction_id_tbl(l_jursidiction_id_indx).location_type = l_location_type THEN
6235 p_tax_jurisdiction_id := l_jursidiction_id_tbl(l_jursidiction_id_indx).tax_jurisdiction_id;
6236 ELSE
6237 --fetching the l_acc_src_tax_rate_id for the tax line
6238 open line_acc_src_tax_rate_id(p_tax_line_id);
6239 fetch line_acc_src_tax_rate_id into l_acc_src_tax_rate_id;
6240 close line_acc_src_tax_rate_id;
6241
6242 -- getting geography type based on the acc_src_tax_rate_id if it is not null
6243 -- otherwise deriving it from tax_rate_id
6244 IF l_acc_src_tax_rate_id is not null then
6245 open get_geography_type(l_acc_src_tax_rate_id);
6246 fetch get_geography_type into l_geography_type,l_tax,l_tax_regime_code;
6247 close get_geography_type;
6248
6249 ELSE --l_acc_src_tax_rate_id is null
6250 open get_geography_type(p_tax_rate_id);
6251 fetch get_geography_type into l_geography_type,l_tax,l_tax_regime_code;
6252 close get_geography_type;
6253
6254 END IF; --l_acc_src_tax_rate_id is not null
6255
6256 SELECT count(1)
6257 INTO l_geo_use_count
6258 FROM hz_geography_types_b
6259 WHERE geography_type = l_geography_type
6260 AND geography_use <> 'MASTER_REF'
6261 AND rownum = 1;
6262
6263 IF l_geography_type IS NOT NULL THEN
6264 IF l_geo_use_count = 0 THEN
6265 ZX_TCM_GEO_JUR_PKG.get_master_geography(
6266 l_location_id,
6267 l_location_type,
6268 l_geography_type,
6269 x_geography_id,
6270 x_geography_code,
6271 x_geography_name,
6272 x_return_status);
6273 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6274 IF (g_level_statement >= g_current_runtime_level ) THEN
6275 FND_LOG.STRING(g_level_statement,
6276 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID',
6277 'Incorrect return_status after calling ' ||
6278 'ZX_TCM_GEO_JUR_PKG.get_master_geography');
6279 FND_LOG.STRING(g_level_statement,
6280 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID',
6281 'RETURN_STATUS = ' || x_return_status);
6282 FND_LOG.STRING(g_level_statement,
6283 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID.END',
6284 'ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID(-)');
6285 END IF;
6286 RETURN;
6287 END IF;
6288
6289 ELSE
6290 ZX_TCM_GEO_JUR_PKG.get_zone(
6291 l_location_id,
6292 l_location_type,
6293 l_geography_type,
6294 l_trx_date,
6295 l_zone_tbl,
6296 -----l_geography_id(i),
6297 x_return_status);
6298 IF x_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6299 IF (g_level_statement >= g_current_runtime_level ) THEN
6300 FND_LOG.STRING(g_level_statement,
6301 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID',
6302 'Incorrect return_status after calling ' ||
6303 'ZX_TCM_GEO_JUR_PKG.get_zone');
6304 FND_LOG.STRING(g_level_statement,
6305 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID',
6306 'RETURN_STATUS = ' || x_return_status);
6307 FND_LOG.STRING(g_level_statement,
6308 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID.END',
6309 'ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID(-)');
6310 END IF;
6311 RETURN;
6312 END IF;
6313
6314 END IF;
6315 IF l_zone_tbl.count > 0 THEN
6316 FOR j in l_zone_tbl.first..l_zone_tbl.last LOOP
6317 l_geography_id := l_zone_tbl(j).zone_id;
6318 BEGIN
6319 SELECT tax_jurisdiction_id
6320 INTO p_tax_jurisdiction_id
6321 FROM zx_jurisdictions_b
6322 WHERE effective_from <= l_trx_date
6323 AND (effective_to >= l_trx_date or effective_to is null)
6324 AND tax = l_tax
6325 AND tax_regime_code = l_tax_regime_code
6326 AND zone_geography_id = l_geography_id
6327 AND (nvl(inner_city_jurisdiction_flag,'xx') = nvl(l_inner_city_jurisdiction_flag, 'xx') OR
6328 (inner_city_jurisdiction_flag is null and l_inner_city_jurisdiction_flag is not null) OR
6329 (inner_city_jurisdiction_flag is not null and l_inner_city_jurisdiction_flag is null));
6330 EXCEPTION
6331 WHEN OTHERS THEN
6332 NULL;
6333 END;
6334
6335 END LOOP;
6336 END IF;
6337 IF x_geography_id IS NOT NULL THEN
6338 l_geography_id := x_geography_id;
6339 BEGIN
6340 SELECT tax_jurisdiction_id
6341 INTO p_tax_jurisdiction_id
6342 FROM zx_jurisdictions_b
6343 WHERE effective_from <= l_trx_date
6344 AND (effective_to >= l_trx_date or effective_to is null)
6345 AND tax = l_tax
6346 AND tax_regime_code = l_tax_regime_code
6347 AND zone_geography_id = l_geography_id
6348 AND (nvl(inner_city_jurisdiction_flag,'xx') = nvl(l_inner_city_jurisdiction_flag, 'xx') OR
6349 (inner_city_jurisdiction_flag is null and l_inner_city_jurisdiction_flag is not null) OR
6350 (inner_city_jurisdiction_flag is not null and l_inner_city_jurisdiction_flag is null));
6351 EXCEPTION
6352 WHEN OTHERS THEN
6353 NULL;
6354 END;
6355 END IF;
6356 END IF;
6357 END IF; --l_location_id is not null
6358
6359 l_jursidiction_id_tbl(l_jursidiction_id_indx).location_id := l_location_id;
6360 l_jursidiction_id_tbl(l_jursidiction_id_indx).location_type := l_location_type;
6361 l_jursidiction_id_tbl(l_jursidiction_id_indx).tax_jurisdiction_id := p_tax_jurisdiction_id;
6362
6363 END IF; -- caching end
6364
6365 IF (g_level_procedure >= g_current_runtime_level ) THEN
6366 FND_LOG.STRING(g_level_procedure,
6367 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID.END',
6368 'ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID(-)');
6369 END IF;
6370
6371 EXCEPTION
6372 WHEN OTHERS THEN
6373 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6374 l_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6375
6376 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6377 FND_LOG.STRING(g_level_unexpected,
6378 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID',
6379 l_error_buffer);
6380 FND_LOG.STRING(g_level_unexpected,
6381 'ZX.PLSQL.ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID.END',
6382 'ZX_TRD_SERVICES_PUB_PKG.GET_TAX_JURISDICTION_ID(-)');
6383 END IF;
6384
6385 END get_tax_jurisdiction_id;
6386
6387 -- Constructor
6388 BEGIN
6389
6390 l_regime_not_effective :=fnd_message.get_string('ZX','ZX_REGIME_NOT_EFFECTIVE' );
6391 l_tax_not_effective :=fnd_message.get_string('ZX','ZX_TAX_NOT_EFFECTIVE' );
6392 l_tax_status_not_effective :=fnd_message.get_string('ZX','ZX_TAX_STATUS_NOT_EFFECTIVE' );
6393 l_tax_rate_not_effective :=fnd_message.get_string('ZX','ZX_TAX_RATE_NOT_EFFECTIVE' );
6394 l_tax_rate_not_active :=fnd_message.get_string('ZX','ZX_TAX_RATE_NOT_ACTIVE' );
6395 l_tax_rate_percentage_invalid :=fnd_message.get_string('ZX','ZX_TAX_RATE_PERCENTAGE_INVALID' );
6396 l_jur_code_not_effective :=fnd_message.get_string('ZX','ZX_JUR_CODE_NOT_EFFECTIVE' );
6397
6398 END ZX_TRD_SERVICES_PUB_PKG ;