[Home] [Help]
PACKAGE BODY: APPS.ZX_TDS_RULE_BASE_DETM_PVT
Source
1 package body ZX_TDS_RULE_BASE_DETM_PVT as
2 /* $Header: zxdirulenginpvtb.pls 120.163.12020000.4 2013/02/22 10:00:41 srajapar noship $ */
3
4
5 PROCEDURE get_tsrm_parameter_value(
6 p_structure_name IN VARCHAR2,
7 p_structure_index IN BINARY_INTEGER,
8 p_condition_index IN BINARY_INTEGER,
9 p_numeric_value OUT NOCOPY ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
10 p_alphanum_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
11 p_date_value OUT NOCOPY ZX_CONDITIONS.DATE_VALUE%TYPE,
12 p_return_status OUT NOCOPY VARCHAR2,
13 p_error_buffer OUT NOCOPY VARCHAR2);
14
15 PROCEDURE get_fsc_code(
16 p_found IN OUT NOCOPY BOOLEAN,
17 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
18 p_classification_category IN
19 ZX_FC_TYPES_B.Classification_Type_Categ_Code%TYPE,
20 p_classification_type IN
21 ZX_FC_TYPES_B.CLASSIFICATION_TYPE_CODE%TYPE,
22 p_tax_determine_date IN
23 ZX_LINES.TAX_DETERMINE_DATE%TYPE,
24 p_classified_entity_id IN
25 ZX_FC_CODES_B.CLASSIFICATION_ID%TYPE,
26 p_item_org_id IN NUMBER,
27 p_application_id IN NUMBER,
28 p_event_class_code IN VARCHAR2,
29 p_condition_value IN ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
30 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE);
31
32 PROCEDURE get_fc(
33 p_structure_name IN VARCHAR2,
34 p_structure_index IN BINARY_INTEGER,
35 p_condition_index IN BINARY_INTEGER,
36 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
37 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
38 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
39 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
40 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
41 p_return_status OUT NOCOPY VARCHAR2,
42 p_error_buffer OUT NOCOPY VARCHAR2);
43
44 PROCEDURE get_registration_status(
45 p_structure_name IN VARCHAR2,
46 p_structure_index IN BINARY_INTEGER,
47 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
48 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
49 p_tax IN ZX_TAXES_B.TAX%TYPE,
50 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
51 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
52 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
53 p_return_status OUT NOCOPY VARCHAR2,
54 p_error_buffer OUT NOCOPY VARCHAR2);
55
56 PROCEDURE process_segment_string(
57 p_account_string IN VARCHAR2,
58 p_chart_of_accounts_id IN
59 ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
60 p_return_status OUT NOCOPY VARCHAR2,
61 p_error_buffer OUT NOCOPY VARCHAR2);
62
63 PROCEDURE get_account_flexfield_info(
64 p_structure_name IN VARCHAR2,
65 p_structure_index IN BINARY_INTEGER,
66 p_condition_index IN BINARY_INTEGER,
67 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
68 p_chart_of_accounts_id IN
69 ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
70 p_sob_id IN
71 ZX_CONDITION_GROUPS_B.LEDGER_ID%TYPE,
72 p_return_status OUT NOCOPY VARCHAR2,
73 p_error_buffer OUT NOCOPY VARCHAR2);
74
75 PROCEDURE get_geography_info(
76 p_structure_name IN VARCHAR2,
77 p_structure_index IN BINARY_INTEGER,
78 p_condition_index IN BINARY_INTEGER,
79 p_zone_tbl OUT NOCOPY HZ_GEO_GET_PUB.zone_tbl_type,
80 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
81 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
82 p_return_status OUT NOCOPY VARCHAR2,
83 p_error_buffer OUT NOCOPY VARCHAR2);
84
85 -- Bug#4591207
86 PROCEDURE get_master_geography_info(
87 p_structure_name IN VARCHAR2,
88 p_structure_index IN BINARY_INTEGER,
89 p_condition_index IN BINARY_INTEGER,
90 p_trx_numeric_value OUT NOCOPY ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
91 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
92 p_return_status OUT NOCOPY VARCHAR2,
93 p_error_buffer OUT NOCOPY VARCHAR2);
94
95 /* Bugfix 3673395 - Since the list of Determining factors related
96 to PRODUCT : ITEM_TAXABILITY_OVERRIDE and TAX_CLASSIFICATION
97 and PARTY : ESTB_TAX_CLASSIFICATION
98 are replaced by defaulting APIs, we no longer require the following procedures
99 - get_tax_info_from_item
100 - get_product_tax_info
101 - get get_party_tax_info
102
103 PROCEDURE get_tax_info_from_item(
104 p_product_id IN MTL_SYSTEM_ITEMS.INVENTORY_ITEM_ID%TYPE,
105 p_item_org_id IN MTL_SYSTEM_ITEMS.ORGANIZATION_ID%TYPE,
106 p_determining_factor_code IN ZX_CONDITIONS.DETERMINING_FACTOR_CODE%TYPE,
107 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
108 p_return_status OUT NOCOPY VARCHAR2,
109 p_error_buffer OUT NOCOPY VARCHAR2);
110
111 PROCEDURE get_product_tax_info(
112 p_structure_name IN VARCHAR2,
113 p_structure_index IN BINARY_INTEGER,
114 p_determining_factor_code IN ZX_CONDITIONS.DETERMINING_FACTOR_CODE%TYPE,
115 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
116 p_return_status OUT NOCOPY VARCHAR2,
117 p_error_buffer OUT NOCOPY VARCHAR2);
118
119 PROCEDURE get_party_tax_info(
120 p_structure_name IN VARCHAR2,
121 p_structure_index IN BINARY_INTEGER,
122 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
123 p_determining_factor_code IN ZX_CONDITIONS.DETERMINING_FACTOR_CODE%TYPE,
124 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
125 p_return_status OUT NOCOPY VARCHAR2,
126 p_error_buffer OUT NOCOPY VARCHAR2);
127 */
128 PROCEDURE get_trx_value(
129 p_structure_name IN VARCHAR2,
130 p_structure_index IN BINARY_INTEGER,
131 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
132 p_condition_index IN BINARY_INTEGER,
133 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
134 p_tax IN ZX_TAXES_B.TAX%TYPE,
135 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
136 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
137 p_numeric_value OUT NOCOPY ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
138 p_alphanum_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
139 p_date_value OUT NOCOPY ZX_CONDITIONS.DATE_VALUE%TYPE,
140 p_chart_of_accounts_id IN
141 ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
142 p_sob_id IN
143 ZX_CONDITION_GROUPS_B.LEDGER_ID%TYPE,
144 p_return_status OUT NOCOPY VARCHAR2,
145 p_error_buffer OUT NOCOPY VARCHAR2);
146
147
148 PROCEDURE evaluate_trx_value_tbl(
149 p_structure_name IN VARCHAR2,
150 p_structure_index IN BINARY_INTEGER,
151 p_condition_index IN BINARY_INTEGER,
152 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
153 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
154 p_chart_of_accounts_id IN ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
155 p_result IN OUT NOCOPY BOOLEAN,
156 p_return_status OUT NOCOPY VARCHAR2,
157 p_error_buffer OUT NOCOPY VARCHAR2);
158
159 PROCEDURE get_user_item_type_value(
160 p_structure_name IN VARCHAR2,
161 p_structure_index IN BINARY_INTEGER,
162 p_condition_index IN BINARY_INTEGER,
163 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
164 p_numeric_value OUT NOCOPY ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
165 p_alphanum_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
166 p_return_status OUT NOCOPY VARCHAR2,
167 p_error_buffer OUT NOCOPY VARCHAR2);
168
169 PROCEDURE get_user_item_alphanum_value(
170 p_structure_name IN VARCHAR2,
171 p_structure_index IN BINARY_INTEGER,
172 p_parameter_code IN ZX_PARAMETERS_B.TAX_PARAMETER_CODE%TYPE,
173 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
174 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
175 p_return_status OUT NOCOPY VARCHAR2,
176 p_error_buffer OUT NOCOPY VARCHAR2);
177
178 FUNCTION evaluate_date_condition(
179 p_Operator_Code IN ZX_CONDITIONS.Operator_Code%TYPE,
180 p_condition_value IN ZX_CONDITIONS.DATE_VALUE%TYPE,
181 p_trx_value IN ZX_CONDITIONS.DATE_VALUE%TYPE)
182 RETURN BOOLEAN;
183
184 FUNCTION evaluate_numeric_condition(
185 p_Operator_Code IN ZX_CONDITIONS.Operator_Code%TYPE,
186 p_condition_value IN ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
187 p_trx_value IN ZX_CONDITIONS.NUMERIC_VALUE%TYPE)
188 RETURN BOOLEAN;
189
190 FUNCTION evaluate_alphanum_condition(
191 p_Operator_Code IN ZX_CONDITIONS.Operator_Code%TYPE,
192 p_condition_value IN ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
193 p_trx_value IN ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
194 p_value_low IN ZX_CONDITIONS.VALUE_LOW%TYPE,
195 p_value_high IN ZX_CONDITIONS.VALUE_HIGH%TYPE,
196 p_det_factor_templ_code IN ZX_DET_FACTOR_TEMPL_B.DET_FACTOR_TEMPL_CODE%TYPE,
197 p_chart_of_accounts_id IN ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE)
198 RETURN BOOLEAN;
199
200 PROCEDURE evaluate_condition(
201 p_condition_index IN BINARY_INTEGER,
202 p_trx_alphanumeric_value IN ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
203 p_trx_numeric_value IN ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
204 p_trx_date_value IN ZX_CONDITIONS.DATE_VALUE%TYPE,
205 p_chart_of_accounts_id IN ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
206 p_result OUT NOCOPY BOOLEAN,
207 p_return_status OUT NOCOPY VARCHAR2,
208 p_error_buffer OUT NOCOPY VARCHAR2);
209
210 PROCEDURE check_condition_group_result(
211 p_det_factor_templ_code IN ZX_DET_FACTOR_TEMPL_B.DET_FACTOR_TEMPL_CODE%TYPE,
212 p_condition_group_code IN ZX_CONDITION_GROUPS_B.CONDITION_GROUP_CODE%TYPE,
213 p_trx_line_index IN BINARY_INTEGER,
214 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
215 p_template_evaluated OUT NOCOPY BOOLEAN,
216 p_result OUT NOCOPY BOOLEAN);
217
218 PROCEDURE insert_condition_group_result(
219 p_det_factor_templ_code IN ZX_DET_FACTOR_TEMPL_B.DET_FACTOR_TEMPL_CODE%TYPE,
220 p_condition_group_code IN ZX_CONDITION_GROUPS_B.CONDITION_GROUP_CODE%TYPE,
221 p_result IN BOOLEAN,
222 p_trx_line_index IN BINARY_INTEGER,
223 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE);
224
225 PROCEDURE get_result(
226 p_result_id IN ZX_PROCESS_RESULTS.RESULT_ID%TYPE,
227 p_structure_name IN VARCHAR2,
228 p_structure_index IN BINARY_INTEGER,
229 p_tax_regime_code IN ZX_RATES_B.tax_regime_Code%TYPE,
230 p_tax IN ZX_RATES_B.tax%TYPE,
231 p_tax_determine_date IN DATE,
232 p_found IN OUT NOCOPY BOOLEAN,
233 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
234 p_return_status OUT NOCOPY VARCHAR2,
235 p_error_buffer OUT NOCOPY VARCHAR2);
236
237 PROCEDURE init_set_condition;
238
239 PROCEDURE get_set_info (p_hash_val IN VARCHAR2,
240 p_rec_pointer IN NUMBER);
241
242 PROCEDURE process_set_condition (
243 p_structure_name IN VARCHAR2,
244 p_structure_index IN BINARY_INTEGER,
245 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
246 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
247 p_tax IN ZX_TAXES_B.TAX%TYPE,
248 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
249 p_result IN OUT NOCOPY BOOLEAN,
250 p_chart_of_accounts_id IN
251 ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
252 p_sob_id IN
253 ZX_CONDITION_GROUPS_B.LEDGER_ID%TYPE,
254 p_return_status OUT NOCOPY VARCHAR2,
255 p_error_buffer OUT NOCOPY VARCHAR2);
256
257
258 PROCEDURE get_and_process_condition(
259 p_structure_name IN VARCHAR2,
260 p_structure_index IN BINARY_INTEGER,
261 p_condition_group_code IN ZX_CONDITION_GROUPS_B.CONDITION_GROUP_CODE%TYPE,
262 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
263 p_tax IN ZX_TAXES_B.TAX%TYPE,
264 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
265 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
266 p_result IN OUT NOCOPY BOOLEAN,
267 p_chart_of_accounts_id IN
268 ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
269 p_sob_id IN
270 ZX_CONDITION_GROUPS_B.LEDGER_ID%TYPE,
271 p_return_status OUT NOCOPY VARCHAR2,
272 p_error_buffer OUT NOCOPY VARCHAR2);
273
274
275 PROCEDURE proc_condition_group_per_templ(
276 p_structure_name IN VARCHAR2,
277 p_structure_index IN BINARY_INTEGER,
278 p_det_factor_templ_code IN
279 ZX_DET_FACTOR_TEMPL_B.DET_FACTOR_TEMPL_CODE%TYPE,
280 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
281 p_tax IN ZX_TAXES_B.TAX%TYPE,
282 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
283 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
284 p_service_type_code IN ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
285 p_tax_rule_id IN ZX_RULES_B.TAX_RULE_ID%TYPE,
286 p_tax_status_code IN ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
287 p_result IN OUT NOCOPY BOOLEAN,
288 p_result_id IN OUT NOCOPY NUMBER,
289 p_found IN OUT NOCOPY BOOLEAN ,
290 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
291 p_return_status OUT NOCOPY VARCHAR2,
292 p_error_buffer OUT NOCOPY VARCHAR2);
293
294 PROCEDURE proc_det_factor_templ(
295 p_structure_name IN VARCHAR2,
296 p_structure_index IN BINARY_INTEGER,
297 p_det_factor_templ_cd_tbl IN DET_FACTOR_TEMPL_CODE_TBL,
298 p_tax_status_code IN ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
299 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
300 p_tax_tbl IN TAX_TBL,
301 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
302 p_recovery_type_code IN ZX_RULES_B.RECOVERY_TYPE_CODE%TYPE,
303 p_found IN OUT NOCOPY BOOLEAN,
304 p_tax_regime_code_tbl IN TAX_REGIME_CODE_TBL,
305 p_service_type_code IN ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
306 p_tax_rule_id_tbl IN TAX_RULE_ID_TBL,
307 p_rule_det_factor_cq_tbl IN RULE_DET_FACTOR_CQ_TBL,
308 p_rule_geography_type_tbl IN RULE_GEOGRAPHY_TYPE_TBL,
309 p_rule_geography_id_tbl IN RULE_GEOGRAPHY_ID_TBL,
310 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
311 p_return_status OUT NOCOPY VARCHAR2,
312 p_error_buffer OUT NOCOPY VARCHAR2);
313
314 PROCEDURE process_rule_code(
315 p_service_type_code IN ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
316 p_structure_name IN VARCHAR2,
317 p_structure_index IN BINARY_INTEGER,
318 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
319 p_tax IN ZX_TAXES_B.TAX%TYPE,
320 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
321 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
322 p_tax_status_code IN ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
323 p_tax_rule_code IN ZX_RULES_B.TAX_RULE_CODE%TYPE,
324 p_recovery_type_code IN ZX_RULES_B.RECOVERY_TYPE_CODE%TYPE,
325 p_found IN OUT NOCOPY BOOLEAN,
326 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
327 p_return_status OUT NOCOPY VARCHAR2,
328 p_error_buffer OUT NOCOPY VARCHAR2);
329
330
331 -- Bugfix 3673395 Added new procedure for evaluating Rules
332 -- Bugfix 4017396 Removed unwanted parameters
333 PROCEDURE fetch_proc_det_factor_templ(
334 p_structure_name IN VARCHAR2,
335 p_structure_index IN BINARY_INTEGER,
336 p_tax_status_code IN ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
337 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
338 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
339 p_recovery_type_code IN ZX_RULES_B.RECOVERY_TYPE_CODE%TYPE,
340 p_found IN OUT NOCOPY BOOLEAN,
341 p_service_type_code IN ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
342 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
343 p_tax IN ZX_TAXES_B.TAX%TYPE,
344 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
345 p_return_status OUT NOCOPY VARCHAR2,
346 p_error_buffer OUT NOCOPY VARCHAR2);
347
348 PROCEDURE get_rule_from_regime_hier(
349 p_service_type_code IN ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
350 p_structure_name IN VARCHAR2,
351 p_structure_index IN BINARY_INTEGER,
352 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
353 p_tax_status_code IN ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
354 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
355 p_recovery_type_code IN ZX_RULES_B.RECOVERY_TYPE_CODE%TYPE,
356 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
357 p_found IN OUT NOCOPY BOOLEAN,
358 p_parent_regime_cd_tbl IN TAX_REGIME_CODE_TBL,
359 p_return_status OUT NOCOPY VARCHAR2,
360 p_error_buffer OUT NOCOPY VARCHAR2);
361
362 -- Bug 4166241 : Added new private procedure to process only those templates
363 -- whose determining factors are supported by the product
364 PROCEDURE check_templ_tax_parameter(
365 p_det_factor_templ_code IN ZX_DET_FACTOR_TEMPL_B.det_factor_templ_code%TYPE,
366 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
367 p_valid OUT NOCOPY BOOLEAN,
368 p_return_status OUT NOCOPY VARCHAR2,
369 p_error_buffer OUT NOCOPY VARCHAR2);
370
371 PROCEDURE check_rule_geography(
372 p_structure_name IN VARCHAR2,
373 p_structure_index IN BINARY_INTEGER,
374 p_rule_det_factor_cq IN ZX_RULES_B.determining_factor_cq_code%TYPE,
375 p_rule_geography_type IN ZX_RULES_B.geography_type%TYPE,
376 p_rule_geography_id IN ZX_RULES_B.geography_id%TYPE,
377 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
378 p_valid OUT NOCOPY BOOLEAN,
379 p_return_status OUT NOCOPY VARCHAR2,
380 p_error_buffer OUT NOCOPY VARCHAR2);
381
382 g_current_runtime_level NUMBER;
383
384 g_level_statement CONSTANT NUMBER := FND_LOG.LEVEL_STATEMENT;
385 g_level_procedure CONSTANT NUMBER := FND_LOG.LEVEL_PROCEDURE;
386 g_level_event CONSTANT NUMBER := FND_LOG.LEVEL_EVENT;
387 g_level_unexpected CONSTANT NUMBER := FND_LOG.LEVEL_UNEXPECTED;
388 g_level_error CONSTANT NUMBER := FND_LOG.LEVEL_ERROR;
389
390 G_FSC_TBL_INSERT_POINTER NUMBER := 0;
391 G_FSC_TBL_MAX_SIZE CONSTANT NUMBER := 2048;
392
393 ----------------------------------------------------------------------
394 -- PRIVATE FUNCTION
395 -- OPTIMAL_FSC_TBL_LOCATION
396 --
397 -- DESCRIPTION
398 -- This function returns where data need to be inserted in FSC_TBL
399 -- The table size is limited by G_FSC_TBL_MAX_SIZE and we circularly
400 -- insert data into this PL/SQL table
401 --
402 -- History
403 --
404 -- Sridhar R 28-DEC-2009 Created
405 --
406 ----------------------------------------------------------------------
407 FUNCTION OPTIMAL_FSC_TBL_LOCATION RETURN NUMBER IS
408 l_count NUMBER;
409 BEGIN
410 IF G_FSC_TBL_INSERT_POINTER = 0 THEN
411 l_count := ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl.count;
412 IF l_count < G_FSC_TBL_MAX_SIZE THEN
413 RETURN l_count + 1;
414 ELSE
415 G_FSC_TBL_INSERT_POINTER := 1;
416 END IF;
417 ELSE
418 G_FSC_TBL_INSERT_POINTER := MOD(G_FSC_TBL_INSERT_POINTER,G_FSC_TBL_MAX_SIZE)+1;
419 END IF;
420 RETURN G_FSC_TBL_INSERT_POINTER;
421 END OPTIMAL_FSC_TBL_LOCATION;
422
423
424 ----------------------------------------------------------------------
425 -- PUBLIC PROCEDURE
426 -- init_cec_params
427 --
428 -- DESCRIPTION
429 -- This is called for Migrated Records only.
430 -- This procedure initializes parameters required for evaluating
431 -- Constraint, Condition Set and Exception Set
432 -- History
433 --
434 -- Sudhir Sekuri 01-MAR-04 Created
435 --
436 PROCEDURE init_cec_params(p_structure_name IN VARCHAR2,
437 p_structure_index IN BINARY_INTEGER,
438 p_return_status IN OUT NOCOPY VARCHAR2,
439 p_error_buffer IN OUT NOCOPY VARCHAR2) is
440
441 begin
442
443 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
444 IF (g_level_procedure >= g_current_runtime_level ) THEN
445 FND_LOG.STRING(g_level_procedure,
446 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.init_cec_params.BEGIN',
447 'ZX_TDS_RULE_BASE_DETM_PVT: init_cec_params (+)');
448 END IF;
449
450 p_return_status := FND_API.G_RET_STS_SUCCESS;
451
452 -- Fetch Ship To Party Site Id
453 -- (equivalent of arp_tax.tax_info_rec.ship_to_site_use_id)
454 get_tsrm_num_value(p_structure_name,
455 p_structure_index,
456 'SHIP_TO_PARTY_SITE_ID',
457 g_cec_ship_to_party_site_id,
458 p_return_status,
459 p_error_buffer);
460 -- Fetch Bill To Party Site Id
461 -- (equivalent of arp_tax.tax_info_rec.bill_to_site_use_id)
462 get_tsrm_num_value(p_structure_name,
463 p_structure_index,
464 'BILL_TO_PARTY_SITE_ID',
465 g_cec_bill_to_party_site_id,
466 p_return_status,
467 p_error_buffer);
468
469 -- Fetch Ship To Party Id
470 -- (equivalent of arp_tax.tax_info_rec.ship_to_cust_id)
471 get_tsrm_num_value(p_structure_name,
472 p_structure_index,
473 'SHIP_TO_PARTY_TAX_PROF_ID',
474 g_cec_ship_to_party_id,
475 p_return_status,
476 p_error_buffer);
477
478 -- Fetch Bill To Party Id
479 -- (equivalent of arp_tax.tax_info_rec.bill_to_cust_id)
480 get_tsrm_num_value(p_structure_name,
481 p_structure_index,
482 'BILL_TO_PARTY_TAX_PROF_ID',
483 g_cec_bill_to_party_id,
484 p_return_status,
485 p_error_buffer);
486
487 -- Fetch POO Location Id
488 get_tsrm_num_value(p_structure_name,
489 p_structure_index,
490 'POO_LOCATION_ID',
491 g_cec_poo_location_id,
492 p_return_status,
493 p_error_buffer);
494
495 -- Fetch POA Location Id
496 get_tsrm_num_value(p_structure_name,
497 p_structure_index,
498 'POA_LOCATION_ID',
499 g_cec_poa_location_id,
500 p_return_status,
501 p_error_buffer);
502
503 -- Fetch Trx Id
504 -- (equivalent of arp_tax.tax_info_rec.customer_trx_id)
505 get_tsrm_num_value(p_structure_name,
506 p_structure_index,
507 'TRX_ID',
508 g_cec_trx_id,
509 p_return_status,
510 p_error_buffer);
511
512 -- Fetch Trx Line Id
513 -- (equivalent of arp_tax.tax_info_rec.customer_trx_line_id)
514 get_tsrm_num_value(p_structure_name,
515 p_structure_index,
516 'TRX_LINE_ID',
517 g_cec_trx_line_id,
518 p_return_status,
519 p_error_buffer);
520
521 -- Fetch Ledger Id
522 -- (equivalent of arp_tax.sysinfo.sysparam.set_of_books_id)
523 get_tsrm_num_value(p_structure_name,
524 p_structure_index,
525 'LEDGER_ID',
526 g_cec_ledger_id,
527 p_return_status,
528 p_error_buffer);
529
530 -- Fetch Internal Organization Id
531 -- (equivalent of arp_tax.sysinfo.sysparam.org_id)
532 get_tsrm_num_value(p_structure_name,
533 p_structure_index,
534 'INTERNAL_ORGANIZATION_ID',
535 g_cec_internal_organization_id,
536 p_return_status,
537 p_error_buffer);
538
539 -- set the MO policy context with the internal org id
540 /* This call is not required because the code in ZX_TDS_PROCESS_CEC_PVT.evaluate_cec
541 accesses the base tables (_ALL) for all multi-org tables
542 IF MO_GLOBAL.get_current_org_id <> g_cec_internal_organization_id then
543 MO_GLOBAL.Set_Policy_Context('S', g_cec_internal_organization_id);
544 END IF;
545 */
546
547 -- Fetch SO Organization Id
548 -- (equivalent of arp_tax.profinfo.so_organization_id)
549 -- bug 16248458 getting value from OE_SYS_PARAMETERS package
550 -- g_cec_so_organization_id := oe_profile.value_specific('SO_ORGANIZATION_ID');
551 g_cec_so_organization_id := OE_SYS_PARAMETERS.value('MASTER_ORGANIZATION_ID', fnd_profile.value('DEFAULT_ORG_ID'));
552
553
554 -- Fetch Product Organization Id
555 -- (equivalent of arp_tax.tax_info_rec.ship_from_warehouse_id)
556 get_tsrm_num_value(p_structure_name,
557 p_structure_index,
558 'PRODUCT_ORG_ID',
559 g_cec_product_org_id,
560 p_return_status,
561 p_error_buffer);
562
563 -- Fetch Product Id
564 -- (equivalent of arp_tax.tax_info_rec.inventory_item_id)
565 get_tsrm_num_value(p_structure_name,
566 p_structure_index,
567 'PRODUCT_ID',
568 g_cec_product_id,
569 p_return_status,
570 p_error_buffer);
571
572 -- Fetch Trx Line Date
573 -- (equivalent of arp_tax.tax_info_rec.trx_date)
574 ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value (p_structure_name,
575 p_structure_index,
576 'TRX_LINE_DATE',
577 g_cec_trx_line_date,
578 p_return_status);
579
580 -- Fetch Transaction Type Id
581 -- (equivalent of arp_tax.tax_info_rec.trx_type_id)
582 get_tsrm_num_value(p_structure_name,
583 p_structure_index,
584 'RECEIVABLES_TRX_TYPE_ID',
585 g_cec_trx_type_id,
586 p_return_status,
587 p_error_buffer);
588
589 -- Fetch FOB Point
590 -- (equivalent of arp_tax.tax_info_rec.fob_point)
591 get_tsrm_alphanum_value(p_structure_name,
592 p_structure_index,
593 'FOB_POINT',
594 g_cec_fob_point,
595 p_return_status,
596 p_error_buffer);
597
598 -- Fetch Ship To Site Used Id
599 -- Bug 3719109
600 ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value (p_structure_name,
601 p_structure_index,
602 'SHIP_TO_CUST_ACCT_SITE_USE_ID',
603 g_cec_ship_to_site_use_id,
604 p_return_status);
605
606 -- Fetch Bill To Site Used Id
607 -- Bug 3719109
608 ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value (p_structure_name,
609 p_structure_index,
610 'BILL_TO_CUST_ACCT_SITE_USE_ID',
611 g_cec_bill_to_site_use_id,
612 p_return_status);
613 IF g_cec_ship_to_site_use_id IS NULL THEN
614 IF g_cec_bill_to_site_use_id IS NOT NULL THEN
615 g_cec_ship_to_party_site_id := g_cec_bill_to_party_site_id;
616 g_cec_ship_to_party_id := g_cec_bill_to_party_id;
617 g_cec_ship_to_site_use_id := g_cec_bill_to_site_use_id;
618 END IF;
619 END IF;
620
621 IF (g_level_procedure >= g_current_runtime_level ) THEN
622 FND_LOG.STRING(g_level_procedure,
623 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.init_cec_params.END',
624 'ZX_TDS_RULE_BASE_DETM_PVT: init_cec_params (-)');
625 END IF;
626 EXCEPTION
627 WHEN OTHERS THEN
628 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
629 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
630
631 IF (g_level_unexpected >= g_current_runtime_level ) THEN
632 FND_LOG.STRING(g_level_unexpected,
633 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.init_cec_params.END',
634 p_error_buffer);
635 END IF;
636
637 END init_cec_params;
638
639
640 ----------------------------------------------------------------------
641 -- PUBLIC PROCEDURE
642 -- rule_base_process
643 --
644 -- DESCRIPTION
645 --
646 -- This procedure is the entry point to Rule based engine, it goes
647 -- through all the rules for a given tax determination proccess.
648 -- It evaluates all condition groups of all determining factor templates defined
649 -- in a rule to determine a result of a given process.
650 --
651 --
652
653 PROCEDURE rule_base_process(
654 p_service_type_code IN ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
655 p_structure_name IN VARCHAR2,
656 p_structure_index IN BINARY_INTEGER,
657 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
658 p_tax_id IN ZX_TAXES_B.TAX_ID%TYPE,
659 p_tax_status_code IN ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
660 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
661 p_tax_rule_code IN ZX_RULES_B.TAX_RULE_CODE%TYPE,
662 p_recovery_type_code IN ZX_RULES_B.RECOVERY_TYPE_CODE%TYPE,
663 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
664 p_return_status OUT NOCOPY VARCHAR2,
665 p_error_buffer OUT NOCOPY VARCHAR2)
666
667 IS
668
669 l_det_factor_templ_cd_tbl DET_FACTOR_TEMPL_CODE_TBL;
670 l_found BOOLEAN;
671 l_tax ZX_TAXES_B.TAX%TYPE;
672 l_tax_regime_code ZX_REGIMES_B.TAX_REGIME_CODE%TYPE;
673 l_tax_tbl TAX_TBL;
674 l_tax_regime_code_tbl TAX_REGIME_CODE_TBL;
675 l_parent_regime_code_tbl TAX_REGIME_CODE_TBL;
676 l_tax_rule_id_tbl TAX_RULE_ID_TBL;
677 l_eval_ctr NUMBER;
678 --CR#4255160. Added new variables to store the Rule level Determining Factor CQ,
679 -- Geography type and Geography Id
680 l_rule_det_factor_cq_tbl RULE_DET_FACTOR_CQ_TBL;
681 l_rule_geography_type_tbl RULE_GEOGRAPHY_TYPE_TBL;
682 l_rule_geography_id_tbl RULE_GEOGRAPHY_ID_TBL;
683
684 l_source_event_class_code ZX_EVNT_CLS_MAPPINGS.EVENT_CLASS_CODE%TYPE;
685
686
687 --
688 -- cursor for getting determining factor templates from rules
689 -- for DET_TAX_RATE process
690 --
691 CURSOR get_det_factor_templ_csr_a
692 (c_service_type_code ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
693 c_tax ZX_TAXES_B.TAX%TYPE,
694 c_tax_regime_code ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
695 c_tax_determine_date ZX_LINES.TAX_DETERMINE_DATE%TYPE,
696 c_tax_status_code ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
697 c_reference_application_id ZX_RULES_B.APPLICATION_ID%TYPE,
698 c_event_class_mapping_id ZX_RULES_B.EVENT_CLASS_MAPPING_ID%TYPE,
699 c_tax_event_class_code ZX_RULES_B.TAX_EVENT_CLASS_CODE%TYPE
700 )
701 IS
702 SELECT TAX_RULE_ID,
703 TAX,
704 TAX_REGIME_CODE,
705 DET_FACTOR_TEMPL_CODE,
706 DETERMINING_FACTOR_CQ_CODE,
707 GEOGRAPHY_TYPE,
708 GEOGRAPHY_ID
709 FROM ZX_SCO_RULES_B_V r
710 WHERE SERVICE_TYPE_CODE = c_service_type_code
711 AND TAX = c_tax -- In phase 1, tax and regime should not be NULL
712 AND TAX_REGIME_CODE = c_tax_regime_code
713 AND c_tax_determine_date >= EFFECTIVE_FROM
714 AND (c_tax_determine_date <= EFFECTIVE_TO OR
715 EFFECTIVE_TO IS NULL)
716 AND System_Default_Flag <> 'Y'
717 AND (APPLICATION_ID = c_reference_application_id OR
718 APPLICATION_ID IS NULL)
719 AND (EVENT_CLASS_MAPPING_ID = c_event_class_mapping_id OR
720 EVENT_CLASS_MAPPING_ID IS NULL)
721 AND (TAX_EVENT_CLASS_CODE = c_tax_event_class_code OR
722 TAX_EVENT_CLASS_CODE IS NULL)
723 AND Enabled_Flag = 'Y'
724 AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
725 FROM ZX_PROCESS_RESULTS pr
726 WHERE pr.TAX_RULE_ID = r.TAX_RULE_ID
727 AND TAX_STATUS_CODE = c_tax_status_code
728 AND pr.Enabled_Flag = 'Y'
729 AND rownum = 1
730 )
731 ORDER BY TAX, PRIORITY;
732
733 --
734 -- cursor for getting determining factor templates from rules
735 -- for DET_RECOVERY_RATE process
736 --
737 CURSOR get_det_factor_templ_csr_b
738 (c_service_type_code ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
739 c_tax ZX_TAXES_B.TAX%TYPE,
740 c_tax_regime_code ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
741 c_tax_determine_date ZX_LINES.TAX_DETERMINE_DATE%TYPE,
742 c_recovery_type_code ZX_RULES_B.RECOVERY_TYPE_CODE%TYPE,
743 c_reference_application_id ZX_RULES_B.APPLICATION_ID%TYPE,
744 c_event_class_mapping_id ZX_RULES_B.EVENT_CLASS_MAPPING_ID%TYPE,
745 c_tax_event_class_code ZX_RULES_B.TAX_EVENT_CLASS_CODE%TYPE)
746 IS
747 SELECT TAX_RULE_ID,
748 TAX,
749 TAX_REGIME_CODE,
750 DET_FACTOR_TEMPL_CODE ,
751 DETERMINING_FACTOR_CQ_CODE,
752 GEOGRAPHY_TYPE,
753 GEOGRAPHY_ID
754 FROM ZX_SCO_RULES_B_V r
755 WHERE SERVICE_TYPE_CODE = c_service_type_code
756 AND TAX = c_tax -- In phase 1, tax and regime should not be NULL
757 AND TAX_REGIME_CODE = c_tax_regime_code
758 AND c_tax_determine_date >= EFFECTIVE_FROM
759 AND (c_tax_determine_date <= EFFECTIVE_TO OR
760 EFFECTIVE_TO IS NULL)
761 AND System_Default_Flag <> 'Y'
762 AND RECOVERY_TYPE_CODE = c_recovery_type_code
763 AND (APPLICATION_ID = c_reference_application_id OR
764 APPLICATION_ID IS NULL)
765 AND (EVENT_CLASS_MAPPING_ID = c_event_class_mapping_id OR
766 EVENT_CLASS_MAPPING_ID IS NULL)
767 AND (TAX_EVENT_CLASS_CODE = c_tax_event_class_code OR
768 TAX_EVENT_CLASS_CODE IS NULL)
769 AND Enabled_Flag = 'Y'
770 AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
771 FROM ZX_PROCESS_RESULTS pr
772 WHERE pr.TAX_RULE_ID = r.TAX_RULE_ID
773 AND pr.Enabled_Flag = 'Y'
774 AND rownum = 1
775 )
776 ORDER BY TAX, PRIORITY;
777
778 --
779 -- cursor for getting determining factor templates from rules
780 -- for processes other than DET_RECOVERY_RATE and DET_TAX_RATE
781 --
782 /* Replaced the cursor for bug 3673395 : please see the following cursors in fetch_proc_det_factor_templ:
783 new get_det_factor_templ_csr_c,
784 new get_det_factor_templ_csr_d
785 new get_det_factor_templ_csr_e
786 */
787
788 /* CURSOR get_det_factor_templ_csr_c
789 (c_service_type_code ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
790 c_tax ZX_TAXES_B.TAX%TYPE,
791 c_tax_regime_code ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
792 c_tax_determine_date ZX_LINES.TAX_DETERMINE_DATE%TYPE,
793 c_reference_application_id ZX_RULES_B.APPLICATION_ID%TYPE)
794 IS
795 SELECT TAX_RULE_ID,
796 TAX,
797 TAX_REGIME_CODE,
798 DET_FACTOR_TEMPL_CODE,
799 DETERMINING_FACTOR_CQ_CODE,
800 GEOGRAPHY_TYPE,
801 GEOGRAPHY_ID
802 FROM ZX_SCO_RULES_B_V r
803 WHERE SERVICE_TYPE_CODE = c_service_type_code
804 AND TAX = c_tax -- In phase 1, tax and regime should not be NULL
805 AND TAX_REGIME_CODE = c_tax_regime_code
806 AND c_tax_determine_date >= EFFECTIVE_FROM
807 AND (c_tax_determine_date <= EFFECTIVE_TO OR
808 EFFECTIVE_TO IS NULL)
809 AND System_Default_Flag <> 'Y'
810 AND (APPLICATION_ID = c_reference_application_id OR
811 APPLICATION_ID IS NULL)
812 AND Enabled_Flag = 'Y'
813 AND EXISTS (SELECT result_id
814 FROM ZX_PROCESS_RESULTS pr
815 WHERE pr.TAX_RULE_ID = r.TAX_RULE_ID
816 AND pr.Enabled_Flag = 'Y')
817 ORDER BY TAX, PRIORITY;
818
819 */
820
821
822
823 --
824 -- cursor to get a parent regime code for a given tax regime
825 --
826 CURSOR get_regime_code_csr
827 (c_tax_regime_code ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
828 c_tax_determine_date ZX_LINES.TAX_DETERMINE_DATE%TYPE)
829 IS
830 SELECT PARENT_REGIME_CODE
831 FROM ZX_REGIME_RELATIONS
832 WHERE REGIME_CODE = c_tax_regime_code
833 -- AND c_tax_determine_date >= EFFECTIVE_FROM -- This effective period
834 -- AND (c_tax_determine_date <= EFFECTIVE_TO OR -- should be the same as
835 -- EFFECTIVE_TO IS NULL) -- the one in zx_regimes_b
836 ORDER BY PARENT_REG_LEVEL;
837
838 BEGIN
839
840 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
841
842 IF (g_level_procedure >= g_current_runtime_level ) THEN
843 FND_LOG.STRING(g_level_procedure,
844 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process.BEGIN',
845 'ZX_TDS_RULE_BASE_DETM_PVT: rule_base_process(+)');
846 IF (g_level_statement >= g_current_runtime_level ) THEN
847 FND_LOG.STRING(g_level_statement,
848 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
849 'p_service_type_code: ' || p_service_type_code ||
850 ', p_tax_id: ' || to_char(p_tax_id)||
851 ', p_tax_status_code: ' || p_tax_status_code ||
852 ', p_recovery_type_code: ' || p_recovery_type_code ||
853 ', p_tax_rule_code:' || p_tax_rule_code );
854
855 END IF;
856 END IF;
857
858 p_return_status := FND_API.G_RET_STS_SUCCESS;
859 l_found := FALSE;
860
861 --
862 -- check if tax_status_code is null for Tax rate determination
863 -- return error if it is null
864 --
865 IF (p_service_type_code = 'DET_TAX_RATE' AND
866 p_tax_status_code IS NULL) THEN
867 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
868 p_error_buffer := 'Tax status code can not be null for Rate Determination';
869
870 IF (g_level_error >= g_current_runtime_level ) THEN
871 FND_LOG.STRING(g_level_error,
872 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
873 'p_return_status = ' || p_return_status ||
874 ', p_error_buffer = ' || p_error_buffer);
875 END IF;
876
877 RETURN;
878 END IF;
879
880 IF (p_service_type_code = 'DET_RECOVERY_RATE' AND
881 p_recovery_type_code IS NULL) THEN
882 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
883 p_error_buffer := 'Recovery type can not be null for DET_RECOVERY_RATE';
884
885 IF (g_level_error >= g_current_runtime_level ) THEN
886 FND_LOG.STRING(g_level_error,
887 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
888 'p_return_status = ' || p_return_status ||
889 ', p_error_buffer = ' || p_error_buffer);
890 END IF;
891
892 RETURN;
893 END IF;
894
895 --
896 -- get tax and tax regime code from cache structure
897 --
898 -- Bug#5006424- check if tax info is in cache
899 --
900 IF NOT ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl.EXISTS(p_tax_id) THEN
901 ZX_TDS_UTILITIES_PKG.populate_tax_cache(
902 p_tax_id,
903 p_return_status,
904 p_error_buffer);
905
906 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
907 IF (g_level_statement >= g_current_runtime_level ) THEN
908 FND_LOG.STRING(g_level_statement,
909 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
910 'p_return_status = ' || p_return_status ||
911 ', p_error_buffer = ' || p_error_buffer);
912 END IF;
913 RETURN;
914 END IF;
915 END IF;
916
917 l_tax := ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_tax_id).tax;
918 l_tax_regime_code :=
919 ZX_TDS_UTILITIES_PKG.g_tax_rec_tbl(p_tax_id).tax_regime_code;
920
921 --
922 -- check if rule code is passed, it is from migration
923 -- for recovery rate determination
924 -- if rule code is passed, it needs to be evaluated first
925 --
926 IF (p_tax_rule_code IS NOT NULL ) THEN
927 process_rule_code(p_service_type_code,
928 p_structure_name,
929 p_structure_index,
930 p_event_class_rec,
931 l_tax,
932 l_tax_regime_code,
933 p_tax_determine_date,
934 p_tax_status_code,
935 p_tax_rule_code,
936 p_recovery_type_code,
937 l_found,
938 p_zx_result_rec,
939 p_return_status,
940 p_error_buffer);
941
942 IF (p_return_status <> FND_API.G_RET_STS_SUCCESS OR l_found)THEN
943 -- return to caller if error occurs or success with a result
944 IF (g_level_error >= g_current_runtime_level ) THEN
945 FND_LOG.STRING(g_level_error,
946 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
947 'Incorrect return_status after call process_rule_code() OR l_found is true.'||
948 ', return_status: '|| p_return_status);
949 END IF;
950
951 RETURN;
952 END IF;
953 END IF;
954
955 IF p_event_class_rec.source_event_class_mapping_id IS NOT NULL THEN
956
957 get_tsrm_alphanum_value(
958 p_structure_name,
959 p_structure_index,
960 'SOURCE_EVENT_CLASS_CODE',
961 l_source_event_class_code,
962 p_return_status,
963 p_error_buffer);
964
965 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
966 IF (g_level_error >= g_current_runtime_level ) THEN
967 FND_LOG.STRING(g_level_error,
968 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
969 'Incorrect return_status after call get_tsrm_alphanum_value().'||
970 ', Return_status: '|| p_return_status);
971 END IF;
972 RETURN;
973 END IF;
974
975 IF l_source_event_class_code = 'INTERCOMPANY_TRX' THEN
976 l_source_event_class_code := 'INTERCOMPANY_TRANSACTION';
977 ELSE
978 l_source_event_class_code := NULL;
979 END IF;
980 END IF; --source_event_class_mapping_id is NOT NULL
981
982 IF p_service_type_code = 'DET_TAX_RATE' THEN
983 --
984 -- get templates from ZX_RULES_B table.
985 --
986 --Bug 13507505
987 IF l_source_event_class_code = 'INTERCOMPANY_TRANSACTION' THEN
988 OPEN get_det_factor_templ_csr_a(p_service_type_code,
989 l_tax,
990 l_tax_regime_code,
991 p_tax_determine_date,
992 p_tax_status_code,
993 p_event_class_rec.application_id,
994 p_event_class_rec.event_class_mapping_id,
995 --Bug 13507505
996 --NVL(l_source_event_class_code, p_event_class_rec.tax_event_class_code));
997 l_source_event_class_code);
998 LOOP
999 FETCH get_det_factor_templ_csr_a bulk collect into
1000 l_tax_rule_id_tbl,
1001 l_tax_tbl,
1002 l_tax_regime_code_tbl,
1003 l_det_factor_templ_cd_tbl,
1004 l_rule_det_factor_cq_tbl,
1005 l_rule_geography_type_tbl,
1006 l_rule_geography_id_tbl
1007 LIMIT C_LINES_PER_COMMIT;
1008
1009 --CR#4255160 Added new parameters to proc_det_factor_templ procedure, for Geography Context.
1010 proc_det_factor_templ(
1011 p_structure_name,
1012 p_structure_index,
1013 l_det_factor_templ_cd_tbl,
1014 p_tax_status_code,
1015 p_event_class_rec,
1016 l_tax_tbl,
1017 p_tax_determine_date,
1018 p_recovery_type_code,
1019 l_found,
1020 l_tax_regime_code_tbl,
1021 p_service_type_code,
1022 l_tax_rule_id_tbl,
1023 l_rule_det_factor_cq_tbl,
1024 l_rule_geography_type_tbl,
1025 l_rule_geography_id_tbl,
1026 p_zx_result_rec,
1027 p_return_status,
1028 p_error_buffer);
1029 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1030 CLOSE get_det_factor_templ_csr_a;
1031
1032 IF (g_level_error >= g_current_runtime_level ) THEN
1033 FND_LOG.STRING(g_level_error,
1034 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1035 'Incorrect return_status after call proc_det_factor_templ().' ||
1036 ', return_status: '|| p_return_status);
1037 END IF;
1038
1039 EXIT;
1040 END IF;
1041
1042 IF (get_det_factor_templ_csr_a%notfound OR l_found) THEN
1043
1044 IF (g_level_statement >= g_current_runtime_level ) THEN
1045 FND_LOG.STRING(g_level_statement,
1046 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1047 'get_det_factor_templ_csr row count for Intercompany '
1048 ||to_char(get_det_factor_templ_csr_a%rowcount));
1049 END IF;
1050 CLOSE get_det_factor_templ_csr_a;
1051 EXIT;
1052 END IF;
1053 END LOOP; -- bulk fetch template.
1054 END IF; --source_event_class_code = 'INTERCOMPANY_TRANSACTION'
1055
1056 --bug 13507505
1057 IF NOT l_found THEN
1058 OPEN get_det_factor_templ_csr_a(p_service_type_code,
1059 l_tax,
1060 l_tax_regime_code,
1061 p_tax_determine_date,
1062 p_tax_status_code,
1063 p_event_class_rec.application_id,
1064 p_event_class_rec.event_class_mapping_id,
1065 --Bug 13507505
1066 --NVL(l_source_event_class_code, p_event_class_rec.tax_event_class_code));
1067 p_event_class_rec.tax_event_class_code);
1068 LOOP
1069 FETCH get_det_factor_templ_csr_a bulk collect into
1070 l_tax_rule_id_tbl,
1071 l_tax_tbl,
1072 l_tax_regime_code_tbl,
1073 l_det_factor_templ_cd_tbl,
1074 l_rule_det_factor_cq_tbl,
1075 l_rule_geography_type_tbl,
1076 l_rule_geography_id_tbl
1077 LIMIT C_LINES_PER_COMMIT;
1078
1079 --CR#4255160 Added new parameters to proc_det_factor_templ procedure, for Geography Context.
1080 proc_det_factor_templ(
1081 p_structure_name,
1082 p_structure_index,
1083 l_det_factor_templ_cd_tbl,
1084 p_tax_status_code,
1085 p_event_class_rec,
1086 l_tax_tbl,
1087 p_tax_determine_date,
1088 p_recovery_type_code,
1089 l_found,
1090 l_tax_regime_code_tbl,
1091 p_service_type_code,
1092 l_tax_rule_id_tbl,
1093 l_rule_det_factor_cq_tbl,
1094 l_rule_geography_type_tbl,
1095 l_rule_geography_id_tbl,
1096 p_zx_result_rec,
1097 p_return_status,
1098 p_error_buffer);
1099 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1100 CLOSE get_det_factor_templ_csr_a;
1101
1102 IF (g_level_error >= g_current_runtime_level ) THEN
1103 FND_LOG.STRING(g_level_error,
1104 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1105 'Incorrect return_status after call proc_det_factor_templ().' ||
1106 ', return_status: '|| p_return_status);
1107 END IF;
1108
1109 EXIT;
1110 END IF;
1111
1112 IF (get_det_factor_templ_csr_a%notfound OR l_found) THEN
1113
1114 IF (g_level_statement >= g_current_runtime_level ) THEN
1115 FND_LOG.STRING(g_level_statement,
1116 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1117 'get_det_factor_templ_csr row count for tax event class code '
1118 ||to_char(get_det_factor_templ_csr_a%rowcount));
1119 END IF;
1120 CLOSE get_det_factor_templ_csr_a;
1121 EXIT;
1122 END IF;
1123 END LOOP; -- bulk fetch template.
1124
1125 END IF; -- not l_found
1126 --bug 13507505
1127
1128
1129 IF get_det_factor_templ_csr_a%ISOPEN THEN
1130 CLOSE get_det_factor_templ_csr_a;
1131 END IF;
1132
1133 ELSIF p_service_type_code = 'DET_RECOVERY_RATE' THEN
1134 --
1135 -- get templates from ZX_RULES_B table.
1136 --
1137 --Bug 13507505
1138 IF l_source_event_class_code = 'INTERCOMPANY_TRANSACTION' THEN
1139 OPEN get_det_factor_templ_csr_b(p_service_type_code,
1140 l_tax,
1141 l_tax_regime_code,
1142 p_tax_determine_date,
1143 p_recovery_type_code,
1144 p_event_class_rec.application_id,
1145 p_event_class_rec.event_class_mapping_id,
1146 --Bug 13507505
1147 --NVL(l_source_event_class_code, p_event_class_rec.tax_event_class_code));
1148 l_source_event_class_code);
1149 LOOP
1150 FETCH get_det_factor_templ_csr_b bulk collect into
1151 l_tax_rule_id_tbl,
1152 l_tax_tbl,
1153 l_tax_regime_code_tbl,
1154 l_det_factor_templ_cd_tbl,
1155 l_rule_det_factor_cq_tbl,
1156 l_rule_geography_type_tbl,
1157 l_rule_geography_id_tbl
1158 LIMIT C_LINES_PER_COMMIT;
1159
1160 --CR#4255160 Added new parameters to proc_det_factor_templ procedure, for Geography Context.
1161 proc_det_factor_templ(
1162 p_structure_name,
1163 p_structure_index,
1164 l_det_factor_templ_cd_tbl,
1165 p_tax_status_code,
1166 p_event_class_rec,
1167 l_tax_tbl,
1168 p_tax_determine_date,
1169 p_recovery_type_code,
1170 l_found,
1171 l_tax_regime_code_tbl,
1172 p_service_type_code,
1173 l_tax_rule_id_tbl,
1174 l_rule_det_factor_cq_tbl,
1175 l_rule_geography_type_tbl,
1176 l_rule_geography_id_tbl,
1177 p_zx_result_rec,
1178 p_return_status,
1179 p_error_buffer);
1180
1181 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1182 CLOSE get_det_factor_templ_csr_b;
1183 IF (g_level_error >= g_current_runtime_level ) THEN
1184 FND_LOG.STRING(g_level_error,
1185 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1186 'Incorrect return_status after call proc_det_factor_templ().' ||
1187 ', return_status: '|| p_return_status);
1188 END IF;
1189
1190 EXIT;
1191 END IF;
1192
1193 IF (get_det_factor_templ_csr_b%notfound OR l_found) THEN
1194
1195 IF (g_level_statement >= g_current_runtime_level ) THEN
1196 FND_LOG.STRING(g_level_statement,
1197 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1198 'get_det_factor_templ_csr row count for Intercompany'
1199 ||to_char(get_det_factor_templ_csr_b%rowcount));
1200 END IF;
1201 CLOSE get_det_factor_templ_csr_b;
1202 EXIT;
1203 END IF;
1204 END LOOP; -- bulk fetch template.
1205 END IF; --source_event_class_code = 'INTERCOMPANY_TRANSACTION'
1206
1207 --Bug 13507505
1208 IF NOT l_found THEN
1209 OPEN get_det_factor_templ_csr_b(p_service_type_code,
1210 l_tax,
1211 l_tax_regime_code,
1212 p_tax_determine_date,
1213 p_recovery_type_code,
1214 p_event_class_rec.application_id,
1215 p_event_class_rec.event_class_mapping_id,
1216 --Bug 13507505
1217 --NVL(l_source_event_class_code, p_event_class_rec.tax_event_class_code));
1218 p_event_class_rec.tax_event_class_code);
1219 LOOP
1220 FETCH get_det_factor_templ_csr_b bulk collect into
1221 l_tax_rule_id_tbl,
1222 l_tax_tbl,
1223 l_tax_regime_code_tbl,
1224 l_det_factor_templ_cd_tbl,
1225 l_rule_det_factor_cq_tbl,
1226 l_rule_geography_type_tbl,
1227 l_rule_geography_id_tbl
1228 LIMIT C_LINES_PER_COMMIT;
1229
1230 --CR#4255160 Added new parameters to proc_det_factor_templ procedure, for Geography Context.
1231 proc_det_factor_templ(
1232 p_structure_name,
1233 p_structure_index,
1234 l_det_factor_templ_cd_tbl,
1235 p_tax_status_code,
1236 p_event_class_rec,
1237 l_tax_tbl,
1238 p_tax_determine_date,
1239 p_recovery_type_code,
1240 l_found,
1241 l_tax_regime_code_tbl,
1242 p_service_type_code,
1243 l_tax_rule_id_tbl,
1244 l_rule_det_factor_cq_tbl,
1245 l_rule_geography_type_tbl,
1246 l_rule_geography_id_tbl,
1247 p_zx_result_rec,
1248 p_return_status,
1249 p_error_buffer);
1250
1251 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1252 CLOSE get_det_factor_templ_csr_b;
1253 IF (g_level_error >= g_current_runtime_level ) THEN
1254 FND_LOG.STRING(g_level_error,
1255 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1256 'Incorrect return_status after call proc_det_factor_templ().' ||
1257 ', return_status: '|| p_return_status);
1258 END IF;
1259
1260 EXIT;
1261 END IF;
1262
1263
1264 IF (get_det_factor_templ_csr_b%notfound OR l_found) THEN
1265
1266 IF (g_level_statement >= g_current_runtime_level ) THEN
1267 FND_LOG.STRING(g_level_statement,
1268 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1269 'get_det_factor_templ_csr row count for tax event class code '
1270 ||to_char(get_det_factor_templ_csr_b%rowcount));
1271 END IF;
1272 CLOSE get_det_factor_templ_csr_b;
1273 EXIT;
1274 END IF;
1275 END LOOP; -- bulk fetch template.
1276
1277 END IF; -- not l_found
1278 --End Bug 13507505
1279
1280 IF get_det_factor_templ_csr_b%ISOPEN THEN
1281 CLOSE get_det_factor_templ_csr_b;
1282 END IF;
1283
1284 ELSE -- p_service_type_code other than 'DET_TAX_RATE' and 'DET_RECOVERY_RATE'
1285
1286 -- Bugfix 3673395
1287
1288 fetch_proc_det_factor_templ(
1289 p_structure_name,
1290 p_structure_index,
1291 p_tax_status_code,
1292 p_event_class_rec,
1293 p_tax_determine_date,
1294 p_recovery_type_code,
1295 l_found,
1296 p_service_type_code,
1297 p_zx_result_rec,
1298 l_tax,
1299 l_tax_regime_code,
1300 p_return_status,
1301 p_error_buffer) ;
1302
1303 /* Bug 4017396 - included the check for p_return_status*/
1304 IF ( p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
1305 IF (g_level_error >= g_current_runtime_level ) THEN
1306 FND_LOG.STRING(g_level_error,
1307 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1308 'p_return_status = ' || p_return_status ||
1309 ', p_error_buffer = ' || p_error_buffer);
1310
1311 END IF;
1312 END IF;
1313
1314 END IF; -- p_service_type_code = 'DET_TAX_RATE'/'DET_RECOVERY_RATE' OR ELSE
1315
1316 /* comment this out as in Phase 1 only rules at tax level are supported.
1317 IF (NOT l_found AND p_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1318
1319 --
1320 -- traverse the regime hierarchy to get rules
1321 --
1322 OPEN get_regime_code_csr(l_tax_regime_code,
1323 p_tax_determine_date);
1324
1325 LOOP
1326 FETCH get_regime_code_csr bulk collect into l_parent_regime_code_tbl
1327 LIMIT C_LINES_PER_COMMIT;
1328
1329 get_rule_from_regime_hier(
1330 p_service_type_code,
1331 p_structure_name,
1332 p_structure_index,
1333 p_event_class_rec,
1334 p_tax_status_code,
1335 p_tax_determine_date,
1336 p_recovery_type_code,
1337 p_zx_result_rec,
1338 l_found,
1339 l_parent_regime_code_tbl,
1340 p_return_status,
1341 p_error_buffer);
1342 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1343 CLOSE get_regime_code_csr;
1344
1345 IF (g_level_error >= g_current_runtime_level ) THEN
1346 FND_LOG.STRING(g_level_error,
1347 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1348 'Incorrect return_status after call get_rule_from_regime_hier().'||
1349 ', return_status: '|| p_return_status);
1350 END IF;
1351
1352 EXIT;
1353 END IF;
1354 IF (get_regime_code_csr%notfound OR l_found) THEN
1355
1356 IF (g_level_statement >= g_current_runtime_level ) THEN
1357 FND_LOG.STRING(g_level_statement,
1358 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1359 'get_regime_code_csr row count '||
1360 to_char(get_regime_code_csr%rowcount));
1361 END IF;
1362 CLOSE get_regime_code_csr;
1363 EXIT;
1364 END IF;
1365
1366 END LOOP;
1367
1368 IF get_regime_code_csr%ISOPEN THEN
1369 CLOSE get_regime_code_csr;
1370 END IF;
1371
1372 END IF;
1373
1374 */
1375
1376 IF (g_level_procedure >= g_current_runtime_level ) THEN
1377 FND_LOG.STRING(g_level_procedure,
1378 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1379 'alphanumeric_result: ' || p_zx_result_rec.alphanumeric_result);
1380 FND_LOG.STRING(g_level_procedure,
1381 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process.END',
1382 'ZX_TDS_RULE_BASE_DETM_PVT: rule_base_process(-)' ||
1383 ', p_return_status = ' || p_return_status ||
1384 ', p_error_buffer = ' || p_error_buffer);
1385 END IF;
1386
1387 EXCEPTION
1388 WHEN OTHERS THEN
1389 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1390 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1391 IF get_det_factor_templ_csr_a%ISOPEN THEN
1392 CLOSE get_det_factor_templ_csr_a;
1393 ELSIF get_det_factor_templ_csr_b%ISOPEN THEN
1394 CLOSE get_det_factor_templ_csr_b;
1395 ELSIF get_regime_code_csr%ISOPEN THEN
1396 CLOSE get_regime_code_csr;
1397 END IF;
1398
1399 IF (g_level_unexpected >= g_current_runtime_level ) THEN
1400 FND_LOG.STRING(g_level_unexpected,
1401 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.rule_base_process',
1402 p_error_buffer);
1403 END IF;
1404
1405 END rule_base_process;
1406
1407 ------------------------------------------------------------------------
1408 -- PRIVATE PROCEDURE
1409 -- process_rule_code
1410 --
1411 -- DESCRIPTION
1412 -- This procedure processes rule code for recovery rate determination
1413 -- from migration
1414 --
1415 PROCEDURE process_rule_code(
1416 p_service_type_code IN ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
1417 p_structure_name IN VARCHAR2,
1418 p_structure_index IN BINARY_INTEGER,
1419 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
1420 p_tax IN ZX_TAXES_B.TAX%TYPE,
1421 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
1422 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
1423 p_tax_status_code IN ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
1424 p_tax_rule_code IN ZX_RULES_B.TAX_RULE_CODE%TYPE,
1425 p_recovery_type_code IN ZX_RULES_B.RECOVERY_TYPE_CODE%TYPE,
1426 p_found IN OUT NOCOPY BOOLEAN,
1427 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
1428 p_return_status OUT NOCOPY VARCHAR2,
1429 p_error_buffer OUT NOCOPY VARCHAR2)
1430 IS
1431 l_det_factor_templ_cd ZX_RULES_B.DET_FACTOR_TEMPL_CODE%TYPE;
1432 l_condition_group_code ZX_CONDITION_GROUPS_B.CONDITION_GROUP_CODE%TYPE;
1433 l_result BOOLEAN;
1434 l_result_id ZX_PROCESS_RESULTS.RESULT_ID%TYPE;
1435 l_tax_rule_id ZX_RULES_B.TAX_RULE_ID%TYPE;
1436
1437 l_valid BOOLEAN;
1438
1439 --
1440 -- cursor for getting recovery templates from rules
1441 --
1442 CURSOR get_recovery_templ_csr
1443 (c_service_type_code ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
1444 c_tax ZX_TAXES_B.TAX%TYPE,
1445 c_tax_regime_code ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
1446 c_tax_determine_date ZX_LINES.TAX_DETERMINE_DATE%TYPE,
1447 c_recovery_type_code ZX_RULES_B.RECOVERY_TYPE_CODE%TYPE,
1448 c_tax_rule_code ZX_RULES_B.TAX_RULE_CODE%TYPE,
1449 c_reference_application_id ZX_RULES_B.APPLICATION_ID%TYPE,
1450 c_event_class_mapping_id ZX_RULES_B.EVENT_CLASS_MAPPING_ID%TYPE,
1451 c_tax_event_class_code ZX_RULES_B.TAX_EVENT_CLASS_CODE%TYPE)
1452 IS
1453 SELECT TAX_RULE_ID,
1454 DET_FACTOR_TEMPL_CODE
1455 FROM ZX_SCO_RULES_B_V r
1456 WHERE SERVICE_TYPE_CODE = c_service_type_code
1457 AND TAX = c_tax
1458 AND TAX_REGIME_CODE = c_tax_regime_code
1459 AND c_tax_determine_date >= EFFECTIVE_FROM
1460 AND (c_tax_determine_date <= EFFECTIVE_TO OR
1461 EFFECTIVE_TO IS NULL)
1462 AND TAX_RULE_CODE = c_tax_rule_code
1463 AND RECOVERY_TYPE_CODE = c_recovery_type_code
1464 AND NVL(System_Default_Flag, 'N') = 'Y'
1465 AND (APPLICATION_ID = c_reference_application_id
1466 OR APPLICATION_ID IS NULL)
1467 AND (EVENT_CLASS_MAPPING_ID = c_event_class_mapping_id OR
1468 EVENT_CLASS_MAPPING_ID IS NULL)
1469 AND (TAX_EVENT_CLASS_CODE = c_tax_event_class_code OR
1470 TAX_EVENT_CLASS_CODE IS NULL)
1471 AND Enabled_Flag = 'Y'
1472 ORDER BY TAX, PRIORITY;
1473
1474 --
1475 -- cursor for getting offset templates from rules
1476 --
1477 /*********************
1478 CURSOR get_offset_templ_csr
1479 (c_service_type_code ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
1480 c_tax ZX_TAXES_B.TAX%TYPE,
1481 c_tax_regime_code ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
1482 c_tax_determine_date ZX_LINES.TAX_DETERMINE_DATE%TYPE,
1483 c_tax_rule_code ZX_RULES_B.TAX_RULE_CODE%TYPE,
1484 c_reference_application_id ZX_RULES_B.APPLICATION_ID%TYPE)
1485 IS
1486 SELECT TAX_RULE_ID,
1487 det_factor_templ_code
1488 FROM ZX_SCO_RULES_B_V
1489 WHERE SERVICE_TYPE_CODE = c_service_type_code
1490 AND TAX = c_tax
1491 AND TAX_REGIME_CODE = c_tax_regime_code
1492 AND c_tax_determine_date >= EFFECTIVE_FROM
1493 AND (c_tax_determine_date <= EFFECTIVE_TO OR
1494 EFFECTIVE_TO IS NULL)
1495 AND TAX_RULE_CODE = c_tax_rule_code
1496 AND RECOVERY_TYPE_CODE IS NULL
1497 AND System_Default_Flag = 'Y'
1498 AND APPLICATION_ID = c_reference_application_id
1499 AND Enabled_Flag = 'Y'
1500 ORDER BY TAX, PRIORITY;
1501 *************************/
1502
1503 BEGIN
1504
1505 IF (g_level_procedure >= g_current_runtime_level ) THEN
1506 FND_LOG.STRING(g_level_procedure,
1507 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_rule_code.BEGIN',
1508 'ZX_TDS_RULE_BASE_DETM_PVT: process_rule_code(+)');
1509 END IF;
1510
1511 p_return_status := FND_API.G_RET_STS_SUCCESS;
1512
1513 --
1514 -- determine which cursor to open
1515 --
1516 IF p_service_type_code = 'DET_RECOVERY_RATE' THEN
1517 --
1518 -- get recovery templates from ZX_RULES_B table.
1519 --
1520 OPEN get_recovery_templ_csr(p_service_type_code,
1521 p_tax,
1522 p_tax_regime_code,
1523 p_tax_determine_date,
1524 p_recovery_type_code,
1525 p_tax_rule_code,
1526 p_event_class_rec.application_id,
1527 p_event_class_rec.event_class_mapping_id,
1528 p_event_class_rec.tax_event_class_code);
1529 FETCH get_recovery_templ_csr into l_tax_rule_id, l_det_factor_templ_cd;
1530 IF get_recovery_templ_csr%NOTFOUND THEN
1531 CLOSE get_recovery_templ_csr;
1532 RETURN;
1533 END IF;
1534 CLOSE get_recovery_templ_csr;
1535 /************************
1536 ELSIF p_service_type_code = 'DET_OFFSET_TAX' THEN
1537 --
1538 -- get offset templates from ZX_RULES_B table.
1539 --
1540 OPEN get_offset_templ_csr(p_service_type_code,
1541 p_tax,
1542 p_tax_regime_code,
1543 p_tax_determine_date,
1544 p_tax_rule_code,
1545 p_event_class_rec.application_id);
1546 FETCH get_offset_templ_csr into l_tax_rule_id, l_det_factor_templ_cd;
1547 IF get_offset_templ_csr%NOTFOUND THEN
1548 CLOSE get_offset_templ_csr;
1549 RETURN;
1550 END IF;
1551 CLOSE get_offset_templ_csr;
1552 **********************/
1553 ELSE
1554 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1555 p_error_buffer := 'Invalid service type code for the tax rule code';
1556 IF (g_level_error >= g_current_runtime_level ) THEN
1557 FND_LOG.STRING(g_level_error,
1558 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_rule_code',
1559 'p_return_status = ' || p_return_status ||
1560 ', p_error_buffer = ' || p_error_buffer);
1561 END IF;
1562 RETURN;
1563 END IF;
1564
1565 -- Bug 4166241: for the template, check if the parameters associated with the determining factors
1566 -- are supported for the given Application
1567
1568 check_templ_tax_parameter(
1569 l_det_factor_templ_cd,
1570 p_event_class_rec,
1571 l_valid,
1572 p_return_status,
1573 p_error_buffer);
1574
1575 -- process the template only if its parameters are valid for the given application
1576 IF (l_valid AND p_return_status = FND_API.G_RET_STS_SUCCESS) THEN
1577
1578 -- get all the condition groups and conditions
1579 proc_condition_group_per_templ(
1580 p_structure_name,
1581 p_structure_index,
1582 l_det_factor_templ_cd,
1583 p_event_class_rec,
1584 p_tax,
1585 p_tax_regime_code,
1586 p_tax_determine_date,
1587 p_service_type_code,
1588 l_tax_rule_id,
1589 p_tax_status_code,
1590 l_result,
1591 l_result_id,
1592 p_found,
1593 p_zx_result_rec,
1594 p_return_status,
1595 p_error_buffer);
1596
1597 -- if the whole condition is satisfied, put result to p_zx_result_rec
1598 /* getting called from within proc_condition_group_per_templ
1599 IF (l_result) THEN
1600 get_result(
1601 l_result_id,
1602 p_structure_name,
1603 p_structure_index,
1604 p_tax_regime_code,
1605 p_tax,
1606 p_tax_determine_date,
1607 p_found,
1608 p_zx_result_rec,
1609 p_return_status,
1610 p_error_buffer);
1611 END IF;
1612 */
1613 -- EXIT WHEN (p_found OR p_return_status <> FND_API.G_RET_STS_SUCCESS);
1614 END IF;
1615 IF (g_level_procedure >= g_current_runtime_level ) THEN
1616 FND_LOG.STRING(g_level_procedure,
1617 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_rule_code',
1618 'alphanumeric_result: ' || p_zx_result_rec.alphanumeric_result);
1619 FND_LOG.STRING(g_level_procedure,
1620 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_rule_code.END',
1621 'ZX_TDS_RULE_BASE_DETM_PVT: process_rule_code(-)');
1622 END IF;
1623
1624 EXCEPTION
1625 WHEN OTHERS THEN
1626 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
1627 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
1628 IF get_recovery_templ_csr%ISOPEN THEN
1629 CLOSE get_recovery_templ_csr;
1630 END IF;
1631
1632 IF (g_level_unexpected >= g_current_runtime_level ) THEN
1633 FND_LOG.STRING(g_level_unexpected,
1634 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_rule_code',
1635 p_error_buffer);
1636 END IF;
1637
1638 END process_rule_code;
1639
1640 ------------------------------------------------------------------------
1641 -- PRIVATE PROCEDURE
1642 -- fetch_proc_det_factor_templ
1643 --
1644 -- DESCRIPTION
1645 -- This procedure is to evaluate the Rules, based on
1646 -- source event and other attributes first, source tax event attributes
1647 -- second, current event class and other attributes third,current tax event
1648 -- class and other attributes 4th,
1649 -- null event class, null tax event class and not null tax and not null
1650 -- regimes as the last search level.
1651 --
1652
1653 PROCEDURE fetch_proc_det_factor_templ(
1654 p_structure_name IN VARCHAR2,
1655 p_structure_index IN BINARY_INTEGER,
1656 p_tax_status_code IN ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
1657 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
1658 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
1659 p_recovery_type_code IN ZX_RULES_B.RECOVERY_TYPE_CODE%TYPE,
1660 p_found IN OUT NOCOPY BOOLEAN,
1661 p_service_type_code IN ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
1662 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
1663 p_tax IN ZX_TAXES_B.TAX%TYPE,
1664 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
1665 p_return_status OUT NOCOPY VARCHAR2,
1666 p_error_buffer OUT NOCOPY VARCHAR2)
1667 IS
1668
1669 /* Bugfix3673395 */
1670 --
1671 -- cursors for getting determining factor templates from rules
1672 -- for processes other than DET_RECOVERY_RATE and DET_TAX_RATE
1673 --
1674
1675 CURSOR get_det_factor_templ_csr_c
1676 (c_service_type_code ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
1677 c_tax ZX_TAXES_B.TAX%TYPE,
1678 c_tax_regime_code ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
1679 c_tax_determine_date ZX_LINES.TAX_DETERMINE_DATE%TYPE,
1680 c_event_class_mapping_id ZX_RULES_B.EVENT_CLASS_MAPPING_ID%TYPE)
1681 IS
1682 SELECT TAX_RULE_ID,
1683 TAX,
1684 TAX_REGIME_CODE,
1685 DET_FACTOR_TEMPL_CODE,
1686 DETERMINING_FACTOR_CQ_CODE,
1687 GEOGRAPHY_TYPE,
1688 GEOGRAPHY_ID
1689 FROM ZX_SCO_RULES_B_V r
1690 WHERE SERVICE_TYPE_CODE = c_service_type_code
1691 AND TAX = c_tax -- In phase 1, tax and regime should not be NULL
1692 AND TAX_REGIME_CODE = c_tax_regime_code
1693 AND c_tax_determine_date >= EFFECTIVE_FROM
1694 AND (c_tax_determine_date <= EFFECTIVE_TO OR
1695 EFFECTIVE_TO IS NULL)
1696 AND System_Default_Flag <> 'Y'
1697 AND EVENT_CLASS_MAPPING_ID = c_event_class_mapping_id
1698 AND Enabled_Flag = 'Y'
1699 AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
1700 FROM ZX_PROCESS_RESULTS pr
1701 WHERE pr.TAX_RULE_ID = r.TAX_RULE_ID
1702 AND pr.enabled_flag = 'Y'
1703 AND rownum = 1
1704 )
1705 ORDER BY PRIORITY;
1706
1707 CURSOR get_det_factor_templ_csr_d
1708 (c_service_type_code ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
1709 c_tax ZX_TAXES_B.TAX%TYPE,
1710 c_tax_regime_code ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
1711 c_tax_determine_date ZX_LINES.TAX_DETERMINE_DATE%TYPE,
1712 c_tax_event_class_code ZX_RULES_B.TAX_EVENT_CLASS_CODE%TYPE)
1713 IS
1714 SELECT TAX_RULE_ID,
1715 TAX,
1716 TAX_REGIME_CODE,
1717 DET_FACTOR_TEMPL_CODE,
1718 DETERMINING_FACTOR_CQ_CODE,
1719 GEOGRAPHY_TYPE,
1720 GEOGRAPHY_ID
1721 FROM ZX_SCO_RULES_B_V r
1722 WHERE SERVICE_TYPE_CODE = c_service_type_code
1723 AND TAX = c_tax -- In phase 1, tax and regime should not be NULL
1724 AND TAX_REGIME_CODE = c_tax_regime_code
1725 AND c_tax_determine_date >= EFFECTIVE_FROM
1726 AND (c_tax_determine_date <= EFFECTIVE_TO OR
1727 EFFECTIVE_TO IS NULL)
1728 AND System_Default_Flag <> 'Y'
1729 AND TAX_EVENT_CLASS_CODE = c_tax_event_class_code
1730 AND Enabled_Flag = 'Y'
1731 AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
1732 FROM ZX_PROCESS_RESULTS pr
1733 WHERE pr.TAX_RULE_ID = r.TAX_RULE_ID
1734 AND pr.Enabled_Flag = 'Y'
1735 AND rownum = 1
1736 )
1737 ORDER BY PRIORITY;
1738
1739 CURSOR get_det_factor_templ_csr_e
1740 (c_service_type_code ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
1741 c_tax ZX_TAXES_B.TAX%TYPE,
1742 c_tax_regime_code ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
1743 c_tax_determine_date ZX_LINES.TAX_DETERMINE_DATE%TYPE,
1744 c_event_class_mapping_id ZX_RULES_B.EVENT_CLASS_MAPPING_ID%TYPE,
1745 c_tax_event_class_code ZX_RULES_B.TAX_EVENT_CLASS_CODE%TYPE
1746 )
1747 IS
1748 SELECT TAX_RULE_ID,
1749 TAX,
1750 TAX_REGIME_CODE,
1751 DET_FACTOR_TEMPL_CODE,
1752 DETERMINING_FACTOR_CQ_CODE,
1753 GEOGRAPHY_TYPE,
1754 GEOGRAPHY_ID
1755 FROM ZX_SCO_RULES_B_V r
1756 WHERE SERVICE_TYPE_CODE = c_service_type_code
1757 AND TAX = c_tax
1758 AND TAX_REGIME_CODE = c_tax_regime_code
1759 AND c_tax_determine_date >= EFFECTIVE_FROM
1760 AND (c_tax_determine_date <= EFFECTIVE_TO OR
1761 EFFECTIVE_TO IS NULL)
1762 AND System_Default_Flag <> 'Y'
1763 AND (TAX_EVENT_CLASS_CODE IS NULL OR
1764 TAX_EVENT_CLASS_CODE = c_tax_event_class_code)
1765 AND (EVENT_CLASS_MAPPING_ID IS NULL OR
1766 EVENT_CLASS_MAPPING_ID = c_event_class_mapping_id)
1767 AND Enabled_Flag = 'Y'
1768 AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
1769 FROM ZX_PROCESS_RESULTS pr
1770 WHERE pr.TAX_RULE_ID = r.TAX_RULE_ID
1771 AND pr.Enabled_Flag = 'Y'
1772 AND rownum = 1
1773 )
1774 ORDER BY EVENT_CLASS_MAPPING_ID NULLS LAST,
1775 TAX_EVENT_CLASS_CODE NULLS LAST,
1776 PRIORITY;
1777
1778
1779 l_det_factor_templ_cd_tbl DET_FACTOR_TEMPL_CODE_TBL;
1780 l_tax_tbl TAX_TBL;
1781 l_tax_regime_code_tbl TAX_REGIME_CODE_TBL;
1782 l_tax_rule_id_tbl TAX_RULE_ID_TBL;
1783
1784 --Bug 4670938 - Changed the type since EVENT_CLASS_CODE is removed from zx_rules_b
1785 l_source_event_class_code ZX_EVNT_CLS_MAPPINGS.EVENT_CLASS_CODE%TYPE;
1786
1787 --CR#4255160. Added new variables to store the Rule level Determining Factor CQ,
1788 -- Geography type and Geography Id
1789 l_rule_det_factor_cq_tbl RULE_DET_FACTOR_CQ_TBL;
1790 l_rule_geography_type_tbl RULE_GEOGRAPHY_TYPE_TBL;
1791 l_rule_geography_id_tbl RULE_GEOGRAPHY_ID_TBL;
1792 BEGIN
1793
1794 /*Bug fix 4017396*/
1795 IF (g_level_procedure >= g_current_runtime_level ) THEN
1796 FND_LOG.STRING(g_level_procedure,
1797 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ.BEGIN',
1798 'ZX_TDS_RULE_BASE_DETM_PVT: fetch_proc_det_factor_templ(+)');
1799 IF (g_level_statement >= g_current_runtime_level ) THEN
1800 FND_LOG.STRING(g_level_statement,
1801 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
1802 'source_event_class_mapping_id : ' ||
1803 TO_CHAR(p_event_class_rec.source_event_class_mapping_id) ||
1804 ', source_tax_event_class_code: ' ||
1805 p_event_class_rec.source_tax_event_class_code ||
1806 ', event_class_mapping_id : ' ||
1807 TO_CHAR(p_event_class_rec.event_class_mapping_id) ||
1808 ', tax_event_class_code: ' ||
1809 p_event_class_rec.tax_event_class_code);
1810
1811 END IF;
1812 END IF;
1813
1814 p_return_status := FND_API.G_RET_STS_SUCCESS; --Included as part of Bug fix 4017396
1815
1816 IF p_event_class_rec.source_event_class_mapping_id IS NOT NULL THEN
1817
1818 get_tsrm_alphanum_value(
1819 p_structure_name,
1820 p_structure_index,
1821 'SOURCE_EVENT_CLASS_CODE',
1822 l_source_event_class_code,
1823 p_return_status,
1824 p_error_buffer);
1825
1826 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
1827 IF (g_level_error >= g_current_runtime_level ) THEN
1828 FND_LOG.STRING(g_level_error,
1829 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
1830 'Incorrect return_status after call get_tsrm_alphanum_value().'||
1831 ', Return_status: '|| p_return_status);
1832 END IF;
1833 RETURN;
1834 END IF;
1835 --
1836 -- Bug#4653492- do nothing if this is intercompany trx
1837 --
1838 IF l_source_event_class_code = 'INTERCOMPANY_TRX' THEN
1839
1840 IF (g_level_statement >= g_current_runtime_level ) THEN
1841 FND_LOG.STRING(g_level_statement,
1842 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
1843 'for intercompany trx, skip rules for the source event class and source tax event class');
1844 END IF;
1845 ELSE
1846
1847 -- Firstly, pick rules for source event mapping, tax regime, tax
1848
1849 -- Bug 4670938 - Fetch the source_event_class_mapping_id from event_class_rec
1850 -- and pass it to the cursor since we no longer store the Application Event class code
1851 -- on Rules, but store only the event_class_mapping_id
1852
1853 OPEN get_det_factor_templ_csr_c
1854 (p_service_type_code,
1855 p_tax,
1856 p_tax_regime_code,
1857 p_tax_determine_date,
1858 p_event_class_rec.source_event_class_mapping_id);
1859 LOOP
1860 FETCH get_det_factor_templ_csr_c BULK COLLECT INTO
1861 l_tax_rule_id_tbl,
1862 l_tax_tbl,
1863 l_tax_regime_code_tbl,
1864 l_det_factor_templ_cd_tbl,
1865 l_rule_det_factor_cq_tbl,
1866 l_rule_geography_type_tbl,
1867 l_rule_geography_id_tbl
1868 LIMIT C_LINES_PER_COMMIT;
1869
1870 --CR#4255160 - Added new parameters for Detfactor CQ, Geo type and Geo Id
1871 proc_det_factor_templ(
1872 p_structure_name,
1873 p_structure_index,
1874 l_det_factor_templ_cd_tbl,
1875 p_tax_status_code,
1876 p_event_class_rec,
1877 l_tax_tbl,
1878 p_tax_determine_date,
1879 p_recovery_type_code,
1880 p_found,
1881 l_tax_regime_code_tbl,
1882 p_service_type_code,
1883 l_tax_rule_id_tbl,
1884 l_rule_det_factor_cq_tbl,
1885 l_rule_geography_type_tbl,
1886 l_rule_geography_id_tbl,
1887 p_zx_result_rec,
1888 p_return_status,
1889 p_error_buffer);
1890
1891 IF (p_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
1892 CLOSE get_det_factor_templ_csr_c;
1893
1894 IF (g_level_error >= g_current_runtime_level ) THEN
1895 FND_LOG.STRING(g_level_error,
1896 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
1897 'Incorrect return_status after call proc_det_factor_templ().'||
1898 ', Return_status: '|| p_return_status);
1899 END IF;
1900
1901 RETURN; --EXIT;
1902 END IF;
1903
1904 IF (get_det_factor_templ_csr_c%NOTFOUND OR p_found) THEN
1905 IF (g_level_statement >= g_current_runtime_level ) THEN
1906 FND_LOG.STRING(g_level_statement,
1907 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
1908 'get_det_factor_templ_csr_c row count ' ||
1909 TO_CHAR(get_det_factor_templ_csr_c%rowcount));
1910 END IF;
1911 CLOSE get_det_factor_templ_csr_c;
1912 EXIT;
1913 END IF;
1914 END LOOP; -- bulk fetch template get_det_factor_templ_csr_c
1915
1916 IF get_det_factor_templ_csr_c%ISOPEN THEN
1917 CLOSE get_det_factor_templ_csr_c;
1918 END IF;
1919
1920 IF NOT p_found THEN
1921 -- Secondly, pick rules for source tax event class, tax regime, tax
1922 IF (p_event_class_rec.source_tax_event_class_code <>
1923 p_event_class_rec.tax_event_class_code) THEN
1924 OPEN get_det_factor_templ_csr_d(
1925 p_service_type_code,
1926 p_tax,
1927 p_tax_regime_code,
1928 p_tax_determine_date,
1929 p_event_class_rec.source_tax_event_class_code);
1930 LOOP
1931 FETCH get_det_factor_templ_csr_d BULK COLLECT INTO
1932 l_tax_rule_id_tbl,
1933 l_tax_tbl,
1934 l_tax_regime_code_tbl,
1935 l_det_factor_templ_cd_tbl,
1936 l_rule_det_factor_cq_tbl,
1937 l_rule_geography_type_tbl,
1938 l_rule_geography_id_tbl
1939 LIMIT C_LINES_PER_COMMIT;
1940
1941 --CR#4255160 - Added new parameters for Det factor CQ, Geo type and Geo Id
1942 proc_det_factor_templ(
1943 p_structure_name,
1944 p_structure_index,
1945 l_det_factor_templ_cd_tbl,
1946 p_tax_status_code,
1947 p_event_class_rec,
1948 l_tax_tbl,
1949 p_tax_determine_date,
1950 p_recovery_type_code,
1951 p_found,
1952 l_tax_regime_code_tbl,
1953 p_service_type_code,
1954 l_tax_rule_id_tbl,
1955 l_rule_det_factor_cq_tbl,
1956 l_rule_geography_type_tbl,
1957 l_rule_geography_id_tbl,
1958 p_zx_result_rec,
1959 p_return_status,
1960 p_error_buffer);
1961
1962 IF (p_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
1963 CLOSE get_det_factor_templ_csr_d;
1964
1965 IF (g_level_error >= g_current_runtime_level ) THEN
1966 FND_LOG.STRING(g_level_error,
1967 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
1968 'Incorrect return_status after call proc_det_factor_templ().'||
1969 ', Return_status: '|| p_return_status);
1970 END IF;
1971
1972 RETURN; --EXIT;
1973 END IF;
1974
1975 IF (get_det_factor_templ_csr_d%NOTFOUND OR p_found) THEN
1976 IF (g_level_statement >= g_current_runtime_level ) THEN
1977 FND_LOG.STRING(g_level_statement,
1978 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
1979 'get_det_factor_templ_csr_d row count ' ||
1980 TO_CHAR(get_det_factor_templ_csr_d%rowcount));
1981 END IF;
1982 CLOSE get_det_factor_templ_csr_d;
1983 EXIT;
1984 END IF;
1985 END LOOP; -- bulk fetch template get_det_factor_templ_csr_d
1986
1987 IF get_det_factor_templ_csr_d%ISOPEN THEN
1988 CLOSE get_det_factor_templ_csr_d;
1989 END IF;
1990
1991 END IF; -- p_event_class_rec.source_tax_event_class_code <> p_event_class_rec.tax_event_class_code
1992 END IF; -- p_found
1993 END IF; -- l_source_event_class_code = 'INTERCOMPANY_TRX'
1994 END IF; -- End check for source_event_class_mapping_id
1995
1996 IF l_source_event_class_code = 'INTERCOMPANY_TRX' THEN
1997 l_source_event_class_code := 'INTERCOMPANY_TRANSACTION';
1998 ELSE
1999 l_source_event_class_code := NULL;
2000 END IF;
2001
2002 IF NOT p_found THEN
2003
2004 -- thirdly, pick rules for current event mapping, application, tax regime, tax
2005 -- then, pick rules for current tax event class, tax regime, tax
2006 -- then, pick rules for null event mapping, null tax event class, and tax regime and tax
2007
2008 --Bug 4670938 - Replaced event_class_code by event_class_mapping_id
2009 --Bug 13507505
2010 IF l_source_event_class_code = 'INTERCOMPANY_TRANSACTION' THEN
2011 OPEN get_det_factor_templ_csr_e(p_service_type_code,
2012 p_tax,
2013 p_tax_regime_code,
2014 p_tax_determine_date,
2015 p_event_class_rec.event_class_mapping_id,
2016 --Bug 13507505
2017 --NVL(l_source_event_class_code, p_event_class_rec.tax_event_class_code));
2018 l_source_event_class_code);
2019 LOOP
2020 FETCH get_det_factor_templ_csr_e BULK COLLECT INTO
2021 l_tax_rule_id_tbl,
2022 l_tax_tbl,
2023 l_tax_regime_code_tbl,
2024 l_det_factor_templ_cd_tbl,
2025 l_rule_det_factor_cq_tbl,
2026 l_rule_geography_type_tbl,
2027 l_rule_geography_id_tbl
2028 LIMIT C_LINES_PER_COMMIT;
2029
2030 --CR#4255160 - Added new parameters for Det factor CQ, Geo type and Geo Id
2031 proc_det_factor_templ(
2032 p_structure_name,
2033 p_structure_index,
2034 l_det_factor_templ_cd_tbl,
2035 p_tax_status_code,
2036 p_event_class_rec,
2037 l_tax_tbl,
2038 p_tax_determine_date,
2039 p_recovery_type_code,
2040 p_found,
2041 l_tax_regime_code_tbl,
2042 p_service_type_code,
2043 l_tax_rule_id_tbl,
2044 l_rule_det_factor_cq_tbl,
2045 l_rule_geography_type_tbl,
2046 l_rule_geography_id_tbl,
2047 p_zx_result_rec,
2048 p_return_status,
2049 p_error_buffer);
2050
2051 IF (p_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
2052 CLOSE get_det_factor_templ_csr_e;
2053
2054 IF (g_level_error >= g_current_runtime_level ) THEN
2055 FND_LOG.STRING(g_level_error,
2056 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
2057 'Incorrect return_status after call proc_det_factor_templ().'||
2058 ', Return_status: '|| p_return_status);
2059 END IF;
2060
2061 RETURN; --EXIT;
2062 END IF;
2063
2064 IF (get_det_factor_templ_csr_e%NOTFOUND OR p_found) THEN
2065 IF (g_level_statement >= g_current_runtime_level ) THEN
2066 FND_LOG.STRING(g_level_statement,
2067 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
2068 'get_det_factor_templ_csr_e row count for Intercompany' ||
2069 TO_CHAR(get_det_factor_templ_csr_e%rowcount));
2070 END IF;
2071 CLOSE get_det_factor_templ_csr_e;
2072 EXIT;
2073 END IF;
2074
2075 END LOOP; -- bulk fetch template get_det_factor_templ_csr_e
2076 END IF; --source_event_class_code = 'INTERCOMPANY_TRANSACTION'
2077
2078 --Bug 13507505
2079 IF NOT p_found THEN
2080 OPEN get_det_factor_templ_csr_e(p_service_type_code,
2081 p_tax,
2082 p_tax_regime_code,
2083 p_tax_determine_date,
2084 p_event_class_rec.event_class_mapping_id,
2085 --Bug 13507505
2086 --NVL(l_source_event_class_code, p_event_class_rec.tax_event_class_code));
2087 p_event_class_rec.tax_event_class_code);
2088 LOOP
2089 FETCH get_det_factor_templ_csr_e BULK COLLECT INTO
2090 l_tax_rule_id_tbl,
2091 l_tax_tbl,
2092 l_tax_regime_code_tbl,
2093 l_det_factor_templ_cd_tbl,
2094 l_rule_det_factor_cq_tbl,
2095 l_rule_geography_type_tbl,
2096 l_rule_geography_id_tbl
2097 LIMIT C_LINES_PER_COMMIT;
2098
2099 --CR#4255160 - Added new parameters for Det factor CQ, Geo type and Geo Id
2100 proc_det_factor_templ(
2101 p_structure_name,
2102 p_structure_index,
2103 l_det_factor_templ_cd_tbl,
2104 p_tax_status_code,
2105 p_event_class_rec,
2106 l_tax_tbl,
2107 p_tax_determine_date,
2108 p_recovery_type_code,
2109 p_found,
2110 l_tax_regime_code_tbl,
2111 p_service_type_code,
2112 l_tax_rule_id_tbl,
2113 l_rule_det_factor_cq_tbl,
2114 l_rule_geography_type_tbl,
2115 l_rule_geography_id_tbl,
2116 p_zx_result_rec,
2117 p_return_status,
2118 p_error_buffer);
2119
2120 IF (p_return_status <> FND_API.G_RET_STS_SUCCESS ) THEN
2121 CLOSE get_det_factor_templ_csr_e;
2122
2123 IF (g_level_error >= g_current_runtime_level ) THEN
2124 FND_LOG.STRING(g_level_error,
2125 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
2126 'Incorrect return_status after call proc_det_factor_templ().'||
2127 ', Return_status: '|| p_return_status);
2128 END IF;
2129
2130 RETURN; --EXIT;
2131 END IF;
2132
2133 IF (get_det_factor_templ_csr_e%NOTFOUND OR p_found) THEN
2134 IF (g_level_statement >= g_current_runtime_level ) THEN
2135 FND_LOG.STRING(g_level_statement,
2136 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
2137 'get_det_factor_templ_csr_e row count for tax event class code' ||
2138 TO_CHAR(get_det_factor_templ_csr_e%rowcount));
2139 END IF;
2140 CLOSE get_det_factor_templ_csr_e;
2141 EXIT;
2142 END IF;
2143
2144 END LOOP; -- bulk fetch template get_det_factor_templ_csr_e
2145
2146 END IF; --not p_found
2147 --Bug 13507505
2148
2149 IF get_det_factor_templ_csr_e%ISOPEN THEN
2150 CLOSE get_det_factor_templ_csr_e;
2151 END IF;
2152
2153 END IF; -- process of current event mapping and tax event class code
2154
2155 IF (g_level_procedure >= g_current_runtime_level ) THEN
2156 FND_LOG.STRING(g_level_procedure,
2157 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ.END',
2158 'ZX_TDS_RULE_BASE_DETM_PVT: fetch_proc_det_factor_templ(-)' ||
2159 ', p_return_status = ' || p_return_status ||
2160 ', p_error_buffer = ' || p_error_buffer);
2161 END IF;
2162
2163 EXCEPTION
2164 WHEN OTHERS THEN
2165 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2166 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
2167 IF get_det_factor_templ_csr_c%ISOPEN THEN
2168 CLOSE get_det_factor_templ_csr_c;
2169 ELSIF get_det_factor_templ_csr_d%ISOPEN THEN
2170 CLOSE get_det_factor_templ_csr_d;
2171 ELSIF get_det_factor_templ_csr_e%ISOPEN THEN
2172 CLOSE get_det_factor_templ_csr_e;
2173 END IF;
2174
2175 IF (g_level_unexpected >= g_current_runtime_level ) THEN
2176 FND_LOG.STRING(g_level_unexpected,
2177 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
2178 p_error_buffer);
2179 END IF;
2180
2181 END FETCH_PROC_DET_FACTOR_TEMPL;
2182
2183 ----------------------------------------------------------------------
2184 -- PRIVATE PROCEDURE
2185 -- get_rule_from_regime_hier
2186 --
2187 -- DESCRIPTION
2188 -- This procedure gets determining factor templates defined for rules
2189 -- at parent regime levels
2190 --
2191 -- History
2192 --
2193 -- Phong La 03-JUN-02 Created
2194
2195
2196 PROCEDURE get_rule_from_regime_hier(
2197 p_service_type_code IN ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
2198 p_structure_name IN VARCHAR2,
2199 p_structure_index IN BINARY_INTEGER,
2200 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
2201 p_tax_status_code IN ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
2202 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
2203 p_recovery_type_code IN ZX_RULES_B.RECOVERY_TYPE_CODE%TYPE,
2204 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
2205 p_found IN OUT NOCOPY BOOLEAN,
2206 p_parent_regime_cd_tbl IN TAX_REGIME_CODE_TBL,
2207 p_return_status OUT NOCOPY VARCHAR2,
2208 p_error_buffer OUT NOCOPY VARCHAR2)
2209
2210 IS
2211
2212 l_det_factor_templ_cd_tbl DET_FACTOR_TEMPL_CODE_TBL;
2213 l_tax_tbl TAX_TBL;
2214 l_tax_regime_code_tbl TAX_REGIME_CODE_TBL;
2215 l_tax_rule_id_tbl TAX_RULE_ID_TBL;
2216 l_count NUMBER;
2217
2218 --CR#4255160. Added new variables to store the Rule level Determining Factor CQ,
2219 -- Geography type and Geography Id
2220 l_rule_det_factor_cq_tbl RULE_DET_FACTOR_CQ_TBL;
2221 l_rule_geography_type_tbl RULE_GEOGRAPHY_TYPE_TBL;
2222 l_rule_geography_id_tbl RULE_GEOGRAPHY_ID_TBL;
2223
2224
2225 CURSOR get_templ_from_regime_hier_csr
2226 (c_service_type_code ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
2227 c_tax_regime_code ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
2228 c_tax_determine_date ZX_LINES.TAX_DETERMINE_DATE%TYPE,
2229 c_recovery_type_code ZX_RULES_B.RECOVERY_TYPE_CODE%TYPE,
2230 c_tax_status_code ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
2231 c_reference_application_id ZX_RULES_B.APPLICATION_ID%TYPE)
2232 IS
2233 SELECT TAX_RULE_ID, TAX, TAX_REGIME_CODE, DET_FACTOR_TEMPL_CODE,
2234 DETERMINING_FACTOR_CQ_CODE,
2235 GEOGRAPHY_TYPE,
2236 GEOGRAPHY_ID
2237 FROM ZX_SCO_RULES_B_V r
2238 WHERE SERVICE_TYPE_CODE = c_service_type_code
2239 AND TAX IS NULL
2240 AND TAX_REGIME_CODE = c_tax_regime_code
2241 AND c_tax_determine_date >= EFFECTIVE_FROM
2242 AND (c_tax_determine_date <= EFFECTIVE_TO OR
2243 EFFECTIVE_TO IS NULL)
2244 AND (RECOVERY_TYPE_CODE = c_recovery_type_code OR
2245 RECOVERY_TYPE_CODE IS NULL)
2246 AND NVL(System_Default_Flag, 'N') <> 'Y'
2247 AND (APPLICATION_ID = c_reference_application_id OR
2248 APPLICATION_ID IS NULL)
2249 AND Enabled_Flag = 'Y'
2250 AND EXISTS (SELECT /*+ FIRST_ROWS(1) */ 1
2251 FROM ZX_PROCESS_RESULTS pr
2252 WHERE pr.TAX_RULE_ID = r.TAX_RULE_ID
2253 AND pr.enabled_flag = 'Y'
2254 AND rownum = 1
2255 )
2256 ORDER BY PRIORITY;
2257
2258 BEGIN
2259
2260 IF (g_level_procedure >= g_current_runtime_level ) THEN
2261 FND_LOG.STRING(g_level_procedure,
2262 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_rule_from_regime_hier.BEGIN',
2263 'ZX_TDS_RULE_BASE_DETM_PVT: get_rule_from_regime_hier(+)');
2264 END IF;
2265
2266 p_return_status := FND_API.G_RET_STS_SUCCESS;
2267
2268 l_count := p_parent_regime_cd_tbl.count;
2269
2270 IF (g_level_statement >= g_current_runtime_level ) THEN
2271 FND_LOG.STRING(g_level_statement,
2272 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_rule_from_regime_hier',
2273 'parent regime count: ' || to_char(l_count));
2274 END IF;
2275
2276 FOR i IN 1.. l_count LOOP
2277
2278 IF (g_level_statement >= g_current_runtime_level ) THEN
2279 FND_LOG.STRING(g_level_statement,
2280 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_rule_from_regime_hier',
2281 'parent regime: ' || p_parent_regime_cd_tbl(i));
2282 END IF;
2283
2284 --
2285 -- get templates from ZX_RULES_B table.
2286 --
2287
2288 OPEN get_templ_from_regime_hier_csr(p_service_type_code,
2289 p_parent_regime_cd_tbl(i),
2290 p_tax_determine_date,
2291 p_recovery_type_code,
2292 p_tax_status_code,
2293 p_event_class_rec.application_id);
2294
2295 LOOP
2296 FETCH get_templ_from_regime_hier_csr bulk collect into
2297 l_tax_rule_id_tbl,
2298 l_tax_tbl,
2299 l_tax_regime_code_tbl,
2300 l_det_factor_templ_cd_tbl,
2301 l_rule_det_factor_cq_tbl ,
2302 l_rule_geography_type_tbl,
2303 l_rule_geography_id_tbl
2304 LIMIT C_LINES_PER_COMMIT;
2305
2306 --CR#4255160 - Added new parameters for Det factor CQ, Geo type and Geo Id
2307 proc_det_factor_templ(
2308 p_structure_name,
2309 p_structure_index,
2310 l_det_factor_templ_cd_tbl,
2311 p_tax_status_code,
2312 p_event_class_rec,
2313 l_tax_tbl,
2314 p_tax_determine_date,
2315 p_recovery_type_code,
2316 p_found,
2317 l_tax_regime_code_tbl,
2318 p_service_type_code,
2319 l_tax_rule_id_tbl,
2320 l_rule_det_factor_cq_tbl ,
2321 l_rule_geography_type_tbl,
2322 l_rule_geography_id_tbl,
2323 p_zx_result_rec,
2324 p_return_status,
2325 p_error_buffer);
2326 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2327 CLOSE get_templ_from_regime_hier_csr;
2328
2329 IF (g_level_error >= g_current_runtime_level ) THEN
2330 FND_LOG.STRING(g_level_error,
2331 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
2332 'Incorrect return_status after call proc_det_factor_templ().'||
2333 ', Return_status: '|| p_return_status);
2334 END IF;
2335
2336 EXIT;
2337 END IF;
2338
2339 IF (get_templ_from_regime_hier_csr%notfound OR p_found) THEN
2340 CLOSE get_templ_from_regime_hier_csr;
2341
2342 IF (g_level_error >= g_current_runtime_level ) THEN
2343 FND_LOG.STRING(g_level_error,
2344 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.fetch_proc_det_factor_templ',
2345 'Incorrect return_status after call proc_det_factor_templ().' ||
2346 ', Return_status: '|| p_return_status);
2347 END IF;
2348
2349 EXIT;
2350 END IF;
2351
2352 END LOOP; -- bulk fetch template.
2353
2354 IF get_templ_from_regime_hier_csr%ISOPEN THEN
2355 CLOSE get_templ_from_regime_hier_csr;
2356 END IF;
2357
2358 EXIT WHEN (p_found OR p_return_status = FND_API.G_RET_STS_ERROR);
2359 END LOOP;
2360
2361 IF (g_level_procedure >= g_current_runtime_level ) THEN
2362 FND_LOG.STRING(g_level_procedure,
2363 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_rule_from_regime_hier.END',
2364 'ZX_TDS_RULE_BASE_DETM_PVT: get_rule_from_regime_hier(-)' ||
2365 ', p_return_status = ' || p_return_status ||
2366 ', p_error_buffer = ' || p_error_buffer);
2367 END IF;
2368
2369 EXCEPTION
2370 WHEN OTHERS THEN
2371 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2372 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
2373 IF get_templ_from_regime_hier_csr%ISOPEN THEN
2374 CLOSE get_templ_from_regime_hier_csr;
2375 END IF;
2376
2377 IF (g_level_unexpected >= g_current_runtime_level ) THEN
2378 FND_LOG.STRING(g_level_unexpected,
2379 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_rule_from_regime_hier',
2380 p_error_buffer);
2381 END IF;
2382
2383 END get_rule_from_regime_hier;
2384
2385 ----------------------------------------------------------------------
2386 -- PRIVATE PROCEDURE
2387 -- proc_det_factor_templ
2388 --
2389 -- DESCRIPTION
2390 -- This procedure processes all condition groups for each determining
2391 -- factor template
2392 --
2393 PROCEDURE proc_det_factor_templ(
2394 p_structure_name IN VARCHAR2,
2395 p_structure_index IN BINARY_INTEGER,
2396 p_det_factor_templ_cd_tbl IN det_factor_templ_code_tbl,
2397 p_tax_status_code IN ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
2398 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
2399 p_tax_tbl IN TAX_TBL,
2400 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
2401 p_recovery_type_code IN ZX_RULES_B.RECOVERY_TYPE_CODE%TYPE,
2402 p_found IN OUT NOCOPY BOOLEAN,
2403 p_tax_regime_code_tbl IN TAX_REGIME_CODE_TBL,
2404 p_service_type_code IN ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
2405 p_tax_rule_id_tbl IN TAX_RULE_ID_TBL,
2406 p_rule_det_factor_cq_tbl IN RULE_DET_FACTOR_CQ_TBL,
2407 p_rule_geography_type_tbl IN RULE_GEOGRAPHY_TYPE_TBL,
2408 p_rule_geography_id_tbl IN RULE_GEOGRAPHY_ID_TBL,
2409 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
2410 p_return_status OUT NOCOPY VARCHAR2,
2411 p_error_buffer OUT NOCOPY VARCHAR2)
2412 IS
2413 l_count NUMBER;
2414 l_det_factor_templ_code ZX_DET_FACTOR_TEMPL_B.det_factor_templ_code%TYPE;
2415 l_result BOOLEAN;
2416 l_result_id ZX_PROCESS_RESULTS.RESULT_ID%TYPE;
2417 l_valid BOOLEAN;
2418
2419 --CR#4255160 - Added new variables to store the Geography context related information
2420 l_rule_det_factor_cq ZX_RULES_B.DETERMINING_FACTOR_CQ_CODE%TYPE;
2421 l_rule_geography_type ZX_RULES_B.GEOGRAPHY_TYPE%TYPE;
2422 l_rule_geography_id ZX_RULES_B.GEOGRAPHY_ID%TYPE;
2423
2424 BEGIN
2425
2426 IF (g_level_procedure >= g_current_runtime_level ) THEN
2427 FND_LOG.STRING(g_level_procedure,
2428 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_det_factor_templ.BEGIN',
2429 'ZX_TDS_RULE_BASE_DETM_PVT: proc_det_factor_templ(+)');
2430 END IF;
2431
2432 p_return_status := FND_API.G_RET_STS_SUCCESS;
2433 l_valid := TRUE;
2434
2435 l_count := p_det_factor_templ_cd_tbl.count;
2436
2437 IF (g_level_statement >= g_current_runtime_level ) THEN
2438 FND_LOG.STRING(g_level_statement,
2439 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_det_factor_templ',
2440 'determining factor template count: ' || to_char(l_count));
2441 END IF;
2442
2443
2444 FOR i IN 1.. l_count LOOP
2445
2446 l_valid := TRUE;
2447
2448 --CR#4255160 - Process only those Rules which have been definied specifically for the Geography
2449 --on the Document or a Generic Rule, not defined specific to any Geography.
2450 l_rule_det_factor_cq := p_rule_det_factor_cq_tbl(i);
2451 l_rule_geography_type := p_rule_geography_type_tbl(i);
2452 l_rule_geography_id := p_rule_geography_id_tbl(i);
2453
2454 IF (g_level_statement >= g_current_runtime_level ) THEN
2455 FND_LOG.STRING(g_level_statement,
2456 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_det_factor_templ',
2457 'l_rule_det_factor_cq: '||l_rule_det_factor_cq ||
2458 ', l_rule_geography_type: '||l_rule_geography_type ||
2459 ', l_rule_geography_id:'||l_rule_geography_id);
2460 END IF;
2461
2462 IF (l_rule_det_factor_cq IS NOT NULL AND
2463 l_rule_geography_type IS NOT NULL AND
2464 l_rule_geography_id IS NOT NULL) THEN
2465 check_rule_geography(
2466 p_structure_name,
2467 p_structure_index,
2468 l_rule_det_factor_cq,
2469 l_rule_geography_type,
2470 l_rule_geography_id,
2471 p_event_class_rec,
2472 l_valid,
2473 p_return_status,
2474 p_error_buffer);
2475 END IF;
2476
2477 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
2478 IF g_level_error >= g_current_runtime_level THEN
2479 FND_LOG.STRING(g_level_error,
2480 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_det_factor_templ',
2481 ' check_rule_geography returned Error');
2482 END IF;
2483 RETURN;
2484 END IF;
2485
2486
2487 --Continue processing the Rule only if the Rule's geography
2488 --matched with the one cached in the gloabl location structure
2489
2490 IF(l_valid AND p_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2491 --
2492 -- process 1 template at a time
2493 --
2494
2495 l_det_factor_templ_code := p_det_factor_templ_cd_tbl(i);
2496
2497 IF (g_level_statement >= g_current_runtime_level ) THEN
2498 FND_LOG.STRING(g_level_statement,
2499 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_det_factor_templ',
2500 'l_det_factor_templ_code: '||l_det_factor_templ_code);
2501 END IF;
2502
2503
2504 -- Bug 4166241 : for the template, check if the parameters associated with the determining factors
2505 -- are supported for the given Application
2506
2507 check_templ_tax_parameter(
2508 l_det_factor_templ_code,
2509 p_event_class_rec,
2510 l_valid,
2511 p_return_status,
2512 p_error_buffer);
2513
2514 -- process the template only if it is valid for the given application
2515 IF (l_valid AND p_return_status = FND_API.G_RET_STS_SUCCESS) THEN
2516
2517 -- get all the condition groups and conditions
2518 proc_condition_group_per_templ(
2519 p_structure_name,
2520 p_structure_index,
2521 l_det_factor_templ_code,
2522 p_event_class_rec,
2523 p_tax_tbl(i),
2524 p_tax_regime_code_tbl(i),
2525 p_tax_determine_date,
2526 p_service_type_code,
2527 p_tax_rule_id_tbl(i),
2528 p_tax_status_code,
2529 l_result,
2530 l_result_id,
2531 p_found,
2532 p_zx_result_rec,
2533 p_return_status,
2534 p_error_buffer);
2535
2536 -- if the whole condition is satisfied, put result to p_zx_result_rec
2537 /* moved get_result call inside
2538 * proc_condition_group_per_templ
2539 IF (l_result) THEN
2540 get_result(
2541 l_result_id,
2542 p_structure_name,
2543 p_structure_index,
2544 p_tax_regime_code_tbl(i),
2545 p_tax_tbl(i),
2546 p_tax_determine_date,
2547 p_found,
2548 p_zx_result_rec,
2549 p_return_status,
2550 p_error_buffer);
2551 END IF; --l_result
2552 */
2553 EXIT WHEN (p_found OR p_return_status <> FND_API.G_RET_STS_SUCCESS);
2554 END IF; --l_valid
2555 END IF; --l_valid for check_rule_geography
2556 END LOOP;
2557
2558 IF (g_level_procedure >= g_current_runtime_level ) THEN
2559 FND_LOG.STRING(g_level_procedure,
2560 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_det_factor_templ.END',
2561 'ZX_TDS_RULE_BASE_DETM_PVT: proc_det_factor_templ(-)');
2562 END IF;
2563
2564 EXCEPTION
2565 WHEN OTHERS THEN
2566 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
2567 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
2568
2569 IF (g_level_unexpected >= g_current_runtime_level ) THEN
2570 FND_LOG.STRING(g_level_unexpected,
2571 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_det_factor_templ',
2572 p_error_buffer);
2573 END IF;
2574
2575 END proc_det_factor_templ;
2576
2577 ----------------------------------------------------------------------
2578 -- PRIVATE PROCEDURE
2579 -- proc_condition_group_per_templ
2580 --
2581 -- DESCRIPTION
2582 -- This procedure processes all condition groups of a template
2583 --
2584
2585 PROCEDURE proc_condition_group_per_templ(
2586 p_structure_name IN VARCHAR2,
2587 p_structure_index IN BINARY_INTEGER,
2588 p_det_factor_templ_code IN
2589 ZX_DET_FACTOR_TEMPL_B.DET_FACTOR_TEMPL_CODE%TYPE,
2590 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
2591 p_tax IN ZX_TAXES_B.TAX%TYPE,
2592 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
2593 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
2594 p_service_type_code IN ZX_RULES_B.SERVICE_TYPE_CODE%TYPE,
2595 p_tax_rule_id IN ZX_RULES_B.TAX_RULE_ID%TYPE,
2596 p_tax_status_code IN ZX_STATUS_B.TAX_STATUS_CODE%TYPE,
2597 p_result IN OUT NOCOPY BOOLEAN,
2598 p_result_id IN OUT NOCOPY NUMBER,
2599 p_found IN OUT NOCOPY BOOLEAN ,
2600 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
2601 p_return_status OUT NOCOPY VARCHAR2,
2602 p_error_buffer OUT NOCOPY VARCHAR2)
2603
2604 IS
2605
2606 --bug#8551677
2607 --commenting the following local variables as they are no longer needed
2608 --
2609 --l_condition_group_code_tbl condition_group_code_tbl;
2610 --l_condition_group_id_tbl condition_group_id_tbl;
2611 --l_more_than10_tbl more_than10_tbl;
2612 --l_chart_of_accounts_id_tbl chart_of_accounts_id_tbl;
2613 --l_sob_id_tbl ledger_id_tbl;
2614 --l_det_factor_class1_tbl determining_factor_class_tbl;
2615 --l_determining_factor_cq1_tbl determining_factor_cq_tbl;
2616 --l_tax_parameter_code1_tbl tax_parameter_code_tbl;
2617 --l_data_type1_tbl data_type_tbl;
2618 --l_det_factor_code1_tbl determining_factor_code_tbl;
2619 --l_operator1_tbl operator_tbl;
2620 --l_numeric_value1_tbl numeric_value_tbl;
2621 --l_date_value1_tbl date_value_tbl;
2622 --l_alphanum_value1_tbl alphanumeric_value_tbl;
2623 --l_value_low1_tbl value_low_tbl;
2624 --l_value_high1_tbl value_high_tbl;
2625 --l_det_factor_class2_tbl determining_factor_class_tbl;
2626 --l_determining_factor_cq2_tbl determining_factor_cq_tbl;
2627 --l_tax_parameter_code2_tbl tax_parameter_code_tbl;
2628 --l_data_type2_tbl data_type_tbl;
2629 --l_det_factor_code2_tbl determining_factor_code_tbl;
2630 --l_operator2_tbl operator_tbl;
2631 --l_numeric_value2_tbl numeric_value_tbl;
2632 --l_date_value2_tbl date_value_tbl;
2633 --l_alphanum_value2_tbl alphanumeric_value_tbl;
2634 --l_value_low2_tbl value_low_tbl;
2635 --l_value_high2_tbl value_high_tbl;
2636 --l_det_factor_class3_tbl determining_factor_class_tbl;
2637 --l_determining_factor_cq3_tbl determining_factor_cq_tbl;
2638 --l_tax_parameter_code3_tbl tax_parameter_code_tbl;
2639 --l_data_type3_tbl data_type_tbl;
2640 --l_det_factor_code3_tbl determining_factor_code_tbl;
2641 --l_operator3_tbl operator_tbl;
2642 --l_numeric_value3_tbl numeric_value_tbl;
2643 --l_date_value3_tbl date_value_tbl;
2644 --l_alphanum_value3_tbl alphanumeric_value_tbl;
2645 --l_value_low3_tbl value_low_tbl;
2646 --l_value_high3_tbl value_high_tbl;
2647 --l_det_factor_class4_tbl determining_factor_class_tbl;
2648 --l_determining_factor_cq4_tbl determining_factor_cq_tbl;
2649 --l_tax_parameter_code4_tbl tax_parameter_code_tbl;
2650 --l_data_type4_tbl data_type_tbl;
2651 --l_det_factor_code4_tbl determining_factor_code_tbl;
2652 --l_operator4_tbl operator_tbl;
2653 --l_numeric_value4_tbl numeric_value_tbl;
2654 --l_date_value4_tbl date_value_tbl;
2655 --l_alphanum_value4_tbl alphanumeric_value_tbl;
2656 --l_value_low4_tbl value_low_tbl;
2657 --l_value_high4_tbl value_high_tbl;
2658 --l_det_factor_class5_tbl determining_factor_class_tbl;
2659 --l_determining_factor_cq5_tbl determining_factor_cq_tbl;
2660 --l_tax_parameter_code5_tbl tax_parameter_code_tbl;
2661 --l_data_type5_tbl data_type_tbl;
2662 --l_det_factor_code5_tbl determining_factor_code_tbl;
2663 --l_operator5_tbl operator_tbl;
2664 --l_numeric_value5_tbl numeric_value_tbl;
2665 --l_date_value5_tbl date_value_tbl;
2666 --l_alphanum_value5_tbl alphanumeric_value_tbl;
2667 --l_value_low5_tbl value_low_tbl;
2668 --l_value_high5_tbl value_high_tbl;
2669 --l_det_factor_class6_tbl determining_factor_class_tbl;
2670 --l_determining_factor_cq6_tbl determining_factor_cq_tbl;
2671 --l_tax_parameter_code6_tbl tax_parameter_code_tbl;
2672 --l_data_type6_tbl data_type_tbl;
2673 --l_det_factor_code6_tbl determining_factor_code_tbl;
2674 --l_operator6_tbl operator_tbl;
2675 --l_numeric_value6_tbl numeric_value_tbl;
2676 --l_date_value6_tbl date_value_tbl;
2677 --l_alphanum_value6_tbl alphanumeric_value_tbl;
2678 --l_value_low6_tbl value_low_tbl;
2679 --l_value_high6_tbl value_high_tbl;
2680 --l_det_factor_class7_tbl determining_factor_class_tbl;
2681 --l_determining_factor_cq7_tbl determining_factor_cq_tbl;
2682 --l_tax_parameter_code7_tbl tax_parameter_code_tbl;
2683 --l_data_type7_tbl data_type_tbl;
2684 --l_det_factor_code7_tbl determining_factor_code_tbl;
2685 --l_operator7_tbl operator_tbl;
2686 --l_numeric_value7_tbl numeric_value_tbl;
2687 --l_date_value7_tbl date_value_tbl;
2688 --l_alphanum_value7_tbl alphanumeric_value_tbl;
2689 --l_value_low7_tbl value_low_tbl;
2690 --l_value_high7_tbl value_high_tbl;
2691 --l_det_factor_class8_tbl determining_factor_class_tbl;
2692 --l_determining_factor_cq8_tbl determining_factor_cq_tbl;
2693 --l_tax_parameter_code8_tbl tax_parameter_code_tbl;
2694 --l_data_type8_tbl data_type_tbl;
2695 --l_det_factor_code8_tbl determining_factor_code_tbl;
2696 --l_operator8_tbl operator_tbl;
2697 --l_numeric_value8_tbl numeric_value_tbl;
2698 --l_date_value8_tbl date_value_tbl;
2699 --l_alphanum_value8_tbl alphanumeric_value_tbl;
2700 --l_value_low8_tbl value_low_tbl;
2701 --l_value_high8_tbl value_high_tbl;
2702 --l_det_factor_class9_tbl determining_factor_class_tbl;
2703 --l_determining_factor_cq9_tbl determining_factor_cq_tbl;
2704 --l_tax_parameter_code9_tbl tax_parameter_code_tbl;
2705 --l_data_type9_tbl data_type_tbl;
2706 --l_det_factor_code9_tbl determining_factor_code_tbl;
2707 --l_operator9_tbl operator_tbl;
2708 --l_numeric_value9_tbl numeric_value_tbl;
2709 --l_date_value9_tbl date_value_tbl;
2710 --l_alphanum_value9_tbl alphanumeric_value_tbl;
2711 --l_value_low9_tbl value_low_tbl;
2712 --l_value_high9_tbl value_high_tbl;
2713 --l_det_factor_class10_tbl determining_factor_class_tbl;
2714 --l_determining_factor_cq10_tbl determining_factor_cq_tbl;
2715 --l_tax_parameter_code10_tbl tax_parameter_code_tbl;
2716 --l_data_type10_tbl data_type_tbl;
2717 --l_det_factor_code10_tbl determining_factor_code_tbl;
2718 --l_operator10_tbl operator_tbl;
2719 --l_numeric_value10_tbl numeric_value_tbl;
2720 --l_date_value10_tbl date_value_tbl;
2721 --l_alphanum_value10_tbl alphanumeric_value_tbl;
2722 --l_value_low10_tbl value_low_tbl;
2723 --l_value_high10_tbl value_high_tbl;
2724 --l_result_id_tbl result_id_tbl;
2725 --l_constraint_id_tbl constraint_id_tbl;
2726
2727 l_constraint_result BOOLEAN;
2728 l_condition_group_evaluated BOOLEAN;
2729
2730 l_counter NUMBER;
2731 i NUMBER;
2732 --
2733 -- cursor for condition groups
2734 --
2735
2736 CURSOR get_condition_group_codes_csr
2737 (c_det_factor_templ_code ZX_DET_FACTOR_TEMPL_B.det_factor_templ_code%TYPE,
2738 c_tax_rule_id ZX_RULES_B.TAX_RULE_ID%TYPE,
2739 c_tax_status_code ZX_STATUS_B.TAX_STATUS_CODE%TYPE)
2740 IS
2741 SELECT /*+ leading(P) use_nl_with_index(s ZX_CONDITION_GROUPS_B_U1) */
2742 s.CONDITION_GROUP_ID, s.CONDITION_GROUP_CODE, More_Than_Max_Cond_Flag,
2743 Determining_Factor_Class1_Code, Determining_Factor_Cq1_Code,
2744 Data_Type1_Code, DETERMINING_FACTOR_CODE1,
2745 Operator1_Code, NUMERIC_VALUE1, DATE_VALUE1, ALPHANUMERIC_VALUE1,
2746 VALUE_LOW1, VALUE_HIGH1, TAX_PARAMETER_CODE1,
2747 Determining_Factor_Class2_Code, Determining_Factor_Cq2_Code,
2748 Data_Type2_Code, DETERMINING_FACTOR_CODE2,
2749 Operator2_Code, NUMERIC_VALUE2, DATE_VALUE2, ALPHANUMERIC_VALUE2,
2750 VALUE_LOW2, VALUE_HIGH2, TAX_PARAMETER_CODE2,
2751 Determining_Factor_Class3_Code, Determining_Factor_Cq3_Code,
2752 Data_Type3_Code, DETERMINING_FACTOR_CODE3,
2753 Operator3_Code, NUMERIC_VALUE3, DATE_VALUE3, ALPHANUMERIC_VALUE3,
2754 VALUE_LOW3, VALUE_HIGH3, TAX_PARAMETER_CODE3,
2755 Determining_Factor_Class4_Code, Determining_Factor_Cq4_Code,
2756 Data_Type4_Code, DETERMINING_FACTOR_CODE4,
2757 Operator4_Code, NUMERIC_VALUE4, DATE_VALUE4, ALPHANUMERIC_VALUE4,
2758 VALUE_LOW4, VALUE_HIGH4, TAX_PARAMETER_CODE4,
2759 Determining_Factor_Class5_Code, Determining_Factor_Cq5_Code,
2760 Data_Type5_Code, DETERMINING_FACTOR_CODE5,
2761 Operator5_Code, NUMERIC_VALUE5, DATE_VALUE5, ALPHANUMERIC_VALUE5,
2762 VALUE_LOW5, VALUE_HIGH5, TAX_PARAMETER_CODE5,
2763 Determining_Factor_Class6_Code, Determining_Factor_Cq6_Code,
2764 Data_Type6_Code, DETERMINING_FACTOR_CODE6,
2765 Operator6_Code, NUMERIC_VALUE6, DATE_VALUE6, ALPHANUMERIC_VALUE6,
2766 VALUE_LOW6, VALUE_HIGH6, TAX_PARAMETER_CODE6,
2767 Determining_Factor_Class7_Code, Determining_Factor_Cq7_Code,
2768 Data_Type7_Code, DETERMINING_FACTOR_CODE7,
2769 Operator7_Code, NUMERIC_VALUE7, DATE_VALUE7, ALPHANUMERIC_VALUE7,
2770 VALUE_LOW7, VALUE_HIGH7, TAX_PARAMETER_CODE7,
2771 Determining_Factor_Class8_Code, Determining_Factor_Cq8_Code,
2772 Data_Type8_Code, DETERMINING_FACTOR_CODE8,
2773 Operator8_Code, NUMERIC_VALUE8, DATE_VALUE8, ALPHANUMERIC_VALUE8,
2774 VALUE_LOW8, VALUE_HIGH8, TAX_PARAMETER_CODE8,
2775 Determining_Factor_Class9_Code, Determining_Factor_Cq9_Code,
2776 Data_Type9_Code, DETERMINING_FACTOR_CODE9,
2777 Operator9_Code, NUMERIC_VALUE9, DATE_VALUE9, ALPHANUMERIC_VALUE9,
2778 VALUE_LOW9, VALUE_HIGH9, TAX_PARAMETER_CODE9,
2779 Determining_Factor_Clas10_Code, Determining_Factor_Cq10_Code, Data_Type10_Code,
2780 DETERMINING_FACTOR_CODE10, Operator10_Code, NUMERIC_VALUE10, DATE_VALUE10,
2781 ALPHANUMERIC_VALUE10, VALUE_LOW10, VALUE_HIGH10,
2782 TAX_PARAMETER_CODE10, CHART_OF_ACCOUNTS_ID, LEDGER_ID,
2783 p.RESULT_ID,
2784 s.constraint_id
2785 FROM ZX_CONDITION_GROUPS_B s,
2786 ZX_PROCESS_RESULTS p
2787 WHERE --s.det_factor_templ_code = c_det_factor_templ_code AND
2788 s.enabled_flag = 'Y' AND
2789 --s.condition_group_code = p.condition_group_code AND
2790 s.condition_group_id = p.condition_group_id AND
2791 p.tax_rule_id = c_tax_rule_id AND
2792 p.enabled_flag = 'Y' AND
2793 (p.tax_status_code = c_tax_status_code OR
2794 p.tax_status_code IS NULL )
2795 ORDER BY p.priority;
2796
2797 l_action_rec_tbl ZX_TDS_PROCESS_CEC_PVT.action_rec_tbl_type;
2798 hash_val VARCHAR2(100);
2799
2800 BEGIN
2801
2802 IF (g_level_procedure >= g_current_runtime_level ) THEN
2803 FND_LOG.STRING(g_level_procedure,
2804 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_condition_group_per_templ.BEGIN',
2805 'ZX_TDS_RULE_BASE_DETM_PVT: proc_condition_group_per_templ(+)');
2806 END IF;
2807
2808 p_return_status := FND_API.G_RET_STS_SUCCESS;
2809 l_constraint_result := FALSE;
2810 l_condition_group_evaluated := FALSE;
2811
2812 -- reset the left hand side trx value for a new unevaluated template.
2813 -- g_trx_numeric_value_tbl.delete;
2814 -- g_trx_date_value_tbl.delete;
2815 -- g_trx_alphanumeric_value_tbl.delete;
2816
2817 --
2818 -- init get transaction values flag, need to get transaction
2819 -- values only once
2820 --
2821
2822 -- caching fix done for bug#8551677
2823 hash_val := to_char(p_tax_rule_id) || '|' || NVL(p_det_factor_templ_code, FND_API.G_MISS_CHAR) || '|' || NVL(p_tax_status_code, FND_API.G_MISS_CHAR);
2824
2825 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl.EXISTS(hash_val) AND
2826 ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).tax_rule_id = p_tax_rule_id AND
2827 NVL(ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).det_factor_templ_code, FND_API.G_MISS_CHAR) = NVL(p_det_factor_templ_code, FND_API.G_MISS_CHAR) AND
2828 NVL(ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).tax_status_code, FND_API.G_MISS_CHAR) = NVL(p_tax_status_code, FND_API.G_MISS_CHAR) THEN
2829 IF (g_level_statement >= g_current_runtime_level ) THEN
2830 FND_LOG.STRING(g_level_statement,
2831 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_condition_group_per_templ',
2832 'Condition Information found in cache...' || hash_val);
2833 END IF;
2834 l_counter := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl.count;
2835 ELSE
2836 IF (g_level_statement >= g_current_runtime_level ) THEN
2837 FND_LOG.STRING(g_level_statement,
2838 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_condition_group_per_templ',
2839 'Condition Information not found in cache...' || hash_val);
2840 END IF;
2841 ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).tax_rule_id := p_tax_rule_id;
2842 ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).det_factor_templ_code := NVL(p_det_factor_templ_code, FND_API.G_MISS_CHAR);
2843 ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).tax_status_code := NVL(p_tax_status_code, FND_API.G_MISS_CHAR);
2844 OPEN get_condition_group_codes_csr(p_det_factor_templ_code,
2845 p_tax_rule_id,
2846 p_tax_status_code);
2847 --LOOP
2848 FETCH get_condition_group_codes_csr bulk collect into
2849 ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl;
2850 --bug#8551677
2851 --FETCH get_condition_group_codes_csr bulk collect into
2852 -- l_condition_group_id_tbl,
2853 -- l_condition_group_code_tbl,
2854 -- l_more_than10_tbl,
2855 -- l_det_factor_class1_tbl,
2856 -- l_determining_factor_cq1_tbl,
2857 -- l_data_type1_tbl,
2858 -- l_det_factor_code1_tbl,
2859 -- l_operator1_tbl,
2860 -- l_numeric_value1_tbl,
2861 -- l_date_value1_tbl,
2862 -- l_alphanum_value1_tbl,
2863 -- l_value_low1_tbl,
2864 -- l_value_high1_tbl,
2865 -- l_tax_parameter_code1_tbl,
2866 -- l_det_factor_class2_tbl,
2867 -- l_determining_factor_cq2_tbl,
2868 -- l_data_type2_tbl,
2869 -- l_det_factor_code2_tbl,
2870 -- l_operator2_tbl,
2871 -- l_numeric_value2_tbl,
2872 -- l_date_value2_tbl,
2873 -- l_alphanum_value2_tbl,
2874 -- l_value_low2_tbl,
2875 -- l_value_high2_tbl,
2876 -- l_tax_parameter_code2_tbl,
2877 -- l_det_factor_class3_tbl,
2878 -- l_determining_factor_cq3_tbl,
2879 -- l_data_type3_tbl,
2880 -- l_det_factor_code3_tbl,
2881 -- l_operator3_tbl,
2882 -- l_numeric_value3_tbl,
2883 -- l_date_value3_tbl,
2884 -- l_alphanum_value3_tbl,
2885 -- l_value_low3_tbl,
2886 -- l_value_high3_tbl,
2887 -- l_tax_parameter_code3_tbl,
2888 -- l_det_factor_class4_tbl,
2889 -- l_determining_factor_cq4_tbl,
2890 -- l_data_type4_tbl,
2891 -- l_det_factor_code4_tbl,
2892 -- l_operator4_tbl,
2893 -- l_numeric_value4_tbl,
2894 -- l_date_value4_tbl,
2895 -- l_alphanum_value4_tbl,
2896 -- l_value_low4_tbl,
2897 -- l_value_high4_tbl,
2898 -- l_tax_parameter_code4_tbl,
2899 -- l_det_factor_class5_tbl,
2900 -- l_determining_factor_cq5_tbl,
2901 -- l_data_type5_tbl,
2902 -- l_det_factor_code5_tbl,
2903 -- l_operator5_tbl,
2904 -- l_numeric_value5_tbl,
2905 -- l_date_value5_tbl,
2906 -- l_alphanum_value5_tbl,
2907 -- l_value_low5_tbl,
2908 -- l_value_high5_tbl,
2909 -- l_tax_parameter_code5_tbl,
2910 -- l_det_factor_class6_tbl,
2911 -- l_determining_factor_cq6_tbl,
2912 -- l_data_type6_tbl,
2913 -- l_det_factor_code6_tbl,
2914 -- l_operator6_tbl,
2915 -- l_numeric_value6_tbl,
2916 -- l_date_value6_tbl,
2917 -- l_alphanum_value6_tbl,
2918 -- l_value_low6_tbl,
2919 -- l_value_high6_tbl,
2920 -- l_tax_parameter_code6_tbl,
2921 -- l_det_factor_class7_tbl,
2922 -- l_determining_factor_cq7_tbl,
2923 -- l_data_type7_tbl,
2924 -- l_det_factor_code7_tbl,
2925 -- l_operator7_tbl,
2926 -- l_numeric_value7_tbl,
2927 -- l_date_value7_tbl,
2928 -- l_alphanum_value7_tbl,
2929 -- l_value_low7_tbl,
2930 -- l_value_high7_tbl,
2931 -- l_tax_parameter_code7_tbl,
2932 -- l_det_factor_class8_tbl,
2933 -- l_determining_factor_cq8_tbl,
2934 -- l_data_type8_tbl,
2935 -- l_det_factor_code8_tbl,
2936 -- l_operator8_tbl,
2937 -- l_numeric_value8_tbl,
2938 -- l_date_value8_tbl,
2939 -- l_alphanum_value8_tbl,
2940 -- l_value_low8_tbl,
2941 -- l_value_high8_tbl,
2942 -- l_tax_parameter_code8_tbl,
2943 -- l_det_factor_class9_tbl,
2944 -- l_determining_factor_cq9_tbl,
2945 -- l_data_type9_tbl,
2946 -- l_det_factor_code9_tbl,
2947 -- l_operator9_tbl,
2948 -- l_numeric_value9_tbl,
2949 -- l_date_value9_tbl,
2950 -- l_alphanum_value9_tbl,
2951 -- l_value_low9_tbl,
2952 -- l_value_high9_tbl,
2953 -- l_tax_parameter_code9_tbl,
2954 -- l_det_factor_class10_tbl,
2955 -- l_determining_factor_cq10_tbl,
2956 -- l_data_type10_tbl,
2957 -- l_det_factor_code10_tbl,
2958 -- l_operator10_tbl,
2959 -- l_numeric_value10_tbl,
2960 -- l_date_value10_tbl,
2961 -- l_alphanum_value10_tbl,
2962 -- l_value_low10_tbl,
2963 -- l_value_high10_tbl,
2964 -- l_tax_parameter_code10_tbl,
2965 -- l_chart_of_accounts_id_tbl,
2966 -- l_sob_id_tbl,
2967 -- l_result_id_tbl,
2968 -- l_constraint_id_tbl
2969 -- limit C_LINES_PER_COMMIT;
2970
2971 --l_counter := l_condition_group_code_tbl.count;
2972 l_counter := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl.count;
2973
2974 IF (g_level_statement >= g_current_runtime_level ) THEN
2975 FND_LOG.STRING(g_level_statement,
2976 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_condition_group_per_templ',
2977 'condition group count: ' || to_char(l_counter));
2978 END IF;
2979 END IF; --bug#8551677 cache check
2980
2981 FOR j IN 1..l_counter LOOP
2982
2983 /* -- comment out for bug 5211699, Nilesh will check the cache issue
2984 -- together with performance fix.
2985 -- check if the template has been evaluated.
2986 check_condition_group_result(
2987 p_det_factor_templ_code,
2988 l_condition_group_code_tbl(j),
2989 p_structure_index,
2990 p_event_class_rec,
2991 l_condition_group_evaluated,
2992 p_result);
2993 */
2994
2995 IF (NOT l_condition_group_evaluated) THEN
2996 -- Initialize l_constraint_result to TRUE so that the evaluation of Condition Group
2997 -- is processed irrespective of Constraint association with Condition Group.
2998 l_constraint_result := TRUE;
2999
3000 -- Check if the Condition Group has associated Constraint which would
3001 -- exist for Migrated Records only.
3002 -- If constraint exists and the action for the condition group evaluates
3003 -- to use it, only then evaluate conditions of the Condition Group.
3004 -- Otherwise, store FALSE as result outcome for the Condition Group.
3005 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).constraint_id IS NOT NULL THEN
3006 init_cec_params (p_structure_name => p_structure_name,
3007 p_structure_index => p_structure_index,
3008 p_return_status => p_return_status,
3009 p_error_buffer => p_error_buffer);
3010
3011 ZX_TDS_PROCESS_CEC_PVT.evaluate_cec(
3012 p_constraint_id => ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).constraint_id,
3013 p_cec_ship_to_party_site_id => g_cec_ship_to_party_site_id,
3014 p_cec_bill_to_party_site_id => g_cec_bill_to_party_site_id,
3015 p_cec_ship_to_party_id => g_cec_ship_to_party_id,
3016 p_cec_bill_to_party_id => g_cec_bill_to_party_id,
3017 p_cec_poo_location_id => g_cec_poo_location_id,
3018 p_cec_poa_location_id => g_cec_poa_location_id,
3019 p_cec_trx_id => g_cec_trx_id,
3020 p_cec_trx_line_id => g_cec_trx_line_id,
3021 p_cec_ledger_id => g_cec_ledger_id,
3022 p_cec_internal_organization_id => g_cec_internal_organization_id,
3023 p_cec_so_organization_id => g_cec_so_organization_id,
3024 p_cec_product_org_id => g_cec_product_org_id,
3025 p_cec_product_id => g_cec_product_id,
3026 p_cec_trx_line_date => g_cec_trx_line_date,
3027 p_cec_trx_type_id => g_cec_trx_type_id,
3028 p_cec_fob_point => g_cec_fob_point,
3029 p_cec_ship_to_site_use_id => g_cec_ship_to_site_use_id,
3030 p_cec_bill_to_site_use_id => g_cec_bill_to_site_use_id,
3031 p_cec_result => l_constraint_result,
3032 p_action_rec_tbl => l_action_rec_tbl,
3033 p_return_status => p_return_status,
3034 p_error_buffer => p_error_buffer);
3035 p_result := l_constraint_result;
3036 END IF;
3037
3038 -- bug 3976490
3039 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).constraint_id is not NULL then
3040
3041 -- every constraint must evaluate to either TRUE or FALSE. Based on this, the
3042 -- values in the p_action_rec_tbl will be action for True condition or Falese condition.
3043
3044 for i in 1.. nvl(l_action_rec_tbl.last,0) loop
3045
3046 if upper(l_action_rec_tbl(i).action_code) in ('ERROR_MESSAGE','SYSTEM_ERROR') then
3047 p_return_status := FND_API.G_RET_STS_ERROR;
3048
3049 -- Bug 8568734
3050 FND_MESSAGE.SET_NAME('ZX','ZX_CONSTRAINT_EVALUATION_ERROR');
3051 FND_MESSAGE.SET_TOKEN('CONDITION_GROUP',ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).condition_group_code);
3052 FND_MESSAGE.SET_TOKEN('ACTION_CODE', l_action_rec_tbl(i).action_code );
3053 ZX_API_PUB.add_msg(ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
3054
3055 IF (g_level_error >= g_current_runtime_level ) THEN
3056 FND_LOG.STRING(g_level_error,
3057 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_condition_group_per_templ',
3058 'Action_code is ERROR_MESSAGE or SYSTEM_ERROR');
3059 END IF;
3060 app_exception.raise_exception;
3061 elsif upper(l_action_rec_tbl(i).action_code) = 'DO_NOT_USE_THIS_TAX_GROUP' then
3062 l_constraint_result := FALSE;
3063 elsif upper(l_action_rec_tbl(i).action_code) = 'USE_THIS_TAX_GROUP' then
3064 l_constraint_result := TRUE;
3065 elsif upper(l_action_rec_tbl(i).action_code) = 'DEFAULT_TAX_CODE' then
3066 NULL;
3067 --++ How do we default a Tax Code at Tax Group level if there are
3068 -- multiple tax codes associated with that tax group? Even if we default,
3069 -- should we evaluate the conditions and exceptions and if there is an action
3070 -- DEFAULT_TAX_CODE should we honour that one ? Revisit later
3071 end if;
3072 end loop;
3073 END IF;
3074
3075 IF l_constraint_result THEN
3076 --
3077 -- process 1 condition group at a time
3078 -- if this condition group evaluates to true,
3079 -- exit all loops and no need to search any more
3080 --
3081
3082 -- init conditions for this condition group
3083 init_set_condition;
3084
3085 -- check if there are too many conditions.
3086 IF (g_level_statement >= g_current_runtime_level ) THEN
3087 FND_LOG.STRING(g_level_statement,
3088 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_condition_group_per_templ',
3089 'more_than10 ? ' ||ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).more_than10);
3090 END IF;
3091
3092 IF (ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).more_than10 = 'Y') THEN
3093 --
3094 -- if the condition group has more than 10 conditions
3095 -- get all conditions from zx_condtions
3096 --
3097
3098 get_and_process_condition(
3099 p_structure_name,
3100 p_structure_index,
3101 ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).condition_group_code,
3102 p_event_class_rec,
3103 p_tax,
3104 p_tax_regime_code,
3105 p_tax_determine_date,
3106 p_result,
3107 ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).chart_of_accounts_id,
3108 ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).sob_id,
3109 p_return_status,
3110 p_error_buffer);
3111
3112 ELSE
3113 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).det_factor_class1 IS NOT NULL THEN
3114 get_set_info(p_hash_val => hash_val
3115 ,p_rec_pointer => j);
3116 END IF;
3117
3118 --
3119 -- process the conditions for this condition group
3120 --
3121 process_set_condition(
3122 p_structure_name,
3123 p_structure_index,
3124 p_event_class_rec,
3125 p_tax_determine_date,
3126 p_tax,
3127 p_tax_regime_code,
3128 p_result,
3129 ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).chart_of_accounts_id,
3130 ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).sob_id,
3131 p_return_status,
3132 p_error_buffer);
3133
3134 END IF;
3135 END IF; /* of l_constraint_result */
3136 --
3137 -- if p_return_status = ERROR from process_set_condition
3138 -- that means get_trx_value results in error while trying to get
3139 -- transaction values, return to calling process immediately
3140 --
3141 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3142 CLOSE get_condition_group_codes_csr;
3143 IF (g_level_error >= g_current_runtime_level ) THEN
3144 FND_LOG.STRING(g_level_error,
3145 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_condition_group_per_templ',
3146 'Incorrect return_status after calling process_set_condition() ' ||
3147 ', p_return_status = ' || p_return_status);
3148 END IF;
3149
3150 RETURN;
3151 END IF;
3152 --
3153 -- update condition group result table with the result of
3154 -- of the condition group just evaluated
3155 --
3156 insert_condition_group_result(p_det_factor_templ_code,
3157 ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).condition_group_code,
3158 p_result,
3159 p_structure_index,
3160 p_event_class_rec );
3161
3162 END IF; /* of NOT l_condition_group_evaluated */
3163 IF p_result THEN
3164 --
3165 -- 1 of the condition groups evaluates to TRUE for this template,
3166 -- no need to evaluate the rest of the condition groups
3167 --
3168
3169 -- Assign the Result Id for the evaluated condition group.
3170 --p_result_id := l_result_id_tbl(j);
3171 p_result_id := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(hash_val).condition_info_rec_tbl(j).result_id;
3172
3173 get_result(
3174 p_result_id,
3175 p_structure_name,
3176 p_structure_index,
3177 p_tax_regime_code,
3178 p_tax,
3179 p_tax_determine_date,
3180 p_found,
3181 p_zx_result_rec,
3182 p_return_status,
3183 p_error_buffer);
3184 EXIT WHEN (p_found OR p_return_status <> FND_API.G_RET_STS_SUCCESS);
3185 END IF;
3186 END LOOP;
3187
3188 IF (l_counter = 0 OR p_result) THEN
3189 --CLOSE get_condition_group_codes_csr;
3190 IF get_condition_group_codes_csr%ISOPEN THEN
3191 CLOSE get_condition_group_codes_csr;
3192 END IF;
3193 IF (g_level_statement >= g_current_runtime_level ) THEN
3194 FND_LOG.STRING(g_level_statement,
3195 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_condition_group_per_templ',
3196 'No condition group found for the determing factor template: ' ||
3197 p_det_factor_templ_code ||
3198 ', or condition group evaluated to be true.');
3199 END IF;
3200 --bug#8551677
3201 --EXIT;
3202 END IF;
3203
3204
3205 --bug#8551677
3206 --END LOOP;
3207
3208 IF get_condition_group_codes_csr%ISOPEN THEN
3209 CLOSE get_condition_group_codes_csr;
3210 END IF;
3211
3212 IF (g_level_procedure >= g_current_runtime_level ) THEN
3213 FND_LOG.STRING(g_level_procedure,
3214 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_condition_group_per_templ.END',
3215 'ZX_TDS_RULE_BASE_DETM_PVT: proc_condition_group_per_templ(-)' ||
3216 ', p_return_status = ' || p_return_status ||
3217 ', p_error_buffer = ' || p_error_buffer);
3218 END IF;
3219
3220 EXCEPTION
3221 WHEN OTHERS THEN
3222 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3223 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
3224 IF get_condition_group_codes_csr%ISOPEN THEN
3225 CLOSE get_condition_group_codes_csr;
3226 END IF;
3227 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3228 FND_LOG.STRING(g_level_unexpected,
3229 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.proc_condition_group_per_templ',
3230 p_error_buffer);
3231 END IF;
3232
3233 END proc_condition_group_per_templ;
3234
3235 -----------------------------------------------------------------------
3236 -- PRIVATE PROCEDURE
3237 -- get_and_process_condition
3238 --
3239 -- DESCRIPTION
3240 -- This procedure processes all conditions defined for a condition group
3241 -- when the conditions for this condition group is more than 10
3242 --
3243
3244 PROCEDURE get_and_process_condition(
3245 p_structure_name IN VARCHAR2,
3246 p_structure_index IN BINARY_INTEGER,
3247 p_condition_group_code IN
3248 ZX_CONDITION_GROUPS_B.condition_group_CODE%TYPE,
3249 p_event_class_rec IN
3250 ZX_API_PUB.EVENT_CLASS_REC_TYPE,
3251 p_tax IN ZX_TAXES_B.TAX%TYPE,
3252 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
3253 p_tax_determine_date IN
3254 ZX_LINES.TAX_DETERMINE_DATE%TYPE,
3255 p_result IN OUT NOCOPY BOOLEAN,
3256 p_chart_of_accounts_id IN
3257 ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
3258 p_sob_id IN
3259 ZX_CONDITION_GROUPS_B.LEDGER_ID%TYPE,
3260 p_return_status OUT NOCOPY VARCHAR2,
3261 p_error_buffer OUT NOCOPY VARCHAR2)
3262 IS
3263 l_condition_result BOOLEAN;
3264
3265 CURSOR get_condition_csr
3266 (c_condition_group_code ZX_CONDITION_GROUPS_B.condition_group_CODE%TYPE)
3267 IS
3268
3269 SELECT Determining_Factor_Class_Code,
3270 Determining_Factor_Cq_Code,
3271 Data_Type_Code,
3272 determining_factor_code,
3273 TAX_PARAMETER_CODE,
3274 Operator_Code,
3275 NUMERIC_VALUE,
3276 DATE_VALUE,
3277 ALPHANUMERIC_VALUE,
3278 VALUE_LOW,
3279 VALUE_HIGH
3280 FROM ZX_CONDITIONS
3281 WHERE CONDITION_GROUP_CODE = c_condition_group_code
3282 AND (Ignore_Flag <> 'Y' OR IGNORE_FLAG IS NULL);
3283
3284
3285 BEGIN
3286
3287 IF (g_level_procedure >= g_current_runtime_level ) THEN
3288 FND_LOG.STRING(g_level_procedure,
3289 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_and_process_condition.BEGIN',
3290 'ZX_TDS_RULE_BASE_DETM_PVT: get_and_process_condition(+)');
3291
3292 IF (g_level_statement >= g_current_runtime_level ) THEN
3293 FND_LOG.STRING(g_level_statement,
3294 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_and_process_condition',
3295 'p_condition_group_code: ' || p_condition_group_code);
3296
3297 END IF;
3298 END IF;
3299
3300 p_return_status := FND_API.G_RET_STS_SUCCESS;
3301
3302 l_condition_result := TRUE;
3303
3304 --
3305 -- process all conditions for this condition group
3306 --
3307 OPEN get_condition_csr(p_condition_group_code);
3308 LOOP
3309 FETCH get_condition_csr bulk collect into
3310 g_determining_factor_class_tbl,
3311 g_determining_factor_cq_tbl,
3312 g_data_type_tbl,
3313 g_determining_factor_code_tbl,
3314 g_tax_parameter_code_tbl,
3315 g_operator_tbl,
3316 g_numeric_value_tbl,
3317 g_date_value_tbl,
3318 g_alphanum_value_tbl,
3319 g_value_low_tbl,
3320 g_value_high_tbl
3321 LIMIT C_LINES_PER_COMMIT;
3322
3323 process_set_condition(
3324 p_structure_name,
3325 p_structure_index,
3326 p_event_class_rec,
3327 p_tax_determine_date,
3328 p_tax,
3329 p_tax_regime_code,
3330 p_result,
3331 p_chart_of_accounts_id,
3332 p_sob_id,
3333 p_return_status,
3334 p_error_buffer);
3335
3336
3337 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3338 CLOSE get_condition_csr;
3339 IF (g_level_error >= g_current_runtime_level ) THEN
3340 FND_LOG.STRING(g_level_error,
3341 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_and_process_condition',
3342 'conditions count: ' ||
3343 to_char(get_condition_csr%ROWCOUNT));
3344 END IF;
3345 RETURN;
3346 END IF;
3347 --
3348 -- continue to evaluate the rest of the conditions for this
3349 -- condition group only if previous conditions evaluate to true
3350 -- and there are more conditions to process
3351 --
3352 IF (get_condition_csr%notfound OR NOT p_result) THEN
3353 IF (g_level_statement >= g_current_runtime_level ) THEN
3354 FND_LOG.STRING(g_level_statement,
3355 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_and_process_condition',
3356 'conditions count:' ||
3357 to_char(get_condition_csr%ROWCOUNT));
3358 END IF;
3359 CLOSE get_condition_csr;
3360 EXIT;
3361 END IF;
3362 END LOOP;
3363
3364 IF get_condition_csr%ISOPEN THEN
3365 CLOSE get_condition_csr;
3366 END IF;
3367
3368 IF (g_level_procedure >= g_current_runtime_level ) THEN
3369 FND_LOG.STRING(g_level_procedure,
3370 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_and_process_condition.END',
3371 'ZX_TDS_RULE_BASE_DETM_PVT: get_and_process_condition(-)');
3372 END IF;
3373
3374 EXCEPTION
3375 WHEN OTHERS THEN
3376 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3377 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
3378 IF get_condition_csr%ISOPEN THEN
3379 CLOSE get_condition_csr;
3380 END IF;
3381
3382 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3383 FND_LOG.STRING(g_level_unexpected,
3384 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_and_process_condition',
3385 p_error_buffer);
3386 END IF;
3387
3388 END get_and_process_condition;
3389
3390 ----------------------------------------------------------------------
3391 -- PRIVATE PROCEDURE
3392 -- get_set_info
3393 --
3394 -- DESCRIPTION
3395 --
3396 -- This procedure gets all information of a condition defined
3397 -- within a condition group
3398 --
3399
3400
3401 PROCEDURE get_set_info (p_hash_val IN VARCHAR2,
3402 p_rec_pointer IN NUMBER) IS
3403
3404 BEGIN
3405
3406 IF (g_level_procedure >= g_current_runtime_level ) THEN
3407 FND_LOG.STRING(g_level_procedure,
3408 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_set_info.BEGIN',
3409 'ZX_TDS_RULE_BASE_DETM_PVT: get_set_info(+)');
3410 IF (g_level_statement >= g_current_runtime_level ) THEN
3411 FND_LOG.STRING(g_level_statement,
3412 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_set_info',
3413 'p_hash_val: ' || p_hash_val ||
3414 ', p_rec_pointer: ' || p_rec_pointer);
3415 END IF;
3416 END IF;
3417
3418 -- this is called when the 1st record needs to be set
3419 g_determining_factor_class_tbl(1) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class1;
3420 g_determining_factor_cq_tbl(1) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).determining_factor_cq1;
3421 g_tax_parameter_code_tbl(1) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).tax_parameter_code1;
3422 g_data_type_tbl(1) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).data_type1;
3423 g_determining_factor_code_tbl(1) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_code1;
3424 g_operator_tbl(1) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).operator1;
3425 g_numeric_value_tbl(1) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).numeric_value1;
3426 g_date_value_tbl(1) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).date_value1;
3427 g_alphanum_value_tbl(1) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).alphanum_value1;
3428 g_value_low_tbl(1) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_low1;
3429 g_value_high_tbl(1) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_high1;
3430
3431 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class2 IS NOT NULL THEN
3432 g_determining_factor_class_tbl(2) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class2;
3433 g_determining_factor_cq_tbl(2) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).determining_factor_cq2;
3434 g_tax_parameter_code_tbl(2) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).tax_parameter_code2;
3435 g_data_type_tbl(2) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).data_type2;
3436 g_determining_factor_code_tbl(2) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_code2;
3437 g_operator_tbl(2) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).operator2;
3438 g_numeric_value_tbl(2) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).numeric_value2;
3439 g_date_value_tbl(2) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).date_value2;
3440 g_alphanum_value_tbl(2) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).alphanum_value2;
3441 g_value_low_tbl(2) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_low2;
3442 g_value_high_tbl(2) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_high2;
3443
3444 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class3 IS NOT NULL THEN
3445 g_determining_factor_class_tbl(3) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class3;
3446 g_determining_factor_cq_tbl(3) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).determining_factor_cq3;
3447 g_tax_parameter_code_tbl(3) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).tax_parameter_code3;
3448 g_data_type_tbl(3) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).data_type3;
3449 g_determining_factor_code_tbl(3) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_code3;
3450 g_operator_tbl(3) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).operator3;
3451 g_numeric_value_tbl(3) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).numeric_value3;
3452 g_date_value_tbl(3) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).date_value3;
3453 g_alphanum_value_tbl(3) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).alphanum_value3;
3454 g_value_low_tbl(3) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_low3;
3455 g_value_high_tbl(3) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_high3;
3456
3457 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class4 IS NOT NULL THEN
3458 g_determining_factor_class_tbl(4) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class4;
3459 g_determining_factor_cq_tbl(4) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).determining_factor_cq4;
3460 g_tax_parameter_code_tbl(4) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).tax_parameter_code4;
3461 g_data_type_tbl(4) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).data_type4;
3462 g_determining_factor_code_tbl(4) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_code4;
3463 g_operator_tbl(4) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).operator4;
3464 g_numeric_value_tbl(4) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).numeric_value4;
3465 g_date_value_tbl(4) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).date_value4;
3466 g_alphanum_value_tbl(4) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).alphanum_value4;
3467 g_value_low_tbl(4) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_low4;
3468 g_value_high_tbl(4) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_high4;
3469
3470 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class5 IS NOT NULL THEN
3471 g_determining_factor_class_tbl(5) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class5;
3472 g_determining_factor_cq_tbl(5) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).determining_factor_cq5;
3473 g_tax_parameter_code_tbl(5) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).tax_parameter_code5;
3474 g_data_type_tbl(5) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).data_type5;
3475 g_determining_factor_code_tbl(5) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_code5;
3476 g_operator_tbl(5) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).operator5;
3477 g_numeric_value_tbl(5) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).numeric_value5;
3478 g_date_value_tbl(5) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).date_value5;
3479 g_alphanum_value_tbl(5) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).alphanum_value5;
3480 g_value_low_tbl(5) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_low5;
3481 g_value_high_tbl(5) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_high5;
3482
3483 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class6 IS NOT NULL THEN
3484 g_determining_factor_class_tbl(6) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class6;
3485 g_determining_factor_cq_tbl(6) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).determining_factor_cq6;
3486 g_tax_parameter_code_tbl(6) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).tax_parameter_code6;
3487 g_data_type_tbl(6) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).data_type6;
3488 g_determining_factor_code_tbl(6) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_code6;
3489 g_operator_tbl(6) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).operator6;
3490 g_numeric_value_tbl(6) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).numeric_value6;
3491 g_date_value_tbl(6) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).date_value6;
3492 g_alphanum_value_tbl(6) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).alphanum_value6;
3493 g_value_low_tbl(6) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_low6;
3494 g_value_high_tbl(6) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_high6;
3495
3496 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class7 IS NOT NULL THEN
3497 g_determining_factor_class_tbl(7) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class7;
3498 g_determining_factor_cq_tbl(7) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).determining_factor_cq7;
3499 g_tax_parameter_code_tbl(7) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).tax_parameter_code7;
3500 g_data_type_tbl(7) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).data_type7;
3501 g_determining_factor_code_tbl(7) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_code7;
3502 g_operator_tbl(7) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).operator7;
3503 g_numeric_value_tbl(7) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).numeric_value7;
3504 g_date_value_tbl(7) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).date_value7;
3505 g_alphanum_value_tbl(7) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).alphanum_value7;
3506 g_value_low_tbl(7) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_low7;
3507 g_value_high_tbl(7) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_high7;
3508
3509 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class8 IS NOT NULL THEN
3510 g_determining_factor_class_tbl(8) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class8;
3511 g_determining_factor_cq_tbl(8) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).determining_factor_cq8;
3512 g_tax_parameter_code_tbl(8) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).tax_parameter_code8;
3513 g_data_type_tbl(8) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).data_type8;
3514 g_determining_factor_code_tbl(8) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_code8;
3515 g_operator_tbl(8) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).operator8;
3516 g_numeric_value_tbl(8) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).numeric_value8;
3517 g_date_value_tbl(8) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).date_value8;
3518 g_alphanum_value_tbl(8) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).alphanum_value8;
3519 g_value_low_tbl(8) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_low8;
3520 g_value_high_tbl(8) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_high8;
3521
3522 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class9 IS NOT NULL THEN
3523 g_determining_factor_class_tbl(9) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class9;
3524 g_determining_factor_cq_tbl(9) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).determining_factor_cq9;
3525 g_tax_parameter_code_tbl(9) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).tax_parameter_code9;
3526 g_data_type_tbl(9) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).data_type9;
3527 g_determining_factor_code_tbl(9) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_code9;
3528 g_operator_tbl(9) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).operator9;
3529 g_numeric_value_tbl(9) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).numeric_value9;
3530 g_date_value_tbl(9) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).date_value9;
3531 g_alphanum_value_tbl(9) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).alphanum_value9;
3532 g_value_low_tbl(9) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_low9;
3533 g_value_high_tbl(9) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_high9;
3534
3535 IF ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class10 IS NOT NULL THEN
3536 g_determining_factor_class_tbl(10) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_class10;
3537 g_determining_factor_cq_tbl(10) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).determining_factor_cq10;
3538 g_tax_parameter_code_tbl(10) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).tax_parameter_code10;
3539 g_data_type_tbl(10) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).data_type10;
3540 g_determining_factor_code_tbl(10) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).det_factor_code10;
3541 g_operator_tbl(10) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).operator10;
3542 g_numeric_value_tbl(10) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).numeric_value10;
3543 g_date_value_tbl(10) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).date_value10;
3544 g_alphanum_value_tbl(10) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).alphanum_value10;
3545 g_value_low_tbl(10) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_low10;
3546 g_value_high_tbl(10) := ZX_GLOBAL_STRUCTURES_PKG.g_rule_info_tbl(p_hash_val).condition_info_rec_tbl(p_rec_pointer).value_high10;
3547 END IF;
3548 END IF;
3549 END IF;
3550 END IF;
3551 END IF;
3552 END IF;
3553 END IF;
3554 END IF;
3555 END IF;
3556
3557 IF (g_level_procedure >= g_current_runtime_level ) THEN
3558 FND_LOG.STRING(g_level_procedure,
3559 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_set_info.END',
3560 'ZX_TDS_RULE_BASE_DETM_PVT: get_set_info(-)');
3561 END IF;
3562
3563 EXCEPTION
3564 WHEN OTHERS THEN
3565
3566 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3567 FND_LOG.STRING(g_level_unexpected,
3568 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_set_info',
3569 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3570 END IF;
3571
3572 END get_set_info;
3573
3574 ----------------------------------------------------------------------
3575 -- PRIVATE PROCEDURE
3576 -- init_set_condition
3577 --
3578 -- DESCRIPTION
3579 -- This procedure resets all tables containing condition info
3580 -- of a condition group
3581 -- History
3582 --
3583 -- Phong La 03-JUN-02 Created
3584 --
3585 PROCEDURE init_set_condition
3586 IS
3587 BEGIN
3588
3589 IF (g_level_procedure >= g_current_runtime_level ) THEN
3590 FND_LOG.STRING(g_level_procedure,
3591 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.init_set_condition.BEGIN',
3592 'ZX_TDS_RULE_BASE_DETM_PVT: init_set_condition(+)');
3593 END IF;
3594
3595 g_determining_factor_class_tbl.DELETE;
3596 g_determining_factor_cq_tbl.DELETE;
3597 g_tax_parameter_code_tbl.DELETE;
3598 g_data_type_tbl.DELETE;
3599 g_determining_factor_code_tbl.DELETE;
3600 g_operator_tbl.DELETE;
3601 g_numeric_value_tbl.DELETE;
3602 g_date_value_tbl.DELETE;
3603 g_alphanum_value_tbl.DELETE;
3604 g_value_low_tbl.DELETE;
3605 g_value_high_tbl.DELETE;
3606
3607 IF (g_level_procedure >= g_current_runtime_level ) THEN
3608 FND_LOG.STRING(g_level_procedure,
3609 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.init_set_condition.END',
3610 'ZX_TDS_RULE_BASE_DETM_PVT: init_set_condition(-)');
3611 END IF;
3612
3613 EXCEPTION
3614 WHEN OTHERS THEN
3615 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3616 FND_LOG.STRING(g_level_unexpected,
3617 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.init_set_condition',
3618 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
3619 END IF;
3620
3621 END init_set_condition;
3622 -----------------------------------------------------------------------
3623 -- PRIVATE PROCEDURE
3624 -- process_set_condition
3625 --
3626 -- DESCRIPTION
3627 --
3628 -- This procedure processes a condition which is part of a
3629 -- of a condition group
3630 --
3631
3632 PROCEDURE process_set_condition (
3633 p_structure_name IN VARCHAR2,
3634 p_structure_index IN BINARY_INTEGER,
3635 p_event_class_rec IN
3636 ZX_API_PUB.EVENT_CLASS_REC_TYPE,
3637 p_tax_determine_date IN
3638 ZX_LINES.TAX_DETERMINE_DATE%TYPE,
3639 p_tax IN ZX_TAXES_B.TAX%TYPE,
3640 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
3641 p_result IN OUT NOCOPY BOOLEAN,
3642 p_chart_of_accounts_id IN
3643 ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
3644 p_sob_id IN
3645 ZX_CONDITION_GROUPS_B.LEDGER_ID%TYPE,
3646 p_return_status OUT NOCOPY VARCHAR2,
3647 p_error_buffer OUT NOCOPY VARCHAR2)
3648
3649 IS
3650
3651 --
3652 -- This procedure processes 1 condition record
3653 --
3654 l_count NUMBER;
3655 n BINARY_INTEGER;
3656 l_Determining_Factor_Cq_Code ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE;
3657 l_trx_numeric_value ZX_CONDITIONS.NUMERIC_VALUE%TYPE;
3658 l_trx_alphanum_value ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE;
3659 l_trx_date_value ZX_CONDITIONS.DATE_VALUE%TYPE;
3660
3661 cursor get_acct_segment_num( n number) is
3662 select segment_num
3663 from fnd_id_flex_segments
3664 where application_id = 101
3665 and id_flex_code = 'GL#'
3666 and enabled_flag = 'Y'
3667 and id_flex_num = p_chart_of_accounts_id
3668 and application_column_name = 'SEGMENT' || n;
3669
3670 BEGIN
3671
3672 IF (g_level_procedure >= g_current_runtime_level ) THEN
3673 FND_LOG.STRING(g_level_procedure,
3674 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_set_condition.BEGIN',
3675 'ZX_TDS_RULE_BASE_DETM_PVT: process_set_condition(+)');
3676 END IF;
3677
3678 p_return_status := FND_API.G_RET_STS_SUCCESS;
3679
3680 l_count := g_determining_factor_code_tbl.count;
3681
3682 IF (g_level_statement >= g_current_runtime_level ) THEN
3683 FND_LOG.STRING(g_level_statement,
3684 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_set_condition',
3685 'There are '||to_char(l_count)||' conditions');
3686 END IF;
3687
3688 -- get the transaction value.
3689
3690 FOR k IN 1..l_count LOOP
3691
3692 l_Determining_Factor_Cq_Code := g_determining_factor_cq_tbl(k);
3693
3694 IF (g_level_statement >= g_current_runtime_level ) THEN
3695 FND_LOG.STRING(g_level_statement,
3696 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_set_condition',
3697 'Determining_Factor_Cq_Code: ' || l_Determining_Factor_Cq_Code);
3698 END IF;
3699
3700 IF g_determining_factor_class_tbl(k) = 'USER_DEFINED_GEOGRAPHY' THEN
3701 --
3702 -- bug#4673686- handle a table of trx values
3703 --
3704 evaluate_trx_value_tbl(
3705 p_structure_name,
3706 p_structure_index,
3707 k,
3708 p_tax_determine_date,
3709 l_Determining_Factor_Cq_Code,
3710 p_chart_of_accounts_id,
3711 p_result,
3712 p_return_status,
3713 p_error_buffer);
3714
3715 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3716
3717 IF (g_level_error >= g_current_runtime_level ) THEN
3718 FND_LOG.STRING(g_level_error,
3719 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_set_condition',
3720 'Incorrect return_status after calling evaluate_trx_value_tbl(),'||
3721 ' did not get trx value');
3722 END IF;
3723
3724 p_result := FALSE;
3725 --
3726 -- this is a serious error, return to the calling
3727 -- process immediately
3728 --
3729 RETURN;
3730 END IF;
3731 ELSE
3732 --
3733 -- single trx value
3734 --
3735 get_trx_value(
3736 p_structure_name,
3737 p_structure_index,
3738 p_event_class_rec,
3739 k,
3740 p_tax_determine_date,
3741 p_tax,
3742 p_tax_regime_code,
3743 l_Determining_Factor_Cq_Code,
3744 l_trx_numeric_value,
3745 l_trx_alphanum_value,
3746 l_trx_date_value,
3747 p_chart_of_accounts_id,
3748 p_sob_id,
3749 p_return_status,
3750 p_error_buffer);
3751
3752 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3753
3754 IF (g_level_error >= g_current_runtime_level ) THEN
3755 FND_LOG.STRING(g_level_error,
3756 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_set_condition',
3757 'Incorrect return_status after calling get_trx_value(),'||
3758 ' did not get trx value');
3759 END IF;
3760
3761 p_result := FALSE;
3762 --
3763 -- this is a serious error, return to the calling
3764 -- process immediately
3765 --
3766
3767 IF g_determining_factor_class_tbl(k) = 'ACCOUNTING_FLEXFIELD' THEN
3768 p_return_status := FND_API.G_RET_STS_SUCCESS;
3769 END IF;
3770
3771 RETURN;
3772 END IF;
3773
3774 -- evaluate each condition for this condition group.
3775 --
3776 -- handle accounting flexfield case
3777 --
3778 IF (g_determining_factor_class_tbl(k) = 'ACCOUNTING_FLEXFIELD' AND
3779 g_determining_factor_cq_tbl(k) IS NOT NULL) THEN
3780 open get_acct_segment_num(TO_NUMBER(g_determining_factor_cq_tbl(k)));
3781 fetch get_acct_segment_num into n;
3782 close get_acct_segment_num;
3783 --n := TO_NUMBER(g_determining_factor_cq_tbl(k));
3784 --g_trx_alphanumeric_value_tbl(j) := g_segment_array(n);
3785 IF (g_segment_array.last is NOT NULL AND g_segment_array.last >= n) THEN
3786 l_trx_alphanum_value := g_segment_array(n);
3787 END IF;
3788 END IF;
3789 --
3790 -- handle =CQ and <>CQ case
3791 --
3792 IF (g_operator_tbl(k) = '=CQ' OR
3793 g_operator_tbl(k) = '<>CQ' ) THEN
3794 -- get trx value for this right hand side value
3795
3796 l_Determining_Factor_Cq_Code := g_alphanum_value_tbl(k);
3797
3798 IF (g_level_statement >= g_current_runtime_level ) THEN
3799 FND_LOG.STRING(g_level_statement,
3800 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_set_condition',
3801 'calling get_trx_value for CQ case' ||
3802 ', Determining_Factor_Cq_Code: ' || l_Determining_Factor_Cq_Code);
3803 END IF;
3804
3805 get_trx_value(
3806 p_structure_name,
3807 p_structure_index,
3808 p_event_class_rec,
3809 k,
3810 p_tax_determine_date,
3811 p_tax,
3812 p_tax_regime_code,
3813 l_Determining_Factor_Cq_Code,
3814 g_numeric_value_tbl(k),
3815 g_alphanum_value_tbl(k),
3816 g_date_value_tbl(k),
3817 p_chart_of_accounts_id,
3818 p_sob_id,
3819 p_return_status,
3820 p_error_buffer);
3821
3822 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
3823
3824 IF (g_level_error >= g_current_runtime_level ) THEN
3825 FND_LOG.STRING(g_level_error,
3826 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_set_condition',
3827 'Incorrect return_status after calling get_trx_value(),' ||
3828 ' did not get trx value for CQ case ');
3829 END IF;
3830
3831 p_result := FALSE;
3832 --
3833 -- this is a serious error, return to the calling
3834 -- process immediately
3835 --
3836 RETURN;
3837 END IF;
3838 END IF; /* of CQ Operator_Code */
3839
3840 --
3841 -- now evaluate right hand side value with left hand side value
3842 --
3843 evaluate_condition(k,
3844 l_trx_alphanum_value,
3845 l_trx_numeric_value,
3846 l_trx_date_value,
3847 p_chart_of_accounts_id,
3848 p_result,
3849 p_return_status,
3850 p_error_buffer);
3851 END IF;
3852
3853 IF ( g_determining_factor_class_tbl(k) = 'PRODUCT_FISCAL_CLASS' AND
3854 g_determining_factor_code_tbl(k) = 'USER_ITEM_TYPE' AND
3855 l_trx_alphanum_value IS NULL ) THEN
3856 p_result := FALSE;
3857 END IF;
3858
3859 IF ( g_determining_factor_class_tbl(k) = 'TRX_GENERIC_CLASSIFICATION' AND
3860 g_determining_factor_code_tbl(k) = 'TRX_TYPE' AND
3861 l_trx_numeric_value IS NULL) THEN
3862 p_result := FALSE;
3863 END IF;
3864
3865 -- If the result is false, the whole condition is false.
3866 IF ((NOT p_result) OR (p_result IS NULL))THEN
3867 IF (g_level_statement >= g_current_runtime_level ) THEN
3868 FND_LOG.STRING(g_level_statement,
3869 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_set_condition',
3870 'condition is false');
3871 END IF;
3872 EXIT; -- out of the condition loop
3873 END IF;
3874
3875 END LOOP; -- condition_counter k;
3876
3877 IF (g_level_procedure >= g_current_runtime_level ) THEN
3878 FND_LOG.STRING(g_level_procedure,
3879 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_set_condition.END',
3880 'ZX_TDS_RULE_BASE_DETM_PVT: process_set_condition(-)' ||
3881 ', p_return_status = ' || p_return_status ||
3882 ', p_error_buffer = ' || p_error_buffer);
3883 END IF;
3884
3885 EXCEPTION
3886 WHEN OTHERS THEN
3887 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
3888 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
3889
3890 IF (g_level_unexpected >= g_current_runtime_level ) THEN
3891 FND_LOG.STRING(g_level_unexpected,
3892 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_set_condition',
3893 p_error_buffer);
3894 END IF;
3895
3896 END process_set_condition;
3897
3898 -----------------------------------------------------------------------
3899 -- PRIVATE PROCEDURE
3900 -- get_trx_value
3901 --
3902 -- DESCRIPTION
3903 --
3904 -- This procedure is to get transaction value which will be used in the
3905 -- condition evaluation.
3906
3907 PROCEDURE get_trx_value(
3908 p_structure_name IN VARCHAR2,
3909 p_structure_index IN BINARY_INTEGER,
3910 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
3911 p_condition_index IN BINARY_INTEGER,
3912 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
3913 p_tax IN ZX_TAXES_B.TAX%TYPE,
3914 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
3915 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
3916 p_numeric_value OUT NOCOPY ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
3917 p_alphanum_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
3918 p_date_value OUT NOCOPY ZX_CONDITIONS.DATE_VALUE%TYPE,
3919 p_chart_of_accounts_id IN
3920 ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
3921 p_sob_id IN
3922 ZX_CONDITION_GROUPS_B.LEDGER_ID%TYPE,
3923 p_return_status OUT NOCOPY VARCHAR2,
3924 p_error_buffer OUT NOCOPY VARCHAR2)
3925 IS
3926 i BINARY_INTEGER;
3927 j BINARY_INTEGER;
3928 l_found_in_cache BOOLEAN;
3929
3930 BEGIN
3931
3932 IF (g_level_procedure >= g_current_runtime_level ) THEN
3933 FND_LOG.STRING(g_level_procedure,
3934 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_trx_value.BEGIN',
3935 'ZX_TDS_RULE_BASE_DETM_PVT.get_trx_value(+)');
3936 END IF;
3937
3938 p_return_status := FND_API.G_RET_STS_SUCCESS;
3939
3940 i := p_condition_index;
3941
3942 IF (g_level_statement >= g_current_runtime_level ) THEN
3943 FND_LOG.STRING(g_level_statement,
3944 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_trx_value',
3945 'p_condition_index: '|| to_char(p_condition_index) ||
3946 ', g_determining_factor_class_tbl: ' || g_determining_factor_class_tbl(i));
3947 END IF;
3948
3949 IF g_determining_factor_class_tbl(i) = 'TRX_INPUT_FACTOR' THEN
3950 IF g_determining_factor_code_tbl(i) = 'TAX_CLASSIFICATION_CODE' THEN
3951 --
3952 -- try OUTPUT_TAX_CLASSIFICATION_CODE first
3953 --
3954 g_tax_parameter_code_tbl(i) := 'OUTPUT_TAX_CLASSIFICATION_CODE';
3955 get_tsrm_parameter_value(
3956 p_structure_name,
3957 p_structure_index,
3958 p_condition_index,
3959 p_numeric_value,
3960 p_alphanum_value,
3961 p_date_value,
3962 p_return_status,
3963 p_error_buffer);
3964 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
3965 IF p_alphanum_value IS NULL THEN
3966 --
3967 -- OUTPUT_TAX_CLASSIFICATION_CODE is null,
3968 -- use INPUT_TAX_CLASSIFICATION_CODE
3969 --
3970 g_tax_parameter_code_tbl(i) := 'INPUT_TAX_CLASSIFICATION_CODE';
3971 get_tsrm_parameter_value(
3972 p_structure_name,
3973 p_structure_index,
3974 p_condition_index,
3975 p_numeric_value,
3976 p_alphanum_value,
3977 p_date_value,
3978 p_return_status,
3979 p_error_buffer);
3980 END IF;
3981 END IF;
3982 ELSE
3983 get_tsrm_parameter_value(
3984 p_structure_name,
3985 p_structure_index,
3986 p_condition_index,
3987 p_numeric_value,
3988 p_alphanum_value,
3989 p_date_value,
3990 p_return_status,
3991 p_error_buffer);
3992 END IF;
3993
3994 /* Bugfix 3673395 : Determining factor class 'EVENT' is obsolete
3995 ELSIF g_determining_factor_class_tbl(i) = 'EVENT' THEN
3996 IF g_determining_factor_code_tbl(i) = 'ENTITY_CODE' THEN
3997 p_alphanum_value := p_event_class_rec.entity_code;
3998 ELSIF g_determining_factor_code_tbl(i) = 'EVENT_CLASS_CODE' THEN
3999 p_numeric_value := p_event_class_rec.event_class_mapping_id;
4000 ELSIF g_determining_factor_code_tbl(i) = 'TAX_EVENT_CLASS_CODE' THEN
4001 p_alphanum_value := p_event_class_rec.tax_event_class_code;
4002 END IF;
4003 End Bugfix 3673395 */
4004 ELSE
4005 --
4006 -- check from trx value cache structure
4007 --
4008 /* Bug 5003413 : We will look at the cache only for determination factor class
4009 'GEOGRAPHY', 'ACCOUNTING_FLEXFIELD'.
4010 For Fiscal classifications, we already have caching available in
4011 */
4012 l_found_in_cache := FALSE;
4013
4014 IF g_determining_factor_class_tbl(i) in ('GEOGRAPHY', 'ACCOUNTING_FLEXFIELD') THEN
4015 j := get_trx_value_index(
4016 g_determining_factor_class_tbl(i),
4017 g_determining_factor_code_tbl(i),
4018 p_Determining_Factor_Cq_Code,
4019 g_alphanum_value_tbl(i));
4020
4021 IF (g_level_statement >= g_current_runtime_level ) THEN
4022 FND_LOG.STRING(g_level_statement,
4023 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_trx_value',
4024 'cache index: ' || to_char(j));
4025 END IF;
4026
4027 -- bug 6763074: comment out the code lines for caching because it seems
4028 -- ZX_TDS_CALC_SERVICES_PUB_PKG.g_trx_alphanum_value_tbl(j)
4029 -- does not have the value for the current trx line
4030 --
4031 -- IF (g_data_type_tbl(i) = 'ALPHANUMERIC' AND
4032 -- ZX_TDS_CALC_SERVICES_PUB_PKG.g_trx_alphanum_value_tbl.EXISTS(j)) THEN
4033 -- IF (ZX_TDS_CALC_SERVICES_PUB_PKG.g_trx_alphanum_value_tbl(j) = g_alphanum_value_tbl(i)) THEN
4034 -- p_alphanum_value := ZX_TDS_CALC_SERVICES_PUB_PKG.g_trx_alphanum_value_tbl(j);
4035 -- l_found_in_cache := TRUE;
4036 -- END IF;
4037 -- ELSIF (g_data_type_tbl(i) = 'NUMERIC' AND
4038 -- ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl.EXISTS(j)) THEN
4039 -- -- bug fix 6611984
4040 -- IF (ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl(j) = g_numeric_value_tbl(i)) THEN
4041 -- p_numeric_value := ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl(j);
4042 -- l_found_in_cache := TRUE;
4043 -- END IF;
4044 -- END IF;
4045
4046 END IF;
4047
4048 /* Bug 5003413 */
4049
4050 IF NOT l_found_in_cache THEN
4051 --
4052 -- trx value not exist in cache, need to get it
4053 --
4054 /***** bug#4673686- move to evaluate_trx_value_tbl
4055 IF g_determining_factor_class_tbl(i) = 'USER_DEFINED_GEOGRAPHY' THEN
4056 get_geography_info(p_structure_name,
4057 p_structure_index,
4058 p_condition_index,
4059 p_alphanum_value,
4060 p_Determining_Factor_Cq_Code,
4061 p_tax_determine_date,
4062 p_return_status,
4063 p_error_buffer);
4064 **********/
4065
4066 -- Bug#4591207
4067 IF g_determining_factor_class_tbl(i) = 'GEOGRAPHY' THEN
4068 get_master_geography_info(
4069 p_structure_name,
4070 p_structure_index,
4071 p_condition_index,
4072 p_numeric_value,
4073 p_Determining_Factor_Cq_Code,
4074 p_return_status,
4075 p_error_buffer);
4076
4077 -- Bug#6124314
4078 ELSIF ( g_determining_factor_class_tbl(i) = 'PRODUCT_FISCAL_CLASS' AND
4079 g_determining_factor_code_tbl(i) = 'USER_ITEM_TYPE') THEN
4080 get_user_item_type_value(
4081 p_structure_name,
4082 p_structure_index,
4083 p_condition_index,
4084 p_event_class_rec,
4085 p_numeric_value,
4086 p_alphanum_value,
4087 p_return_status,
4088 p_error_buffer);
4089
4090 -- Bug#6124462
4091 ELSIF ( g_determining_factor_class_tbl(i) = 'TRX_GENERIC_CLASSIFICATION' AND
4092 g_determining_factor_code_tbl(i) = 'TRX_TYPE' ) THEN
4093 get_tsrm_parameter_value(
4094 p_structure_name,
4095 p_structure_index,
4096 p_condition_index,
4097 p_numeric_value,
4098 p_alphanum_value,
4099 p_date_value,
4100 p_return_status,
4101 p_error_buffer);
4102
4103 ELSIF (g_determining_factor_class_tbl(i) = 'PRODUCT_FISCAL_CLASS' OR
4104 g_determining_factor_class_tbl(i) = 'PARTY_FISCAL_CLASS' OR
4105 g_determining_factor_class_tbl(i) = 'LEGAL_PARTY_FISCAL_CLASS' OR
4106 g_determining_factor_class_tbl(i) = 'TRX_FISCAL_CLASS' OR
4107 g_determining_factor_class_tbl(i) = 'DOCUMENT' OR
4108 g_determining_factor_class_tbl(i) = 'PRODUCT_GENERIC_CLASSIFICATION' OR
4109 g_determining_factor_class_tbl(i) = 'TRX_GENERIC_CLASSIFICATION' ) THEN
4110 get_fc( p_structure_name,
4111 p_structure_index,
4112 p_condition_index,
4113 p_tax_determine_date,
4114 p_tax_regime_code,
4115 p_event_class_rec,
4116 p_alphanum_value,
4117 p_Determining_Factor_Cq_Code,
4118 p_return_status,
4119 p_error_buffer);
4120
4121 ELSIF g_determining_factor_class_tbl(i) = 'REGISTRATION' THEN
4122 get_registration_status(p_structure_name,
4123 p_structure_index,
4124 p_event_class_rec,
4125 p_tax_determine_date,
4126 p_tax,
4127 p_tax_regime_code,
4128 p_alphanum_value,
4129 p_Determining_Factor_Cq_Code,
4130 p_return_status,
4131 p_error_buffer);
4132
4133 ELSIF g_determining_factor_class_tbl(i) = 'ACCOUNTING_FLEXFIELD' THEN
4134 get_account_flexfield_info(p_structure_name,
4135 p_structure_index,
4136 p_condition_index,
4137 p_alphanum_value,
4138 p_chart_of_accounts_id,
4139 p_sob_id,
4140 p_return_status,
4141 p_error_buffer);
4142
4143 /* Bugfix 3673395
4144 ELSIF g_determining_factor_class_tbl(i) = 'PRODUCT' THEN
4145 get_product_tax_info(p_structure_name,
4146 p_structure_index,
4147 g_determining_factor_code_tbl(i),
4148 p_alphanum_value,
4149 p_return_status,
4150 p_error_buffer);
4151
4152 ELSIF g_determining_factor_class_tbl(i) = 'PARTY' THEN
4153 get_party_tax_info(p_structure_name,
4154 p_structure_index,
4155 p_Determining_Factor_Cq_Code,
4156 g_determining_factor_code_tbl(i),
4157 p_alphanum_value,
4158 p_return_status,
4159 p_error_buffer);
4160 */
4161 END IF;
4162 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
4163 -- update trx value cache structure
4164 /* Bug 5003413 */
4165 IF g_determining_factor_class_tbl(i) in ('GEOGRAPHY', 'ACCOUNTING_FLEXFIELD') THEN
4166 IF g_data_type_tbl(i) = 'ALPHANUMERIC' THEN
4167 ZX_TDS_CALC_SERVICES_PUB_PKG.g_trx_alphanum_value_tbl(j) := p_alphanum_value;
4168 ELSIF g_data_type_tbl(i) = 'NUMERIC' THEN
4169 ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl(j) := p_numeric_value;
4170 END IF;
4171 END IF;
4172 /* Bug 5003413 */
4173 END IF;
4174
4175 END IF;
4176 END IF;
4177
4178 IF (g_level_procedure >= g_current_runtime_level ) THEN
4179 FND_LOG.STRING(g_level_procedure,
4180 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_trx_value.END',
4181 'ZX_TDS_RULE_BASE_DETM_PVT.get_trx_value(-)' ||
4182 ', p_return_status = ' || p_return_status ||
4183 ', p_error_buffer = ' || p_error_buffer);
4184 END IF;
4185
4186 EXCEPTION
4187 WHEN OTHERS THEN
4188 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4189 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4190 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4191 FND_LOG.STRING(g_level_unexpected,
4192 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_trx_value',
4193 p_error_buffer);
4194 END IF;
4195
4196 END get_trx_value;
4197
4198 -----------------------------------------------------------------------
4199 -- PRIVATE PROCEDURE
4200 -- evaluate_trx_value_tbl
4201 --
4202 -- DESCRIPTION
4203 --
4204 -- This procedure is to get a table of transaction values
4205 -- and evaluate each value in this table with the condition value
4206 -- of a group until a match is found
4207
4208 -- Bug#4673686 : new procedure to handle multiple zones
4209
4210 PROCEDURE evaluate_trx_value_tbl(
4211 p_structure_name IN VARCHAR2,
4212 p_structure_index IN BINARY_INTEGER,
4213 p_condition_index IN BINARY_INTEGER,
4214 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
4215 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
4216 p_chart_of_accounts_id IN ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
4217 p_result IN OUT NOCOPY BOOLEAN,
4218 p_return_status OUT NOCOPY VARCHAR2,
4219 p_error_buffer OUT NOCOPY VARCHAR2)
4220 IS
4221 i BINARY_INTEGER;
4222 j BINARY_INTEGER;
4223 l_trx_alphanum_value ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE;
4224 l_trx_date_value ZX_CONDITIONS.DATE_VALUE%TYPE;
4225
4226 l_count NUMBER;
4227 l_zone_tbl HZ_GEO_GET_PUB.zone_tbl_type;
4228 BEGIN
4229
4230 IF (g_level_procedure >= g_current_runtime_level ) THEN
4231 FND_LOG.STRING(g_level_procedure,
4232 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_trx_value_tbl.BEGIN',
4233 'ZX_TDS_RULE_BASE_DETM_PVT.evaluate_trx_value_tbl(+)');
4234 END IF;
4235
4236 p_return_status := FND_API.G_RET_STS_SUCCESS;
4237
4238 i := p_condition_index;
4239 p_result := FALSE;
4240
4241 IF (g_level_statement >= g_current_runtime_level ) THEN
4242 FND_LOG.STRING(g_level_statement,
4243 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_trx_value_tbl',
4244 'p_condition_index: '|| to_char(p_condition_index) ||
4245 ', g_determining_factor_class_tbl: ' || g_determining_factor_class_tbl(i));
4246 END IF;
4247
4248 IF g_determining_factor_class_tbl(i) = 'USER_DEFINED_GEOGRAPHY' THEN
4249 get_geography_info(p_structure_name,
4250 p_structure_index,
4251 p_condition_index,
4252 l_zone_tbl,
4253 p_Determining_Factor_Cq_Code,
4254 p_tax_determine_date,
4255 p_return_status,
4256 p_error_buffer);
4257
4258 IF (p_return_status <> FND_API.G_RET_STS_SUCCESS) THEN
4259 IF (g_level_error >= g_current_runtime_level ) THEN
4260 FND_LOG.STRING(g_level_error,
4261 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_trx_value_tbl',
4262 'Incorrect return_status after calling get_geography_info()' ||
4263 ', return_status: '|| p_return_status);
4264 END IF;
4265 RETURN;
4266 END IF;
4267
4268 l_count := l_zone_tbl.COUNT;
4269
4270 IF (g_level_statement >= g_current_runtime_level ) THEN
4271 FND_LOG.STRING(g_level_statement,
4272 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_trx_value_tbl',
4273 'Number of rows in Zone table : ' ||
4274 TO_CHAR(l_count));
4275 END IF;
4276
4277 -- Bug fix 5003513
4278 IF l_count > 0 THEN
4279 FOR j IN l_zone_tbl.first..l_zone_tbl.last LOOP
4280 evaluate_condition(
4281 i,
4282 l_trx_alphanum_value,
4283 l_zone_tbl(j).zone_id,
4284 l_trx_date_value,
4285 p_chart_of_accounts_id,
4286 p_result,
4287 p_return_status,
4288 p_error_buffer);
4289 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4290 IF (g_level_error >= g_current_runtime_level ) THEN
4291 FND_LOG.STRING(g_level_error,
4292 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_trx_value_tbl',
4293 'Incorrect return_status after calling evaluate_condition()' ||
4294 ', return_status '|| p_return_status );
4295 END IF;
4296
4297 EXIT;
4298 END IF;
4299 IF p_result THEN
4300 --
4301 -- loop until a match is found
4302 --
4303 IF (g_level_statement >= g_current_runtime_level ) THEN
4304 FND_LOG.STRING(g_level_statement,
4305 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_trx_value_tbl',
4306 'Found a matched condition.' );
4307 END IF;
4308 EXIT;
4309 END IF;
4310
4311 END LOOP;
4312 -- Not finding a zone for a location in the given zone type is a valid condition
4313 -- For example, zones will not be returned for US location for EU zone types.
4314 -- Hence, passing null value for the zone_id.
4315 ELSIF l_count = 0 THEN
4316 evaluate_condition(
4317 i,
4318 l_trx_alphanum_value,
4319 NULL,
4320 l_trx_date_value,
4321 p_chart_of_accounts_id,
4322 p_result,
4323 p_return_status,
4324 p_error_buffer);
4325 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
4326 IF (g_level_error >= g_current_runtime_level ) THEN
4327 FND_LOG.STRING(g_level_error,
4328 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_trx_value_tbl',
4329 'Incorrect return_status after calling evaluate_condition()' ||
4330 ', return_status '|| p_return_status );
4331 END IF;
4332 RETURN;
4333 END IF;
4334 END IF;
4335 END IF;
4336
4337 IF (g_level_procedure >= g_current_runtime_level ) THEN
4338 FND_LOG.STRING(g_level_procedure,
4339 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_trx_value_tbl.END',
4340 'ZX_TDS_RULE_BASE_DETM_PVT.evaluate_trx_value_tbl(-)' ||
4341 ', p_return_status = ' || p_return_status ||
4342 ', p_error_buffer = ' || p_error_buffer);
4343 END IF;
4344
4345 EXCEPTION
4346 WHEN OTHERS THEN
4347 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4348 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4349 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4350 FND_LOG.STRING(g_level_unexpected,
4351 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_trx_value_tbl',
4352 p_error_buffer);
4353 END IF;
4354
4355 END evaluate_trx_value_tbl;
4356
4357 -----------------------------------------------------------------------
4358 -- PRIVATE PROCEDURE
4359 -- get_tsrm_parameter_value
4360 --
4361 -- DESCRIPTION
4362 --
4363 -- This procedure is to get transaction value when
4364 -- Determining_Factor_Class_Code = 'PARAMETER'.
4365 -- It is called from procedure get_trx_value. It calls appropriate TSRM
4366 -- function to get trx value directly.
4367 --
4368
4369 PROCEDURE get_tsrm_parameter_value(
4370 p_structure_name IN VARCHAR2,
4371 p_structure_index IN BINARY_INTEGER,
4372 p_condition_index IN BINARY_INTEGER,
4373 p_numeric_value OUT NOCOPY ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
4374 p_alphanum_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
4375 p_date_value OUT NOCOPY ZX_CONDITIONS.DATE_VALUE%TYPE,
4376 p_return_status OUT NOCOPY VARCHAR2,
4377 p_error_buffer OUT NOCOPY VARCHAR2)
4378 IS
4379 i BINARY_INTEGER;
4380 BEGIN
4381
4382 IF (g_level_procedure >= g_current_runtime_level ) THEN
4383 FND_LOG.STRING(g_level_procedure,
4384 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_parameter_value.BEGIN',
4385 'ZX_TDS_RULE_BASE_DETM_PVT: get_tsrm_parameter_value(+)');
4386 END IF;
4387
4388 p_return_status := FND_API.G_RET_STS_SUCCESS;
4389
4390 i := p_condition_index;
4391
4392 IF g_data_type_tbl(i) = 'NUMERIC' THEN
4393
4394 get_tsrm_num_value(
4395 p_structure_name,
4396 p_structure_index,
4397 g_tax_parameter_code_tbl(i),
4398 p_numeric_value,
4399 p_return_status,
4400 p_error_buffer);
4401
4402 IF (g_level_statement >= g_current_runtime_level ) THEN
4403 FND_LOG.STRING(g_level_statement,
4404 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_parameter_value',
4405 'parameter code: ' || g_tax_parameter_code_tbl(i) ||
4406 ', p_numeric_value: ' || p_numeric_value );
4407 END IF;
4408
4409 ELSIF g_data_type_tbl(i) = 'DATE' THEN
4410
4411 ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value(
4412 p_structure_name,
4413 p_structure_index,
4414 g_tax_parameter_code_tbl(i),
4415 p_date_value,
4416 p_return_status
4417 );
4418
4419 IF (g_level_statement >= g_current_runtime_level ) THEN
4420 FND_LOG.STRING(g_level_statement,
4421 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_parameter_value',
4422 'parameter code: ' || g_tax_parameter_code_tbl(i) ||
4423 ', trx_date value: ' || to_char(p_date_value, 'DD-MON-YY'));
4424 END IF;
4425
4426 ELSIF g_data_type_tbl(i) = 'ALPHANUMERIC' THEN
4427
4428 get_tsrm_alphanum_value(
4429 p_structure_name,
4430 p_structure_index,
4431 g_tax_parameter_code_tbl(i),
4432 p_alphanum_value,
4433 p_return_status,
4434 p_error_buffer);
4435
4436 IF (g_level_statement >= g_current_runtime_level ) THEN
4437 FND_LOG.STRING(g_level_statement,
4438 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_parameter_value',
4439 'parameter code: ' || g_tax_parameter_code_tbl(i) ||
4440 ', p_alphanum_value: ' || p_alphanum_value );
4441 END IF;
4442 ELSE
4443
4444 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4445 p_error_buffer := 'Invalid data type';
4446 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4447 FND_LOG.STRING(g_level_unexpected,
4448 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_parameter_value',
4449 'Invalid data type, data type must be ALPHANUMERIC, NUMERIC, DATE');
4450 END IF;
4451
4452 END IF;
4453
4454 IF (g_level_procedure >= g_current_runtime_level ) THEN
4455 FND_LOG.STRING(g_level_procedure,
4456 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_parameter_value.END',
4457 'ZX_TDS_RULE_BASE_DETM_PVT: get_tsrm_parameter_value(-)' ||
4458 ', p_return_status = ' || p_return_status ||
4459 ', p_error_buffer = ' || p_error_buffer);
4460 END IF;
4461
4462 EXCEPTION
4463 WHEN OTHERS THEN
4464 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4465 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4466
4467 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4468 FND_LOG.STRING(g_level_unexpected,
4469 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_parameter_value',
4470 p_error_buffer);
4471 END IF;
4472
4473 END get_tsrm_parameter_value;
4474
4475 ----------------------------------------------------------------------
4476 -- PUBLIC PROCEDURE
4477 -- get_tsrm_num_value
4478 --
4479 -- DESCRIPTION
4480 --
4481 -- This procedure gets tsrm parameter value from the cache if available
4482 -- before it calls TSRM API to get the parameter value and then inserts
4483 -- the value to the cache structure
4484
4485 PROCEDURE get_tsrm_num_value(
4486 p_structure_name IN VARCHAR2,
4487 p_structure_index IN BINARY_INTEGER,
4488 p_parameter_code IN ZX_PARAMETERS_B.TAX_PARAMETER_CODE%TYPE,
4489 p_trx_numeric_value OUT NOCOPY ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
4490 p_return_status OUT NOCOPY VARCHAR2,
4491 p_error_buffer OUT NOCOPY VARCHAR2)
4492 IS
4493 --l_table_index NUMBER;
4494
4495 BEGIN
4496
4497 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
4498
4499 IF (g_level_statement >= g_current_runtime_level ) THEN
4500 FND_LOG.STRING(g_level_statement,
4501 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value.BEGIN',
4502 'ZX_TDS_RULE_BASE_DETM_PVT: get_tsrm_num_value(+)');
4503 FND_LOG.STRING(g_level_statement ,
4504 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value',
4505 'p_parameter_code: ' || p_parameter_code );
4506 END IF;
4507 p_return_status := FND_API.G_RET_STS_SUCCESS;
4508
4509 -- commenting caching as no value check is possible at this point.
4510 -- for checking if the value in cache is matching the current transaction value
4511 -- we need to call get_driver_value
4512 -- therefore commenting the caching logic as calling get_driver_value inside cache is redundant
4513
4514 /* l_table_index := dbms_utility.get_hash_value(
4515 p_parameter_code,
4516 1,
4517 8192); */
4518
4519 --IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl.EXISTS(l_table_index) THEN
4520 -- p_trx_numeric_value := ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl(l_table_index);
4521 --ELSE
4522
4523 ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value(
4524 p_structure_name,
4525 p_structure_index,
4526 p_parameter_code,
4527 p_trx_numeric_value,
4528 p_return_status
4529 );
4530
4531 --IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
4532 -- ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl(l_table_index) := p_trx_numeric_value;
4533 --END IF;
4534 --END IF;
4535
4536 IF (g_level_statement >= g_current_runtime_level ) THEN
4537 FND_LOG.STRING(g_level_statement,
4538 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value',
4539 'trx_num_value: ' || to_char(p_trx_numeric_value));
4540 FND_LOG.STRING(g_level_statement,
4541 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value.END',
4542 'ZX_TDS_RULE_BASE_DETM_PVT: get_tsrm_num_value(-)' ||
4543 ', p_return_status = ' || p_return_status ||
4544 ', p_error_buffer = ' || p_error_buffer);
4545 END IF;
4546
4547 EXCEPTION
4548 WHEN OTHERS THEN
4549 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4550 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4551
4552 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4553 FND_LOG.STRING(g_level_unexpected,
4554 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_num_value',
4555 p_error_buffer);
4556 END IF;
4557
4558 END get_tsrm_num_value;
4559 ----------------------------------------------------------------------
4560 -- PUBLIC PROCEDURE
4561 -- get_tsrm_alphanum_value
4562 --
4563 -- DESCRIPTION
4564 --
4565 -- This procedure gets tsrm parameter value from the cache if available
4566 -- before it calls TSRM API to get the parameter value and then inserts
4567 -- the value to the cache structure
4568
4569 PROCEDURE get_tsrm_alphanum_value(
4570 p_structure_name IN VARCHAR2,
4571 p_structure_index IN BINARY_INTEGER,
4572 p_parameter_code IN ZX_PARAMETERS_B.TAX_PARAMETER_CODE%TYPE,
4573 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
4574 p_return_status OUT NOCOPY VARCHAR2,
4575 p_error_buffer OUT NOCOPY VARCHAR2)
4576 IS
4577 --l_table_index NUMBER;
4578
4579 BEGIN
4580
4581 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
4582
4583 IF (g_level_statement >= g_current_runtime_level ) THEN
4584 FND_LOG.STRING(g_level_statement,
4585 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_alphanum_value.BEGIN',
4586 'ZX_TDS_RULE_BASE_DETM_PVT: get_tsrm_alphanum_value(+)');
4587 FND_LOG.STRING(g_level_statement,
4588 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_alphanum_value',
4589 'p_parameter_code: ' || p_parameter_code );
4590 END IF;
4591
4592 p_return_status := FND_API.G_RET_STS_SUCCESS;
4593
4594 -- commenting caching as no value check is possible at this point.
4595 -- for checking if the value in cache is matching the current transaction value
4596 -- we need to call get_driver_value
4597 -- therefore commenting the caching logic as calling get_driver_value inside cache is redundant
4598
4599 /* l_table_index := dbms_utility.get_hash_value(
4600 p_parameter_code,
4601 1,
4602 8192); */
4603
4604 --IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl.EXISTS(l_table_index) THEN
4605 -- p_trx_alphanumeric_value := ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl(l_table_index);
4606 --ELSE
4607
4608 ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value(
4609 p_structure_name,
4610 p_structure_index,
4611 p_parameter_code,
4612 p_trx_alphanumeric_value,
4613 p_return_status
4614 );
4615 --IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
4616 -- ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl(l_table_index) := p_trx_alphanumeric_value;
4617 --END IF;
4618 --END IF;
4619
4620 IF (g_level_statement >= g_current_runtime_level ) THEN
4621 FND_LOG.STRING(g_level_statement,
4622 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_alphanum_value',
4623 'trx_char_value: ' || p_trx_alphanumeric_value);
4624 FND_LOG.STRING(g_level_statement,
4625 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_alphanum_value.END',
4626 'ZX_TDS_RULE_BASE_DETM_PVT: get_tsrm_alphanum_value(-)' ||
4627 ', p_return_status = ' || p_return_status ||
4628 ', p_error_buffer = ' || p_error_buffer);
4629 END IF;
4630
4631 EXCEPTION
4632 WHEN OTHERS THEN
4633 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4634 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4635
4636 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4637 FND_LOG.STRING(g_level_unexpected,
4638 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tsrm_alphanum_value',
4639 p_error_buffer);
4640 END IF;
4641
4642 END get_tsrm_alphanum_value;
4643 ----------------------------------------------------------------------
4644 -- PRIVATE PROCEDURE
4645 -- get_account_num_value
4646 --
4647 -- DESCRIPTION
4648 --
4649 -- This procedure gets account parameter value from the cache if available
4650 -- before it calls TSRM API to get the parameter value and then inserts
4651 -- the value to the cache structure
4652
4653 PROCEDURE get_account_num_value(
4654 p_structure_name IN VARCHAR2,
4655 p_structure_index IN BINARY_INTEGER,
4656 p_parameter_code IN ZX_PARAMETERS_B.TAX_PARAMETER_CODE%TYPE,
4657 p_trx_numeric_value OUT NOCOPY ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
4658 p_return_status OUT NOCOPY VARCHAR2,
4659 p_error_buffer OUT NOCOPY VARCHAR2)
4660 IS
4661 l_table_index NUMBER;
4662 l_in_cache_flg BOOLEAN := FALSE;
4663
4664 BEGIN
4665
4666 IF (g_level_procedure >= g_current_runtime_level ) THEN
4667 FND_LOG.STRING(g_level_procedure,
4668 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_num_value.BEGIN',
4669 'ZX_TDS_RULE_BASE_DETM_PVT: get_account_num_value(+)');
4670 IF (g_level_statement >= g_current_runtime_level ) THEN
4671 FND_LOG.STRING(g_level_statement ,
4672 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_num_value',
4673 'p_parameter_code: ' || p_parameter_code );
4674 END IF;
4675 END IF;
4676 p_return_status := FND_API.G_RET_STS_SUCCESS;
4677
4678 l_table_index := dbms_utility.get_hash_value(
4679 p_parameter_code,
4680 1,
4681 8192);
4682
4683 IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl.EXISTS(l_table_index) THEN
4684 IF (ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl(l_table_index) =
4685 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ACCOUNT_CCID(p_structure_index)) THEN
4686 p_trx_numeric_value := ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl(l_table_index);
4687 l_in_cache_flg := TRUE;
4688 END IF;
4689 END IF;
4690
4691 IF NOT l_in_cache_flg THEN
4692 ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value(
4693 p_structure_name,
4694 p_structure_index,
4695 p_parameter_code,
4696 p_trx_numeric_value,
4697 p_return_status
4698 );
4699
4700 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
4701 ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_num_value_tbl(l_table_index) := p_trx_numeric_value;
4702 END IF;
4703 END IF;
4704
4705 IF (g_level_procedure >= g_current_runtime_level ) THEN
4706 FND_LOG.STRING(g_level_procedure,
4707 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_num_value',
4708 'trx_num_value: ' || to_char(p_trx_numeric_value));
4709 FND_LOG.STRING(g_level_procedure,
4710 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_num_value.END',
4711 'ZX_TDS_RULE_BASE_DETM_PVT: get_account_num_value(-)' ||
4712 ', p_return_status = ' || p_return_status ||
4713 ', p_error_buffer = ' || p_error_buffer);
4714 END IF;
4715
4716 EXCEPTION
4717 WHEN OTHERS THEN
4718 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4719 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4720
4721 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4722 FND_LOG.STRING(g_level_unexpected,
4723 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_num_value',
4724 p_error_buffer);
4725 END IF;
4726
4727 END get_account_num_value;
4728 ----------------------------------------------------------------------
4729 -- PRIVATE PROCEDURE
4730 -- get_account_alphanum_value
4731 --
4732 -- DESCRIPTION
4733 --
4734 -- This procedure gets account parameter value from the cache if available
4735 -- before it calls TSRM API to get the parameter value and then inserts
4736 -- the value to the cache structure
4737
4738 PROCEDURE get_account_alphanum_value(
4739 p_structure_name IN VARCHAR2,
4740 p_structure_index IN BINARY_INTEGER,
4741 p_parameter_code IN ZX_PARAMETERS_B.TAX_PARAMETER_CODE%TYPE,
4742 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
4743 p_return_status OUT NOCOPY VARCHAR2,
4744 p_error_buffer OUT NOCOPY VARCHAR2)
4745 IS
4746 l_table_index NUMBER;
4747 l_in_cache_flg BOOLEAN := FALSE;
4748
4749 BEGIN
4750
4751 IF (g_level_procedure >= g_current_runtime_level ) THEN
4752 FND_LOG.STRING(g_level_procedure,
4753 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_alphanum_value.BEGIN',
4754 'ZX_TDS_RULE_BASE_DETM_PVT: get_account_alphanum_value(+)');
4755 IF (g_level_statement >= g_current_runtime_level ) THEN
4756 FND_LOG.STRING(g_level_statement,
4757 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_alphanum_value',
4758 'p_parameter_code: ' || p_parameter_code );
4759 END IF;
4760 END IF;
4761
4762 p_return_status := FND_API.G_RET_STS_SUCCESS;
4763
4764 l_table_index := dbms_utility.get_hash_value(
4765 p_parameter_code,
4766 1,
4767 8192);
4768
4769 IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl.EXISTS(l_table_index) THEN
4770 IF (ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl(l_table_index) =
4771 ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.ACCOUNT_STRING(p_structure_index)) THEN
4772 p_trx_alphanumeric_value := ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl(l_table_index);
4773 l_in_cache_flg := TRUE;
4774 END IF;
4775 END IF;
4776
4777 IF NOT l_in_cache_flg THEN
4778 ZX_GET_TAX_PARAM_DRIVER_PKG.get_driver_value(
4779 p_structure_name,
4780 p_structure_index,
4781 p_parameter_code,
4782 p_trx_alphanumeric_value,
4783 p_return_status
4784 );
4785 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
4786 ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl(l_table_index) := p_trx_alphanumeric_value;
4787 END IF;
4788 END IF;
4789
4790 IF (g_level_procedure >= g_current_runtime_level ) THEN
4791 FND_LOG.STRING(g_level_procedure,
4792 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_alphanum_value',
4793 'trx_char_value: ' || p_trx_alphanumeric_value);
4794 FND_LOG.STRING(g_level_procedure,
4795 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_alphanum_value.END',
4796 'ZX_TDS_RULE_BASE_DETM_PVT: get_account_alphanum_value(-)' ||
4797 ', p_return_status = ' || p_return_status ||
4798 ', p_error_buffer = ' || p_error_buffer);
4799 END IF;
4800
4801 EXCEPTION
4802 WHEN OTHERS THEN
4803 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4804 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4805
4806 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4807 FND_LOG.STRING(g_level_unexpected,
4808 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_alphanum_value',
4809 p_error_buffer);
4810 END IF;
4811
4812 END get_account_alphanum_value;
4813 -----------------------------------------------------------------------
4814 -- PRIVATE PROCEDURE
4815 -- get_user_item_type_value
4816 --
4817 -- DESCRIPTION
4818 --
4819 -- This procedure is to get user item type value when
4820 -- Determining_Factor_Class_Code = 'PRODUCT_FISCAL_CLASS'.
4821 -- It is called from procedure get_trx_value. It calls appropriate
4822 -- function to get trx value directly.
4823 --
4824
4825 PROCEDURE get_user_item_type_value(
4826 p_structure_name IN VARCHAR2,
4827 p_structure_index IN BINARY_INTEGER,
4828 p_condition_index IN BINARY_INTEGER,
4829 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
4830 p_numeric_value OUT NOCOPY ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
4831 p_alphanum_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
4832 p_return_status OUT NOCOPY VARCHAR2,
4833 p_error_buffer OUT NOCOPY VARCHAR2)
4834 IS
4835 i BINARY_INTEGER;
4836 BEGIN
4837
4838 IF (g_level_procedure >= g_current_runtime_level ) THEN
4839 FND_LOG.STRING(g_level_procedure,
4840 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_user_item_type_value.BEGIN',
4841 'ZX_TDS_RULE_BASE_DETM_PVT: get_user_item_type_value(+)');
4842 END IF;
4843
4844 p_return_status := FND_API.G_RET_STS_SUCCESS;
4845
4846 i := p_condition_index;
4847
4848 IF g_data_type_tbl(i) = 'ALPHANUMERIC' THEN
4849
4850 get_user_item_alphanum_value(
4851 p_structure_name,
4852 p_structure_index,
4853 g_determining_factor_code_tbl(i),
4854 p_event_class_rec,
4855 p_alphanum_value,
4856 p_return_status,
4857 p_error_buffer);
4858
4859 IF (g_level_statement >= g_current_runtime_level ) THEN
4860 FND_LOG.STRING(g_level_statement,
4861 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_user_item_type_value',
4862 'parameter code: ' || g_determining_factor_code_tbl(i) ||
4863 ', p_alphanum_value: ' || p_alphanum_value );
4864 END IF;
4865 ELSE
4866
4867 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4868 p_error_buffer := 'Invalid data type';
4869 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4870 FND_LOG.STRING(g_level_unexpected,
4871 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_user_item_type_value',
4872 'Invalid data type, data type must be ALPHANUMERIC');
4873 END IF;
4874
4875 END IF;
4876
4877 IF (g_level_procedure >= g_current_runtime_level ) THEN
4878 FND_LOG.STRING(g_level_procedure,
4879 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_user_item_type_value.END',
4880 'ZX_TDS_RULE_BASE_DETM_PVT: get_user_item_type_value(-)' ||
4881 ', p_return_status = ' || p_return_status ||
4882 ', p_error_buffer = ' || p_error_buffer);
4883 END IF;
4884
4885 EXCEPTION
4886 WHEN OTHERS THEN
4887 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4888 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4889
4890 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4891 FND_LOG.STRING(g_level_unexpected,
4892 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_user_item_type_value',
4893 p_error_buffer);
4894 END IF;
4895
4896 END get_user_item_type_value;
4897 -----------------------------------------------------------------------
4898
4899 -- PRIVATE PROCEDURE
4900 -- get_user_item_alphanum_value
4901 --
4902 -- DESCRIPTION
4903 --
4904 -- This procedure gets user item type value from the cache if available
4905 -- before it calls TSRM API to get the user item type value and then inserts
4906 -- the value to the cache structure
4907
4908 PROCEDURE get_user_item_alphanum_value(
4909 p_structure_name IN VARCHAR2,
4910 p_structure_index IN BINARY_INTEGER,
4911 p_parameter_code IN ZX_PARAMETERS_B.TAX_PARAMETER_CODE%TYPE,
4912 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
4913 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
4914 p_return_status OUT NOCOPY VARCHAR2,
4915 p_error_buffer OUT NOCOPY VARCHAR2)
4916 IS
4917 l_table_index NUMBER;
4918 l_trx_alphanumeric_value ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE;
4919 l_in_cache_flg BOOLEAN := FALSE;
4920
4921 BEGIN
4922
4923 IF (g_level_procedure >= g_current_runtime_level ) THEN
4924 FND_LOG.STRING(g_level_procedure,
4925 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_user_item_alphanum_value.BEGIN',
4926 'ZX_TDS_RULE_BASE_DETM_PVT: get_user_item_alphanum_value(+)');
4927 IF (g_level_statement >= g_current_runtime_level ) THEN
4928 FND_LOG.STRING(g_level_statement,
4929 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_user_item_alphanum_value',
4930 'p_parameter_code: ' || p_parameter_code );
4931 END IF;
4932 END IF;
4933
4934 p_return_status := FND_API.G_RET_STS_SUCCESS;
4935
4936 l_table_index := dbms_utility.get_hash_value(
4937 p_parameter_code,
4938 1,
4939 8192);
4940 BEGIN
4941 SELECT item_type
4942 INTO l_trx_alphanumeric_value
4943 FROM MTL_SYSTEM_ITEMS
4944 WHERE inventory_item_id = ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.PRODUCT_ID(p_structure_index)
4945 AND organization_id = nvl(ZX_GLOBAL_STRUCTURES_PKG.TRX_LINE_DIST_TBL.PRODUCT_ORG_ID(p_structure_index),
4946 p_event_class_rec.internal_organization_id);
4947 EXCEPTION
4948 WHEN NO_DATA_FOUND then
4949 p_trx_alphanumeric_value := NULL;
4950 WHEN TOO_MANY_ROWS then
4951 p_trx_alphanumeric_value := NULL;
4952 END;
4953
4954 IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl.EXISTS(l_table_index) THEN
4955 IF ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl(l_table_index) = l_trx_alphanumeric_value THEN
4956 p_trx_alphanumeric_value := ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl(l_table_index);
4957 l_in_cache_flg := TRUE;
4958 END IF;
4959 END IF;
4960
4961 IF NOT l_in_cache_flg THEN
4962 ZX_TDS_CALC_SERVICES_PUB_PKG.g_tsrm_alphanum_value_tbl(l_table_index) := l_trx_alphanumeric_value;
4963 p_trx_alphanumeric_value := l_trx_alphanumeric_value;
4964 END IF;
4965
4966 IF (g_level_procedure >= g_current_runtime_level ) THEN
4967 FND_LOG.STRING(g_level_procedure,
4968 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_user_item_alphanum_value',
4969 'trx_char_value: ' || p_trx_alphanumeric_value);
4970 FND_LOG.STRING(g_level_procedure,
4971 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_user_item_alphanum_value.END',
4972 'ZX_TDS_RULE_BASE_DETM_PVT: get_user_item_alphanum_value(-)' ||
4973 ', p_return_status = ' || p_return_status ||
4974 ', p_error_buffer = ' || p_error_buffer);
4975 END IF;
4976 EXCEPTION
4977 WHEN OTHERS THEN
4978 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
4979 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
4980
4981 IF (g_level_unexpected >= g_current_runtime_level ) THEN
4982 FND_LOG.STRING(g_level_unexpected,
4983 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_user_item_alphanum_value',
4984 p_error_buffer);
4985 END IF;
4986
4987 END get_user_item_alphanum_value;
4988
4989 -----------------------------------------------------------------------
4990 -- PRIVATE PROCEDURE
4991 -- get_fc
4992 --
4993 -- DESCRIPTION
4994 -- This procedure returns the fiscal classification code obtained from
4995 -- the cache structure if available, if not it calls TCM API to get it
4996 -- and insert the value to the cache structure
4997 --
4998
4999 PROCEDURE get_fc(
5000 p_structure_name IN VARCHAR2,
5001 p_structure_index IN BINARY_INTEGER,
5002 p_condition_index IN BINARY_INTEGER,
5003 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
5004 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
5005 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
5006 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
5007 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
5008 p_return_status OUT NOCOPY VARCHAR2,
5009 p_error_buffer OUT NOCOPY VARCHAR2)
5010
5011 IS
5012 l_found BOOLEAN;
5013 l_first_party_flag BOOLEAN;
5014 l_substr_cq_party VARCHAR2(15);
5015 l_hq_estb_flag VARCHAR2(1);
5016 l_le_flag VARCHAR2(1);
5017 l_third_party_flag VARCHAR2(1);
5018 l_parameter_code ZX_PARAMETERS_B.TAX_PARAMETER_CODE%TYPE;
5019 l_classified_entity_id NUMBER;
5020 l_item_org_id NUMBER;
5021 l_le_id NUMBER;
5022 l_length NUMBER;
5023 l_prod_trx_parm_value ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE;
5024 l_fsc_rec ZX_TCM_CONTROL_PKG.ZX_FISCAL_CLASS_INFO_REC;
5025 l_fsc_cat_rec ZX_TCM_CONTROL_PKG.ZX_CATEGORY_CODE_INFO_REC;
5026 i BINARY_INTEGER;
5027 j BINARY_INTEGER;
5028 l_classification_category ZX_FC_TYPES_B.Classification_Type_Categ_Code%TYPE;
5029 l_classification_type ZX_FC_TYPES_B.CLASSIFICATION_TYPE_CODE%TYPE;
5030 l_condition_value ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE;
5031
5032 l_fc_base_category_set_id zx_fc_types_b.owner_id_num%TYPE;
5033 l_fc_level zx_fc_types_b.classification_type_level_code%TYPE;
5034 l_level_start_position zx_fc_types_b.start_position%TYPE;
5035 l_level_num_characters zx_fc_types_b.num_characters%TYPE;
5036 l_level_delimiter zx_fc_types_b.delimiter%TYPE;
5037 l_default_taxation_country zx_lines_det_factors.default_taxation_country%TYPE;
5038 l_country_def_category_set_id zx_fc_country_defaults.primary_inventory_category_set%TYPE;
5039 l_product_fisc_classification zx_lines_det_factors.product_fisc_classification%TYPE;
5040
5041 -- Added the variable l_product_org_id for Bug#9530065
5042 l_product_org_id NUMBER;
5043
5044 -- Added following cursor for Bug Fix 5163401
5045
5046 CURSOR c_get_le_ptp_id(c_le_id NUMBER) IS
5047 SELECT ptp.party_tax_profile_id
5048 FROM zx_party_tax_profile ptp,
5049 xle_entity_profiles le
5050 WHERE ptp.party_type_code = 'FIRST_PARTY'
5051 AND ptp.party_id = le.party_id
5052 AND le.legal_entity_id = c_le_id;
5053
5054 CURSOR c_fc_base_category_set(c_classification_type_code VARCHAR2) IS
5055 SELECT owner_id_num,
5056 classification_type_level_code,
5057 start_position,
5058 num_characters,
5059 delimiter
5060 FROM zx_fc_types_b
5061 WHERE classification_type_code = c_classification_type_code;
5062
5063 CURSOR c_country_def_category_set_id(c_country_code VARCHAR2) IS
5064 SELECT primary_inventory_category_set
5065 FROM zx_fc_country_defaults
5066 WHERE country_code = c_country_code;
5067
5068 BEGIN
5069
5070 IF (g_level_procedure >= g_current_runtime_level ) THEN
5071 FND_LOG.STRING(g_level_procedure,
5072 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc.BEGIN',
5073 'ZX_TDS_RULE_BASE_DETM_PVT: get_fc(+)');
5074 END IF;
5075
5076 p_return_status := FND_API.G_RET_STS_SUCCESS;
5077
5078 i := p_condition_index;
5079
5080 l_classification_category := g_determining_factor_class_tbl(i);
5081 l_classification_type := g_determining_factor_code_tbl(i);
5082 l_condition_value := g_alphanum_value_tbl(i);
5083
5084 IF (g_level_statement >= g_current_runtime_level ) THEN
5085 FND_LOG.STRING(g_level_statement,
5086 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5087 'l_classification_category: ' || l_classification_category ||
5088 ', l_classification_type: '|| l_classification_type ||
5089 ', l_condition_value: ' || l_condition_value);
5090 END IF;
5091
5092 IF l_classification_category IN ('PRODUCT_GENERIC_CLASSIFICATION',
5093 'TRX_GENERIC_CLASSIFICATION',
5094 'DOCUMENT') THEN
5095
5096 IF l_classification_category = 'DOCUMENT' THEN
5097 -- bug#5014051-
5098 l_parameter_code := 'DOCUMENT_SUB_TYPE';
5099 ELSIF l_classification_category = 'PRODUCT_GENERIC_CLASSIFICATION' THEN
5100 l_parameter_code := 'PRODUCT_CATEGORY';
5101 ELSE
5102 l_parameter_code := 'TRX_BUSINESS_CATEGORY';
5103 END IF;
5104 --
5105 -- get transaction value from TSRM
5106 --
5107 get_tsrm_alphanum_value(
5108 p_structure_name,
5109 p_structure_index,
5110 l_parameter_code,
5111 l_prod_trx_parm_value,
5112 p_return_status,
5113 p_error_buffer );
5114
5115 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5116 IF (g_level_error >= g_current_runtime_level ) THEN
5117 FND_LOG.STRING(g_level_error,
5118 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5119 'Incorrect return_status after calling get_tsrm_alphanum_value()' ||
5120 ', return_status: ' || p_return_status);
5121 END IF;
5122 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5123 RETURN;
5124 END IF;
5125
5126 IF (g_level_statement >= g_current_runtime_level ) THEN
5127 FND_LOG.STRING(g_level_statement,
5128 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5129 'l_prod_trx_parm_value: ' || l_prod_trx_parm_value);
5130 END IF;
5131
5132 --
5133 -- get driver_value from TCM API
5134 --
5135 l_fsc_cat_rec.classification_type := l_classification_type;
5136 l_fsc_cat_rec.tax_determine_date := p_tax_determine_date;
5137 l_fsc_cat_rec.classification_category := l_classification_category;
5138 l_fsc_cat_rec.parameter_value := l_prod_trx_parm_value;
5139 l_fsc_cat_rec.condition_subclass := p_Determining_Factor_Cq_Code;
5140
5141
5142 IF (g_level_statement >= g_current_runtime_level ) THEN
5143 FND_LOG.STRING(g_level_statement,
5144 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5145 'calling ZX_TCM_CONTROL_PKG.GET_PROD_TRX_CATE_VALUE');
5146 END IF;
5147
5148
5149 IF p_Determining_Factor_Cq_Code is NULL then
5150 -- CR 2944893 use the value passed from the transaction as the condition value
5151 -- when class qualifier is NULL
5152
5153 p_trx_alphanumeric_value := l_prod_trx_parm_value;
5154
5155 ELSE
5156 ZX_TCM_CONTROL_PKG.GET_PROD_TRX_CATE_VALUE(
5157 l_fsc_cat_rec,
5158 p_return_status);
5159
5160 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
5161 p_trx_alphanumeric_value := nvl(l_fsc_cat_rec.condition_value, FND_API.G_MISS_CHAR);
5162 ELSE
5163 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5164 p_return_status := FND_API.G_RET_STS_SUCCESS;
5165 END IF;
5166
5167 END IF; -- Null Class Qualifier
5168
5169 ELSIF l_classification_category = 'TRX_FISCAL_CLASS' THEN
5170
5171 l_parameter_code := 'TRX_BUSINESS_CATEGORY';
5172
5173 -- get transaction value from TSRM
5174 get_tsrm_alphanum_value(
5175 p_structure_name,
5176 p_structure_index,
5177 l_parameter_code,
5178 l_prod_trx_parm_value,
5179 p_return_status,
5180 p_error_buffer );
5181
5182 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5183 IF (g_level_error >= g_current_runtime_level ) THEN
5184 FND_LOG.STRING(g_level_error,
5185 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5186 'Incorrect return_status after calling get_tsrm_alphanum_value()' ||
5187 ', return_status: ' || p_return_status);
5188 END IF;
5189 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5190 RETURN;
5191 END IF;
5192
5193 l_fsc_rec.classification_type := l_classification_type;
5194 l_fsc_rec.tax_regime_code := p_tax_regime_code;
5195 l_fsc_rec.tax_determine_date := p_tax_determine_date;
5196 l_fsc_rec.classification_category := l_classification_category;
5197 l_fsc_rec.classified_entity_id := l_classified_entity_id;
5198 l_fsc_rec.application_id := p_event_class_rec.application_id;
5199 l_fsc_rec.event_class_code := l_prod_trx_parm_value;
5200 l_fsc_rec.condition_value := l_condition_value;
5201
5202 IF l_prod_trx_parm_value IS NOT NULL THEN
5203
5204 ZX_TCM_CONTROL_PKG.GET_FISCAL_CLASSIFICATION(
5205 l_fsc_rec,
5206 p_return_status);
5207
5208 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
5209 p_trx_alphanumeric_value := nvl(l_fsc_rec.fsc_code, FND_API.G_MISS_CHAR);
5210 ELSE
5211 -- Bugfix 4882676: ignore error even if fc not found
5212 p_return_status := FND_API.G_RET_STS_SUCCESS;
5213 IF (g_level_statement >= g_current_runtime_level ) THEN
5214 FND_LOG.STRING(g_level_statement,
5215 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5216 'ignore error even if fc not found ' );
5217 END IF;
5218 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5219 l_fsc_rec.fsc_code := p_trx_alphanumeric_value;
5220 END IF;
5221 ELSE
5222 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR;
5223 l_fsc_rec.fsc_code := p_trx_alphanumeric_value;
5224 END IF; --Checking for NULL case for calling GET_FISCAL_CLASSIFICATION
5225
5226 ELSIF l_classification_category = 'PRODUCT_FISCAL_CLASS' THEN
5227
5228 -- get base category_set_id for the FC type
5229 OPEN c_fc_base_category_set(l_classification_type);
5230 FETCH c_fc_base_category_set
5231 INTO l_fc_base_category_set_id,
5232 l_fc_level,
5233 l_level_start_position,
5234 l_level_num_characters,
5235 l_level_delimiter;
5236 CLOSE c_fc_base_category_set;
5237
5238 IF (g_level_statement >= g_current_runtime_level ) THEN
5239 FND_LOG.STRING(g_level_statement,
5240 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5241 'l_fc_base_category_set_id: '||l_fc_base_category_set_id ||
5242 ', l_fc_level: '||l_fc_level ||
5243 ', l_level_start_position: '||l_level_start_position ||
5244 ', l_level_num_characters: '||l_level_num_characters ||
5245 ', l_level_delimiter: '||l_level_delimiter );
5246 END IF;
5247
5248 -- get category_set_id for the taxation_country
5249 l_parameter_code := 'DEFAULT_TAXATION_COUNTRY';
5250
5251 -- get transaction value from TSRM
5252 get_tsrm_alphanum_value(
5253 p_structure_name,
5254 p_structure_index,
5255 l_parameter_code,
5256 l_default_taxation_country,
5257 p_return_status,
5258 p_error_buffer );
5259
5260 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5261 IF (g_level_error >= g_current_runtime_level ) THEN
5262 FND_LOG.STRING(g_level_error,
5263 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5264 'Called get_tsrm_alphanum_value to get DEFAULT_TAXATION_COUNTRY' ||
5265 ', return_status: ' || p_return_status);
5266 END IF;
5267 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5268 RETURN;
5269 END IF;
5270
5271 OPEN c_country_def_category_set_id(l_default_taxation_country);
5272
5273 FETCH c_country_def_category_set_id into l_country_def_category_set_id;
5274 CLOSE c_country_def_category_set_id;
5275
5276 IF (g_level_statement >= g_current_runtime_level ) THEN
5277 FND_LOG.STRING(g_level_statement,
5278 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5279 'l_country_def_category_set_id: '||l_country_def_category_set_id );
5280 END IF;
5281
5282 l_parameter_code := 'PRODUCT_FISC_CLASSIFICATION';
5283
5284 -- get transaction value from TSRM
5285 get_tsrm_alphanum_value(
5286 p_structure_name,
5287 p_structure_index,
5288 l_parameter_code,
5289 l_product_fisc_classification,
5290 p_return_status,
5291 p_error_buffer );
5292
5293 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5294 IF (g_level_error >= g_current_runtime_level ) THEN
5295 FND_LOG.STRING(g_level_error,
5296 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5297 'Called get_tsrm_alphanum_value to get PRODUCT_FISC_CLASSIFICATION' ||
5298 ', return_status: ' || p_return_status);
5299 END IF;
5300 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5301 RETURN;
5302 END IF;
5303
5304 IF l_fc_base_category_set_id = l_country_def_category_set_id
5305 AND l_product_fisc_classification IS NOT NULL
5306 THEN
5307
5308 -- If the base inventory category set (id) for the FC Type of
5309 -- the rule matches the value of the country default (of the
5310 -- default taxation country), rule value will be compared with
5311 -- (substring) transaction line level value and if it does not match,
5312 -- then rule will not be considered as successful.
5313
5314 -- If the transaction line level value is high than that of the condition value,
5315 -- need to get the substring of the same level of the condition value.
5316 -- Should not use LENGTHB() since the NUM_CHARACTERS counts in characters
5317 -- NOTE: LENGTH(l_condition_value) = l_level_num_characters
5318
5319 p_trx_alphanumeric_value := l_product_fisc_classification;
5320
5321 IF l_level_delimiter IS NULL THEN
5322 -- product fiscal class is sub string type
5323
5324 IF LENGTH(p_trx_alphanumeric_value) > NVL(l_level_start_position, 1) + l_level_num_characters - 1 THEN
5325 p_trx_alphanumeric_value := SUBSTR(p_trx_alphanumeric_value,
5326 NVL(l_level_start_position, 1),
5327 l_level_num_characters);
5328 END IF;
5329
5330 ELSE
5331 -- product fiscal class is delimiter type
5332
5333 IF INSTR(p_trx_alphanumeric_value, l_level_delimiter, 1, l_fc_level) > 0 THEN
5334 p_trx_alphanumeric_value := SUBSTR(p_trx_alphanumeric_value,
5335 1,
5336 INSTR(p_trx_alphanumeric_value, l_level_delimiter, 1, l_fc_level) - 1 );
5337 END IF;
5338
5339 END IF;
5340
5341 ELSE
5342 -- If the base inventory category set (id) for the FC Type of the
5343 -- rule "Does Not" match the value of the country default (of the
5344 -- default taxation country), rule value will be compared value
5345 -- associated with item.
5346
5347 l_parameter_code := 'PRODUCT_ID';
5348
5349 -- get transaction value from TSRM
5350 get_tsrm_num_value(
5351 p_structure_name,
5352 p_structure_index,
5353 l_parameter_code,
5354 l_classified_entity_id,
5355 p_return_status,
5356 p_error_buffer );
5357
5358 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5359 IF (g_level_error >= g_current_runtime_level ) THEN
5360 FND_LOG.STRING(g_level_error,
5361 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5362 'Called get_tsrm_num_value to get PRODUCT_ID' ||
5363 ', return_status: ' || p_return_status);
5364 END IF;
5365 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5366 RETURN;
5367 END IF;
5368
5369 -- get organization id for item
5370 -- Bug 7250592
5371 IF p_event_class_rec.prod_family_grp_code = 'O2C' THEN
5372 l_parameter_code := 'SHIP_FROM_PARTY_ID';
5373 ELSIF p_event_class_rec.prod_family_grp_code = 'P2P' THEN
5374 l_parameter_code := 'SHIP_TO_PARTY_ID';
5375 ELSE
5376 IF (g_level_error >= g_current_runtime_level ) THEN
5377 FND_LOG.STRING(g_level_error,
5378 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5379 'Invalid prod_family_grp_code');
5380 END IF;
5381 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5382 RETURN;
5383 END IF;
5384
5385 get_tsrm_num_value(
5386 p_structure_name,
5387 p_structure_index,
5388 l_parameter_code,
5389 l_item_org_id,
5390 p_return_status,
5391 p_error_buffer );
5392
5393 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5394 IF (g_level_error >= g_current_runtime_level ) THEN
5395 FND_LOG.STRING(g_level_error,
5396 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5397 'Called get_tsrm_num_value to get ' ||l_parameter_code|| ', return_status: ' || p_return_status);
5398 END IF;
5399 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5400 RETURN;
5401 END IF;
5402
5403 IF (g_level_statement >= g_current_runtime_level ) THEN
5404 FND_LOG.STRING(g_level_statement,
5405 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5406 'item_org_id: ' || to_char(l_item_org_id));
5407 END IF;
5408
5409 -- get product org id
5410 l_parameter_code := 'PRODUCT_ORG_ID';
5411
5412 get_tsrm_num_value(
5413 p_structure_name,
5414 p_structure_index,
5415 l_parameter_code,
5416 l_product_org_id,
5417 p_return_status,
5418 p_error_buffer );
5419
5420 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5421 IF (g_level_error >= g_current_runtime_level ) THEN
5422 FND_LOG.STRING(g_level_error,
5423 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5424 'Called get_tsrm_num_value to get PRODUCT_ORG_ID' ||
5425 ', return_status: ' || p_return_status);
5426 END IF;
5427 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5428 RETURN;
5429 END IF;
5430
5431 IF (g_level_statement >= g_current_runtime_level ) THEN
5432 FND_LOG.STRING(g_level_statement,
5433 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5434 'product_org_id: ' || to_char(l_product_org_id));
5435 END IF;
5436
5437 IF (l_classified_entity_id is NOT NULL AND l_item_org_id is NOT NULL) THEN
5438 --
5439 -- check if can get fsc code from the cache
5440 --
5441 get_fsc_code(
5442 l_found,
5443 p_tax_regime_code,
5444 l_classification_category,
5445 l_classification_type,
5446 p_tax_determine_date,
5447 l_classified_entity_id,
5448 l_item_org_id,
5449 p_event_class_rec.application_id,
5450 p_event_class_rec.event_class_code,
5451 l_condition_value,
5452 p_trx_alphanumeric_value);
5453
5454 IF NOT l_found THEN
5455 l_fsc_rec.classification_type := l_classification_type;
5456 l_fsc_rec.tax_regime_code := p_tax_regime_code;
5457 l_fsc_rec.tax_determine_date := p_tax_determine_date;
5458 l_fsc_rec.classification_category := l_classification_category;
5459 l_fsc_rec.classified_entity_id := l_classified_entity_id;
5460 l_fsc_rec.item_org_id := l_item_org_id;
5461 l_fsc_rec.application_id := p_event_class_rec.application_id;
5462 l_fsc_rec.event_class_code := p_event_class_rec.event_class_code;
5463 l_fsc_rec.condition_value := l_condition_value;
5464
5465 IF (g_level_statement >= g_current_runtime_level ) THEN
5466 FND_LOG.STRING(g_level_statement,
5467 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5468 'calling ZX_TCM_CONTROL_PKG.GET_FISCAL_CLASSIFICATION');
5469 END IF;
5470
5471 --Bug Fix 4774215
5472 /*If there is no enough information to call the procedure while evaluating rule,need to
5473 go further and evaluate the next rule in the hierarchy.*/
5474
5475 -- Bug fix 4941566
5476 /* Only product category need the item_org_id */
5477
5478 ZX_TCM_CONTROL_PKG.GET_FISCAL_CLASSIFICATION(
5479 l_fsc_rec,
5480 p_return_status);
5481
5482 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
5483 p_trx_alphanumeric_value := Nvl(l_fsc_rec.fsc_code,FND_API.G_MISS_CHAR);
5484 j := OPTIMAL_FSC_TBL_LOCATION();
5485 ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(j) := l_fsc_rec;
5486 ELSE
5487 -- Bugfix 4882676: ignore error even if fc not found
5488 l_fsc_rec.fsc_code := FND_API.G_MISS_CHAR||FND_API.G_MISS_CHAR;
5489 p_trx_alphanumeric_value := l_fsc_rec.fsc_code;
5490 p_return_status := FND_API.G_RET_STS_SUCCESS;
5491 END IF;
5492 END IF; -- not found in cache
5493 END IF; -- item org id is not null
5494 --
5495 -- Start : Added the code to fetch the PFC for Product Org Id
5496 -- if not found for Item Org Id for Bug#9530065
5497
5498 IF (l_classified_entity_id is NOT NULL AND
5499 l_product_org_id IS NOT NULL AND
5500 (p_trx_alphanumeric_value IS NULL
5501 or p_trx_alphanumeric_value = FND_API.G_MISS_CHAR)
5502 ) THEN
5503 IF (g_level_statement >= g_current_runtime_level ) THEN
5504 FND_LOG.STRING(g_level_statement,
5505 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5506 'PFC Not found for item org id. Fetching PFC for Product Org Id...' );
5507 END IF;
5508
5509 -- check if can get fsc code from the cache
5510 get_fsc_code(
5511 l_found,
5512 p_tax_regime_code,
5513 l_classification_category,
5514 l_classification_type,
5515 p_tax_determine_date,
5516 l_classified_entity_id,
5517 l_product_org_id,
5518 p_event_class_rec.application_id,
5519 p_event_class_rec.event_class_code,
5520 l_condition_value,
5521 p_trx_alphanumeric_value);
5522
5523 IF NOT l_found THEN
5524 l_fsc_rec.classification_type := l_classification_type;
5525 l_fsc_rec.tax_regime_code := p_tax_regime_code;
5526 l_fsc_rec.tax_determine_date := p_tax_determine_date;
5527 l_fsc_rec.classification_category := l_classification_category;
5528 l_fsc_rec.classified_entity_id := l_classified_entity_id;
5529 l_fsc_rec.item_org_id := l_product_org_id;
5530 l_fsc_rec.application_id := p_event_class_rec.application_id;
5531 l_fsc_rec.event_class_code := p_event_class_rec.event_class_code;
5532 l_fsc_rec.condition_value := l_condition_value;
5533
5534 IF (g_level_statement >= g_current_runtime_level ) THEN
5535 FND_LOG.STRING(g_level_statement,
5536 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5537 'calling ZX_TCM_CONTROL_PKG.GET_FISCAL_CLASSIFICATION');
5538 END IF;
5539
5540 ZX_TCM_CONTROL_PKG.GET_FISCAL_CLASSIFICATION(
5541 l_fsc_rec,
5542 p_return_status);
5543
5544 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
5545 p_trx_alphanumeric_value := Nvl(l_fsc_rec.fsc_code,FND_API.G_MISS_CHAR);
5546 j := OPTIMAL_FSC_TBL_LOCATION();
5547 ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(j) := l_fsc_rec;
5548 ELSE
5549 -- Bugfix 4882676: ignore error even if fc not found
5550 l_fsc_rec.fsc_code := FND_API.G_MISS_CHAR||FND_API.G_MISS_CHAR;
5551 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR||FND_API.G_MISS_CHAR;
5552 p_return_status := FND_API.G_RET_STS_SUCCESS;
5553 IF (g_level_statement >= g_current_runtime_level ) THEN
5554 FND_LOG.STRING(g_level_statement,
5555 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5556 'PFC not found for Product Org Id. Ignore error...' );
5557 END IF;
5558 END IF;
5559 END IF; -- Not found in cache
5560 END IF; -- Product org ID check
5561 END IF; -- l_fc_base_category_set_id = l_country_def_category_set_id
5562 ELSE
5563 --
5564 -- party, transaction, product fiscal classifications
5565 --
5566 IF l_classification_category = 'PARTY_FISCAL_CLASS' THEN
5567
5568 -- Fix for Bug 4873457 - Site level classification for first parties implies the classification
5569 -- of secondary establishments (i.e., not of type HQ establishments)
5570 -- - Party level classification for first parties implies the classification
5571 -- of HQ establishments. Optionally, in the case of party level classifications, we can attempt
5572 -- to derive the classifications at LE level. This makes sense as we currently allow the fiscal
5573 -- classification of LEs in our UIs. [Note that this is **different** from Legal Classifications]
5574
5575 IF l_classification_category = 'PARTY_FISCAL_CLASS' THEN
5576 l_first_party_flag := evaluate_if_first_party(p_Determining_Factor_Cq_Code);
5577 END IF;
5578
5579 -- Fix for Bug 5163401 - Site level is removed from the rule conditions. Following is the logic:
5580 --
5581 -- For Third Parties: Look at site first and then at the party. For example, if 'Bill From'
5582 -- represents a third party for the input event class, then look for Party FC associated with
5583 -- 'Bill From Party Site' first. If no assignments are found for this, i.e. if TCM API returns
5584 -- G_MISS_CHAR, then look for Party FC associated with 'Bill From Party'.
5585 --
5586 -- For First Parties: Look at the Secondary Estalishment first and if not found, then look at the
5587 -- HQ Establishment and if it is also not found, look for the Legal Entity. For example, if
5588 -- 'Bill From' represents a first party establishment for the input event class, then look for Party
5589 -- FC associated with 'Bill From Party Site' first. If no assignments are found for this, then look for
5590 -- Party FC associated with 'HQ Establishment'. If this is also not found, then look for the Party FC
5591 -- associated with 'Legal Entity'.
5592 --
5593
5594 IF l_first_party_flag THEN
5595 l_parameter_code := p_Determining_Factor_Cq_Code || '_' || 'TAX_PROF_ID';
5596 l_hq_estb_flag := 'N';
5597 ELSE
5598 l_parameter_code := REPLACE(p_Determining_Factor_Cq_Code, 'PARTY', 'SITE') || '_' || 'TAX_PROF_ID';
5599 l_third_party_flag := 'N';
5600 END IF;
5601
5602 ELSIF l_classification_category = 'LEGAL_PARTY_FISCAL_CLASS' THEN
5603 l_parameter_code := 'LEGAL_ENTITY_ID';
5604 END IF;
5605
5606 --
5607 -- get transaction value from TSRM
5608 --
5609 get_tsrm_num_value(
5610 p_structure_name,
5611 p_structure_index,
5612 l_parameter_code,
5613 l_classified_entity_id,
5614 p_return_status,
5615 p_error_buffer );
5616
5617 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5618 IF (g_level_error >= g_current_runtime_level ) THEN
5619 FND_LOG.STRING(g_level_error,
5620 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5621 'Incorrect return_status after calling get_tsrm_num_value' ||
5622 ', return_status: ' || p_return_status);
5623 END IF;
5624 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5625 RETURN;
5626 END IF;
5627
5628 IF l_classification_category = 'PARTY_FISCAL_CLASS'
5629 AND l_classified_entity_id IS NULL THEN
5630
5631 IF l_first_party_flag THEN
5632 l_parameter_code := 'HQ_ESTB_PARTY_TAX_PROF_ID';
5633 l_hq_estb_flag := 'Y';
5634 ELSE
5635 l_parameter_code := p_Determining_Factor_Cq_Code || '_' || 'TAX_PROF_ID';
5636 l_third_party_flag := 'Y';
5637 END IF;
5638
5639 --
5640 -- get transaction value from TSRM
5641 --
5642 get_tsrm_num_value(
5643 p_structure_name,
5644 p_structure_index,
5645 l_parameter_code,
5646 l_classified_entity_id,
5647 p_return_status,
5648 p_error_buffer );
5649
5650 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5651 IF (g_level_error >= g_current_runtime_level ) THEN
5652 FND_LOG.STRING(g_level_error,
5653 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5654 'Incorrect return_status after calling get_tsrm_num_value' ||
5655 ', return_status: ' || p_return_status);
5656 END IF;
5657 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5658 RETURN;
5659 END IF;
5660
5661 END IF; -- End of check for classification category and classified entity id
5662
5663 IF (g_level_statement >= g_current_runtime_level ) THEN
5664 FND_LOG.STRING(g_level_statement,
5665 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5666 'classified_entity_id: ' || to_char(l_classified_entity_id));
5667 END IF;
5668
5669 --
5670 -- check if can get fsc code from the cache
5671 --
5672 get_fsc_code(
5673 l_found,
5674 p_tax_regime_code,
5675 l_classification_category,
5676 l_classification_type,
5677 p_tax_determine_date,
5678 l_classified_entity_id,
5679 l_item_org_id,
5680 p_event_class_rec.application_id,
5681 p_event_class_rec.event_class_code,
5682 l_condition_value,
5683 p_trx_alphanumeric_value);
5684
5685 IF NOT l_found THEN
5686 l_fsc_rec.classification_type := l_classification_type;
5687 l_fsc_rec.tax_regime_code := p_tax_regime_code;
5688 l_fsc_rec.tax_determine_date := p_tax_determine_date;
5689 l_fsc_rec.classification_category := l_classification_category;
5690 l_fsc_rec.classified_entity_id := l_classified_entity_id;
5691 l_fsc_rec.item_org_id := l_item_org_id;
5692 l_fsc_rec.application_id := p_event_class_rec.application_id;
5693 l_fsc_rec.event_class_code := p_event_class_rec.event_class_code;
5694 l_fsc_rec.condition_value := l_condition_value;
5695
5696 IF (g_level_statement >= g_current_runtime_level ) THEN
5697 FND_LOG.STRING(g_level_statement,
5698 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5699 'calling ZX_TCM_CONTROL_PKG.GET_FISCAL_CLASSIFICATION');
5700 END IF;
5701
5702 --Bug Fix 4774215
5703 /*If there is no enough information to call the procedure while evaluating rule,need to
5704 go further and evaluate the next rule in the hierarchy.*/
5705
5706 -- Bug fix 4941566
5707 /* Only product category need the item_org_id */
5708
5709 IF l_fsc_rec.classified_entity_id is NOT NULL THEN
5710
5711 ZX_TCM_CONTROL_PKG.GET_FISCAL_CLASSIFICATION(
5712 l_fsc_rec,
5713 p_return_status);
5714
5715 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
5716 p_trx_alphanumeric_value := Nvl(l_fsc_rec.fsc_code,FND_API.G_MISS_CHAR);
5717 j := OPTIMAL_FSC_TBL_LOCATION();
5718 ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(j) := l_fsc_rec;
5719 ELSE
5720 -- Bugfix 4882676: ignore error even if fc not found
5721 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR||FND_API.G_MISS_CHAR;
5722 l_fsc_rec.fsc_code := p_trx_alphanumeric_value;
5723 p_return_status := FND_API.G_RET_STS_SUCCESS;
5724 IF (g_level_statement >= g_current_runtime_level ) THEN
5725 FND_LOG.STRING(g_level_statement,
5726 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5727 'ignore error even if fc not found ' );
5728 END IF;
5729 END IF;
5730 END IF; --Checking for NULL case for calling GET_FISCAL_CLASSIFICATION
5731 END IF;
5732 END IF;
5733
5734 IF l_classification_category = 'PARTY_FISCAL_CLASS'
5735 AND (l_fsc_rec.fsc_code = FND_API.G_MISS_CHAR OR
5736 p_trx_alphanumeric_value = FND_API.G_MISS_CHAR )THEN
5737
5738 IF l_third_party_flag = 'Y' THEN
5739 p_trx_alphanumeric_value := nvl(l_fsc_rec.fsc_code,FND_API.G_MISS_CHAR);
5740 IF (g_level_procedure >= g_current_runtime_level ) THEN
5741 FND_LOG.STRING(g_level_procedure,
5742 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5743 'fsc_code: ' || p_trx_alphanumeric_value);
5744 FND_LOG.STRING(g_level_procedure,
5745 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc.END',
5746 'ZX_TDS_RULE_BASE_DETM_PVT: get_fc(-)' ||
5747 ', p_return_status = ' || p_return_status ||
5748 ', p_error_buffer = ' || p_error_buffer);
5749 END IF;
5750 RETURN;
5751 END IF;
5752
5753 IF l_first_party_flag THEN
5754 IF l_hq_estb_flag = 'Y' THEN
5755 l_parameter_code := 'LEGAL_ENTITY_ID';
5756 l_le_flag := 'Y';
5757 ELSE
5758 l_parameter_code := 'HQ_ESTB_PARTY_TAX_PROF_ID';
5759 END IF;
5760 ELSE
5761 l_parameter_code := p_Determining_Factor_Cq_Code || '_' || 'TAX_PROF_ID';
5762 END IF;
5763
5764 --
5765 -- get transaction value from TSRM
5766 --
5767 get_tsrm_num_value(
5768 p_structure_name,
5769 p_structure_index,
5770 l_parameter_code,
5771 l_classified_entity_id,
5772 p_return_status,
5773 p_error_buffer );
5774
5775 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5776 IF (g_level_error >= g_current_runtime_level ) THEN
5777 FND_LOG.STRING(g_level_error,
5778 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5779 'Incorrect return_status after calling get_tsrm_num_value' ||
5780 ', return_status: ' || p_return_status);
5781 END IF;
5782 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR|| FND_API.G_MISS_CHAR;
5783 RETURN;
5784 END IF;
5785
5786 IF l_classified_entity_id IS NULL AND NOT l_first_party_flag THEN
5787 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR;
5788 IF (g_level_procedure >= g_current_runtime_level ) THEN
5789 FND_LOG.STRING(g_level_procedure,
5790 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5791 'fsc_code: ' || p_trx_alphanumeric_value);
5792 FND_LOG.STRING(g_level_procedure,
5793 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc.END',
5794 'ZX_TDS_RULE_BASE_DETM_PVT: get_fc(-)' ||
5795 ', p_return_status = ' || p_return_status ||
5796 ', p_error_buffer = ' || p_error_buffer);
5797 END IF;
5798 RETURN;
5799 END IF;
5800
5801 IF l_le_flag = 'Y' THEN
5802
5803 l_le_id := l_classified_entity_id;
5804
5805 OPEN c_get_le_ptp_id(l_le_id);
5806 FETCH c_get_le_ptp_id INTO l_classified_entity_id;
5807
5808 IF c_get_le_ptp_id%NOTFOUND THEN
5809 CLOSE c_get_le_ptp_id;
5810 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR||FND_API.G_MISS_CHAR;
5811 IF (g_level_statement >= g_current_runtime_level ) THEN
5812 FND_LOG.STRING(g_level_statement,
5813 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5814 'Legal Entity PTP Not Found; l_le_id' ||
5815 to_char(l_le_id));
5816 END IF;
5817 IF (g_level_procedure >= g_current_runtime_level ) THEN
5818 FND_LOG.STRING(g_level_procedure,
5819 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc.END',
5820 'ZX_TDS_RULE_BASE_DETM_PVT: get_fc(-)');
5821 END IF;
5822 RETURN;
5823 ELSE
5824 CLOSE c_get_le_ptp_id;
5825 END IF;
5826
5827 END IF;
5828
5829 IF (g_level_statement >= g_current_runtime_level ) THEN
5830 FND_LOG.STRING(g_level_statement,
5831 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5832 'classified_entity_id: ' || to_char(l_classified_entity_id));
5833 END IF;
5834
5835 --
5836 -- check if can get fsc code from the cache
5837 --
5838 get_fsc_code(
5839 l_found,
5840 p_tax_regime_code,
5841 l_classification_category,
5842 l_classification_type,
5843 p_tax_determine_date,
5844 l_classified_entity_id,
5845 l_item_org_id,
5846 p_event_class_rec.application_id,
5847 p_event_class_rec.event_class_code,
5848 l_condition_value,
5849 p_trx_alphanumeric_value);
5850
5851 IF NOT l_found THEN
5852
5853 l_fsc_rec.classified_entity_id := l_classified_entity_id;
5854
5855 ZX_TCM_CONTROL_PKG.GET_FISCAL_CLASSIFICATION(
5856 l_fsc_rec,
5857 p_return_status);
5858
5859 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
5860 j := OPTIMAL_FSC_TBL_LOCATION();
5861 ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(j) := l_fsc_rec;
5862 p_trx_alphanumeric_value := nvl(l_fsc_rec.fsc_code, FND_API.G_MISS_CHAR);
5863 ELSE
5864 l_fsc_rec.fsc_code := FND_API.G_MISS_CHAR||FND_API.G_MISS_CHAR;
5865 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR||FND_API.G_MISS_CHAR;
5866 p_return_status := FND_API.G_RET_STS_SUCCESS;
5867 IF (g_level_statement >= g_current_runtime_level ) THEN
5868 FND_LOG.STRING(g_level_statement,
5869 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5870 'ignore error even if fc not found for LE' );
5871 END IF;
5872 END IF;
5873 END IF; -- End for l_found check
5874
5875 -- Bugfix 4873457 - Fetch fc for LE if not found for HQ Estb when classification
5876 -- type is 'PARTY_FISCAL_CLASS' and CQ level is PARTY
5877 IF (l_first_party_flag AND l_fsc_rec.fsc_code = 'PARTY_FISCAL_CLASS' and l_le_flag = 'N') THEN -- Get LE FC
5878
5879 l_parameter_code := 'LEGAL_ENTITY_ID';
5880
5881 --
5882 -- get transaction value from TSRM
5883 --
5884 get_tsrm_num_value(
5885 p_structure_name,
5886 p_structure_index,
5887 l_parameter_code,
5888 l_classified_entity_id,
5889 p_return_status,
5890 p_error_buffer );
5891
5892 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
5893 IF (g_level_error >= g_current_runtime_level ) THEN
5894 FND_LOG.STRING(g_level_error,
5895 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5896 'Incorrect return_status after calling get_tsrm_num_value for LE' ||
5897 ', return_status: ' || p_return_status);
5898 END IF;
5899 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR||FND_API.G_MISS_CHAR;
5900 RETURN;
5901 END IF;
5902
5903 l_le_id := l_classified_entity_id;
5904
5905 OPEN c_get_le_ptp_id(l_le_id);
5906 FETCH c_get_le_ptp_id INTO l_classified_entity_id;
5907
5908 IF c_get_le_ptp_id%NOTFOUND THEN
5909 CLOSE c_get_le_ptp_id;
5910 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR||FND_API.G_MISS_CHAR;
5911 IF (g_level_statement >= g_current_runtime_level ) THEN
5912 FND_LOG.STRING(g_level_statement,
5913 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5914 'Legal Entity PTP Not Found; l_le_id' ||
5915 to_char(l_le_id));
5916 END IF;
5917 IF (g_level_procedure >= g_current_runtime_level ) THEN
5918 FND_LOG.STRING(g_level_procedure,
5919 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc.END',
5920 'ZX_TDS_RULE_BASE_DETM_PVT: get_fc(-)');
5921 END IF;
5922 RETURN;
5923 ELSE
5924 CLOSE c_get_le_ptp_id;
5925 END IF;
5926
5927 IF (g_level_statement >= g_current_runtime_level ) THEN
5928 FND_LOG.STRING(g_level_statement,
5929 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5930 'classified_entity_id ' || to_char(l_classified_entity_id));
5931 END IF;
5932
5933 --
5934 -- check if can get LE fsc code from the cache
5935 --
5936 get_fsc_code(
5937 l_found,
5938 p_tax_regime_code,
5939 l_classification_category,
5940 l_classification_type,
5941 p_tax_determine_date,
5942 l_classified_entity_id,
5943 l_item_org_id,
5944 p_event_class_rec.application_id,
5945 p_event_class_rec.event_class_code,
5946 l_condition_value,
5947 p_trx_alphanumeric_value);
5948
5949 IF NOT l_found THEN
5950
5951 l_fsc_rec.classified_entity_id := l_classified_entity_id;
5952
5953 ZX_TCM_CONTROL_PKG.GET_FISCAL_CLASSIFICATION(
5954 l_fsc_rec,
5955 p_return_status);
5956
5957 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
5958 j := OPTIMAL_FSC_TBL_LOCATION();
5959 ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(j) := l_fsc_rec;
5960 p_trx_alphanumeric_value := nvl(l_fsc_rec.fsc_code, FND_API.G_MISS_CHAR);
5961 ELSE
5962 p_trx_alphanumeric_value := FND_API.G_MISS_CHAR||FND_API.G_MISS_CHAR;
5963 l_fsc_rec.fsc_code := FND_API.G_MISS_CHAR||FND_API.G_MISS_CHAR;
5964 p_return_status := FND_API.G_RET_STS_SUCCESS;
5965 IF (g_level_statement >= g_current_runtime_level ) THEN
5966 FND_LOG.STRING(g_level_statement,
5967 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5968 'ignore error even if fc not found for LE' );
5969 END IF;
5970 END IF;
5971 END IF; -- End for internal l_found check
5972
5973 END IF; -- End for getting LE FC
5974 END IF; -- End of check for party classification
5975
5976 IF (g_level_procedure >= g_current_runtime_level ) THEN
5977 FND_LOG.STRING(g_level_procedure,
5978 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5979 'fsc_code: ' || nvL(p_trx_alphanumeric_value,'XXXX'));
5980 FND_LOG.STRING(g_level_procedure,
5981 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc.END',
5982 'ZX_TDS_RULE_BASE_DETM_PVT: get_fc(-)' ||
5983 ', p_return_status = ' || p_return_status ||
5984 ', p_error_buffer = ' || p_error_buffer);
5985 END IF;
5986
5987 EXCEPTION
5988 WHEN OTHERS THEN
5989 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
5990 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
5991
5992 IF (g_level_unexpected >= g_current_runtime_level ) THEN
5993 FND_LOG.STRING(g_level_unexpected,
5994 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fc',
5995 p_error_buffer);
5996 END IF;
5997
5998 END get_fc;
5999
6000 -----------------------------------------------------------------------
6001 -- PRIVATE PROCEDURE
6002 -- get_geography_info
6003 --
6004 -- DESCRIPTION
6005 --
6006 -- The procedure is to get zone corresponding to a location by calling
6007 -- TCM API
6008 --
6009 PROCEDURE get_geography_info(
6010 p_structure_name IN VARCHAR2,
6011 p_structure_index IN BINARY_INTEGER,
6012 p_condition_index IN BINARY_INTEGER,
6013 p_zone_tbl OUT NOCOPY HZ_GEO_GET_PUB.zone_tbl_type,
6014 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
6015 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
6016 p_return_status OUT NOCOPY VARCHAR2,
6017 p_error_buffer OUT NOCOPY VARCHAR2)
6018 IS
6019 l_location_id NUMBER;
6020 --l_zone_id NUMBER;
6021 --l_zone_name VARCHAR2(360);
6022 l_msg_count NUMBER;
6023 i BINARY_INTEGER;
6024 l_location_type VARCHAR2(30);
6025 --l_zone_tbl HZ_GEO_GET_PUB.zone_tbl_type;
6026 BEGIN
6027
6028 IF (g_level_procedure >= g_current_runtime_level ) THEN
6029 FND_LOG.STRING(g_level_procedure,
6030 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_geography_info.BEGIN',
6031 'ZX_TDS_RULE_BASE_DETM_PVT: get_geography_info(+)');
6032 END IF;
6033
6034 p_return_status := FND_API.G_RET_STS_SUCCESS;
6035
6036 i := p_condition_index;
6037
6038 -- Bug#4720542
6039 IF SUBSTR(p_Determining_Factor_Cq_Code, -5, 5) = 'PARTY' THEN
6040 l_location_type := replace(p_Determining_Factor_Cq_Code,
6041 '_PARTY', NULL);
6042 ELSIF SUBSTR(p_Determining_Factor_Cq_Code, -4, 4) = 'SITE' THEN
6043 l_location_type := replace(p_Determining_Factor_Cq_Code,
6044 '_SITE', NULL);
6045 ELSE --Added else part as part of Bug # 5009256
6046 l_location_type := p_Determining_Factor_Cq_Code;
6047 END IF;
6048
6049 -- Bug# 4722936- truncate p_Determining_Factor_Cq_Code before use
6050 get_tsrm_num_value(
6051 p_structure_name,
6052 p_structure_index,
6053 l_location_type || '_' || 'LOCATION_ID',
6054 l_location_id,
6055 p_return_status,
6056 p_error_buffer);
6057
6058 IF (g_level_statement >= g_current_runtime_level ) THEN
6059 FND_LOG.STRING(g_level_statement,
6060 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_geography_info',
6061 'location_id: ' || to_char(l_location_id));
6062 END IF;
6063
6064 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
6065
6066 /*ZX_TCM_GEO_JUR_PKG.get_zone(
6067 l_location_id,
6068 p_Determining_Factor_Cq_Code,
6069 g_determining_factor_code_tbl(i),
6070 p_tax_determine_date,
6071 l_zone_id,
6072 p_trx_alphanumeric_value,
6073 l_zone_name,
6074 p_return_status); */
6075 IF l_location_id IS NOT NULL THEN
6076
6077 ZX_TCM_GEO_JUR_PKG.get_zone
6078 ( l_location_id,
6079 -- p_Determining_Factor_Cq_Code,
6080 l_location_type,
6081 g_determining_factor_code_tbl(i),
6082 p_tax_determine_date,
6083 p_zone_tbl,
6084 p_return_status);
6085 -- p_trx_alphanumeric_value := l_zone_tbl(1).zone_code;
6086 IF p_zone_tbl.COUNT = 0 THEN
6087 --location infirmation is entered but no tax zone is derived for this.
6088 p_zone_tbl(1).zone_id := -99;
6089 p_zone_tbl(1).zone_type := null;
6090 p_zone_tbl(1).zone_code := null;
6091 p_zone_tbl(1).zone_name := null;
6092 END IF;
6093 END IF;
6094 END IF;
6095
6096 IF (g_level_procedure >= g_current_runtime_level ) THEN
6097 -- FND_LOG.STRING(g_level_procedure,
6098 -- 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_geography_info',
6099 -- 'trx_alphanumeric_value: ' || p_trx_alphanumeric_value);
6100 FND_LOG.STRING(g_level_procedure,
6101 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_geography_info.END',
6102 'ZX_TDS_RULE_BASE_DETM_PVT: get_geography_info(-)' ||
6103 ', p_return_status = ' || p_return_status ||
6104 ', p_error_buffer = ' || p_error_buffer);
6105 END IF;
6106
6107 EXCEPTION
6108 WHEN OTHERS THEN
6109 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6110 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6111 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6112 FND_LOG.STRING(g_level_unexpected,
6113 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_geography_info',
6114 p_error_buffer);
6115 END IF;
6116
6117 END get_geography_info;
6118
6119 -----------------------------------------------------------------------
6120 -- PRIVATE PROCEDURE
6121 -- get_master_geography_info
6122 --
6123 -- DESCRIPTION
6124 --
6125 -- The procedure is to get master geography information corresponding
6126 -- to a location by calling TCM API
6127 --
6128 PROCEDURE get_master_geography_info(
6129 p_structure_name IN VARCHAR2,
6130 p_structure_index IN BINARY_INTEGER,
6131 p_condition_index IN BINARY_INTEGER,
6132 p_trx_numeric_value OUT NOCOPY ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
6133 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
6134 p_return_status OUT NOCOPY VARCHAR2,
6135 p_error_buffer OUT NOCOPY VARCHAR2)
6136 IS
6137 l_location_id NUMBER;
6138 l_geography_id NUMBER;
6139 l_geography_code VARCHAR2(30);
6140 l_geography_name VARCHAR2(360);
6141 l_location_type VARCHAR2(30);
6142 l_msg_count NUMBER;
6143 i BINARY_INTEGER;
6144 BEGIN
6145
6146 IF (g_level_procedure >= g_current_runtime_level ) THEN
6147 FND_LOG.STRING(g_level_procedure,
6148 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_master_geography_info.BEGIN',
6149 'ZX_TDS_RULE_BASE_DETM_PVT: get_master_geography_info(+)');
6150 END IF;
6151
6152 p_return_status := FND_API.G_RET_STS_SUCCESS;
6153
6154 i := p_condition_index;
6155
6156 -- Bug#4720542
6157 IF SUBSTR(p_Determining_Factor_Cq_Code, -5, 5) = 'PARTY' THEN
6158 l_location_type := replace(p_Determining_Factor_Cq_Code,
6159 '_PARTY', NULL);
6160 ELSIF SUBSTR(p_Determining_Factor_Cq_Code, -4, 4) = 'SITE' THEN
6161 l_location_type := replace(p_Determining_Factor_Cq_Code,
6162 '_SITE', NULL);
6163 ELSE --Added else part as part of Bug # 5009256
6164 l_location_type := p_Determining_Factor_Cq_Code;
6165 END IF;
6166
6167 -- Bug# 4722936- truncate p_Determining_Factor_Cq_Code before use
6168 get_tsrm_num_value(
6169 p_structure_name,
6170 p_structure_index,
6171 l_location_type || '_' || 'LOCATION_ID',
6172 l_location_id,
6173 p_return_status,
6174 p_error_buffer);
6175
6176 IF (g_level_statement >= g_current_runtime_level ) THEN
6177 FND_LOG.STRING(g_level_statement,
6178 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_master_geography_info',
6179 'location_id: ' || to_char(l_location_id));
6180 END IF;
6181
6182 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
6183
6184 IF (g_level_statement >= g_current_runtime_level ) THEN
6185 FND_LOG.STRING(g_level_statement,
6186 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_master_geography_info',
6187 'l_location_type: ' || l_location_type);
6188 END IF;
6189
6190 -- Bugfix 4926074: call get_master_geography API only if the location_id is not null
6191 if l_location_id is not null then
6192 ZX_TCM_GEO_JUR_PKG.get_master_geography
6193 (l_location_id,
6194 l_location_type,
6195 g_determining_factor_code_tbl(i),
6196 l_geography_id,
6197 l_geography_code,
6198 l_geography_name,
6199 p_return_status);
6200
6201 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
6202 p_trx_numeric_value := l_geography_id;
6203 END IF;
6204 end if; -- l_location_id is not null
6205 END IF;
6206
6207 IF (g_level_statement >= g_current_runtime_level ) THEN
6208 FND_LOG.STRING(g_level_statement,
6209 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_master_geography_info',
6210 'trx_numeric_value: ' || TO_CHAR(p_trx_numeric_value));
6211 END IF;
6212
6213 IF (g_level_procedure >= g_current_runtime_level ) THEN
6214 FND_LOG.STRING(g_level_procedure,
6215 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_master_geography_info.END',
6216 'ZX_TDS_RULE_BASE_DETM_PVT: get_master_geography_info(-)' ||
6217 ', p_return_status = ' || p_return_status ||
6218 ', p_error_buffer = ' || p_error_buffer);
6219 END IF;
6220
6221 EXCEPTION
6222 WHEN OTHERS THEN
6223 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6224 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6225 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6226 FND_LOG.STRING(g_level_unexpected,
6227 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_master_geography_info',
6228 p_error_buffer);
6229 END IF;
6230
6231 END get_master_geography_info;
6232
6233 -----------------------------------------------------------------------
6234 -- PRIVATE PROCEDURE
6235 -- get_registration_status
6236 --
6237 -- DESCRIPTION
6238 --
6239 -- The procedure gets registration status by calling TCM API
6240 --
6241 PROCEDURE get_registration_status(
6242 p_structure_name IN VARCHAR2,
6243 p_structure_index IN BINARY_INTEGER,
6244 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
6245 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
6246 p_tax IN ZX_TAXES_B.TAX%TYPE,
6247 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
6248 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
6249 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
6250 p_return_status OUT NOCOPY VARCHAR2,
6251 p_error_buffer OUT NOCOPY VARCHAR2)
6252 IS
6253 l_registration_rec zx_tcm_control_pkg.zx_registration_info_rec;
6254 l_first_party_flag BOOLEAN;
6255 l_reg_party_prof_id zx_party_tax_profile.party_tax_profile_id%TYPE;
6256 l_hq_estb_ptp_id zx_lines.hq_estb_party_tax_prof_id%TYPE;
6257 l_ret_record_level VARCHAR2(30);
6258
6259 BEGIN
6260
6261 IF (g_level_procedure >= g_current_runtime_level ) THEN
6262 FND_LOG.STRING(g_level_procedure,
6263 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_registration_status.BEGIN',
6264 'ZX_TDS_RULE_BASE_DETM_PVT: get_registration_status(+)');
6265 END IF;
6266
6267 p_return_status := FND_API.G_RET_STS_SUCCESS;
6268
6269 ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info(
6270 p_structure_name => p_structure_name,
6271 p_structure_index => p_structure_index,
6272 p_event_class_rec => p_event_class_rec,
6273 p_tax_regime_code => p_tax_regime_code,
6274 p_tax => p_tax,
6275 p_tax_determine_date => p_tax_determine_date,
6276 p_jurisdiction_code => NULL,
6277 p_reg_party_type => p_Determining_Factor_Cq_Code,
6278 x_registration_rec => l_registration_rec,
6279 x_return_status => p_return_status
6280 );
6281
6282 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
6283 --Bug 9954561
6284 --p_trx_alphanumeric_value := NVL(l_registration_rec.registration_status_code, 'NOT REGISTERED');
6285 p_trx_alphanumeric_value := NVL(l_registration_rec.registration_status_code, FND_API.G_MISS_CHAR);
6286 ELSE
6287 IF (g_level_error >= g_current_runtime_level ) THEN
6288 FND_LOG.STRING(g_level_error,
6289 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_registration_status',
6290 'Incorrect status returned after calling '||
6291 'ZX_TDS_APPLICABILITY_DETM_PKG.get_tax_registration_info'||
6292 ', p_return_status = ' || p_return_status);
6293 FND_LOG.STRING(g_level_error,
6294 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_registration_status.END',
6295 'ZX_TDS_RULE_BASE_DETM_PVT: get_registration_status(-)');
6296 END IF;
6297 p_return_status := FND_API.G_RET_STS_SUCCESS;
6298 END IF;
6299
6300 IF (g_level_statement >= g_current_runtime_level ) THEN
6301 FND_LOG.STRING(g_level_statement,
6302 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_registration_status',
6303 'registration status: ' || p_trx_alphanumeric_value);
6304 END IF;
6305
6306 IF (g_level_procedure >= g_current_runtime_level ) THEN
6307 FND_LOG.STRING(g_level_procedure,
6308 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_registration_status.END',
6309 'ZX_TDS_RULE_BASE_DETM_PVT: get_registration_status(-)' ||
6310 ', p_return_status = ' || p_return_status ||
6311 ', p_error_buffer = ' || p_error_buffer);
6312 END IF;
6313
6314 EXCEPTION
6315 WHEN OTHERS THEN
6316 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6317 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6318
6319 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6320 FND_LOG.STRING(g_level_unexpected,
6321 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_registration_status',
6322 p_error_buffer);
6323 END IF;
6324
6325 END get_registration_status;
6326
6327 -----------------------------------------------------------------------
6328 -- PRIVATE PROCEDURE
6329 -- get_account_flexfield_info
6330 --
6331 -- DESCRIPTION
6332 --
6333 -- The procedure gets accounting flexfield information either from account
6334 -- string or account CCID
6335 --
6336 PROCEDURE get_account_flexfield_info(
6337 p_structure_name IN VARCHAR2,
6338 p_structure_index IN BINARY_INTEGER,
6339 p_condition_index IN BINARY_INTEGER,
6340 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
6341 p_chart_of_accounts_id IN
6342 ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
6343 p_sob_id IN
6344 ZX_CONDITION_GROUPS_B.LEDGER_ID%TYPE,
6345 p_return_status OUT NOCOPY VARCHAR2,
6346 p_error_buffer OUT NOCOPY VARCHAR2)
6347 IS
6348 i BINARY_INTEGER;
6349 l_account_string VARCHAR2(2000);
6350 l_ccid NUMBER;
6351 l_num_segments NUMBER;
6352 l_tax_parameter_code ZX_PARAMETERS_B.TAX_PARAMETER_CODE%TYPE;
6353 l_sob_id ZX_CONDITION_GROUPS_B.LEDGER_ID%TYPE;
6354 BEGIN
6355
6356 IF (g_level_procedure >= g_current_runtime_level ) THEN
6357 FND_LOG.STRING(g_level_procedure,
6358 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_flexfield_info.BEGIN',
6359 'ZX_TDS_RULE_BASE_DETM_PVT: get_account_flexfield_info(+)');
6360 IF (g_level_statement >= g_current_runtime_level ) THEN
6361 FND_LOG.STRING(g_level_statement,
6362 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_flexfield_info',
6363 'sob id: ' || to_char(p_sob_id) ||
6364 ', chart of acct id: ' || to_char(p_chart_of_accounts_id));
6365 END IF;
6366 END IF;
6367
6368 p_return_status := FND_API.G_RET_STS_SUCCESS;
6369
6370 --
6371 -- check if this is the correct set of books id
6372 -- get sob id from the transaction
6373 --
6374 l_tax_parameter_code := 'LEDGER_ID';
6375 get_tsrm_num_value(p_structure_name,
6376 p_structure_index,
6377 l_tax_parameter_code,
6378 l_sob_id,
6379 p_return_status,
6380 p_error_buffer);
6381
6382 --
6383 -- compare sob_id from the transaction with sob_id from the
6384 -- condition group, error if they don't match
6385 --
6386 IF l_sob_id <> p_sob_id THEN
6387 p_return_status := FND_API.G_RET_STS_ERROR;
6388 p_error_buffer := 'LEDGER ID does not match with one from condition group';
6389
6390 IF (g_level_statement >= g_current_runtime_level ) THEN
6391 FND_LOG.STRING(g_level_statement,
6392 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_flexfield_info',
6393 'p_return_status = ' || p_return_status ||
6394 ', p_error_buffer = ' || p_error_buffer);
6395 END IF;
6396
6397 RETURN;
6398 END IF;
6399
6400 i := p_condition_index;
6401
6402 --
6403 -- check if need to obtain segment array for this account
6404 --
6405 IF ((g_determining_factor_code_tbl.EXISTS(i-1) AND
6406 g_determining_factor_cq_tbl.EXISTS(i-1) ) AND
6407 (g_determining_factor_code_tbl(i) = g_determining_factor_code_tbl(i-1) AND
6408 g_determining_factor_cq_tbl(i) IS NOT NULL AND g_determining_factor_cq_tbl(i-1) IS NOT NULL)) THEN
6409 --
6410 -- segment array for this account has been obtained before
6411 --
6412 IF (g_level_statement >= g_current_runtime_level ) THEN
6413 FND_LOG.STRING(g_level_statement,
6414 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_flexfield_info',
6415 'segment array has been obtained before');
6416 END IF;
6417
6418 RETURN;
6419 END IF;
6420 --
6421 -- first get accounting info from account string
6422 --
6423 -- bug#5014051: replace g_determining_factor_code_tbl with
6424 -- g_tax_parameter_code_tbl
6425 --
6426 get_account_alphanum_value(p_structure_name,
6427 p_structure_index,
6428 g_tax_parameter_code_tbl(i) || '_' || 'STRING',
6429 l_account_string,
6430 p_return_status,
6431 p_error_buffer );
6432 IF (p_return_status = FND_API.G_RET_STS_SUCCESS AND
6433 l_account_string IS NULL) THEN
6434 --
6435 -- account string is not available, get the info from account ccid
6436 --
6437 -- bug#5014051: replace g_determining_factor_code_tbl with
6438 -- g_tax_parameter_code_tbl
6439 --
6440 get_account_num_value(p_structure_name,
6441 p_structure_index,
6442 g_tax_parameter_code_tbl(i) || '_' || 'CCID',
6443 l_ccid,
6444 p_return_status,
6445 p_error_buffer );
6446 IF (p_return_status = FND_API.G_RET_STS_SUCCESS AND
6447 l_ccid IS NOT NULL ) THEN
6448 IF l_ccid > 0 THEN
6449 IF zx_global_structures_pkg.g_ccid_acct_string_info_tbl.exists(l_ccid) then
6450
6451 l_account_string :=
6452 zx_global_structures_pkg.g_ccid_acct_string_info_tbl(l_ccid).ACCOUNT_STRING;
6453
6454 IF (g_level_statement >= g_current_runtime_level ) THEN
6455 FND_LOG.STRING(g_level_statement,
6456 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_flexfield_info',
6457 'Acct string found in cache: ' || l_account_string);
6458 END IF;
6459
6460 ELSE
6461 l_account_string := FND_FLEX_EXT.get_segs(
6462 'SQLGL',
6463 'GL#',
6464 p_chart_of_accounts_id,
6465 l_ccid);
6466
6467 IF (g_level_statement >= g_current_runtime_level ) THEN
6468 FND_LOG.STRING(g_level_statement,
6469 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_flexfield_info',
6470 'acct string derived by calling flexfield API: ' || l_account_string);
6471 END IF;
6472
6473 zx_global_structures_pkg.g_ccid_acct_string_info_tbl(l_ccid).CCID := l_ccid;
6474 zx_global_structures_pkg.g_ccid_acct_string_info_tbl(l_ccid).ACCOUNT_STRING := l_account_string;
6475 zx_global_structures_pkg.g_ccid_acct_string_info_tbl(l_ccid).CHART_OF_ACCOUNTS_ID := p_chart_of_accounts_id;
6476
6477
6478 END IF;
6479
6480 IF l_account_string IS NULL THEN
6481 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6482 p_error_buffer := 'Error when derive Account String';
6483 END IF;
6484 END IF;
6485 ELSIF (p_return_status = FND_API.G_RET_STS_SUCCESS AND
6486 l_ccid IS NULL ) THEN
6487 --
6488 -- return success but put message in error buffer
6489 -- to see in log file
6490 --
6491 p_return_status := FND_API.G_RET_STS_SUCCESS;
6492 p_error_buffer := 'Both Account String and CCID are NULL';
6493 RETURN;
6494 END IF;
6495 END IF;
6496
6497 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6498
6499 IF (g_level_statement >= g_current_runtime_level ) THEN
6500 FND_LOG.STRING(g_level_statement,
6501 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_flexfield_info',
6502 'p_return_status = ' || p_return_status ||
6503 ', p_error_buffer = ' || p_error_buffer);
6504 END IF;
6505
6506 RETURN;
6507 END IF;
6508
6509 IF g_determining_factor_cq_tbl(i) IS NULL THEN
6510 p_trx_alphanumeric_value := l_account_string;
6511 RETURN;
6512 ELSE
6513 -- get all segments for this account flexfield
6514 IF l_account_string IS NULL THEN
6515 p_trx_alphanumeric_value := NULL;
6516 ELSE
6517 process_segment_string(l_account_string,
6518 p_chart_of_accounts_id,
6519 p_return_status,
6520 p_error_buffer);
6521 END IF;
6522 END IF;
6523
6524 IF (g_level_procedure >= g_current_runtime_level ) THEN
6525 FND_LOG.STRING(g_level_procedure,
6526 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_flexfield_info.END',
6527 'ZX_TDS_RULE_BASE_DETM_PVT: get_account_flexfield_info(-)' ||
6528 ', p_return_status = ' || p_return_status ||
6529 ', p_error_buffer = ' || p_error_buffer);
6530 END IF;
6531
6532 EXCEPTION
6533 WHEN OTHERS THEN
6534 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6535 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6536
6537 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6538 FND_LOG.STRING(g_level_unexpected,
6539 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_account_flexfield_info',
6540 p_error_buffer);
6541 END IF;
6542
6543 END get_account_flexfield_info;
6544
6545 -----------------------------------------------------------------------
6546 -- PRIVATE PROCEDURE
6547 -- process_segment_string
6548 --
6549 -- DESCRIPTION
6550 --
6551 -- The procedure gets all segments of an account flexfield
6552 --
6553 PROCEDURE process_segment_string(
6554 p_account_string IN VARCHAR2,
6555 p_chart_of_accounts_id IN
6556 ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
6557 p_return_status OUT NOCOPY VARCHAR2,
6558 p_error_buffer OUT NOCOPY VARCHAR2)
6559 IS
6560 l_delimiter VARCHAR2(1);
6561 l_num_of_segments NUMBER;
6562 BEGIN
6563
6564 IF (g_level_procedure >= g_current_runtime_level ) THEN
6565 FND_LOG.STRING(g_level_procedure,
6566 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_segment_string.BEGIN',
6567 'ZX_TDS_RULE_BASE_DETM_PVT: process_segment_string(+)');
6568 END IF;
6569
6570 p_return_status := FND_API.G_RET_STS_SUCCESS;
6571
6572 --
6573 -- init accounting segment array
6574 --
6575 g_segment_array.DELETE;
6576
6577 l_delimiter := FND_FLEX_EXT.GET_DELIMITER(
6578 'SQLGL',
6579 'GL#',
6580 p_chart_of_accounts_id);
6581
6582 l_num_of_segments := FND_FLEX_EXT.breakup_segments(
6583 p_account_string,
6584 l_delimiter,
6585 g_segment_array);
6586
6587 IF (g_level_procedure >= g_current_runtime_level ) THEN
6588 FND_LOG.STRING(g_level_procedure,
6589 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_segment_string',
6590 'l_delimiter: ' || l_delimiter ||
6591 ', l_num_of_segments: ' || to_char(l_num_of_segments));
6592
6593 FND_LOG.STRING(g_level_procedure,
6594 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_segment_string.END',
6595 'ZX_TDS_RULE_BASE_DETM_PVT: process_segment_string(-)');
6596 END IF;
6597
6598 EXCEPTION
6599 WHEN OTHERS THEN
6600 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6601 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6602 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6603 FND_LOG.STRING(g_level_unexpected,
6604 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.process_segment_string',
6605 p_error_buffer);
6606 END IF;
6607
6608 END process_segment_string;
6609
6610
6611 /* Bugfix 3673395 - This procedure is no longer requird
6612 -----------------------------------------------------------------------
6613
6614 -- PRIVATE PROCEDURE
6615 -- get_product_tax_info
6616 --
6617 -- DESCRIPTION
6618 -- This procedure returns the tax info for a specific item
6619 --
6620
6621 PROCEDURE get_product_tax_info(
6622 p_structure_name IN VARCHAR2,
6623 p_structure_index IN BINARY_INTEGER,
6624 p_determining_factor_code IN ZX_CONDITIONS.DETERMINING_FACTOR_CODE%TYPE,
6625 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
6626 p_return_status OUT NOCOPY VARCHAR2,
6627 p_error_buffer OUT NOCOPY VARCHAR2)
6628
6629 IS
6630 l_parameter_code ZX_PARAMETERS_B.TAX_PARAMETER_CODE%TYPE;
6631 l_product_id NUMBER;
6632 l_item_org_id NUMBER;
6633
6634 BEGIN
6635
6636 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6637
6638 IF (g_level_statement >= g_current_runtime_level ) THEN
6639 FND_LOG.STRING(g_level_statement,
6640 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_product_tax_info.BEGIN',
6641 'ZX_TDS_RULE_BASE_DETM_PVT: get_product_tax_info (+)');
6642 END IF;
6643
6644 p_return_status := FND_API.G_RET_STS_SUCCESS;
6645
6646 --
6647 -- get product id from tsrm
6648 --
6649 l_parameter_code := 'PRODUCT_ID';
6650 get_tsrm_num_value(
6651 p_structure_name,
6652 p_structure_index,
6653 l_parameter_code,
6654 l_product_id,
6655 p_return_status,
6656 p_error_buffer );
6657
6658 IF (g_level_statement >= g_current_runtime_level ) THEN
6659 FND_LOG.STRING(g_level_statement,
6660 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_product_tax_info',
6661 'product id: ' || to_char(l_product_id));
6662 END IF;
6663
6664 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6665 RETURN;
6666 END IF;
6667
6668 --
6669 -- get product org id from tsrm
6670 --
6671 l_parameter_code := 'PRODUCT_ORG_ID';
6672 get_tsrm_num_value(
6673 p_structure_name,
6674 p_structure_index,
6675 l_parameter_code,
6676 l_item_org_id,
6677 p_return_status,
6678 p_error_buffer );
6679
6680 IF (g_level_statement >= g_current_runtime_level ) THEN
6681 FND_LOG.STRING(g_level_statement,
6682 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_product_tax_info',
6683 'item_org_id: ' || to_char(l_item_org_id));
6684 END IF;
6685
6686 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6687 RETURN;
6688 END IF;
6689
6690 --
6691 -- get taxable_flag or tax_code from mtl_system_items
6692 --
6693 get_tax_info_from_item(l_product_id,
6694 l_item_org_id,
6695 p_determining_factor_code,
6696 p_trx_alphanumeric_value,
6697 p_return_status,
6698 p_error_buffer );
6699
6700
6701 IF (g_level_statement >= g_current_runtime_level ) THEN
6702 FND_LOG.STRING(g_level_statement,
6703 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_product_tax_info.END',
6704 'ZX_TDS_RULE_BASE_DETM_PVT: get_product_tax_info (-)');
6705 END IF;
6706
6707 EXCEPTION
6708 WHEN OTHERS THEN
6709 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6710 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6711
6712 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6713 FND_LOG.STRING(g_level_unexpected,
6714 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_product_tax_info',
6715 p_error_buffer);
6716 END IF;
6717
6718 END get_product_tax_info;
6719 */
6720
6721 /* Bugfix 3673395 - This procedure is no longer required
6722 -----------------------------------------------------------------------
6723
6724 -- PRIVATE PROCEDURE
6725 -- get_tax_info_from_item
6726 --
6727 -- DESCRIPTION
6728 -- This procedure returns taxable_flag or tax_code obtained from
6729 -- mtl_system_items table depending on the determining factor code passed in
6730 --
6731
6732 PROCEDURE get_tax_info_from_item(
6733 p_product_id IN MTL_SYSTEM_ITEMS.INVENTORY_ITEM_ID%TYPE,
6734 p_item_org_id IN MTL_SYSTEM_ITEMS.ORGANIZATION_ID%TYPE,
6735 p_determining_factor_code IN ZX_CONDITIONS.DETERMINING_FACTOR_CODE%TYPE,
6736 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
6737 p_return_status OUT NOCOPY VARCHAR2,
6738 p_error_buffer OUT NOCOPY VARCHAR2)
6739
6740 IS
6741 CURSOR get_tax_code_csr
6742 (c_product_id MTL_SYSTEM_ITEMS.INVENTORY_ITEM_ID%TYPE,
6743 c_item_org_id MTL_SYSTEM_ITEMS.ORGANIZATION_ID%TYPE)
6744 IS
6745 SELECT TAX_CODE
6746 FROM MTL_SYSTEM_ITEMS
6747 WHERE INVENTORY_ITEM_ID = c_product_id AND
6748 ORGANIZATION_ID = c_item_org_id;
6749
6750 BEGIN
6751
6752 IF (g_level_statement >= g_current_runtime_level ) THEN
6753 FND_LOG.STRING(g_level_statement,
6754 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tax_info_from_item.BEGIN',
6755 'ZX_TDS_RULE_BASE_DETM_PVT: get_tax_info_from_item(+)');
6756 END IF;
6757
6758 p_return_status := FND_API.G_RET_STS_SUCCESS;
6759
6760 IF p_determining_factor_code = 'TAX_CLASSIFICATION_CODE' THEN
6761 OPEN get_tax_code_csr(p_product_id,
6762 p_item_org_id);
6763 FETCH get_tax_code_csr INTO p_trx_alphanumeric_value;
6764 CLOSE get_tax_code_csr;
6765 ELSE
6766 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6767 p_error_buffer := 'Invalid Determining Factor code for Product class';
6768 END IF;
6769
6770 IF (g_level_statement >= g_current_runtime_level ) THEN
6771 FND_LOG.STRING(g_level_statement,
6772 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tax_info_from_item',
6773 'trx value:' || p_trx_alphanumeric_value);
6774 FND_LOG.STRING(g_level_statement,
6775 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tax_info_from_item.END',
6776 'ZX_TDS_RULE_BASE_DETM_PVT: get_tax_info_from_item(-)' ||
6777 ', p_return_status = ' || p_return_status ||
6778 ', p_error_buffer = ' || p_error_buffer);
6779 END IF;
6780
6781 EXCEPTION
6782 WHEN OTHERS THEN
6783 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6784 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6785
6786 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6787 FND_LOG.STRING(g_level_unexpected,
6788 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_tax_info_from_item',
6789 p_error_buffer);
6790 END IF;
6791
6792 END get_tax_info_from_item;
6793 */
6794
6795 /* Bugfix 3673395 - This procedure is no longer required
6796 -----------------------------------------------------------------------
6797
6798 -- PRIVATE PROCEDURE
6799 -- get_party_tax_info
6800 --
6801 -- DESCRIPTION
6802 -- This procedure returns the tax classification code obtained from
6803 -- zx_party_tax_profile
6804
6805 PROCEDURE get_party_tax_info(
6806 p_structure_name IN VARCHAR2,
6807 p_structure_index IN BINARY_INTEGER,
6808 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
6809 p_determining_factor_code IN ZX_CONDITIONS.DETERMINING_FACTOR_CODE%TYPE,
6810 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
6811 p_return_status OUT NOCOPY VARCHAR2,
6812 p_error_buffer OUT NOCOPY VARCHAR2)
6813
6814 IS
6815 l_tax_profile_id ZX_PARTY_TAX_PROFILE.PARTY_TAX_PROFILE_ID%TYPE;
6816
6817 CURSOR get_tax_classification_csr
6818 (c_party_tax_profile_id ZX_PARTY_TAX_PROFILE.PARTY_TAX_PROFILE_ID%TYPE)
6819 IS
6820 SELECT Tax_Classification_Code
6821 FROM ZX_PARTY_TAX_PROFILE
6822 WHERE PARTY_TAX_PROFILE_ID = c_party_tax_profile_id;
6823
6824 BEGIN
6825
6826 IF (g_level_statement >= g_current_runtime_level ) THEN
6827 FND_LOG.STRING(g_level_statement,
6828 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_party_tax_info.BEGIN',
6829 'ZX_TDS_RULE_BASE_DETM_PVT: get_party_tax_info(+)');
6830 END IF;
6831
6832 p_return_status := FND_API.G_RET_STS_SUCCESS;
6833
6834 get_tsrm_num_value(
6835 p_structure_name,
6836 p_structure_index,
6837 p_Determining_Factor_Cq_Code || '_' || 'TAX_PROF_ID',
6838 l_tax_profile_id,
6839 p_return_status,
6840 p_error_buffer);
6841
6842 IF (g_level_statement >= g_current_runtime_level ) THEN
6843 FND_LOG.STRING(g_level_statement,
6844 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_party_tax_info',
6845 'l_tax_profile_id: ' || to_char(l_tax_profile_id));
6846 END IF;
6847
6848 IF p_return_status <> FND_API.G_RET_STS_SUCCESS THEN
6849 RETURN;
6850 END IF;
6851
6852 IF p_determining_factor_code = 'ESTB_TAX_CLASSIFICATION' THEN
6853 OPEN get_tax_classification_csr(l_tax_profile_id);
6854 FETCH get_tax_classification_csr INTO p_trx_alphanumeric_value;
6855 CLOSE get_tax_classification_csr;
6856 ELSE
6857 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6858 p_error_buffer := 'Invalid Determining Factor code for Party class';
6859 END IF;
6860
6861 IF (g_level_statement >= g_current_runtime_level ) THEN
6862 FND_LOG.STRING(g_level_statement,
6863 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_party_tax_info',
6864 'tax classification: ' || p_trx_alphanumeric_value);
6865 FND_LOG.STRING(g_level_statement,
6866 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_party_tax_info.END',
6867 'ZX_TDS_RULE_BASE_DETM_PVT: get_party_tax_info(-)' ||
6868 ', p_return_status = ' || p_return_status ||
6869 ', p_error_buffer = ' || p_error_buffer);
6870 END IF;
6871
6872 EXCEPTION
6873 WHEN OTHERS THEN
6874 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6875 p_error_buffer :=sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6876
6877 CLOSE get_tax_classification_csr;
6878 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6879 FND_LOG.STRING(g_level_unexpected,
6880 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.',
6881 p_error_buffer);
6882 END IF;
6883 END get_party_tax_info;
6884 */
6885
6886 ---------------------------------------------------------------------------
6887
6888 -- PRIVATE FUNCTION
6889 -- evaluate_condition
6890 --
6891 -- DESCRIPTION
6892 --
6893 -- The procedure is to evaluate each condition
6894 --
6895
6896 PROCEDURE evaluate_condition(
6897 p_condition_index IN BINARY_INTEGER,
6898 p_trx_alphanumeric_value IN ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
6899 p_trx_numeric_value IN ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
6900 p_trx_date_value IN ZX_CONDITIONS.DATE_VALUE%TYPE,
6901 p_chart_of_accounts_id IN ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE,
6902 p_result OUT NOCOPY BOOLEAN,
6903 p_return_status OUT NOCOPY VARCHAR2,
6904 p_error_buffer OUT NOCOPY VARCHAR2)
6905 IS
6906 i BINARY_INTEGER;
6907 BEGIN
6908
6909 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
6910
6911 IF (g_level_procedure >= g_current_runtime_level ) THEN
6912 FND_LOG.STRING(g_level_procedure,
6913 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_condition.BEGIN',
6914 'ZX_TDS_RULE_BASE_DETM_PVT: evaluate_condition(+)');
6915 END IF;
6916
6917 p_return_status := FND_API.G_RET_STS_SUCCESS;
6918
6919 i := p_condition_index;
6920
6921 IF g_data_type_tbl(i) = 'ALPHANUMERIC' THEN
6922 p_result := evaluate_alphanum_condition(
6923 g_operator_tbl(i),
6924 g_alphanum_value_tbl(i),
6925 p_trx_alphanumeric_value,
6926 g_value_low_tbl(i),
6927 g_value_high_tbl(i),
6928 g_determining_factor_class_tbl(i),
6929 p_chart_of_accounts_id);
6930
6931 ELSIF g_data_type_tbl(i) = 'NUMERIC' THEN
6932 p_result := evaluate_numeric_condition(
6933 g_operator_tbl(i),
6934 g_numeric_value_tbl(i),
6935 p_trx_numeric_value);
6936
6937 ELSIF g_data_type_tbl(i) = 'DATE' THEN
6938 p_result := evaluate_date_condition(
6939 g_operator_tbl(i),
6940 g_date_value_tbl(i),
6941 p_trx_date_value);
6942
6943 ELSE
6944 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6945 p_error_buffer := 'Invalid data type';
6946 p_result := FALSE;
6947
6948 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6949 FND_LOG.STRING(g_level_unexpected,
6950 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_condition',
6951 'Invalid data type');
6952 END IF;
6953
6954 END IF;
6955
6956 IF (g_level_procedure >= g_current_runtime_level ) THEN
6957 FND_LOG.STRING(g_level_procedure,
6958 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_condition.END',
6959 'ZX_TDS_RULE_BASE_DETM_PVT: evaluate_condition(-)');
6960 END IF;
6961
6962 EXCEPTION
6963 WHEN OTHERS THEN
6964 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
6965 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
6966
6967 IF (g_level_unexpected >= g_current_runtime_level ) THEN
6968 FND_LOG.STRING(g_level_unexpected,
6969 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_condition',
6970 p_error_buffer);
6971 END IF;
6972
6973 END evaluate_condition;
6974
6975 -----------------------------------------------------------------------
6976 -- PRIVATE PROCEDURE
6977 -- get_result
6978 --
6979 -- DESCRIPTION
6980 --
6981 -- The procedure gets the result from ZX_PROCESS_RESULTS table.
6982 -- p_found being true will indicate if a result is found.
6983 --
6984
6985 PROCEDURE get_result(
6986 p_result_id IN ZX_PROCESS_RESULTS.RESULT_ID%TYPE,
6987 p_structure_name IN VARCHAR2,
6988 p_structure_index IN BINARY_INTEGER,
6989 p_tax_regime_code IN ZX_RATES_B.tax_regime_Code%TYPE,
6990 p_tax IN ZX_RATES_B.tax%TYPE,
6991 p_tax_determine_date IN DATE,
6992 p_found IN OUT NOCOPY BOOLEAN,
6993 p_zx_result_rec OUT NOCOPY ZX_PROCESS_RESULTS%ROWTYPE,
6994 p_return_status OUT NOCOPY VARCHAR2,
6995 p_error_buffer OUT NOCOPY VARCHAR2)
6996
6997 IS
6998 --
6999 -- cursor for get result at tax regime level for tax rate determination
7000 --
7001 CURSOR get_tax_result_csr
7002 IS
7003 SELECT RESULT_ID,
7004 CONDITION_GROUP_CODE,
7005 TAX_STATUS_CODE,
7006 LEGAL_MESSAGE_CODE,
7007 MIN_TAX_AMT,
7008 MAX_TAX_AMT,
7009 MIN_TAXABLE_BASIS,
7010 MAX_TAXABLE_BASIS,
7011 MIN_TAX_RATE,
7012 MAX_TAX_RATE,
7013 Allow_Exemptions_Flag,
7014 Allow_Exceptions_Flag,
7015 Result_Type_Code,
7016 NUMERIC_RESULT,
7017 ALPHANUMERIC_RESULT,
7018 STATUS_RESULT,
7019 RATE_RESULT,
7020 RESULT_API,
7021 CONDITION_GROUP_ID,
7022 CONDITION_SET_ID,
7023 EXCEPTION_SET_ID,
7024 TAX_RULE_ID
7025 FROM ZX_PROCESS_RESULTS
7026 WHERE RESULT_ID = p_result_id;
7027
7028 CURSOR select_tax_status_rate_code
7029 (c_tax_regime_code VARCHAR2,
7030 c_tax VARCHAR2,
7031 c_tax_Rate_Code VARCHAR2,
7032 c_tax_date VARCHAR2)
7033 is
7034 SELECT TAX_STATUS_CODE,
7035 TAX_RATE_CODE
7036 FROM ZX_SCO_RATES_B_V
7037 WHERE TAX_REGIME_CODE = c_tax_Regime_Code
7038 AND TAX = c_tax
7039 AND TAX_RATE_CODE = c_tax_rate_code
7040 AND (TAX_CLASS = 'OUTPUT' OR TAX_CLASS IS NULL)
7041 --AND default_flg_effective_from <= c_tax_date
7042 AND effective_from <= c_tax_date
7043 AND (default_flg_effective_to >= c_tax_date
7044 OR default_flg_effective_to IS NULL)
7045 --AND NVL(Default_Rate_Flag, 'N') = 'Y'
7046 AND NVL(Active_Flag, 'N') = 'Y'
7047 ORDER BY tax_class NULLS LAST, subscription_level_code; -- Bug#5395227
7048
7049
7050 l_condition_set_result BOOLEAN;
7051 l_exception_set_result BOOLEAN;
7052 l_zx_result_rec_null ZX_PROCESS_RESULTS%ROWTYPE;
7053 l_action_rec_tbl ZX_TDS_PROCESS_CEC_PVT.action_rec_tbl_type;
7054 l_tax_status_Code ZX_RATES_B.tax_status_code%type;
7055 l_tax_rate_Code ZX_RATES_B.tax_rate_Code%type;
7056 l_override_tax_rate_Code ZX_RATES_B.tax_rate_code%TYPE;
7057 l_service_type_code ZX_RULES_B.service_type_code%TYPE;
7058
7059 BEGIN
7060
7061 IF (g_level_procedure >= g_current_runtime_level ) THEN
7062 FND_LOG.STRING(g_level_procedure,
7063 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_result.BEGIN',
7064 'ZX_TDS_RULE_BASE_DETM_PVT: get_result(+)');
7065 IF (g_level_statement >= g_current_runtime_level ) THEN
7066 FND_LOG.STRING(g_level_statement,
7067 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_result',
7068 'result_id: ' || p_result_id);
7069 END IF;
7070 END IF;
7071
7072 p_return_status := FND_API.G_RET_STS_SUCCESS;
7073
7074 l_condition_set_result := FALSE;
7075 l_exception_set_result := FALSE;
7076
7077 --
7078 -- result for tax
7079 --
7080 OPEN get_tax_result_csr;
7081
7082 FETCH get_tax_result_csr INTO
7083 p_zx_result_rec.result_id,
7084 p_zx_result_rec.condition_group_code,
7085 p_zx_result_rec.tax_status_code,
7086 p_zx_result_rec.legal_message_code,
7087 p_zx_result_rec.min_tax_amt,
7088 p_zx_result_rec.max_tax_amt,
7089 p_zx_result_rec.min_taxable_basis,
7090 p_zx_result_rec.max_taxable_basis,
7091 p_zx_result_rec.min_tax_rate,
7092 p_zx_result_rec.max_tax_rate,
7093 p_zx_result_rec.Allow_Exemptions_Flag,
7094 p_zx_result_rec.Allow_Exceptions_Flag,
7095 p_zx_result_rec.Result_Type_Code,
7096 p_zx_result_rec.numeric_result,
7097 p_zx_result_rec.alphanumeric_result,
7098 p_zx_result_rec.status_result,
7099 p_zx_result_rec.rate_result,
7100 p_zx_result_rec.result_api,
7101 p_zx_result_rec.condition_group_id,
7102 p_zx_result_rec.condition_set_id,
7103 p_zx_result_rec.exception_set_id,
7104 p_zx_result_rec.tax_rule_id;
7105 IF get_tax_result_csr%FOUND THEN
7106 p_found := true;
7107 END IF;
7108
7109 select service_type_code into l_service_type_code
7110 FROM zx_rules_b
7111 where tax_rule_id = p_zx_result_rec.tax_rule_id;
7112
7113
7114 -- For Migrated Records, Check if Condition Set and Exception Set is populated
7115 -- and evaluate the result for them
7116 IF (p_found) AND (p_zx_result_rec.condition_set_id IS NOT NULL OR
7117 p_zx_result_rec.exception_set_id IS NOT NULL) THEN
7118
7119 init_cec_params (p_structure_name => p_structure_name,
7120 p_structure_index => p_structure_index,
7121 p_return_status => p_return_status,
7122 p_error_buffer => p_error_buffer);
7123
7124 IF p_zx_result_rec.condition_set_id IS NOT NULL THEN
7125 ZX_TDS_PROCESS_CEC_PVT.evaluate_cec(
7126 p_condition_set_id => p_zx_result_rec.condition_set_id,
7127 p_cec_ship_to_party_site_id => g_cec_ship_to_party_site_id,
7128 p_cec_bill_to_party_site_id => g_cec_bill_to_party_site_id,
7129 p_cec_ship_to_party_id => g_cec_ship_to_party_id,
7130 p_cec_bill_to_party_id => g_cec_bill_to_party_id,
7131 p_cec_poo_location_id => g_cec_poo_location_id,
7132 p_cec_poa_location_id => g_cec_poa_location_id,
7133 p_cec_trx_id => g_cec_trx_id,
7134 p_cec_trx_line_id => g_cec_trx_line_id,
7135 p_cec_ledger_id => g_cec_ledger_id,
7136 p_cec_internal_organization_id => g_cec_internal_organization_id,
7137 p_cec_so_organization_id => g_cec_so_organization_id,
7138 p_cec_product_org_id => g_cec_product_org_id,
7139 p_cec_product_id => g_cec_product_id,
7140 p_cec_trx_line_date => g_cec_trx_line_date,
7141 p_cec_trx_type_id => g_cec_trx_type_id,
7142 p_cec_fob_point => g_cec_fob_point,
7143 p_cec_ship_to_site_use_id => g_cec_ship_to_site_use_id,
7144 p_cec_bill_to_site_use_id => g_cec_bill_to_site_use_id,
7145 p_cec_result => l_condition_set_result,
7146 p_action_rec_tbl => l_action_rec_tbl,
7147 p_return_status => p_return_status,
7148 p_error_buffer => p_error_buffer);
7149 p_found := l_condition_set_result;
7150
7151 -- Bug 3976490
7152 -- every condition set must evaluate to either TRUE or FALSE. Based on this, the
7153 -- values in the p_action_rec_tbl will be action for True condition or False action.
7154 -- If condition set result evaluates to False, we still need to execute the
7155 -- actions setup under False Actions
7156
7157 for i in 1.. nvl(l_action_rec_tbl.last,0) loop
7158
7159 if upper(l_action_rec_tbl(i).action_code) in ('ERROR_MESSAGE','SYSTEM_ERROR') then
7160 p_return_status := FND_API.G_RET_STS_ERROR;
7161
7162 -- Bug 8568734
7163 FND_MESSAGE.SET_NAME('ZX','ZX_CONSTRAINT_EVALUATION_ERROR');
7164 FND_MESSAGE.SET_TOKEN('CONDITION_GROUP',p_zx_result_rec.condition_group_code);
7165 FND_MESSAGE.SET_TOKEN('ACTION_CODE', l_action_rec_tbl(i).action_code );
7166 ZX_API_PUB.add_msg(ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
7167
7168 IF (g_level_error >= g_current_runtime_level ) THEN
7169 FND_LOG.STRING(g_level_error,
7170 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_result',
7171 'Action_code is ERROR_MESSAGE,SYSTEM_ERROR');
7172 END IF;
7173
7174 app_exception.raise_exception;
7175 elsif upper(l_action_rec_tbl(i).action_code) = 'DO_NOT_USE_THIS_TAX_CODE' then
7176 l_condition_set_result := FALSE;
7177 p_found := l_condition_set_result;
7178 elsif upper(l_action_rec_tbl(i).action_code) in ('DEFAULT_TAX_CODE') then
7179 if (l_service_type_code <> 'DET_TAXABLE_BASIS' ) THEN
7180 /* if upper(l_action_rec_tbl(i).action_code)= 'USE_THIS_TAX_CODE' then
7181 --- get_tsrm_num_value(p_structure_name,
7182 --- Modified for bug # 6777632
7183 get_tsrm_alphanum_value(p_structure_name,
7184 p_structure_index,
7185 'OUTPUT_TAX_CLASSIFICATION_CODE',
7186 l_override_tax_rate_code,
7187 p_return_status,
7188 p_error_buffer);
7189 IF upper(l_action_rec_tbl(i).action_code)= 'DEFAULT_TAX_CODE' then
7190 */
7191 l_override_tax_rate_code := l_action_rec_tbl(i).action_value;
7192 --end if;
7193
7194 -- Get the Tax regime, Tax, Status, Rate Code based on override_tax_rate_code
7195 -- and set it on the result_rec.
7196
7197 Open select_tax_status_rate_code (p_tax_regime_code, p_tax, l_override_tax_rate_code,
7198 p_tax_determine_date);
7199 fetch select_tax_status_rate_code into l_tax_status_code, l_tax_rate_code;
7200
7201 If select_tax_status_rate_code%NOTFOUND then
7202 --A record does not exist with that tax rate code for the given tax.
7203 --Raise error;
7204
7205 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7206 p_error_buffer := SUBSTR(SQLERRM, 1, 80);
7207 IF (g_level_error >= g_current_runtime_level ) THEN
7208 FND_LOG.STRING(g_level_error,
7209 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_result',
7210 'Cannot set the tax rate code to '||l_override_tax_rate_code ||
7211 ', ERROR: '|| p_error_buffer);
7212 END IF;
7213
7214 IF select_tax_status_rate_code%isopen then
7215 Close select_tax_status_rate_code;
7216 END IF;
7217 app_exception.raise_exception;
7218 ELSE
7219 p_zx_result_rec.rate_result := l_tax_rate_code;
7220 p_zx_result_rec.status_result := l_tax_status_code;
7221 End if;
7222
7223 Close select_tax_status_rate_code;
7224 end if; -- service type code
7225 end if;
7226 end loop;
7227
7228 END IF;
7229 IF l_condition_set_result AND p_zx_result_rec.exception_set_id IS NOT NULL THEN
7230
7231 l_action_rec_tbl.delete;
7232
7233 ZX_TDS_PROCESS_CEC_PVT.evaluate_cec(
7234 p_exception_set_id => p_zx_result_rec.exception_set_id,
7235 p_cec_ship_to_party_site_id => g_cec_ship_to_party_site_id,
7236 p_cec_bill_to_party_site_id => g_cec_bill_to_party_site_id,
7237 p_cec_ship_to_party_id => g_cec_ship_to_party_id,
7238 p_cec_bill_to_party_id => g_cec_bill_to_party_id,
7239 p_cec_poo_location_id => g_cec_poo_location_id,
7240 p_cec_poa_location_id => g_cec_poa_location_id,
7241 p_cec_trx_id => g_cec_trx_id,
7242 p_cec_trx_line_id => g_cec_trx_line_id,
7243 p_cec_ledger_id => g_cec_ledger_id,
7244 p_cec_internal_organization_id => g_cec_internal_organization_id,
7245 p_cec_so_organization_id => g_cec_so_organization_id,
7246 p_cec_product_org_id => g_cec_product_org_id,
7247 p_cec_product_id => g_cec_product_id,
7248 p_cec_trx_line_date => g_cec_trx_line_date,
7249 p_cec_trx_type_id => g_cec_trx_type_id,
7250 p_cec_fob_point => g_cec_fob_point,
7251 p_cec_ship_to_site_use_id => g_cec_ship_to_site_use_id,
7252 p_cec_bill_to_site_use_id => g_cec_bill_to_site_use_id,
7253 p_cec_result => l_exception_set_result,
7254 p_action_rec_tbl => l_action_rec_tbl,
7255 p_return_status => p_return_status,
7256 p_error_buffer => p_error_buffer);
7257
7258 p_found := l_exception_set_result;
7259
7260 -- Bug 3976490
7261 -- every exception set must evaluate to either TRUE or FALSE. Based on this, the
7262 -- values in the p_action_rec_tbl will be action for True condition or False action.
7263 -- If condition set result evaluates to False, we still need to execute the
7264 -- actions setup under False Actions
7265
7266 for i in 1.. nvl(l_action_rec_tbl.last,0) loop
7267
7268 if upper(l_action_rec_tbl(i).action_code) in ('ERROR_MESSAGE','SYSTEM_ERROR') then
7269 p_return_status := FND_API.G_RET_STS_ERROR;
7270
7271 -- Bug 8568734
7272 FND_MESSAGE.SET_NAME('ZX','ZX_CONSTRAINT_EVALUATION_ERROR');
7273 FND_MESSAGE.SET_TOKEN('CONDITION_GROUP',p_zx_result_rec.condition_group_code);
7274 FND_MESSAGE.SET_TOKEN('ACTION_CODE', l_action_rec_tbl(i).action_code );
7275 ZX_API_PUB.add_msg(ZX_TDS_CALC_SERVICES_PUB_PKG.g_msg_context_info_rec);
7276
7277 IF (g_level_error >= g_current_runtime_level ) THEN
7278 FND_LOG.STRING(g_level_error,
7279 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_result',
7280 'Action_code is ERROR_MESSAGE,SYSTEM_ERROR');
7281 END IF;
7282
7283 app_exception.raise_exception;
7284 elsif upper(l_action_rec_tbl(i).action_code) in ('DO_NOT_USE_THIS_TAX_CODE',
7285 'DO_NOT_USE_THIS_TAX_GROUP') then
7286 l_exception_set_result := FALSE;
7287 p_found := l_exception_set_result;
7288
7289 elsif upper(l_action_rec_tbl(i).action_code) in ('USE_TAX_CODE',
7290 'DEFAULT_TAX_CODE') then
7291 if (l_service_type_code <> 'DET_TAXABLE_BASIS' ) THEN
7292 /* if upper(l_action_rec_tbl(i).action_code)= 'USE_THIS_TAX_CODE' then
7293 --- get_tsrm_num_value(p_structure_name,
7294 --- Modified for bug # 6777632
7295 get_tsrm_alphanum_value(p_structure_name,
7296 p_structure_index,
7297 'OUTPUT_TAX_CLASSIFICATION_CODE',
7298 l_override_tax_rate_code,
7299 p_return_status,
7300 p_error_buffer);
7301 */
7302 --if upper(l_action_rec_tbl(i).action_code)in ('DEFAULT_TAX_CODE','USE_TAX_CODE') then
7303 l_override_tax_rate_code := l_action_rec_tbl(i).action_value;
7304
7305 -- Get the Tax regime, Tax, Status, Rate Code based on override_tax_rate_code
7306 -- and set it on the result_rec.
7307
7308 Open select_tax_status_rate_code (p_tax_regime_code, p_tax, l_override_tax_rate_code,
7309 p_tax_determine_date);
7310 fetch select_tax_status_rate_code into l_tax_status_code, l_tax_rate_code;
7311
7312 If select_tax_status_rate_code%NOTFOUND then
7313 --A record does not exist with that tax rate code for the given tax.
7314 --Raise error;
7315
7316 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7317 p_error_buffer := SUBSTR(SQLERRM, 1, 80);
7318 IF (g_level_error >= g_current_runtime_level ) THEN
7319 FND_LOG.STRING(g_level_error,
7320 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_result',
7321 'Cannot set the tax rate code to '||l_override_tax_rate_code ||
7322 ', ERROR: '||p_error_buffer);
7323 END IF;
7324 IF select_tax_status_rate_code%isopen then
7325 Close select_tax_status_rate_code;
7326 END IF;
7327 app_exception.raise_exception;
7328 ELSE
7329 p_zx_result_rec.rate_result := l_tax_rate_code;
7330 p_zx_result_rec.status_result := l_tax_status_code;
7331 End if;
7332
7333 Close select_tax_status_rate_code;
7334 --end if;
7335 end if;
7336
7337 elsif upper(l_action_rec_tbl(i).action_code)= 'DO_NOT_APPLY_EXCEPTION' then
7338 -- bug 6840036- set p_found to TRUE for all
7339 -- service type codes except DET_TAX_RATE
7340 --NULL;
7341 IF (l_service_type_code <> 'DET_TAX_RATE' ) THEN
7342 p_found := TRUE;
7343 END IF;
7344
7345 elsif upper(l_action_rec_tbl(i).action_code) = 'APPLY_EXCEPTION' then
7346 -- populate the numeric result column of the result rec.
7347 -- This rate will be used during Tax Rate Determination process
7348 -- The Rate determination process will check if the rate is ad-hoc and
7349 -- accordingly honour this rate or raise exception.
7350
7351 Begin
7352 p_zx_result_rec.numeric_result := l_action_rec_tbl(i).action_value;
7353 exception
7354 when others then
7355 FND_MESSAGE.SET_NAME('ZX','GENERIC_MESSAGE');
7356 FND_MESSAGE.SET_TOKEN('GENERIC_TEXT','The action value for APPLY_EXCEPTION action code'||
7357 'does not contain number');
7358 FND_MSG_PUB.Add;
7359 IF (g_level_error >= g_current_runtime_level ) THEN
7360 FND_LOG.STRING(g_level_error,
7361 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_result',
7362 'The action value for APPLY_EXCEPTION action code '||
7363 'does not contain number');
7364 END IF;
7365 app_exception.raise_exception;
7366 end;
7367 end if;
7368 end loop;
7369 END IF;
7370 -- If Condition Set or Exception Set evaluates to FALSE, then
7371 -- remove record in Process Result Structure.
7372 IF not p_found THEN
7373 p_zx_result_rec := l_zx_result_rec_null;
7374 END IF;
7375 END IF; /* of Migrated Records check for Condition Set and Evaluation Set */
7376
7377 CLOSE get_tax_result_csr;
7378
7379 IF (g_level_procedure >= g_current_runtime_level ) THEN
7380 FND_LOG.STRING(g_level_procedure,
7381 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_result.END',
7382 'ZX_TDS_RULE_BASE_DETM_PVT: get_result(-)' ||
7383 ', p_return_status = ' || p_return_status ||
7384 ', p_error_buffer = ' || p_error_buffer);
7385 END IF;
7386
7387 EXCEPTION
7388 WHEN OTHERS THEN
7389 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7390 p_error_buffer := SUBSTR(SQLERRM, 1, 80);
7391 CLOSE get_tax_result_csr;
7392
7393 IF (g_level_unexpected >= g_current_runtime_level ) THEN
7394 FND_LOG.STRING(g_level_unexpected,
7395 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_result',
7396 p_error_buffer);
7397 END IF;
7398
7399 END get_result;
7400
7401 -----------------------------------------------------------------------
7402 -- PRIVATE PROCEDURE
7403 -- get_fsc_code
7404 --
7405 -- DESCRIPTION
7406 -- This procedure loops through a fiscal classification cache structure
7407 -- to return a fiscal classification code if found
7408 --
7409 -- History
7410 --
7411 -- Phong La 21-MAY-02 Created
7412 --
7413 PROCEDURE get_fsc_code(
7414 p_found IN OUT NOCOPY BOOLEAN,
7415 p_tax_regime_code IN ZX_REGIMES_B.TAX_REGIME_CODE%TYPE,
7416 p_classification_category IN
7417 ZX_FC_TYPES_B.Classification_Type_Categ_Code%TYPE,
7418 p_classification_type IN
7419 ZX_FC_TYPES_B.CLASSIFICATION_TYPE_CODE%TYPE,
7420 p_tax_determine_date IN ZX_LINES.TAX_DETERMINE_DATE%TYPE,
7421 p_classified_entity_id IN
7422 ZX_FC_CODES_B.CLASSIFICATION_ID%TYPE,
7423 p_item_org_id IN NUMBER,
7424 p_application_id IN NUMBER,
7425 p_event_class_code IN VARCHAR2,
7426 p_condition_value IN ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
7427 p_trx_alphanumeric_value OUT NOCOPY ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE)
7428
7429 IS
7430 l_count NUMBER;
7431 l_search_pointer NUMBER;
7432 BEGIN
7433
7434 IF (g_level_procedure >= g_current_runtime_level ) THEN
7435 FND_LOG.STRING(g_level_procedure,
7436 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fsc_code.BEGIN',
7437 'ZX_TDS_RULE_BASE_DETM_PVT: get_fsc_code(+)');
7438 END IF;
7439
7440 p_found := FALSE;
7441
7442 IF G_FSC_TBL_INSERT_POINTER = 0 THEN
7443 l_count := ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl.count;
7444 FOR i IN REVERSE 1 .. l_count LOOP
7445 IF ( ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(i).classification_type
7446 = p_classification_type
7447 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(i).tax_regime_code
7448 = p_tax_regime_code
7449 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(i).classification_category
7450 = p_classification_category
7451 AND NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(i).classified_entity_id,0)
7452 = NVL(p_classified_entity_id,0)
7453 AND p_tax_determine_date
7454 >= nvl(ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(i).effective_from,
7455 p_tax_determine_date)
7456 AND p_tax_determine_date
7457 <= NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(i).effective_to,
7458 p_tax_determine_date)
7459 AND NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(i).item_org_id, 0)
7460 = NVL(p_item_org_id, 0)
7461 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(i).application_id
7462 = p_application_id
7463 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(i).event_class_code
7464 = p_event_class_code
7465 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(i).condition_value
7466 = p_condition_value
7467 ) THEN
7468 p_trx_alphanumeric_value := ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(i).fsc_code;
7469 p_found := TRUE;
7470 EXIT;
7471 END IF;
7472 END LOOP;
7473 ELSE
7474 FOR l_search_pointer IN REVERSE 1 .. G_FSC_TBL_INSERT_POINTER LOOP
7475 IF ( ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).classification_type
7476 = p_classification_type
7477 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).tax_regime_code
7478 = p_tax_regime_code
7479 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).classification_category
7480 = p_classification_category
7481 AND NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).classified_entity_id,0)
7482 = NVL(p_classified_entity_id,0)
7483 AND p_tax_determine_date
7484 >= nvL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).effective_from,
7485 p_tax_determine_date)
7486 AND p_tax_determine_date
7487 <= NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).effective_to,
7488 p_tax_determine_date)
7489 AND NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).item_org_id, 0)
7490 = NVL(p_item_org_id, 0)
7491 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).application_id
7492 = p_application_id
7493 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).event_class_code
7494 = p_event_class_code
7495 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).condition_value
7496 = p_condition_value
7497 ) THEN
7498 p_trx_alphanumeric_value := ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).fsc_code;
7499 p_found := TRUE;
7500 EXIT;
7501 END IF;
7502 END LOOP;
7503 IF NOT p_found THEN
7504 FOR l_search_pointer IN REVERSE G_FSC_TBL_INSERT_POINTER+1 .. G_FSC_TBL_MAX_SIZE LOOP
7505 IF ( ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).classification_type
7506 = p_classification_type
7507 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).tax_regime_code
7508 = p_tax_regime_code
7509 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).classification_category
7510 = p_classification_category
7511 AND NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).classified_entity_id,0)
7512 = NVL(p_classified_entity_id,0)
7513 AND p_tax_determine_date
7514 >= nvL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).effective_from,
7515 p_tax_determine_date)
7516 AND p_tax_determine_date
7517 <= NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).effective_to,
7518 p_tax_determine_date)
7519 AND NVL(ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).item_org_id, 0)
7520 = NVL(p_item_org_id, 0)
7521 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).application_id
7522 = p_application_id
7523 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).event_class_code
7524 = p_event_class_code
7525 AND ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).condition_value
7526 = p_condition_value
7527 ) THEN
7528 p_trx_alphanumeric_value := ZX_TDS_CALC_SERVICES_PUB_PKG.g_fsc_tbl(l_search_pointer).fsc_code;
7529 p_found := TRUE;
7530 EXIT;
7531 END IF;
7532 END LOOP;
7533 END IF; -- NOT p_found
7534 END IF; -- G_FSC_TBL_INSERT_POINTER = 0
7535
7536 IF (g_level_procedure >= g_current_runtime_level ) THEN
7537 FND_LOG.STRING(g_level_procedure,
7538 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fsc_code',
7539 'trx_alpha_value: ' || p_trx_alphanumeric_value);
7540 FND_LOG.STRING(g_level_procedure,
7541 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fsc_code.END',
7542 'ZX_TDS_RULE_BASE_DETM_PVT: get_fsc_code(-)');
7543 END IF;
7544
7545 EXCEPTION
7546 WHEN OTHERS THEN
7547 IF (g_level_unexpected >= g_current_runtime_level ) THEN
7548 FND_LOG.STRING(g_level_unexpected,
7549 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_fsc_code',
7550 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
7551 END IF;
7552
7553 END get_fsc_code;
7554 ----------------------------------------------------------------------
7555 -- PRIVATE PROCEDURE
7556 -- check_condition_group_result
7557 --
7558 -- DESCRIPTION
7559 -- This procedure checks the condition group result structure to determine
7560 -- if a given condition group of a template has been evaluated before
7561 -- History
7562 --
7563 -- Helen Si 5-OCT-01 Created
7564 --
7565 PROCEDURE check_condition_group_result(
7566 p_det_factor_templ_code IN
7567 ZX_DET_FACTOR_TEMPL_B.DET_FACTOR_TEMPL_CODE%TYPE,
7568 p_condition_group_code IN
7569 ZX_CONDITION_GROUPS_B.CONDITION_GROUP_CODE%TYPE,
7570 p_trx_line_index IN BINARY_INTEGER,
7571 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
7572 p_template_evaluated OUT NOCOPY BOOLEAN,
7573 p_result OUT NOCOPY BOOLEAN)
7574 IS
7575 l_count NUMBER;
7576 l_check_condition_group_tbl ZX_TDS_CALC_SERVICES_PUB_PKG.trx_line_cond_grp_eval_tbl;
7577 BEGIN
7578
7579 IF (g_level_procedure >= g_current_runtime_level ) THEN
7580 FND_LOG.STRING(g_level_procedure,
7581 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_condition_group_result.BEGIN',
7582 'ZX_TDS_RULE_BASE_DETM_PVT: check_condition_group_result(+)');
7583 IF (g_level_statement >= g_current_runtime_level ) THEN
7584 FND_LOG.STRING(g_level_statement,
7585 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_condition_group_result',
7586 'det_factor_templ_code: ' || p_det_factor_templ_code ||
7587 ', condition group code: ' || p_condition_group_code ||
7588 ', trx_line_index: ' || p_trx_line_index ||
7589 ', application_Id: ' || to_char(p_event_class_rec.application_Id) ||
7590 ', tax_event_class_code: ' || p_event_class_rec.tax_event_class_code);
7591 END IF;
7592 END IF;
7593
7594 l_check_condition_group_tbl := ZX_TDS_CALC_SERVICES_PUB_PKG.g_check_cond_grp_tbl;
7595 l_count := l_check_condition_group_tbl.count;
7596 p_template_evaluated := FALSE;
7597 p_result := FALSE;
7598
7599 IF (g_level_statement >= g_current_runtime_level ) THEN
7600 FND_LOG.STRING(g_level_statement,
7601 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_condition_group_result',
7602 'Results in condition_group tbl: ' || to_char(l_count));
7603 END IF;
7604
7605
7606 FOR j in 1..l_count LOOP
7607
7608 IF (l_check_condition_group_tbl(j).det_factor_templ_code =
7609 p_det_factor_templ_code AND
7610 l_check_condition_group_tbl(j).condition_group_code =
7611 p_condition_group_code AND
7612 l_check_condition_group_tbl(j).trx_line_index = p_trx_line_index AND
7613 l_check_condition_group_tbl(j).application_Id =
7614 p_event_class_rec.application_Id AND
7615 l_check_condition_group_tbl(j).tax_event_class_code =
7616 p_event_class_rec.tax_event_class_code) THEN
7617
7618 IF (g_level_statement >= g_current_runtime_level ) THEN
7619 FND_LOG.STRING(g_level_statement,
7620 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_condition_group_result',
7621 l_check_condition_group_tbl(j).condition_group_code ||
7622 ' was evaluated before');
7623 END IF;
7624
7625 p_template_evaluated := TRUE;
7626 p_result := l_check_condition_group_tbl(j).result;
7627 EXIT;
7628 /*
7629 * do not need to search for which driver set is true since
7630 * driver set now is passed in
7631 * IF l_check_condition_group_tbl(j).result THEN
7632 * p_result := TRUE;
7633 * EXIT;
7634 * END IF;
7635 */
7636 END IF;
7637
7638 END LOOP;
7639
7640 IF (g_level_procedure >= g_current_runtime_level ) THEN
7641 FND_LOG.STRING(g_level_procedure,
7642 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_condition_group_result.END',
7643 'ZX_TDS_RULE_BASE_DETM_PVT: check_condition_group_result(-)');
7644 END IF;
7645
7646 EXCEPTION
7647 WHEN OTHERS THEN
7648 IF (g_level_unexpected >= g_current_runtime_level ) THEN
7649 FND_LOG.STRING(g_level_unexpected,
7650 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_condition_group_result',
7651 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
7652 END IF;
7653
7654 END check_condition_group_result;
7655
7656 -----------------------------------------------------------------------
7657 -- PRIVATE PROCEDURE
7658 -- insert_condition_group_result
7659 --
7660 -- DESCRIPTION
7661 -- This procedure inserts the result of true/false (success/fail) to
7662 -- the condition group result structure after a template has been evaluated
7663 --
7664 -- History
7665 --
7666 -- Helen / Rajeev 1-OCT-01 Created
7667 --
7668 --
7669 PROCEDURE insert_condition_group_result(
7670 p_det_factor_templ_code IN ZX_DET_FACTOR_TEMPL_B.det_factor_templ_code%TYPE,
7671 p_condition_group_code IN ZX_CONDITION_GROUPS_B.condition_group_CODE%TYPE,
7672 p_result IN BOOLEAN,
7673 p_trx_line_index IN BINARY_INTEGER,
7674 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE
7675 )
7676 IS
7677 i BINARY_INTEGER;
7678 l_check_condition_group_rec ZX_TDS_CALC_SERVICES_PUB_PKG.trx_line_cond_grp_eval_rec;
7679
7680 BEGIN
7681
7682 IF (g_level_procedure >= g_current_runtime_level ) THEN
7683 FND_LOG.STRING(g_level_procedure,
7684 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.insert_condition_group_result.BEGIN',
7685 'ZX_TDS_RULE_BASE_DETM_PVT: insert_condition_group_result(+)');
7686 END IF;
7687
7688 i := ZX_TDS_CALC_SERVICES_PUB_PKG.g_check_cond_grp_tbl.count + 1;
7689
7690 l_check_condition_group_rec.det_factor_templ_code := p_det_factor_templ_code;
7691 l_check_condition_group_rec.condition_group_code := p_condition_group_code;
7692 l_check_condition_group_rec.trx_line_index := p_trx_line_index;
7693 l_check_condition_group_rec.application_id := p_event_class_rec.application_id;
7694 l_check_condition_group_rec.tax_event_class_code :=
7695 p_event_class_rec.tax_event_class_code;
7696 l_check_condition_group_rec.result := p_result;
7697
7698 ZX_TDS_CALC_SERVICES_PUB_PKG.g_check_cond_grp_tbl(i) := l_check_condition_group_rec;
7699
7700
7701 IF (g_level_procedure >= g_current_runtime_level ) THEN
7702 FND_LOG.STRING(g_level_procedure,
7703 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.insert_condition_group_result.END',
7704 'ZX_TDS_RULE_BASE_DETM_PVT: insert_condition_group_result(-)');
7705 END IF;
7706
7707 EXCEPTION
7708 WHEN OTHERS THEN
7709
7710 IF (g_level_unexpected >= g_current_runtime_level ) THEN
7711 FND_LOG.STRING(g_level_unexpected,
7712 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.insert_condition_group_result',
7713 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
7714 END IF;
7715
7716 END insert_condition_group_result;
7717
7718
7719 -----------------------------------------------------------------------
7720 -- PRIVATE PROCEDURE
7721 -- check_templ_tax_parameter
7722 --
7723 -- DESCRIPTION
7724 -- This procedure validates the tax parameter codes stored for each
7725 -- determining factor at the the template details level; this template
7726 -- is further processed only when the tax parameter is supported for the
7727 -- application.
7728 --
7729 -- History
7730 --
7731 -- Ramya 04-FEB-2005 CREATED
7732 -- Ref Bug #4166241
7733 --
7734 --
7735
7736 PROCEDURE check_templ_tax_parameter(
7737 p_det_factor_templ_code IN ZX_DET_FACTOR_TEMPL_B.det_factor_templ_code%TYPE,
7738 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
7739 p_valid OUT NOCOPY BOOLEAN,
7740 p_return_status OUT NOCOPY VARCHAR2,
7741 p_error_buffer OUT NOCOPY VARCHAR2)
7742
7743 IS
7744
7745 l_evnt_cls_parameter_code ZX_PARAMETERS_B.TAX_PARAMETER_CODE%TYPE;
7746 l_tbl_index BINARY_INTEGER;
7747 --
7748 -- Earlier, we were having two cursors - one to fetch the template details
7749 -- and another to get the parameter code value. But with Bug 4896265, merged
7750 -- the two cursors to have just one , as below.
7751 --
7752 -- Bug5710822: Event if one DF is not supported by the current event class,
7753 -- rule engine needs to check the value of ignore flag of this
7754 -- determining factor in any condition sets defined under this DF
7755 -- template. If it is 'Y', this DF template needs to be processed.
7756 --
7757 CURSOR chk_taxevnt_parameter_code_csr
7758 (c_det_factor_templ_cd ZX_DET_FACTOR_TEMPL_B.det_factor_templ_code%TYPE,
7759 c_event_class_mapping_id ZX_EVNT_CLS_MAPPINGS.event_class_mapping_id%TYPE)
7760 IS
7761 SELECT param.tax_parameter_code
7762 FROM zx_det_factor_templ_dtl dtl,
7763 zx_det_factor_templ_b templ,
7764 zx_event_class_params param
7765 WHERE templ.det_factor_templ_code = c_det_factor_templ_cd
7766 AND dtl.det_factor_templ_id = templ.det_factor_templ_id
7767 AND param.event_class_mapping_id = c_event_class_mapping_id
7768 AND param.tax_parameter_code = dtl.tax_parameter_code
7769 AND NOT EXISTS
7770 (SELECT /*+ FIRST_ROWS (1) */ 1
7771 FROM zx_condition_groups_b zcg,
7772 zx_conditions zc
7773 WHERE zcg.det_factor_templ_code = c_det_factor_templ_cd
7774 AND zcg.enabled_flag = 'Y'
7775 AND zc.condition_group_code = zcg.condition_group_code
7776 AND zc.determining_factor_code = dtl.determining_factor_code
7777 AND zc.determining_factor_class_code = dtl.determining_factor_class_code
7778 AND NVL(zc.determining_factor_cq_code, 'x') = NVL(dtl.determining_factor_cq_code, 'x')
7779 AND zc.ignore_flag = 'Y'
7780 AND rownum = 1
7781 );
7782
7783 BEGIN
7784
7785 IF (g_level_procedure >= g_current_runtime_level ) THEN
7786 FND_LOG.STRING(g_level_procedure,
7787 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_templ_tax_parameter.BEGIN',
7788 'ZX_TDS_RULE_BASE_DETM_PVT: check_templ_tax_parameter(+)');
7789 END IF;
7790
7791 p_return_status := FND_API.G_RET_STS_SUCCESS;
7792
7793 --Initialize the return status , p_valid as TRUE
7794 p_valid := TRUE;
7795
7796 l_tbl_index := dbms_utility.get_hash_value(p_det_factor_templ_code||to_char(p_event_class_rec.event_class_mapping_id), 1, 8192);
7797
7798 IF ZX_GLOBAL_STRUCTURES_PKG.g_template_valid_info_tbl.exists(l_tbl_index) AND
7799 ZX_GLOBAL_STRUCTURES_PKG.g_template_valid_info_tbl(l_tbl_index).DET_FACTOR_TEMPL_CODE = p_det_factor_templ_code AND
7800 ZX_GLOBAL_STRUCTURES_PKG.g_template_valid_info_tbl(l_tbl_index).EVENT_CLASS_MAPPING_ID = p_event_class_rec.event_class_mapping_id
7801 THEN
7802 p_valid := ZX_GLOBAL_STRUCTURES_PKG.g_template_valid_info_tbl(l_tbl_index).VALID;
7803 ELSE
7804 -- get tax parameter codes for all determining factors from ZX_DET_FACTOR_TEMPL_DTL table.
7805
7806 OPEN chk_taxevnt_parameter_code_csr(p_det_factor_templ_code,
7807 p_event_class_rec.event_class_mapping_id);
7808
7809 FETCH chk_taxevnt_parameter_code_csr INTO l_evnt_cls_parameter_code;
7810
7811 --
7812 --If a parameter exists in the ZX_TAXEVNT_CLS_PARAMS table, then this
7813 --parameter is not supported by the application; hence return FALSE
7814 --
7815 IF (chk_taxevnt_parameter_code_csr%found) THEN
7816 IF (g_level_statement >= g_current_runtime_level ) THEN
7817 FND_LOG.STRING(g_level_statement,
7818 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_templ_tax_parameter',
7819 'chk_taxevnt_parameter_code_csr row count '
7820 ||to_char(chk_taxevnt_parameter_code_csr%rowcount) ||
7821 ', Parameter ' || l_evnt_cls_parameter_code || ' FOUND for Template '
7822 ||p_det_factor_templ_code);
7823 END IF;
7824 p_valid := FALSE;
7825
7826 ZX_GLOBAL_STRUCTURES_PKG.g_template_valid_info_tbl(l_tbl_index).DET_FACTOR_TEMPL_CODE :=
7827 p_det_factor_templ_code;
7828 ZX_GLOBAL_STRUCTURES_PKG.g_template_valid_info_tbl(l_tbl_index).EVENT_CLASS_MAPPING_ID :=
7829 p_event_class_rec.event_class_mapping_id;
7830 ZX_GLOBAL_STRUCTURES_PKG.g_template_valid_info_tbl(l_tbl_index).VALID := FALSE;
7831
7832 ELSE
7833
7834 ZX_GLOBAL_STRUCTURES_PKG.g_template_valid_info_tbl(l_tbl_index).DET_FACTOR_TEMPL_CODE :=
7835 p_det_factor_templ_code;
7836 ZX_GLOBAL_STRUCTURES_PKG.g_template_valid_info_tbl(l_tbl_index).EVENT_CLASS_MAPPING_ID :=
7837 p_event_class_rec.event_class_mapping_id;
7838 ZX_GLOBAL_STRUCTURES_PKG.g_template_valid_info_tbl(l_tbl_index).VALID := TRUE;
7839
7840 END IF;
7841
7842 CLOSE chk_taxevnt_parameter_code_csr;
7843 END IF;
7844
7845 IF (g_level_procedure >= g_current_runtime_level ) THEN
7846 FND_LOG.STRING(g_level_procedure,
7847 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_templ_tax_parameter.END',
7848 'ZX_TDS_RULE_BASE_DETM_PVT: check_templ_tax_parameter(-)');
7849 END IF;
7850 EXCEPTION
7851 WHEN OTHERS THEN
7852 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
7853 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
7854
7855 IF (g_level_unexpected >= g_current_runtime_level ) THEN
7856 FND_LOG.STRING(g_level_unexpected,
7857 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_templ_tax_parameter',
7858 p_error_buffer);
7859 END IF;
7860
7861 END check_templ_tax_parameter;
7862
7863
7864
7865 -----------------------------------------------------------------------
7866 -- PRIVATE PROCEDURE
7867 -- check_rule_geography
7868 --
7869 -- DESCRIPTION
7870 -- This procedure is to check if the Geography Context for the given Rule matches with the
7871 -- one stored in the Location information cached in the Global structure. Only such Rules need
7872 -- to be processed.
7873 --
7874 -- History
7875 --
7876 -- Ramya 12-APR-2005 CREATED
7877 -- Ref Bug #4255160
7878 --
7879 --
7880
7881 PROCEDURE check_rule_geography(
7882 p_structure_name IN VARCHAR2,
7883 p_structure_index IN BINARY_INTEGER,
7884 p_rule_det_factor_cq IN ZX_RULES_B.determining_factor_cq_code%TYPE,
7885 p_rule_geography_type IN ZX_RULES_B.geography_type%TYPE,
7886 p_rule_geography_id IN ZX_RULES_B.geography_id%TYPE,
7887 p_event_class_rec IN ZX_API_PUB.EVENT_CLASS_REC_TYPE,
7888 p_valid OUT NOCOPY BOOLEAN,
7889 p_return_status OUT NOCOPY VARCHAR2,
7890 p_error_buffer OUT NOCOPY VARCHAR2)
7891
7892 IS
7893 l_cache_evt_cls_map_id NUMBER;
7894 l_cache_trx_id NUMBER;
7895 l_cache_trx_line_id NUMBER;
7896 l_cache_loc_type VARCHAR2(30);
7897 l_cache_geo_type VARCHAR2(30);
7898 l_cache_geo_id NUMBER;
7899 l_valid BOOLEAN;
7900 --l_count NUMBER;
7901 l_location_id NUMBER;
7902 l_geography_id NUMBER;
7903 l_geography_code VARCHAR2(30);
7904 l_geography_name VARCHAR2(360);
7905
7906 BEGIN
7907
7908 IF (g_level_procedure >= g_current_runtime_level ) THEN
7909 FND_LOG.STRING(g_level_procedure,
7910 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_rule_geography.BEGIN',
7911 'ZX_TDS_RULE_BASE_DETM_PVT: check_rule_geography(+)');
7912 END IF;
7913
7914 p_return_status := FND_API.G_RET_STS_SUCCESS;
7915
7916 --Initialize the return status , p_valid as FALSE
7917 p_valid := FALSE;
7918 p_return_status := FND_API.G_RET_STS_SUCCESS;
7919 --l_count := ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.COUNT;
7920
7921 get_tsrm_num_value(
7922 p_structure_name,
7923 p_structure_index,
7924 p_rule_det_factor_cq || '_' || 'LOCATION_ID',
7925 l_location_id,
7926 p_return_status,
7927 p_error_buffer);
7928
7929 IF (g_level_statement >= g_current_runtime_level ) THEN
7930 FND_LOG.STRING(g_level_statement,
7931 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_rule_geography',
7932 p_rule_det_factor_cq || '_' || 'LOCATION_ID = '||to_char(l_location_id));
7933 END IF;
7934
7935 ZX_TCM_GEO_JUR_PKG.get_master_geography
7936 (l_location_id,
7937 p_rule_det_factor_cq, --l_location_type
7938 p_rule_geography_type, -- geography_type
7939 l_geography_id,
7940 l_geography_code,
7941 l_geography_name,
7942 p_return_status);
7943
7944 IF p_return_status = FND_API.G_RET_STS_SUCCESS THEN
7945 IF l_geography_id = p_rule_geography_id then
7946 p_valid:=TRUE;
7947
7948 IF (g_level_statement >= g_current_runtime_level ) THEN
7949 FND_LOG.STRING(g_level_statement,
7950 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_rule_geography',
7951 'p_valid = TRUE ');
7952 END IF;
7953
7954 END IF;
7955 END IF;
7956
7957
7958 IF (g_level_statement >= g_current_runtime_level ) THEN
7959 FND_LOG.STRING(g_level_statement,
7960 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_rule_geography',
7961 'p_rule_geography_id=' || to_char(p_rule_geography_id)||
7962 ', l_geography_id=' || to_char(l_geography_id) ||
7963 ', l_geography_code=' || l_geography_code ||
7964 ', l_geography_name=' || l_geography_name );
7965 END IF; --g_level_statement if
7966
7967 /*
7968 FOR i IN 1..ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.event_class_mapping_id.LAST LOOP
7969
7970 --l_cache_evt_cls_map_id := ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.event_class_mapping_id(i);
7971 --l_cache_trx_id := ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.trx_id(i);
7972 l_cache_loc_type := ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.location_type(i);
7973 l_cache_geo_type := ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.geography_type(i);
7974 l_cache_geo_id := ZX_GLOBAL_STRUCTURES_PKG.location_info_tbl.geography_id(i);
7975
7976 IF (g_level_statement >= g_current_runtime_level ) THEN
7977 FND_LOG.STRING(g_level_statement,
7978 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_rule_geography',
7979 'l_cache_evt_cls_map_id=' || to_char(l_cache_evt_cls_map_id) ||
7980 ', l_cache_trx_id=' || to_char(l_cache_trx_id) ||
7981 ', l_cache_trx_line_id=' || to_char(l_cache_trx_line_id) ||
7982 ', l_cache_loc_type=' || l_cache_loc_type ||
7983 ', l_cache_geo_type=' || l_cache_geo_type ||
7984 ', l_cache_geo_id=' || to_char(l_cache_geo_id));
7985 END IF; --g_level_statement if
7986
7987 IF(l_cache_loc_type = p_rule_det_factor_cq AND
7988 l_cache_geo_type = p_rule_geography_type AND
7989 l_cache_geo_id = p_rule_geography_id ) THEN
7990 p_valid:=TRUE;
7991 EXIT;
7992 END IF;
7993 END LOOP;
7994 */
7995
7996 IF (g_level_procedure >= g_current_runtime_level ) THEN
7997 FND_LOG.STRING(g_level_procedure,
7998 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_rule_geography.END',
7999 'ZX_TDS_RULE_BASE_DETM_PVT: check_rule_geography(-)');
8000 END IF;
8001 EXCEPTION
8002 WHEN OTHERS THEN
8003 p_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
8004 p_error_buffer := sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80);
8005
8006 IF (g_level_unexpected >= g_current_runtime_level ) THEN
8007 FND_LOG.STRING(g_level_unexpected,
8008 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.check_rule_geography',
8009 p_error_buffer);
8010 END IF;
8011
8012 END check_rule_geography;
8013
8014
8015 -----------------------------------------------------------------------
8016 -- PUBLIC FUNCTION
8017 -- get_trx_value_index
8018 --
8019 -- DESCRIPTION
8020 --
8021 -- This function returns the hash table index from global trx
8022 -- value cache structure
8023 --
8024
8025 FUNCTION get_trx_value_index(
8026 p_Det_Factor_Class_Code IN ZX_CONDITIONS.Determining_Factor_Class_Code%TYPE,
8027 p_determining_factor_code IN ZX_CONDITIONS.determining_factor_code%TYPE,
8028 p_Determining_Factor_Cq_Code IN ZX_CONDITIONS.Determining_Factor_Cq_Code%TYPE,
8029 p_condition_value IN ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE )
8030 RETURN BINARY_INTEGER IS
8031 l_count NUMBER;
8032 l_tbl_index BINARY_INTEGER;
8033 cache_delim CONSTANT VARCHAR2(03) := '|$|';
8034 /* Bug 5003413 : Added a delimiter to avoid concatenation of two strings
8035 resulting into same output string */
8036 BEGIN
8037
8038 g_current_runtime_level := FND_LOG.G_CURRENT_RUNTIME_LEVEL;
8039
8040 IF (g_level_statement >= g_current_runtime_level ) THEN
8041 FND_LOG.STRING(g_level_statement,
8042 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_trx_value_index.BEGIN',
8043 'ZX_TDS_RULE_BASE_DETM_PVT: get_trx_value_index(+)');
8044 END IF;
8045
8046 l_count := ZX_TDS_CALC_SERVICES_PUB_PKG.g_trx_alphanum_value_tbl.COUNT;
8047
8048
8049 l_tbl_index := dbms_utility.get_hash_value(
8050 p_Det_Factor_Class_Code || cache_delim ||
8051 p_determining_factor_code || cache_delim ||
8052 p_Determining_Factor_Cq_Code || cache_delim ||
8053 p_condition_value,
8054 1,
8055 8192);
8056
8057 IF (g_level_statement >= g_current_runtime_level ) THEN
8058 FND_LOG.STRING(g_level_statement,
8059 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_trx_value_index.END',
8060 'ZX_TDS_RULE_BASE_DETM_PVT: get_trx_value_index(-)');
8061 END IF;
8062
8063 RETURN l_tbl_index;
8064
8065 EXCEPTION
8066 WHEN OTHERS THEN
8067
8068 IF (g_level_unexpected >= g_current_runtime_level ) THEN
8069 FND_LOG.STRING(g_level_unexpected,
8070 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.get_trx_value_index',
8071 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
8072 END IF;
8073
8074 END get_trx_value_index;
8075 -----------------------------------------------------------------------
8076
8077 -- PRIVATE FUNCTION
8078 -- evaluate_alphanum_condition
8079 --
8080 -- DESCRIPTION
8081 --
8082 -- The procedure is to evaluate condition value of alphanumeric data type
8083 --
8084
8085 FUNCTION evaluate_alphanum_condition(
8086 p_Operator_Code IN ZX_CONDITIONS.Operator_Code%TYPE,
8087 p_condition_value IN ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
8088 p_trx_value IN ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE,
8089 p_value_low IN ZX_CONDITIONS.VALUE_LOW%TYPE,
8090 p_value_high IN ZX_CONDITIONS.VALUE_HIGH%TYPE,
8091 p_det_factor_templ_code IN ZX_DET_FACTOR_TEMPL_B.DET_FACTOR_TEMPL_CODE%TYPE,
8092 p_chart_of_accounts_id IN ZX_CONDITION_GROUPS_B.CHART_OF_ACCOUNTS_ID%TYPE)
8093 RETURN BOOLEAN IS
8094 l_str ZX_CONDITIONS.ALPHANUMERIC_VALUE%TYPE;
8095
8096 l_segments_trx FND_FLEX_EXT.SEGMENTARRAY;
8097 l_segments_low FND_FLEX_EXT.SEGMENTARRAY;
8098 l_segments_high FND_FLEX_EXT.SEGMENTARRAY;
8099 l_num_segments_trx NUMBER;
8100 l_num_segments_low NUMBER;
8101 l_num_segments_high NUMBER;
8102 l_segment_num NUMBER;
8103 l_valid_num NUMBER;
8104 l_delimiter VARCHAR2(1);
8105 l_result BOOLEAN;
8106
8107 BEGIN
8108
8109 IF (g_level_procedure >= g_current_runtime_level ) THEN
8110 FND_LOG.STRING(g_level_procedure,
8111 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_alphanum_condition.BEGIN',
8112 'ZX_TDS_RULE_BASE_DETM_PVT: evaluate_alphanum_condition(+)');
8113 IF (g_level_statement >= g_current_runtime_level ) THEN
8114 FND_LOG.STRING(g_level_statement,
8115 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_alphanum_condition',
8116 'p_Operator_Code: ' || p_operator_code ||
8117 ', p_condition_value:' || p_condition_value ||
8118 ', p_trx_value: ' || p_trx_value ||
8119 ', p_value_low: ' || p_value_low ||
8120 ', p_value_high: ' || p_value_high||
8121 ', p_det_factor_templ_code: '||p_det_factor_templ_code||
8122 ', p_chart_of_accounts_id: '||p_chart_of_accounts_id);
8123 END IF;
8124 END IF;
8125
8126 IF p_trx_value = FND_API.G_MISS_CHAR||FND_API.G_MISS_CHAR THEN return false;
8127 END IF;
8128
8129 -- bug fix: 4874898
8130 IF p_Operator_Code = '=' THEN
8131 -- this is added for the tax_classification_code is null rule.
8132 IF p_condition_value = 'NULL' THEN
8133 RETURN (p_trx_value IS NULL);
8134 ELSE
8135 IF p_trx_value is NULL THEN
8136 RETURN FALSE;
8137 ELSE
8138 RETURN (p_trx_value = p_condition_value);
8139 END IF;
8140 END IF;
8141 ELSIF p_Operator_Code = '=CQ' THEN
8142 RETURN (p_trx_value = p_condition_value);
8143
8144 ELSIF p_Operator_Code = '>' THEN
8145 RETURN (p_trx_value > p_condition_value);
8146
8147 ELSIF p_Operator_Code = '<' THEN
8148 RETURN (p_trx_value < p_condition_value);
8149
8150 ELSIF p_Operator_Code = '<=' THEN
8151 RETURN (p_trx_value <= p_condition_value);
8152
8153 ELSIF p_Operator_Code = '>=' THEN
8154 RETURN (p_trx_value >= p_condition_value);
8155
8156 ELSIF (p_Operator_Code = '<>' OR
8157 p_Operator_Code = '<>CQ' ) THEN
8158 --Bug 8301114
8159 IF p_condition_value is NULL THEN
8160 RETURN (p_trx_value IS NOT NULL);
8161 ELSE
8162 IF p_trx_value is NULL THEN
8163 RETURN FALSE;
8164 ELSE
8165 RETURN (p_trx_value <> p_condition_value);
8166 END IF;
8167 END IF;
8168 ELSIF p_Operator_Code = 'BETWEEN' THEN
8169 -- Code added for Bug#7412888
8170 IF p_det_factor_templ_code = 'ACCOUNTING_FLEXFIELD' THEN
8171 IF p_trx_value is NULL THEN
8172 RETURN FALSE;
8173 ELSE
8174 l_delimiter := FND_FLEX_EXT.GET_DELIMITER('SQLGL','GL#',p_chart_of_accounts_id);
8175
8176 l_num_segments_trx := FND_FLEX_EXT.breakup_segments(p_trx_value,
8177 l_delimiter,
8178 l_segments_trx); --OUT
8179
8180 l_num_segments_low := FND_FLEX_EXT.breakup_segments(p_value_low,
8181 l_delimiter,
8182 l_segments_low); --OUT
8183
8184 l_num_segments_high := FND_FLEX_EXT.breakup_segments(p_value_high,
8185 l_delimiter,
8186 l_segments_high); --OUT
8187
8188 FOR i IN REVERSE 1 .. l_num_segments_trx LOOP
8189 l_result := TRUE;
8190 IF (g_level_statement >= g_current_runtime_level ) THEN
8191 FND_LOG.STRING(g_level_statement,
8192 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_alphanum_condition.BEGIN',
8193 'TRX-ACC-SEG-' ||i||' = '|| l_segments_trx(i)||', '||
8194 'ACC-LOW-SEG-' ||i||' = '|| l_segments_low(i)||', '||
8195 'ACC-HIGH-SEG-'||i||' = '|| l_segments_high(i));
8196 END IF;
8197
8198 IF ( NVL(l_segments_trx(i), '!') NOT BETWEEN NVL(l_segments_low(i), '!')
8199 AND NVL(l_segments_high(i), '~') ) THEN
8200 l_result := FALSE;
8201 EXIT;
8202 END IF;
8203
8204 END LOOP;
8205 RETURN l_result;
8206 END IF;
8207 ELSE
8208 RETURN (p_trx_value <= p_value_high AND
8209 p_trx_value >= p_value_low);
8210 END IF;
8211
8212 ELSIF p_Operator_Code = 'IN' THEN
8213 IF p_trx_value is NULL THEN
8214 RETURN FALSE;
8215 ELSE
8216 l_str := ';' || p_trx_value || ';';
8217 RETURN (INSTR(p_condition_value, l_str ) > 0 );
8218 END IF;
8219 -- Bug 9552043
8220 ELSIF p_operator_code = 'NULL' THEN
8221 IF p_trx_value IS NULL or p_trx_value = FND_API.G_MISS_CHAR THEN
8222 RETURN TRUE;
8223 ELSE
8224 RETURN FALSE;
8225 END IF;
8226 ELSIF p_operator_code = 'NOT_NULL' THEN
8227 IF p_trx_value IS NULL or p_trx_value = FND_API.G_MISS_CHAR THEN
8228 RETURN FALSE;
8229 ELSE
8230 RETURN TRUE;
8231 END IF;
8232 ELSE
8233 --
8234 -- invalid Operator_Code
8235 --
8236
8237 IF (g_level_statement >= g_current_runtime_level ) THEN
8238 FND_LOG.STRING(g_level_statement,
8239 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_alphanum_condition',
8240 'Invalid Operator_Code for alphanumeric data type');
8241 END IF;
8242
8243 RETURN FALSE;
8244 END IF;
8245
8246 IF (g_level_procedure >= g_current_runtime_level ) THEN
8247 FND_LOG.STRING(g_level_procedure,
8248 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_alphanum_condition.END',
8249 'ZX_TDS_RULE_BASE_DETM_PVT: evaluate_alphanum_condition(-)');
8250 END IF;
8251
8252 EXCEPTION
8253 WHEN OTHERS THEN
8254
8255 IF (g_level_unexpected >= g_current_runtime_level ) THEN
8256 FND_LOG.STRING(g_level_unexpected,
8257 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_alphanum_condition',
8258 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
8259 END IF;
8260
8261 END evaluate_alphanum_condition;
8262 -----------------------------------------------------------------------
8263
8264 -- PRIVATE FUNCTION
8265 -- evaluate_numeric_condition
8266 --
8267 -- DESCRIPTION
8268 --
8269 -- The procedure is to evaluate condition value of numeric data type
8270 --
8271
8272 FUNCTION evaluate_numeric_condition(
8273 p_Operator_Code IN ZX_CONDITIONS.Operator_Code%TYPE,
8274 p_condition_value IN ZX_CONDITIONS.NUMERIC_VALUE%TYPE,
8275 p_trx_value IN ZX_CONDITIONS.NUMERIC_VALUE%TYPE)
8276 RETURN BOOLEAN IS
8277 BEGIN
8278
8279 IF (g_level_procedure >= g_current_runtime_level ) THEN
8280 FND_LOG.STRING(g_level_procedure,
8281 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_numeric_condition.BEGIN',
8282 'ZX_TDS_RULE_BASE_DETM_PVT: evaluate_numeric_condition(+)');
8283 IF (g_level_statement >= g_current_runtime_level ) THEN
8284 FND_LOG.STRING(g_level_statement,
8285 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_numeric_condition',
8286 'p_Operator_Code: ' || p_operator_code ||
8287 ', p_condition_value: ' || to_char(p_condition_value) ||
8288 ', p_trx_value: ' || to_char(p_trx_value));
8289 END IF;
8290 END IF;
8291
8292 IF p_Operator_Code = '=' THEN
8293 -- Bug#5009256- below line gives ORA-06502 : numeric or value error
8294 -- IF p_condition_value = 'NULL' THEN
8295
8296 IF p_condition_value IS NULL THEN
8297 RETURN (p_trx_value is NULL);
8298 ELSE
8299 IF p_trx_value is NULL THEN
8300 RETURN FALSE;
8301 ELSE
8302 RETURN (p_trx_value = p_condition_value);
8303 END IF;
8304 END IF;
8305
8306 ELSIF p_Operator_Code = '=CQ' THEN
8307 RETURN (p_trx_value = p_condition_value);
8308
8309 ELSIF p_Operator_Code = '>' THEN
8310 RETURN (p_trx_value > p_condition_value);
8311
8312 ELSIF p_Operator_Code = '<' THEN
8313 RETURN (p_trx_value < p_condition_value);
8314
8315 ELSIF p_Operator_Code = '<=' THEN
8316 RETURN (p_trx_value <= p_condition_value);
8317
8318 ELSIF p_Operator_Code = '>=' THEN
8319 RETURN (p_trx_value >= p_condition_value);
8320
8321 ELSIF (p_Operator_Code = '<>' OR
8322 p_Operator_Code = '<>CQ' ) THEN
8323 --Bug 8301114
8324 IF p_condition_value is NULL THEN
8325 RETURN (p_trx_value IS NOT NULL);
8326 ELSE
8327 IF p_trx_value is NULL THEN
8328 RETURN FALSE;
8329 ELSE
8330 RETURN (p_trx_value <> p_condition_value);
8331 END IF;
8332 END IF;
8333 -- Bug 9552043
8334 ELSIF p_operator_code = 'NULL' THEN
8335 IF p_trx_value IS NULL THEN
8336 RETURN TRUE;
8337 ELSE
8338 RETURN FALSE;
8339 END IF;
8340 ELSIF p_operator_code = 'NOT_NULL' THEN
8341 IF p_trx_value IS NULL THEN
8342 RETURN FALSE;
8343 ELSE
8344 RETURN TRUE;
8345 END IF;
8346 ELSE
8347 --
8348 -- invalid Operator_Code
8349 --
8350
8351 IF (g_level_procedure >= g_current_runtime_level ) THEN
8352 FND_LOG.STRING(g_level_procedure,
8353 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_numeric_condition',
8354 'Invalid Operator_Code for numeric data type');
8355 END IF;
8356
8357 RETURN FALSE;
8358 END IF;
8359
8360 IF (g_level_procedure >= g_current_runtime_level ) THEN
8361 FND_LOG.STRING(g_level_procedure,
8362 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_numeric_condition.END',
8363 'ZX_TDS_RULE_BASE_DETM_PVT: evaluate_numeric_condition(-)');
8364 END IF;
8365
8366 EXCEPTION
8367 WHEN OTHERS THEN
8368 IF (g_level_unexpected >= g_current_runtime_level ) THEN
8369 FND_LOG.STRING(g_level_unexpected,
8370 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_numeric_condition',
8371 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
8372 END IF;
8373
8374 END evaluate_numeric_condition;
8375 -----------------------------------------------------------------------
8376
8377 -- PRIVATE FUNCTION
8378 -- evaluate_date_condition
8379 --
8380 -- DESCRIPTION
8381 --
8382 -- The procedure is to evaluate condition value of date data type
8383 --
8384
8385 FUNCTION evaluate_date_condition(
8386 p_Operator_Code IN ZX_CONDITIONS.Operator_Code%TYPE,
8387 p_condition_value IN ZX_CONDITIONS.DATE_VALUE%TYPE,
8388 p_trx_value IN ZX_CONDITIONS.DATE_VALUE%TYPE)
8389 RETURN BOOLEAN IS
8390 l_condition_value ZX_CONDITIONS.DATE_VALUE%TYPE;
8391 l_trx_value ZX_CONDITIONS.DATE_VALUE%TYPE;
8392 BEGIN
8393
8394 IF (g_level_procedure >= g_current_runtime_level ) THEN
8395 FND_LOG.STRING(g_level_procedure,
8396 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_date_condition.BEGIN',
8397 'ZX_TDS_RULE_BASE_DETM_PVT: evaluate_date_condition(+)');
8398 IF (g_level_statement >= g_current_runtime_level ) THEN
8399 FND_LOG.STRING(g_level_statement,
8400 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_date_condition',
8401 'p_Operator_Code: ' || p_operator_code ||
8402 ', p_condition_value: ' || to_char(p_condition_value, 'DD-MON-YY') ||
8403 ', p_trx_value: ' || to_char(p_trx_value, 'DD-MON-YY'));
8404 END IF;
8405 END IF;
8406
8407 l_trx_value := TRUNC(p_trx_value);
8408 l_condition_value := TRUNC(p_condition_value);
8409
8410 IF p_Operator_Code = '=' THEN
8411 -- Bug#5009256- below line gives ORA-06502 numeric or value error
8412 -- IF l_condition_value = 'NULL' THEN
8413
8414 IF l_condition_value IS NULL THEN
8415 RETURN (l_trx_value is NULL);
8416 ELSE
8417 IF l_trx_value is NULL THEN
8418 RETURN FALSE;
8419 ELSE
8420 RETURN (l_trx_value = l_condition_value);
8421 END IF;
8422 END IF;
8423
8424 ELSIF p_Operator_Code = '=CQ' THEN
8425 RETURN (p_trx_value = p_condition_value);
8426
8427 ELSIF p_Operator_Code = '>' THEN
8428 RETURN (l_trx_value > l_condition_value);
8429
8430 ELSIF p_Operator_Code = '<' THEN
8431 RETURN (l_trx_value < l_condition_value);
8432
8433 ELSIF p_Operator_Code = '<=' THEN
8434 RETURN (l_trx_value <= l_condition_value);
8435
8436 ELSIF p_Operator_Code = '>=' THEN
8437 RETURN (l_trx_value >= l_condition_value);
8438
8439 ELSIF (p_Operator_Code = '<>' OR
8440 p_Operator_Code = '<>CQ' ) THEN
8441 --Bug 8301114
8442 IF l_condition_value is NULL THEN
8443 RETURN (l_trx_value IS NOT NULL);
8444 ELSE
8445 IF l_trx_value is NULL THEN
8446 RETURN FALSE;
8447 ELSE
8448 RETURN (l_trx_value <> l_condition_value);
8449 END IF;
8450 END IF;
8451 -- Bug 9552043
8452 ELSIF p_operator_code = 'NULL' THEN
8453 IF p_trx_value IS NULL THEN
8454 RETURN TRUE;
8455 ELSE
8456 RETURN FALSE;
8457 END IF;
8458 ELSIF p_operator_code = 'NOT_NULL' THEN
8459 IF p_trx_value IS NULL THEN
8460 RETURN FALSE;
8461 ELSE
8462 RETURN TRUE;
8463 END IF;
8464 ELSE
8465 --
8466 -- invalid Operator_Code
8467 --
8468 IF (g_level_procedure >= g_current_runtime_level ) THEN
8469 FND_LOG.STRING(g_level_procedure,
8470 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_date_condition',
8471 'Invalid Operator_Code for date data type');
8472 END IF;
8473
8474 RETURN FALSE;
8475 END IF;
8476
8477
8478 IF (g_level_procedure >= g_current_runtime_level ) THEN
8479 FND_LOG.STRING(g_level_procedure,
8480 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_date_condition.END',
8481 'ZX_TDS_RULE_BASE_DETM_PVT: evaluate_date_condition(-)');
8482 END IF;
8483
8484 EXCEPTION
8485 WHEN OTHERS THEN
8486
8487 IF (g_level_unexpected >= g_current_runtime_level ) THEN
8488 FND_LOG.STRING(g_level_unexpected,
8489 'ZX.PLSQL.ZX_TDS_RULE_BASE_DETM_PVT.evaluate_date_condition',
8490 sqlcode || ': ' || SUBSTR(SQLERRM, 1, 80));
8491 END IF;
8492
8493 END evaluate_date_condition;
8494
8495 -----------------------------------------------------------------------
8496 -- PRIVATE FUNCTION
8497 -- evaluate_if_first_party
8498 --
8499 -- DESCRIPTION
8500 --
8501 -- This function evaluates if the determining factor class qualifier (for
8502 -- registrations and party fiscal classifications) represents a first party
8503 -- or not for the input event class
8504 --
8505
8506 FUNCTION evaluate_if_first_party(
8507 p_det_fact_cq_code IN ZX_CONDITIONS.DETERMINING_FACTOR_CQ_CODE%TYPE)
8508 RETURN BOOLEAN IS
8509
8510 BEGIN
8511
8512 IF p_det_fact_cq_code IS NULL THEN
8513 Return(FALSE);
8514 END IF;
8515
8516 IF (SUBSTR(p_det_fact_cq_code, 1, 7) = 'BILL_TO' and
8517 zx_valid_init_params_pkg.source_rec.bill_to_party_type = 'LEGAL_ESTABLISHMENT')
8518 THEN
8519 Return(TRUE);
8520 END IF;
8521
8522 IF (SUBSTR(p_det_fact_cq_code, 1, 9) = 'BILL_FROM' and
8523 zx_valid_init_params_pkg.source_rec.bill_from_party_type = 'LEGAL_ESTABLISHMENT')
8524 THEN
8525 Return(TRUE);
8526 END IF;
8527
8528 IF (SUBSTR(p_det_fact_cq_code, 1, 7) = 'SHIP_TO' and
8529 zx_valid_init_params_pkg.source_rec.ship_to_party_type = 'LEGAL_ESTABLISHMENT')
8530 THEN
8531 Return(TRUE);
8532 END IF;
8533
8534 IF (SUBSTR(p_det_fact_cq_code, 1, 9) = 'SHIP_FROM' and
8535 zx_valid_init_params_pkg.source_rec.ship_from_party_type = 'LEGAL_ESTABLISHMENT')
8536 THEN
8537 Return(TRUE);
8538 END IF;
8539
8540 IF (SUBSTR(p_det_fact_cq_code, 1, 3) = 'POO' and
8541 zx_valid_init_params_pkg.source_rec.poo_party_type = 'LEGAL_ESTABLISHMENT')
8542 THEN
8543 Return(TRUE);
8544 END IF;
8545
8546 IF (SUBSTR(p_det_fact_cq_code, 1, 3) = 'POA' and
8547 zx_valid_init_params_pkg.source_rec.poa_party_type = 'LEGAL_ESTABLISHMENT')
8548 THEN
8549 Return(TRUE);
8550 END IF;
8551
8552 IF (SUBSTR(p_det_fact_cq_code, 1, 6) = 'PAYING' and
8553 zx_valid_init_params_pkg.source_rec.paying_party_type = 'LEGAL_ESTABLISHMENT')
8554 THEN
8555 Return(TRUE);
8556 END IF;
8557
8558 IF (SUBSTR(p_det_fact_cq_code, 1, 6) = 'OWN_HQ' and
8559 zx_valid_init_params_pkg.source_rec.own_hq_party_type = 'LEGAL_ESTABLISHMENT')
8560 THEN
8561 Return(TRUE);
8562 END IF;
8563
8564 IF (SUBSTR(p_det_fact_cq_code, 1, 7) = 'TRAD_HQ' and
8565 zx_valid_init_params_pkg.source_rec.trad_hq_party_type = 'LEGAL_ESTABLISHMENT')
8566 THEN
8567 Return(TRUE);
8568 END IF;
8569
8570 IF (SUBSTR(p_det_fact_cq_code, 1, 3) = 'POI' and
8571 zx_valid_init_params_pkg.source_rec.poi_party_type = 'LEGAL_ESTABLISHMENT')
8572 THEN
8573 Return(TRUE);
8574 END IF;
8575
8576 IF (SUBSTR(p_det_fact_cq_code, 1, 3) = 'POD' and
8577 zx_valid_init_params_pkg.source_rec.pod_party_type = 'LEGAL_ESTABLISHMENT')
8578 THEN
8579 Return(TRUE);
8580 END IF;
8581
8582 IF (SUBSTR(p_det_fact_cq_code, 1, 8) = 'TTL_TRNS' and
8583 zx_valid_init_params_pkg.source_rec.ttl_trns_party_type = 'LEGAL_ESTABLISHMENT')
8584 THEN
8585 Return(TRUE);
8586 END IF;
8587
8588 IF (SUBSTR(p_det_fact_cq_code, 1, 8) = 'MERCHANT' and
8589 zx_valid_init_params_pkg.source_rec.merchant_party_type = 'LEGAL_ESTABLISHMENT')
8590 THEN
8591 Return(TRUE);
8592 END IF;
8593
8594 Return(FALSE);
8595
8596 END evaluate_if_first_party;
8597
8598 END ZX_TDS_RULE_BASE_DETM_PVT;
8599