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