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