[Home] [Help]
PACKAGE BODY: APPS.HZ_MATCH_RULE_COMPILE
Source
1 PACKAGE BODY HZ_MATCH_RULE_COMPILE AS
2 /*$Header: ARHDQMCB.pls 120.97.12010000.3 2008/10/06 12:44:14 amstephe ship $ */
3
4 g_party_and_query VARCHAR2(4000);
5 g_party_or_query VARCHAR2(4000);
6 g_party_site_query VARCHAR2(4000);
7 g_contact_query VARCHAR2(4000);
8 g_cpt_query VARCHAR2(4000);
9 l_purpose VARCHAR2(30);
10
11 --Start of Bug No: 4162385dbms_output.put_line(' ');
12 FUNCTION get_entity_level_score(p_match_rule_id NUMBER,p_entity_name VARCHAR2)
13 RETURN NUMBER;
14 --End of Bug No: 4162385
15
16
17 /*******************Private Procedures forward declarations ********/
18 PROCEDURE gen_pkg_body (
19 p_pkg_name IN VARCHAR2,
20 p_rule_id IN NUMBER
21 );
22
23 -- VJN introduced procedure to generate body for bulk match rules
24 PROCEDURE gen_pkg_body_bulk (
25 p_pkg_name IN VARCHAR2,
26 p_rule_id IN NUMBER
27 );
28
29 PROCEDURE gen_call_api_dynamic_names;
30
31 FUNCTION has_acquisition_attribs ( p_match_rule_id IN NUMBER, p_entity_name IN VARCHAR2)
32 RETURN BOOLEAN
33 IS
34 temp BOOLEAN := FALSE ;
35 BEGIN
36 FOR attrs in (
37 SELECT primary_attribute_id
38 FROM HZ_MATCH_RULE_PRIMARY p, HZ_TRANS_ATTRIBUTES_VL a
39 where p.match_rule_id= p_match_rule_id
40 and p.attribute_id=a.attribute_id
41 and a.entity_name = p_entity_name
42 )
43 LOOP
44 temp := TRUE ;
45 END LOOP;
46 return temp ;
47 END has_acquisition_attribs ;
48
49 ---Start of Code Change for Match Rule Set
50 FUNCTION has_uncompiled_childern(p_rule_set_id NUMBER)
51 RETURN BOOLEAN;
52
53 PROCEDURE compile_all_rulesets (
54 p_cond_rule_id IN NUMBER
55 );
56 PROCEDURE pop_conditions(p_mrule_set_id IN NUMBER,
57 p_api_name IN VARCHAR2,
58 p_parameters IN VARCHAR2,
59 p_eval_level IN VARCHAR2
60 );
61 ---End of Code Change for Match Rule Set
62
63 PROCEDURE generate_map_proc (
64 p_entity IN VARCHAR2,
65 p_proc_name IN VARCHAR2,
66 p_rule_id IN NUMBER
67 );
68
69 PROCEDURE generate_map_proc_bulk (
70 p_entity IN VARCHAR2,
71 p_proc_name IN VARCHAR2,
72 p_rule_id IN NUMBER
73 );
74
75 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
76 -- OF THE GLOBAL CONDITION RECORD FOR REGULAR MATCH RULES
77
78 PROCEDURE generate_ent_cond_pop_rec_proc (
79 p_entity IN VARCHAR2,
80 p_rule_id IN NUMBER
81 );
82
83
84 PROCEDURE generate_party_map_proc (
85 p_proc_name IN VARCHAR2,
86 p_rule_id IN NUMBER
87 );
88
89 PROCEDURE generate_party_map_proc_bulk (
90 p_proc_name IN VARCHAR2,
91 p_rule_id IN NUMBER
92 );
93
94 PROCEDURE generate_check_proc (
95 p_rule_id NUMBER);
96
97 PROCEDURE gen_pkg_spec (
98 p_pkg_name IN VARCHAR2,
99 p_rule_id IN NUMBER
100 );
101
102 PROCEDURE gen_wrap_pkg_body(
103 p_rule_id IN NUMBER
104 );
105
106 PROCEDURE gen_exception_block;
107
108 -- Fix for Bug 4734661. Modified to add the p_called_from parameter.
109 PROCEDURE generate_acquire_proc (
110 p_rule_id NUMBER
111 ,p_called_from VARCHAR2 DEFAULT NULL);
112
113 PROCEDURE generate_check_staged (
114 p_rule_id IN NUMBER
115 );
116
117 PROCEDURE out(
118 message IN VARCHAR2,
119 newline IN BOOLEAN DEFAULT TRUE);
120
121 PROCEDURE log(
122 message IN VARCHAR2,
123 newline IN BOOLEAN DEFAULT TRUE);
124
125 PROCEDURE outandlog(
126 message IN VARCHAR2,
127 newline IN BOOLEAN DEFAULT TRUE);
128
129 FUNCTION logerror(SQLERRM VARCHAR2 DEFAULT NULL)
130 RETURN VARCHAR2;
131
132
133
134 /*** Private procedure for inserting lines into generated packages **/
135 PROCEDURE l(str VARCHAR2) IS
136 BEGIN
137 HZ_GEN_PLSQL.add_line(str);
138 END;
139
140 /*** Private procedure for inserting statement , procedure level debug lines into generated packages **/
141 PROCEDURE d(p_msg_level NUMBER,str VARCHAR2, val VARCHAR2 DEFAULT NULL, pad VARCHAR2 DEFAULT ' ') IS
142 l_msg_level VARCHAR2(30);
143 BEGIN
144 IF p_msg_level=FND_LOG.LEVEL_STATEMENT THEN
145 l(pad||'IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN');
146 l_msg_level :='fnd_log.level_statement';
147 ELSIF p_msg_level=FND_LOG.LEVEL_PROCEDURE THEN
148 l(pad||'IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN');
149 l_msg_level :='fnd_log.level_procedure';
150 ELSE
151 RETURN;
152 END IF;
153 IF val IS NULL THEN
154 -- REPURI. Bug 4996283. Adding tracking indentifiers for fnd log messages
155 -- Passing p_module_prefix as dqm and p_module as hz_match_rule_xxx to help debug fnd logs better
156
157 l(pad||' hz_utility_v2pub.debug(p_message=>'''||str||' '',p_module_prefix=>''dqm'',p_module=>''hz_match_rule_xxx'',p_prefix=>NULL,p_msg_level=>'||l_msg_level||');');
158 ELSE
159 l(pad||' hz_utility_v2pub.debug(p_message=>'''||str||' ''||'||val||',p_module_prefix=>''dqm'',p_module=>''hz_match_rule_xxx'',p_prefix=>NULL,p_msg_level=>'||l_msg_level||');');
160 END IF;
161 l(pad||'END IF;');
162 END;
163
164 /*** Private procedure for inserting statement , procedure level debug start lines into generated packages **/
165 PROCEDURE ds(p_msg_level NUMBER,pad VARCHAR2 DEFAULT ' ') IS
166 BEGIN
167 IF nvl(FND_PROFILE.VALUE('HZ_DQM_DEV_DEBUG'), 'N') = 'N'
168 THEN
169 IF p_msg_level=FND_LOG.LEVEL_STATEMENT THEN
170 l(pad||'IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN');
171 ELSIF p_msg_level=FND_LOG.LEVEL_PROCEDURE THEN
172 l(pad||'IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN');
173 ELSE
174 RETURN;
175 END IF;
176 END IF;
177 END;
178
179 /*** Private procedure for inserting statement , procedure level debug content lines into generated packages **/
180 PROCEDURE dc(p_msg_level NUMBER,str VARCHAR2, val VARCHAR2 DEFAULT NULL, pad VARCHAR2 DEFAULT ' ') IS
181 l_msg_level VARCHAR2(30);
182 BEGIN
183 IF nvl(FND_PROFILE.VALUE('HZ_DQM_DEV_DEBUG'), 'N') = 'N'
184 THEN
185 IF p_msg_level=FND_LOG.LEVEL_STATEMENT THEN
186 l_msg_level :='fnd_log.level_statement';
187 ELSIF p_msg_level=FND_LOG.LEVEL_PROCEDURE THEN
188 l_msg_level :='fnd_log.level_procedure';
189 ELSE
190 RETURN;
191 END IF;
192 IF val IS NULL THEN
193 -- REPURI. Bug 4996283. Adding tracking indentifiers for fnd log messages
194 -- Passing p_module_prefix as dqm and p_module as hz_match_rule_xxx to help debug fnd logs better
195
196 l(pad||' hz_utility_v2pub.debug(p_message=>'''||str||''',p_module_prefix=>''dqm'',p_module=>''hz_match_rule_xxx'',p_prefix=>NULL,p_msg_level=>'||l_msg_level||');');
197 ELSE
198 l(pad||' hz_utility_v2pub.debug(p_message=>'''||str||' ''||'||val||',p_module_prefix=>''dqm'',p_module=>''hz_match_rule_xxx'',p_prefix=>NULL,p_msg_level=>'||l_msg_level||');');
199 END IF;
200 ELSE
201 IF val IS NULL THEN
202 l('dbms_output.put_line(SubStr(''' || str || ''', 1, 255));');
203 ELSE
204 l('dbms_output.put_line(SubStr(''' || str || '''||''---''||' || val || ', 1, 255));');
205 END IF;
206
207 END IF;
208 END;
209
210 /*** Private procedure for inserting statement , procedure level debug end lines into generated packages **/
211 PROCEDURE de(pad VARCHAR2 DEFAULT ' ') IS
212 BEGIN
213 IF nvl(FND_PROFILE.VALUE('HZ_DQM_DEV_DEBUG'), 'N') = 'N'
214 THEN
215 l(pad||'END IF;');
216 END IF;
217 END;
218
219 /*** VJN Introduced Private procedures for inserting
220 upto four consecutive procedure level debug lines with
221 statement level header and footer into generated
222 packages
223 Note that str1 and val1 are not defaulted. We need atleast
224 one procedure level line.
225
226 This the string - value pair version
227 **/
228 PROCEDURE ldbg_sv(str1 VARCHAR2, val1 VARCHAR2,
229 str2 VARCHAR2 DEFAULT NULL, val2 VARCHAR2 DEFAULT NULL,
230 str3 VARCHAR2 DEFAULT NULL, val3 VARCHAR2 DEFAULT NULL,
231 str4 VARCHAR2 DEFAULT NULL, val4 VARCHAR2 DEFAULT NULL
232 ) IS
233 BEGIN
234
235 IF str1 IS NOT NULL
236 THEN
237 ds(fnd_log.level_statement, ' ');
238 dc(fnd_log.level_statement, str1, val1) ;
239 END IF;
240
241 IF str2 IS NOT NULL
242 THEN
243 dc(fnd_log.level_statement, str2, val2) ;
244 END IF;
245
246 IF str3 IS NOT NULL
247 THEN
248 dc(fnd_log.level_statement, str3, val3) ;
249 END IF;
250
251 IF str4 IS NOT NULL
252 THEN
253 dc(fnd_log.level_statement, str4, val4) ;
254 END IF;
255
256 IF str1 IS NOT NULL
257 THEN
258 de ;
259 END IF;
260
261 END;
262
263 /**
264 This the string only version
265 **/
266 PROCEDURE ldbg_s(str1 VARCHAR2,
267 str2 VARCHAR2 DEFAULT NULL,
268 str3 VARCHAR2 DEFAULT NULL,
269 str4 VARCHAR2 DEFAULT NULL
270 ) IS
271 BEGIN
272
273 IF str1 IS NOT NULL
274 THEN
275 ds(fnd_log.level_statement, ' ');
276 dc(fnd_log.level_statement, str1 ) ;
277 END IF;
278
279 IF str2 IS NOT NULL
280 THEN
281 dc(fnd_log.level_statement, str2 ) ;
282 END IF;
283
284 IF str3 IS NOT NULL
285 THEN
286 dc(fnd_log.level_statement, str3 ) ;
287 END IF;
288
289 IF str4 IS NOT NULL
290 THEN
291 dc(fnd_log.level_statement, str4) ;
292 END IF;
293
294 IF str1 IS NOT NULL
295 THEN
296 de ;
297 END IF;
298
299 END;
300
301 PROCEDURE ldbg_procedure
302 IS
303 BEGIN
304 IF nvl(FND_PROFILE.VALUE('HZ_DQM_DEV_DEBUG'), 'N') = 'Y'
305 THEN
306 l('');
307 l('PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)');
308 l('IS');
309 l(' remainder_str VARCHAR2(4000);');
310 l(' current_pos NUMBER ;');
311 l('BEGIN');
312 l(' remainder_str := input_str ;');
313 l(' current_pos := 1 ;');
314 l(' WHILE remainder_str IS NOT NULL');
315 l(' LOOP');
316 l(' dbms_output.put_line(substr(remainder_str, 1 , 255 ) );');
317 l(' current_pos := current_pos + 255 ;');
318 l(' remainder_str := substr(input_str,current_pos );');
319 l(' END LOOP ;');
320 l('END ;');
321 ELSE
322 l('');
323 l('PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)');
324 l('IS');
325 l(' remainder_str VARCHAR2(4000);');
326 l(' current_pos NUMBER ;');
327 l(' temp VARCHAR2(300) ;');
328 l('BEGIN');
329 l(' remainder_str := input_str ;');
330 l(' current_pos := 1 ;');
331 ds(fnd_log.level_statement, ' ');
332 l(' WHILE remainder_str IS NOT NULL');
333 l(' LOOP');
334 l(' temp := substr(remainder_str, 1 , 255 );');
335 dc(fnd_log.level_statement, ' ', 'temp' ) ;
336 l(' current_pos := current_pos + 255 ;');
337 l(' remainder_str := substr(input_str,current_pos );');
338 l(' END LOOP ;');
339 de ;
340 l('END ;');
341 END IF ;
342 END ;
343
344 FUNCTION num_secondary(
345 p_rule_id NUMBER,
346 p_entity VARCHAR2) RETURN NUMBER;
347
348
349 -- VJN Introduced Private procedure to generate primary attribute predicate for bulk match rules
350 PROCEDURE generate_bulk_predicate(
351 p_rule_id IN NUMBER,
352 p_dynamic_sql_flag IN VARCHAR2 DEFAULT 'N',
353 p_match_str IN VARCHAR2,
354 p_entity IN VARCHAR2)
355 IS
356 FIRST1 boolean;
357 FIRST boolean;
358 BEGIN
359 IF p_dynamic_sql_flag = 'Y'
360 THEN
361 l(' ''srch.batch_id = -1''||');
362 l(' ''AND''||');
363 l(' ''(''||' );
364 -- Generate the Primary Attribute section of the query for the passed in entity
365 FIRST1 := TRUE;
366 FOR attrs in (
367 SELECT primary_attribute_id
368 FROM HZ_MATCH_RULE_PRIMARY p, HZ_TRANS_ATTRIBUTES_VL a
369 where p.match_rule_id=p_rule_id
370 and p.attribute_id=a.attribute_id
371 and a.entity_name = p_entity
372 and nvl(p.filter_flag,'N') = 'N' )
373 LOOP
374 -- between attributes
375 IF FIRST1
376 THEN
377 FIRST1 := FALSE;
378 l('-------' || p_entity || ' LEVEL ACQUISITION ON NON-FILTER ATTRIBUTES USING B-TREE INDEXES ---------');
379 ELSE
380 -- spit out the 'AND' or 'OR' depending on the match_all_flag in the match_rule
381 l(''''||p_match_str||''''||'||');
382
383 END IF;
384
385 FIRST := TRUE;
386 FOR trans in ( SELECT staged_attribute_column
387 FROM hz_primary_trans pt, hz_trans_functions_vl f
388 where f.function_id = pt.function_id
389 and pt.primary_attribute_id = attrs.primary_attribute_id
390 )
391 LOOP
392 IF FIRST
393 THEN
394 l('-- do an or between all the transformations of an attribute -- ');
395 l('''(''||');
396 l('''(srch.'|| trans.staged_attribute_column || ' is not null and ' ||
397 'stage.'|| trans.staged_attribute_column || ' like srch.'||
398 trans.staged_attribute_column || ' || ''''%'''')' || '''||');
399
400 FIRST := FALSE;
401 ELSE
402 l('''or (srch.'|| trans.staged_attribute_column || ' is not null and ' ||
403 'stage.'|| trans.staged_attribute_column || ' like srch.'||
404 trans.staged_attribute_column || ' || ''''%'''')' || '''||');
405 END IF;
406
407 END LOOP;
408 l(''')''||');
409 END LOOP;
410 l(''')''||');
411
412 ELSE
413 l(' srch.batch_id = -1');
414 l(' AND');
415 l(' (');
416 -- Generate the Primary Attribute section of the query for the passed in entity
417 FIRST1 := TRUE;
418 FOR attrs in (
419 SELECT primary_attribute_id
420 FROM HZ_MATCH_RULE_PRIMARY p, HZ_TRANS_ATTRIBUTES_VL a
421 where p.match_rule_id=p_rule_id
422 and p.attribute_id=a.attribute_id
423 and a.entity_name = p_entity
424 and nvl(p.filter_flag,'N') = 'N' )
425 LOOP
426 -- between attributes
427 IF FIRST1
428 THEN
429 FIRST1 := FALSE;
430 l('-------' || 'PARTY LEVEL ACQUISITION ON NON-FILTER ATTRIBUTES USING B-TREE INDEXES ---------');
431 ELSE
432 -- spit out the 'AND' or 'OR' depending on the match_all_flag in the match_rule
433 l(p_match_str);
434
435 END IF;
436
437 FIRST := TRUE;
438 FOR trans in ( SELECT staged_attribute_column
439 FROM hz_primary_trans pt, hz_trans_functions_vl f
440 where f.function_id = pt.function_id
441 and pt.primary_attribute_id = attrs.primary_attribute_id
442 )
443 LOOP
444 IF FIRST
445 THEN
446 l('-- do an or between all the transformations of an attribute -- ');
447 l('(');
448 l('(srch.'|| trans.staged_attribute_column || ' is not null and ' ||
449 'stage.'|| trans.staged_attribute_column || ' like srch.'||
450 trans.staged_attribute_column || ' || ''%'')');
451
452 FIRST := FALSE;
453 ELSE
454 l('or (srch.'|| trans.staged_attribute_column || ' is not null and ' ||
455 'stage.'|| trans.staged_attribute_column || ' like srch.'||
456 trans.staged_attribute_column || ' || ''%'')'); --Bug No:3863630
457 END IF;
458
459 END LOOP;
460 l(')');
461 END LOOP;
462 l(')');
463 END IF;
464
465 END ;
466
467
468
469
470
471 /**
472 * Public procedure to compile a match rule.
473 * This procedure generates a compiled PLSQL package
474 * spec and body for the given Match Rule (p_rule_id).
475 *
476 * The name of the generated match rule is:
477 * HZ_MATCH_RULE_<p_rule_id>
478 *
479 **/
480 PROCEDURE compile_match_rule (
481 p_rule_id IN NUMBER,
482 p_skip_wrap IN VARCHAR2,
483 x_return_status OUT NOCOPY VARCHAR2,
484 x_msg_count OUT NOCOPY NUMBER,
485 x_msg_data OUT NOCOPY VARCHAR2
486 ) IS
487
488 CURSOR check_null_set IS
489 SELECT DISTINCT a.entity_name
490 FROM hz_match_rule_secondary s, hz_trans_attributes_vl a
491 WHERE a.attribute_id = s.attribute_id
492 AND s.match_rule_id = p_rule_id
493 MINUS
494 SELECT DISTINCT a.entity_name
495 FROM hz_match_rule_primary p, hz_trans_attributes_vl a
496 WHERE a.attribute_id = p.attribute_id
497 AND p.match_rule_id = p_rule_id;
498
499 CURSOR check_inactive IS
500 SELECT 1
501 FROM hz_match_rule_primary p, hz_primary_trans pt, hz_trans_functions_vl f
502 WHERE p.match_rule_id = p_rule_id
503 AND pt.PRIMARY_ATTRIBUTE_ID = p.PRIMARY_ATTRIBUTE_ID
504 AND f.function_id = pt.function_id
505 AND f.ACTIVE_FLAG = 'N'
506 UNION
507 SELECT 1
508 FROM hz_match_rule_secondary s, hz_secondary_trans pt, hz_trans_functions_vl f
509 WHERE s.match_rule_id = p_rule_id
510 AND pt.SECONDARY_ATTRIBUTE_ID = s.SECONDARY_ATTRIBUTE_ID
511 AND f.function_id = pt.function_id
512 AND f.ACTIVE_FLAG = 'N';
513
514 -- Local variable declarations
515 l_tmp VARCHAR2(255);
516
517 l_rule_id NUMBER;
518 l_batch_flag VARCHAR2(1);
519 l_purpose VARCHAR2(1);
520 l_package_name VARCHAR2(2000);
521 l_match_rule_type varchar2(30); --Code Change for Match Rule Set
522
523 BEGIN
524
525 --Initialize API return status to success.
526 x_return_status := FND_API.G_RET_STS_SUCCESS;
527
528 -- Initialize the compiled package name
529 l_rule_id := TO_NUMBER(p_rule_id);
530 l_package_name := 'HZ_MATCH_RULE_'||p_rule_id;
531
532 -- Initialize message stack
533 FND_MSG_PUB.initialize;
534
535 BEGIN
536 -- Verify that the match rule exists
537 SELECT 1 INTO l_batch_flag
538 FROM HZ_MATCH_RULES_VL
539 WHERE match_rule_id = l_rule_id;
540
541 EXCEPTION
542 WHEN NO_DATA_FOUND THEN
543 FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_NO_RULE');
544 FND_MSG_PUB.ADD;
545 RAISE FND_API.G_EXC_ERROR;
546 END;
547
548
549 SELECT RULE_PURPOSE,NVL(MATCH_RULE_TYPE,'SINGLE') into l_purpose,l_match_rule_type FROM HZ_MATCH_RULES_VL --Code Change for Match Rule Set
550 WHERE match_rule_id = l_rule_id;
551
552 --Start of Code Change for Match Rule Set
553 IF (l_match_rule_type = 'SET') THEN
554 IF (has_uncompiled_childern(l_rule_id)) THEN
555 FND_MESSAGE.SET_NAME('AR', 'HZ_RULE_SET_UNCOMP_RULE_EXISTS');
556 FND_MSG_PUB.ADD;
557 RAISE FND_API.G_EXC_ERROR;
558 END IF;
559 --Populate the match rule set primary and secondary attributes
560 HZ_POP_MRULE_SET_ATTR_V2PUB.pop_mrule_set_attributes(l_rule_id);
561 END IF;
562 --End Of Code Change for Match Rule Set
563
564
565 -- VJN : In order to make sure that Bulk Duplicate Identification Match rules
566 -- have both the following versions:
567 -- 1. HZ_MATCH_RULE_XXX that incorporate the "find APIS"
568 -- that use the conventional B-tree indexes as opposed to Intermedia indexes.
569 -- 2. HZ_IMP_MATCH_RULE_XXX that incorporate the APIs which do the
570 -- bulk duplicate identification, using B-tree indexes.
571 -- I have changed the logic of this match rule generating package to
572 -- generate HZ_MATCH_RULE_XXX for all match rules ( no matter which rule_purpose it is)
573 -- and generate HZ_IMP_MATCH_RULE_XXX in addition, when the rule_purpose is "Q".
574
575 /* abordia. Added to check that acquisition has at least one attribute for each
576 entity defined in scoring. Added update statements since compile_match_rule
577 is public api and commented unnecessary updates in compile_all_rules and
578 compile_all_rules_nolog. */
579 OPEN check_null_set;
580 FETCH check_null_set INTO l_tmp;
581 IF check_null_set%FOUND THEN
582 CLOSE check_null_set;
583 BEGIN
584 EXECUTE IMMEDIATE 'DROP PACKAGE HZ_MATCH_RULE_'||l_rule_id;
585 EXCEPTION
586 WHEN OTHERS THEN
587 NULL;
588 END;
589 fnd_message.set_name('AR','HZ_SCORING_NO_ACQUISITION');
590 FND_MSG_PUB.ADD;
591 RAISE FND_API.G_EXC_ERROR;
592 END IF;
593 CLOSE check_null_set;
594
595 /* Check if match rule has any inactive transformations */
596 OPEN check_inactive;
597 FETCH check_inactive INTO l_tmp;
598 IF check_inactive%FOUND THEN
599 CLOSE check_inactive;
600 BEGIN
601 EXECUTE IMMEDIATE 'DROP PACKAGE HZ_MATCH_RULE_'||l_rule_id;
602 EXCEPTION
603 WHEN OTHERS THEN
604 NULL;
605 END;
606
607 fnd_message.set_name('AR','HZ_MR_HAS_INACTIVE_TX');
608 FND_MSG_PUB.ADD;
609 RAISE FND_API.G_EXC_ERROR;
610 END IF;
611 CLOSE check_inactive;
612
613 -- Generate and compile match rule package spec
614 HZ_GEN_PLSQL.new(l_package_name, 'PACKAGE');
615 gen_pkg_spec(l_package_name, l_rule_id);
616 HZ_GEN_PLSQL.compile_code;
617
618 -- Generate the package body
619 HZ_GEN_PLSQL.new(l_package_name, 'PACKAGE BODY');
620
621 -- VJN: generate the body for HZ_MATCH_RULE_XXX depending on the rule purpose:
622 -- If rule purpose is Q, we would generate Bulk Match rules that use B-tree indexes
623 -- Else we would generate Match rules that use the regular intermedia text indexes
624
625 g_context := 'SEARCH';
626 IF l_purpose = 'Q'
627 THEN
628 gen_pkg_body_bulk(l_package_name, l_rule_id);
629 ELSE
630 IF(l_purpose ='D')THEN
631 g_context := 'SDIB';
632 END IF;
633 gen_pkg_body(l_package_name, l_rule_id);
634 END IF;
635
636 -- Compile the package body
637 HZ_GEN_PLSQL.compile_code;
638
639
640 IF p_skip_wrap IS NULL OR p_skip_wrap='N' THEN
641 -- Generate and compile API package body (Package HZ_PARTY_SEARCH)
642 HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
643 gen_wrap_pkg_body(p_rule_id);
644 HZ_GEN_PLSQL.compile_code;
645 END IF;
646
647 EXECUTE IMMEDIATE 'ALTER PACKAGE ' || l_package_name || ' COMPILE SPECIFICATION'; --bug 5622345
648
649 --Standard call to get message count and if count is 1, get message info.
650 FND_MSG_PUB.Count_And_Get(
651 p_encoded => FND_API.G_FALSE,
652 p_count => x_msg_count,
653 p_data => x_msg_data);
654
655 UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'C' WHERE MATCH_RULE_ID = l_rule_id;
656 COMMIT;
657
658 /*
659 IF l_match_rule_type <> 'SET' THEN
660 compile_all_rulesets(l_rule_id);
661 END IF;
662 */
663
664 -- VJN: For match rules of type "Q" viz., Bulk Match Rules, generate
665 -- and compile HZ_IMP_MATCH_RULE_XXX packages
666
667 IF l_purpose = 'Q'
668 THEN
669 HZ_DQM_DUP_ID_PKG.compile_match_rule(l_rule_id,x_return_status,x_msg_count,x_msg_data);
670 END IF;
671
672 EXCEPTION
673 WHEN FND_API.G_EXC_ERROR THEN
674 FND_MSG_PUB.Count_And_Get(
675 p_encoded => FND_API.G_FALSE,
676 p_count => x_msg_count,
677 p_data => x_msg_data);
678 x_return_status := FND_API.G_RET_STS_ERROR;
679 UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_rule_id;
680 COMMIT;
681 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
682 FND_MSG_PUB.Count_And_Get(
683 p_encoded => FND_API.G_FALSE,
684 p_count => x_msg_count,
685 p_data => x_msg_data);
686 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
687 UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_rule_id;
688 COMMIT;
689 WHEN OTHERS THEN
690
691 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
692 FND_MESSAGE.SET_TOKEN('PROC','compile_match_rule');
693 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
694 FND_MSG_PUB.ADD;
695
696 FND_MSG_PUB.Count_And_Get(
697 p_encoded => FND_API.G_FALSE,
698 p_count => x_msg_count,
699 p_data => x_msg_data);
700 x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
701 UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_rule_id;
702 COMMIT;
703 END;
704
705 PROCEDURE compile_match_rule (
706 p_rule_id IN NUMBER,
707 x_return_status OUT NOCOPY VARCHAR2,
708 x_msg_count OUT NOCOPY NUMBER,
709 x_msg_data OUT NOCOPY VARCHAR2
710 ) IS
711 BEGIN
712 compile_match_rule(p_rule_id,'N',x_return_status,x_msg_count,x_msg_data);
713 END;
714
715 /**
716 * Private procedure to generate the body of the API package
717 * HZ_PARTY_SEARCH
718 *
719 * This procedure generates a call to the appropriate match rule
720 * procedure for each match rule
721 *
722 **/
723 PROCEDURE gen_wrap_pkg_body (
724 p_rule_id IN NUMBER
725 ) IS
726
727 FIRST BOOLEAN;
728 l_sql VARCHAR2(4000);
729
730 FUNCTION check_proc (p_rule_id NUMBER) RETURN BOOLEAN IS
731 c NUMBER;
732 BEGIN
733 c := dbms_sql.open_cursor;
734 dbms_sql.parse(c,replace(l_sql,'RULEID',to_char(p_rule_id)),2);
735 dbms_sql.close_cursor(c);
736 RETURN TRUE;
737 EXCEPTION
738 WHEN OTHERS THEN
739 RETURN FALSE;
740 END;
741
742 BEGIN
743 -- UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'T' WHERE RULE_PURPOSE='Q' AND COMPILATION_FLAG='C';
744 -- Generation of code
745 l('CREATE or REPLACE PACKAGE BODY HZ_PARTY_SEARCH AS');
746 l('/*=======================================================================+');
747 l(' | Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|');
748 l(' | All rights reserved. |');
749 l(' +=======================================================================+');
750 l(' | NAME');
751 l(' | HZ_PARTY_SEARCH');
752 l(' |');
753 l(' | DESCRIPTION');
754 l(' |');
755 l(' | Compiled by the HZ Match Rule Compiler');
756 l(' | PUBLIC PROCEDURES');
757 l(' | find_parties');
758 l(' | get_matching_party_sites');
759 l(' | get_matching_contacts');
760 l(' | get_matching_contact_points');
761 l(' | get_party_score_details');
762 l(' | ');
763 l(' | HISTORY');
764 l(' | '||TO_CHAR(SYSDATE,'DD-MON-YYYY') || ' Generated by HZ Match Rule Compiler');
765 l(' |');
766 l(' *=======================================================================*/');
767
768 l(' g_debug_count NUMBER := 0;');
769 --l(' g_debug BOOLEAN := FALSE;');
770 l(' g_last_rule NUMBER := -1;');
771 l(' g_last_rule_valid BOOLEAN := FALSE;');
772
773 --l(' PROCEDURE enable_debug;');
774 --l(' PROCEDURE disable_debug;');
775
776 -- Generate find_parties code. Backward compatible signature.
777 l(' PROCEDURE find_parties (');
778 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
779 l(' x_rule_id IN OUT NUMBER,');
780 l(' p_party_search_rec IN party_search_rec_type,');
781 l(' p_party_site_list IN party_site_list,');
782 l(' p_contact_list IN contact_list,');
783 l(' p_contact_point_list IN contact_point_list,');
784 l(' p_restrict_sql IN VARCHAR2,');
785 l(' p_search_merged IN VARCHAR2,');
786 l(' x_search_ctx_id IN OUT NUMBER,');
787 l(' x_num_matches IN OUT NUMBER,');
788 l(' x_return_status OUT VARCHAR2,');
789 l(' x_msg_count OUT NUMBER,');
790 l(' x_msg_data OUT VARCHAR2');
791 l(') IS');
792 l(' BEGIN');
793 d(fnd_log.level_procedure,'find_parties-1(+)');
794 d(fnd_log.level_statement,'Rule ID','x_rule_id');
795
796 l(' find_parties(p_init_msg_list,x_rule_id,p_party_search_rec,');
797 l(' p_party_site_list,p_contact_list,p_contact_point_list,');
798 l(' p_restrict_sql,NULL,p_search_merged,x_search_ctx_id,');
799 l(' x_num_matches,x_return_status,x_msg_count,x_msg_data);');
800 d(fnd_log.level_procedure,'find_parties-1(-)');
801 l(' END;');
802 l('');
803 -- Generate find_parties code. Public signature.
804 l(' PROCEDURE find_parties (');
805 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
806 l(' p_rule_id IN NUMBER,');
807 l(' p_party_search_rec IN party_search_rec_type,');
808 l(' p_party_site_list IN party_site_list,');
809 l(' p_contact_list IN contact_list,');
810 l(' p_contact_point_list IN contact_point_list,');
811 l(' p_restrict_sql IN VARCHAR2,');
812 l(' p_match_type IN VARCHAR2,');
813 l(' p_search_merged IN VARCHAR2,');
814 l(' x_search_ctx_id OUT NUMBER,');
815 l(' x_num_matches OUT NUMBER,');
816 l(' x_return_status OUT VARCHAR2,');
817 l(' x_msg_count OUT NUMBER,');
818 l(' x_msg_data OUT VARCHAR2');
819 l(') IS');
820 l(' CURSOR c_match_rule IS ');
821 l(' SELECT COMPILATION_FLAG ');
822 l(' FROM HZ_MATCH_RULES_VL ');
823 l(' WHERE MATCH_RULE_ID = p_rule_id;');
824 l(' l_cmp_flag VARCHAR2(1);');
825 l(' BEGIN');
826 l('');
827 d(fnd_log.level_procedure,'find_parties(+)');
828 d(fnd_log.level_statement,'Rule ID','p_rule_id');
829 l(' -- Initialize return status and message stack');
830 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
831 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
832 l(' FND_MSG_PUB.initialize;');
833 l(' END IF;');
834 l('');
835 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
836 l(' -- Find the match rule');
837 l(' null;');
838 l('');
839 l(' -- No MATCH RULE FOUND');
840 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
841 l(' FND_MSG_PUB.ADD;');
842 l(' RAISE FND_API.G_EXC_ERROR;');
843 l(' END IF;');
844
845 l(' OPEN c_match_rule;');
846 l(' FETCH c_match_rule INTO l_cmp_flag;');
847 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
848 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
849 l(' FND_MSG_PUB.ADD;');
850 l(' RAISE FND_API.G_EXC_ERROR;');
851 l(' END IF;');
852
853 FIRST := TRUE;
854 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
855 FROM HZ_MATCH_RULES_VL
856 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
857 AND (nvl(COMPILATION_FLAG,'N') = 'C'
858 OR MATCH_RULE_ID = p_rule_id)) LOOP
859 l(' -- Code for Match rule '||RULE.RULE_NAME);
860 IF FIRST THEN
861 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
862 FIRST := FALSE;
863 ELSE
864 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
865 END IF;
866 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
867 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
868 l(' FND_MSG_PUB.ADD;');
869 l(' RAISE FND_API.G_EXC_ERROR;');
870 l(' END IF;');
871
872 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_parties(');
873 l(' p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,');
874 l(' p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,''N'',x_search_ctx_id,x_num_matches);');
875 END LOOP;
876 l(' END IF;');
877 -- Quality Score
878 l(' -- User quality score ');
879 l(' IF (fnd_profile.value(''HZ_QUALITY_WEIGHTING_USER_HOOK'') = ''Y'') THEN ');
880 l(' HZ_DQM_SEARCH_UTIL.get_quality_score ( x_search_ctx_id, p_rule_id); ');
881 l(' END IF; ');
882
883 d(fnd_log.level_procedure,'find_parties(-)');
884 gen_exception_block;
885 l(' END;');
886 l('');
887
888
889 -- Generate find_persons code. Public signature.
890 l(' PROCEDURE find_persons (');
891 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
892 l(' p_rule_id IN NUMBER,');
893 l(' p_party_search_rec IN party_search_rec_type,');
894 l(' p_party_site_list IN party_site_list,');
895 l(' p_contact_list IN contact_list,');
896 l(' p_contact_point_list IN contact_point_list,');
897 l(' p_restrict_sql IN VARCHAR2,');
898 l(' p_match_type IN VARCHAR2,');
899 l(' p_search_merged IN VARCHAR2, ');
900 l(' x_search_ctx_id OUT NUMBER,');
901 l(' x_num_matches OUT NUMBER,');
902 l(' x_return_status OUT VARCHAR2,');
903 l(' x_msg_count OUT NUMBER,');
904 l(' x_msg_data OUT VARCHAR2');
905 l(') IS');
906 l(' CURSOR c_match_rule IS ');
907 l(' SELECT COMPILATION_FLAG ');
908 l(' FROM HZ_MATCH_RULES_VL ');
909 l(' WHERE MATCH_RULE_ID = p_rule_id;');
910 l(' l_cmp_flag VARCHAR2(1);');
911 l(' BEGIN');
912 l('');
913 d(fnd_log.level_procedure,'find_persons(+)');
914 d(fnd_log.level_statement,'Rule ID','p_rule_id');
915 l(' -- Initialize return status and message stack');
916 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
917 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
918 l(' FND_MSG_PUB.initialize;');
919 l(' END IF;');
920 l('');
921 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
922 l(' -- Find the match rule');
923 l(' null;');
924 l('');
925 l(' -- No MATCH RULE FOUND');
926 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
927 l(' FND_MSG_PUB.ADD;');
928 l(' RAISE FND_API.G_EXC_ERROR;');
929 l(' END IF;');
930
931 l(' OPEN c_match_rule;');
932 l(' FETCH c_match_rule INTO l_cmp_flag;');
933 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
934 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
935 l(' FND_MSG_PUB.ADD;');
936 l(' RAISE FND_API.G_EXC_ERROR;');
937 l(' END IF;');
938 ---Bug:5261867, additional parameter null in place of p_search_merged
939 l_sql := 'declare x number; y number; begin HZ_MATCH_RULE_RULEID.find_persons(-1,'||
940 'HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,'||
941 'HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,'||
942 'null,null,null,null,x,y); end;';
943
944 FIRST := TRUE;
945 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
946 FROM HZ_MATCH_RULES_VL
947 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
948 AND (nvl(COMPILATION_FLAG,'N') = 'C'
949 OR MATCH_RULE_ID = p_rule_id)) LOOP
950 l(' -- Code for Match rule '||RULE.RULE_NAME);
951 IF FIRST THEN
952 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
953 FIRST := FALSE;
954 ELSE
955 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
956 END IF;
957 IF check_proc(RULE.MATCH_RULE_ID) THEN
958 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
959 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
960 l(' FND_MSG_PUB.ADD;');
961 l(' RAISE FND_API.G_EXC_ERROR;');
962 l(' END IF;');
963 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_persons(');
964 l(' p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,');
965 l(' p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,''N'',x_search_ctx_id,x_num_matches);');
966 ELSE
967 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
968 l(' FND_MSG_PUB.ADD;');
969 l(' RAISE FND_API.G_EXC_ERROR;');
970 END IF;
971
972 END LOOP;
973 l(' END IF;');
974 d(fnd_log.level_procedure,'find_persons(-)');
975 gen_exception_block;
976 l(' END;');
977 l('');
978
979
980 -- Generate find_persons code. Public signature.
981 l(' PROCEDURE find_persons (');
982 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
983 l(' p_rule_id IN NUMBER,');
984 l(' p_party_search_rec IN party_search_rec_type,');
985 l(' p_party_site_list IN party_site_list,');
986 l(' p_contact_list IN contact_list,');
987 l(' p_contact_point_list IN contact_point_list,');
988 l(' p_restrict_sql IN VARCHAR2,');
989 l(' p_match_type IN VARCHAR2,');
990 l(' x_search_ctx_id OUT NUMBER,');
991 l(' x_num_matches OUT NUMBER,');
992 l(' x_return_status OUT VARCHAR2,');
993 l(' x_msg_count OUT NUMBER,');
994 l(' x_msg_data OUT VARCHAR2');
995 l(') IS');
996 l(' BEGIN');
997 l(' find_persons (');
998 l(' p_init_msg_list,p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, ');
999 l(' p_restrict_sql ,p_match_type,NULL,x_search_ctx_id,x_num_matches,x_return_status,');
1000 l(' x_msg_count,x_msg_data);');
1001 l(' END;');
1002 l('');
1003
1004 -- Generate find_party_details code. Public signature.
1005 l(' PROCEDURE find_party_details (');
1006 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1007 l(' p_rule_id IN NUMBER,');
1008 l(' p_party_search_rec IN party_search_rec_type,');
1009 l(' p_party_site_list IN party_site_list,');
1010 l(' p_contact_list IN contact_list,');
1011 l(' p_contact_point_list IN contact_point_list,');
1012 l(' p_restrict_sql IN VARCHAR2,');
1013 l(' p_match_type IN VARCHAR2,');
1014 l(' p_search_merged IN VARCHAR2,');
1015 l(' x_search_ctx_id OUT NUMBER,');
1016 l(' x_num_matches OUT NUMBER,');
1017 l(' x_return_status OUT VARCHAR2,');
1018 l(' x_msg_count OUT NUMBER,');
1019 l(' x_msg_data OUT VARCHAR2');
1020 l(') IS');
1021 l(' CURSOR c_match_rule IS ');
1022 l(' SELECT COMPILATION_FLAG ');
1023 l(' FROM HZ_MATCH_RULES_VL ');
1024 l(' WHERE MATCH_RULE_ID = p_rule_id;');
1025 l(' l_cmp_flag VARCHAR2(1);');
1026 l(' BEGIN');
1027
1028 ds(fnd_log.level_procedure,' ');
1029 dc(fnd_log.level_procedure,'find_party_details(+)');
1030 de(' ');
1031 ds(fnd_log.level_statement,' ');
1032 dc(fnd_log.level_statement,'Rule ID','p_rule_id');
1033 de(' ');
1034 l('');
1035 l(' -- Initialize return status and message stack');
1036 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
1037 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
1038 l(' FND_MSG_PUB.initialize;');
1039 l(' END IF;');
1040 l('');
1041 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1042 l(' -- Find the match rule');
1043 l(' null;');
1044 l('');
1045 l(' -- No MATCH RULE FOUND');
1046 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1047 l(' FND_MSG_PUB.ADD;');
1048 l(' RAISE FND_API.G_EXC_ERROR;');
1049 l(' END IF;');
1050
1051 l(' OPEN c_match_rule;');
1052 l(' FETCH c_match_rule INTO l_cmp_flag;');
1053 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1054 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1055 l(' FND_MSG_PUB.ADD;');
1056 l(' RAISE FND_API.G_EXC_ERROR;');
1057 l(' END IF;');
1058
1059 FIRST := TRUE;
1060 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1061 FROM HZ_MATCH_RULES_VL
1062 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1063 AND (nvl(COMPILATION_FLAG,'N') = 'C'
1064 OR MATCH_RULE_ID = p_rule_id)) LOOP
1065 l(' -- Code for Match rule '||RULE.RULE_NAME);
1066 IF FIRST THEN
1067 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1068 FIRST := FALSE;
1069 ELSE
1070 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1071 END IF;
1072 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1073 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1074 l(' FND_MSG_PUB.ADD;');
1075 l(' RAISE FND_API.G_EXC_ERROR;');
1076 l(' END IF;');
1077
1078 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_party_details(');
1079 l(' p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,');
1080 l(' p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,x_search_ctx_id,x_num_matches);');
1081 END LOOP;
1082 l(' END IF;');
1083 d(fnd_log.level_procedure,'find_party_details(-)');
1084 gen_exception_block;
1085 l(' END;');
1086 l('');
1087 l(' PROCEDURE find_duplicate_parties (');
1088 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1089 l(' p_rule_id IN NUMBER,');
1090 l(' p_party_id IN NUMBER,');
1091 l(' p_restrict_sql IN VARCHAR2,');
1092 l(' p_match_type IN VARCHAR2,');
1093 l(' p_dup_batch_id IN NUMBER,');
1094 l(' p_search_merged IN VARCHAR2,');
1095 l(' x_dup_set_id OUT NUMBER,');
1096 l(' x_search_ctx_id OUT NUMBER,');
1097 l(' x_num_matches OUT NUMBER,');
1098 l(' x_return_status OUT VARCHAR2,');
1099 l(' x_msg_count OUT NUMBER,');
1100 l(' x_msg_data OUT VARCHAR2');
1101 l(') IS');
1102 l(' CURSOR c_match_rule IS ');
1103 l(' SELECT COMPILATION_FLAG ');
1104 l(' FROM HZ_MATCH_RULES_VL ');
1105 l(' WHERE MATCH_RULE_ID = p_rule_id;');
1106 l(' l_cmp_flag VARCHAR2(1);');
1107 l(' BEGIN');
1108
1109
1110 d(fnd_log.level_procedure,'find_duplicate_parties(+)');
1111 d(fnd_log.level_statement,'Rule ID','p_rule_id');
1112
1113 l('');
1114 l(' -- Initialize return status and message stack');
1115 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
1116 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
1117 l(' FND_MSG_PUB.initialize;');
1118 l(' END IF;');
1119 l('');
1120 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1121 l(' -- Find the match rule');
1122 l(' null;');
1123 l('');
1124 l(' -- No MATCH RULE FOUND');
1125 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1126 l(' FND_MSG_PUB.ADD;');
1127 l(' RAISE FND_API.G_EXC_ERROR;');
1128 l(' END IF;');
1129
1130 l(' IF g_last_rule<>p_rule_id OR NOT g_last_rule_valid THEN');
1131 l(' OPEN c_match_rule;');
1132 l(' FETCH c_match_rule INTO l_cmp_flag;');
1133 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1134 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1135 l(' FND_MSG_PUB.ADD;');
1136 l(' RAISE FND_API.G_EXC_ERROR;');
1137 l(' END IF;');
1138 l(' g_last_rule := p_rule_id;');
1139 l(' g_last_rule_valid := TRUE;');
1140 l(' END IF;');
1141
1142 FIRST := TRUE;
1143 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1144 FROM HZ_MATCH_RULES_VL
1145 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1146 AND (nvl(COMPILATION_FLAG,'N') = 'C'
1147 OR MATCH_RULE_ID = p_rule_id)) LOOP
1148 l(' -- Code for Match rule '||RULE.RULE_NAME);
1149 IF FIRST THEN
1150 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1151 FIRST := FALSE;
1152 ELSE
1153 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1154 END IF;
1155 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1156 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1157 l(' FND_MSG_PUB.ADD;');
1158 l(' RAISE FND_API.G_EXC_ERROR;');
1159 l(' END IF;');
1160
1161 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_duplicate_parties(');
1162 l(' p_rule_id,p_party_id,');
1163 l(' p_restrict_sql,p_match_type,p_dup_batch_id,p_search_merged,x_dup_set_id, x_search_ctx_id,x_num_matches);');
1164 END LOOP;
1165 l(' END IF;');
1166 d(fnd_log.level_procedure,'find_duplicate_parties(-)');
1167
1168 gen_exception_block;
1169 l(' END;');
1170 l('');
1171
1172 l('');
1173 l(' PROCEDURE find_duplicate_party_sites (');
1174 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1175 l(' p_rule_id IN NUMBER,');
1176 l(' p_party_site_id IN NUMBER,');
1177 l(' p_party_id IN NUMBER,');
1178 l(' p_restrict_sql IN VARCHAR2,');
1179 l(' p_match_type IN VARCHAR2,');
1180 l(' x_search_ctx_id OUT NUMBER,');
1181 l(' x_num_matches OUT NUMBER,');
1182 l(' x_return_status OUT VARCHAR2,');
1183 l(' x_msg_count OUT NUMBER,');
1184 l(' x_msg_data OUT VARCHAR2');
1185 l(') IS');
1186 l(' CURSOR c_match_rule IS ');
1187 l(' SELECT COMPILATION_FLAG ');
1188 l(' FROM HZ_MATCH_RULES_VL ');
1189 l(' WHERE MATCH_RULE_ID = p_rule_id;');
1190 l(' l_cmp_flag VARCHAR2(1);');
1191 l(' BEGIN');
1192
1193
1194 d(fnd_log.level_procedure,'find_duplicate_party_sites(+)');
1195 d(fnd_log.level_statement,'Rule ID','p_rule_id');
1196
1197 l('');
1198 l(' -- Initialize return status and message stack');
1199 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
1200 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
1201 l(' FND_MSG_PUB.initialize;');
1202 l(' END IF;');
1203 l('');
1204 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1205 l(' -- Find the match rule');
1206 l(' null;');
1207 l('');
1208 l(' -- No MATCH RULE FOUND');
1209 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1210 l(' FND_MSG_PUB.ADD;');
1211 l(' RAISE FND_API.G_EXC_ERROR;');
1212 l(' END IF;');
1213
1214 l(' OPEN c_match_rule;');
1215 l(' FETCH c_match_rule INTO l_cmp_flag;');
1216 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1217 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1218 l(' FND_MSG_PUB.ADD;');
1219 l(' RAISE FND_API.G_EXC_ERROR;');
1220 l(' END IF;');
1221
1222 FIRST := TRUE;
1223 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1224 FROM HZ_MATCH_RULES_VL
1225 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1226 AND (nvl(COMPILATION_FLAG,'N') = 'C'
1227 OR MATCH_RULE_ID = p_rule_id)) LOOP
1228 l(' -- Code for Match rule '||RULE.RULE_NAME);
1229 IF FIRST THEN
1230 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1231 FIRST := FALSE;
1232 ELSE
1233 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1234 END IF;
1235 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1236 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1237 l(' FND_MSG_PUB.ADD;');
1238 l(' RAISE FND_API.G_EXC_ERROR;');
1239 l(' END IF;');
1240
1241 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_duplicate_party_sites(');
1242 l(' p_rule_id,p_party_site_id,p_party_id,');
1243 l(' p_restrict_sql,p_match_type,x_search_ctx_id,x_num_matches);');
1244 END LOOP;
1245 l(' END IF;');
1246 d(fnd_log.level_procedure,'find_duplicate_party_sites(-)');
1247
1248 gen_exception_block;
1249 l(' END;');
1250
1251 l('');
1252 l(' PROCEDURE find_duplicate_contacts (');
1253 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1254 l(' p_rule_id IN NUMBER,');
1255 l(' p_org_contact_id IN NUMBER,');
1256 l(' p_party_id IN NUMBER,');
1257 l(' p_restrict_sql IN VARCHAR2,');
1258 l(' p_match_type IN VARCHAR2,');
1259 l(' x_search_ctx_id OUT NUMBER,');
1260 l(' x_num_matches OUT NUMBER,');
1261 l(' x_return_status OUT VARCHAR2,');
1262 l(' x_msg_count OUT NUMBER,');
1263 l(' x_msg_data OUT VARCHAR2');
1264 l(') IS');
1265 l(' CURSOR c_match_rule IS ');
1266 l(' SELECT COMPILATION_FLAG ');
1267 l(' FROM HZ_MATCH_RULES_VL ');
1268 l(' WHERE MATCH_RULE_ID = p_rule_id;');
1269 l(' l_cmp_flag VARCHAR2(1);');
1270 l(' BEGIN');
1271
1272
1273 d(fnd_log.level_procedure,'find_duplicate_contacts(+)');
1274 d(fnd_log.level_statement,'Rule ID','p_rule_id');
1275
1276 l('');
1277 l(' -- Initialize return status and message stack');
1278 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
1279 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
1280 l(' FND_MSG_PUB.initialize;');
1281 l(' END IF;');
1282 l('');
1283 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1284 l(' -- Find the match rule');
1285 l(' null;');
1286 l('');
1287 l(' -- No MATCH RULE FOUND');
1288 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1289 l(' FND_MSG_PUB.ADD;');
1290 l(' RAISE FND_API.G_EXC_ERROR;');
1291 l(' END IF;');
1292
1293 l(' OPEN c_match_rule;');
1294 l(' FETCH c_match_rule INTO l_cmp_flag;');
1295 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1296 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1297 l(' FND_MSG_PUB.ADD;');
1298 l(' RAISE FND_API.G_EXC_ERROR;');
1299 l(' END IF;');
1300
1301 FIRST := TRUE;
1302 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1303 FROM HZ_MATCH_RULES_VL
1304 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1305 AND (nvl(COMPILATION_FLAG,'N') = 'C'
1306 OR MATCH_RULE_ID = p_rule_id)) LOOP
1307 l(' -- Code for Match rule '||RULE.RULE_NAME);
1308 IF FIRST THEN
1309 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1310 FIRST := FALSE;
1311 ELSE
1312 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1313 END IF;
1314 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1315 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1316 l(' FND_MSG_PUB.ADD;');
1317 l(' RAISE FND_API.G_EXC_ERROR;');
1318 l(' END IF;');
1319
1320 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_duplicate_contacts(');
1321 l(' p_rule_id,p_org_contact_id,p_party_id,');
1322 l(' p_restrict_sql,p_match_type,x_search_ctx_id,x_num_matches);');
1323 END LOOP;
1324 l(' END IF;');
1325 d(fnd_log.level_procedure,'find_duplicate_contacts(-)');
1326
1327 gen_exception_block;
1328 l(' END;');
1329
1330 l('');
1331 l(' PROCEDURE find_duplicate_contact_points (');
1332 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1333 l(' p_rule_id IN NUMBER,');
1334 l(' p_contact_point_id IN NUMBER,');
1335 l(' p_party_id IN NUMBER,');
1336 l(' p_restrict_sql IN VARCHAR2,');
1337 l(' p_match_type IN VARCHAR2,');
1338 l(' x_search_ctx_id OUT NUMBER,');
1339 l(' x_num_matches OUT NUMBER,');
1340 l(' x_return_status OUT VARCHAR2,');
1341 l(' x_msg_count OUT NUMBER,');
1342 l(' x_msg_data OUT VARCHAR2');
1343 l(') IS');
1344 l(' CURSOR c_match_rule IS ');
1345 l(' SELECT COMPILATION_FLAG ');
1346 l(' FROM HZ_MATCH_RULES_VL ');
1347 l(' WHERE MATCH_RULE_ID = p_rule_id;');
1348 l(' l_cmp_flag VARCHAR2(1);');
1349 l(' BEGIN');
1350
1351
1352 d(fnd_log.level_procedure,'find_duplicate_contact_points(+)');
1353 d(fnd_log.level_statement,'Rule ID','p_rule_id');
1354
1355 l('');
1356 l(' -- Initialize return status and message stack');
1357 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
1358 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
1359 l(' FND_MSG_PUB.initialize;');
1360 l(' END IF;');
1361 l('');
1362 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1363 l(' -- Find the match rule');
1364 l(' null;');
1365 l('');
1366 l(' -- No MATCH RULE FOUND');
1367 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1368 l(' FND_MSG_PUB.ADD;');
1369 l(' RAISE FND_API.G_EXC_ERROR;');
1370 l(' END IF;');
1371
1372 l(' OPEN c_match_rule;');
1373 l(' FETCH c_match_rule INTO l_cmp_flag;');
1374 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1375 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1376 l(' FND_MSG_PUB.ADD;');
1377 l(' RAISE FND_API.G_EXC_ERROR;');
1378 l(' END IF;');
1379
1380 FIRST := TRUE;
1381 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1382 FROM HZ_MATCH_RULES_VL
1383 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1384 AND (nvl(COMPILATION_FLAG,'N') = 'C'
1385 OR MATCH_RULE_ID = p_rule_id)) LOOP
1386 l(' -- Code for Match rule '||RULE.RULE_NAME);
1387 IF FIRST THEN
1388 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1389 FIRST := FALSE;
1390 ELSE
1391 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1392 END IF;
1393 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1394 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1395 l(' FND_MSG_PUB.ADD;');
1396 l(' RAISE FND_API.G_EXC_ERROR;');
1397 l(' END IF;');
1398
1399 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_duplicate_contact_points(');
1400 l(' p_rule_id,p_contact_point_id,p_party_id,');
1401 l(' p_restrict_sql,p_match_type,x_search_ctx_id,x_num_matches);');
1402 END LOOP;
1403 l(' END IF;');
1404 d(fnd_log.level_procedure,'find_duplicate_contact_points(-)');
1405
1406 gen_exception_block;
1407 l(' END;');
1408 l('');
1409 l('');
1410 l(' PROCEDURE find_parties_dynamic (');
1411 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1412 l(' p_rule_id IN NUMBER,');
1413 l(' p_attrib_id1 IN NUMBER,');
1414 l(' p_attrib_id2 IN NUMBER,');
1415 l(' p_attrib_id3 IN NUMBER,');
1416 l(' p_attrib_id4 IN NUMBER,');
1417 l(' p_attrib_id5 IN NUMBER,');
1418 l(' p_attrib_id6 IN NUMBER,');
1419 l(' p_attrib_id7 IN NUMBER,');
1420 l(' p_attrib_id8 IN NUMBER,');
1421 l(' p_attrib_id9 IN NUMBER,');
1422 l(' p_attrib_id10 IN NUMBER,');
1423 l(' p_attrib_id11 IN NUMBER,');
1424 l(' p_attrib_id12 IN NUMBER,');
1425 l(' p_attrib_id13 IN NUMBER,');
1426 l(' p_attrib_id14 IN NUMBER,');
1427 l(' p_attrib_id15 IN NUMBER,');
1428 l(' p_attrib_id16 IN NUMBER,');
1429 l(' p_attrib_id17 IN NUMBER,');
1430 l(' p_attrib_id18 IN NUMBER,');
1431 l(' p_attrib_id19 IN NUMBER,');
1432 l(' p_attrib_id20 IN NUMBER,');
1433 l(' p_attrib_val1 IN VARCHAR2,');
1434 l(' p_attrib_val2 IN VARCHAR2,');
1435 l(' p_attrib_val3 IN VARCHAR2,');
1436 l(' p_attrib_val4 IN VARCHAR2,');
1437 l(' p_attrib_val5 IN VARCHAR2,');
1438 l(' p_attrib_val6 IN VARCHAR2,');
1439 l(' p_attrib_val7 IN VARCHAR2,');
1440 l(' p_attrib_val8 IN VARCHAR2,');
1441 l(' p_attrib_val9 IN VARCHAR2,');
1442 l(' p_attrib_val10 IN VARCHAR2,');
1443 l(' p_attrib_val11 IN VARCHAR2,');
1444 l(' p_attrib_val12 IN VARCHAR2,');
1445 l(' p_attrib_val13 IN VARCHAR2,');
1446 l(' p_attrib_val14 IN VARCHAR2,');
1447 l(' p_attrib_val15 IN VARCHAR2,');
1448 l(' p_attrib_val16 IN VARCHAR2,');
1449 l(' p_attrib_val17 IN VARCHAR2,');
1450 l(' p_attrib_val18 IN VARCHAR2,');
1451 l(' p_attrib_val19 IN VARCHAR2,');
1452 l(' p_attrib_val20 IN VARCHAR2,');
1453 l(' p_restrict_sql IN VARCHAR2,');
1454 l(' p_match_type IN VARCHAR2,');
1455 l(' p_search_merged IN VARCHAR2,');
1456 l(' x_search_ctx_id OUT NUMBER,');
1457 l(' x_num_matches OUT NUMBER,');
1458 l(' x_return_status OUT VARCHAR2,');
1459 l(' x_msg_count OUT NUMBER,');
1460 l(' x_msg_data OUT VARCHAR2');
1461 l(') IS');
1462 l(' CURSOR c_match_rule IS ');
1463 l(' SELECT COMPILATION_FLAG ');
1464 l(' FROM HZ_MATCH_RULES_VL ');
1465 l(' WHERE MATCH_RULE_ID = p_rule_id;');
1466 l(' l_cmp_flag VARCHAR2(1);');
1467 l(' BEGIN');
1468
1469
1470 d(fnd_log.level_procedure,'find_parties_dynamic(+)');
1471 d(fnd_log.level_statement,'Rule ID','p_rule_id');
1472
1473 l('');
1474 l(' -- Initialize return status and message stack');
1475 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
1476 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
1477 l(' FND_MSG_PUB.initialize;');
1478 l(' END IF;');
1479 l('');
1480 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1481 l(' -- Find the match rule');
1482 l(' null;');
1483 l('');
1484 l(' -- No MATCH RULE FOUND');
1485 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1486 l(' FND_MSG_PUB.ADD;');
1487 l(' RAISE FND_API.G_EXC_ERROR;');
1488 l(' END IF;');
1489
1490 l(' OPEN c_match_rule;');
1491 l(' FETCH c_match_rule INTO l_cmp_flag;');
1492 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1493 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1494 l(' FND_MSG_PUB.ADD;');
1495 l(' RAISE FND_API.G_EXC_ERROR;');
1496 l(' END IF;');
1497
1498 FIRST := TRUE;
1499 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1500 FROM HZ_MATCH_RULES_VL
1501 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1502 AND (nvl(COMPILATION_FLAG,'N') = 'C'
1503 OR MATCH_RULE_ID = p_rule_id)) LOOP
1504 l(' -- Code for Match rule '||RULE.RULE_NAME);
1505 IF FIRST THEN
1506 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1507 FIRST := FALSE;
1508 ELSE
1509 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1510 END IF;
1511 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1512 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1513 l(' FND_MSG_PUB.ADD;');
1514 l(' RAISE FND_API.G_EXC_ERROR;');
1515 l(' END IF;');
1516
1517 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_parties_dynamic(');
1518 l(' p_rule_id,');
1519 l(' p_attrib_id1,p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
1520 l(' p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
1521 l(' p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
1522 l(' p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
1523 l(' p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
1524 l(' p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
1525 l(' p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
1526 l(' p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
1527 l(' p_restrict_sql,p_match_type,p_search_merged,x_search_ctx_id,x_num_matches);');
1528 END LOOP;
1529 l(' END IF;');
1530 d(fnd_log.level_procedure,'find_parties_dynamic(-)');
1531
1532 gen_exception_block;
1533 l(' END;');
1534 l('');
1535 l(' PROCEDURE call_api_dynamic (');
1536 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1537 l(' p_rule_id IN NUMBER,');
1538 l(' p_attrib_id1 IN NUMBER,');
1539 l(' p_attrib_id2 IN NUMBER,');
1540 l(' p_attrib_id3 IN NUMBER,');
1541 l(' p_attrib_id4 IN NUMBER,');
1542 l(' p_attrib_id5 IN NUMBER,');
1543 l(' p_attrib_id6 IN NUMBER,');
1544 l(' p_attrib_id7 IN NUMBER,');
1545 l(' p_attrib_id8 IN NUMBER,');
1546 l(' p_attrib_id9 IN NUMBER,');
1547 l(' p_attrib_id10 IN NUMBER,');
1548 l(' p_attrib_id11 IN NUMBER,');
1549 l(' p_attrib_id12 IN NUMBER,');
1550 l(' p_attrib_id13 IN NUMBER,');
1551 l(' p_attrib_id14 IN NUMBER,');
1552 l(' p_attrib_id15 IN NUMBER,');
1553 l(' p_attrib_id16 IN NUMBER,');
1554 l(' p_attrib_id17 IN NUMBER,');
1555 l(' p_attrib_id18 IN NUMBER,');
1556 l(' p_attrib_id19 IN NUMBER,');
1557 l(' p_attrib_id20 IN NUMBER,');
1558 l(' p_attrib_val1 IN VARCHAR2,');
1559 l(' p_attrib_val2 IN VARCHAR2,');
1560 l(' p_attrib_val3 IN VARCHAR2,');
1561 l(' p_attrib_val4 IN VARCHAR2,');
1562 l(' p_attrib_val5 IN VARCHAR2,');
1563 l(' p_attrib_val6 IN VARCHAR2,');
1564 l(' p_attrib_val7 IN VARCHAR2,');
1565 l(' p_attrib_val8 IN VARCHAR2,');
1566 l(' p_attrib_val9 IN VARCHAR2,');
1567 l(' p_attrib_val10 IN VARCHAR2,');
1568 l(' p_attrib_val11 IN VARCHAR2,');
1569 l(' p_attrib_val12 IN VARCHAR2,');
1570 l(' p_attrib_val13 IN VARCHAR2,');
1571 l(' p_attrib_val14 IN VARCHAR2,');
1572 l(' p_attrib_val15 IN VARCHAR2,');
1573 l(' p_attrib_val16 IN VARCHAR2,');
1574 l(' p_attrib_val17 IN VARCHAR2,');
1575 l(' p_attrib_val18 IN VARCHAR2,');
1576 l(' p_attrib_val19 IN VARCHAR2,');
1577 l(' p_attrib_val20 IN VARCHAR2,');
1578 l(' p_restrict_sql IN VARCHAR2,');
1579 l(' p_api_name IN VARCHAR2,');
1580 l(' p_match_type IN VARCHAR2,');
1581 l(' p_party_id IN NUMBER,');
1582 l(' p_search_merged IN VARCHAR2,');
1583 l(' x_search_ctx_id OUT NUMBER,');
1584 l(' x_num_matches OUT NUMBER,');
1585 l(' x_return_status OUT VARCHAR2,');
1586 l(' x_msg_count OUT NUMBER,');
1587 l(' x_msg_data OUT VARCHAR2');
1588 l(') IS');
1589 l(' CURSOR c_match_rule IS ');
1590 l(' SELECT COMPILATION_FLAG ');
1591 l(' FROM HZ_MATCH_RULES_VL ');
1592 l(' WHERE MATCH_RULE_ID = p_rule_id;');
1593 l(' l_cmp_flag VARCHAR2(1);');
1594 l(' BEGIN');
1595
1596
1597 d(fnd_log.level_procedure,'find_parties_dynamic(+)');
1598 d(fnd_log.level_statement,'Rule ID','p_rule_id');
1599
1600 l('');
1601 l(' -- Initialize return status and message stack');
1602 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
1603 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
1604 l(' FND_MSG_PUB.initialize;');
1605 l(' END IF;');
1606 l('');
1607 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1608 l(' -- Find the match rule');
1609 l(' null;');
1610 l('');
1611 l(' -- No MATCH RULE FOUND');
1612 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1613 l(' FND_MSG_PUB.ADD;');
1614 l(' RAISE FND_API.G_EXC_ERROR;');
1615 l(' END IF;');
1616
1617 l(' OPEN c_match_rule;');
1618 l(' FETCH c_match_rule INTO l_cmp_flag;');
1619 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1620 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1621 l(' FND_MSG_PUB.ADD;');
1622 l(' RAISE FND_API.G_EXC_ERROR;');
1623 l(' END IF;');
1624
1625 l_sql := 'declare x number; y number; begin HZ_MATCH_RULE_RULEID.call_api_dynamic(null,null,'||
1626 'null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'||
1627 'null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'||
1628 'null,null,null,null,null,null,null,null,null,null,null,null,x,y); end;';
1629
1630
1631 FIRST := TRUE;
1632 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1633 FROM HZ_MATCH_RULES_VL
1634 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1635 AND (nvl(COMPILATION_FLAG,'N') = 'C'
1636 OR MATCH_RULE_ID = p_rule_id)) LOOP
1637 l(' -- Code for Match rule '||RULE.RULE_NAME);
1638 IF FIRST THEN
1639 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1640 FIRST := FALSE;
1641 ELSE
1642 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1643 END IF;
1644 IF check_proc(RULE.MATCH_RULE_ID) THEN
1645
1646 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1647 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1648 l(' FND_MSG_PUB.ADD;');
1649 l(' RAISE FND_API.G_EXC_ERROR;');
1650 l(' END IF;');
1651
1652 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.call_api_dynamic(');
1653 l(' p_rule_id,');
1654 l(' p_attrib_id1,p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
1655 l(' p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
1656 l(' p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
1657 l(' p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
1658 l(' p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
1659 l(' p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
1660 l(' p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
1661 l(' p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
1662 l(' p_restrict_sql,p_api_name,p_match_type,p_party_id,p_search_merged,x_search_ctx_id,x_num_matches);');
1663 ELSE
1664 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1665 l(' FND_MSG_PUB.ADD;');
1666 l(' RAISE FND_API.G_EXC_ERROR;');
1667 END IF;
1668
1669 END LOOP;
1670 l(' END IF;');
1671 d(fnd_log.level_procedure,'call_api_dynamic(-)');
1672
1673 gen_exception_block;
1674 l(' END; ');
1675
1676 gen_call_api_dynamic_names;
1677
1678 -- Generate get_matching_party_sites code
1679 l('PROCEDURE get_matching_party_sites (');
1680 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1681 l(' p_rule_id IN NUMBER,');
1682 l(' p_party_id IN NUMBER,');
1683 l(' p_party_site_list IN PARTY_SITE_LIST,');
1684 l(' p_contact_point_list IN CONTACT_POINT_LIST,');
1685 l(' x_search_ctx_id OUT NUMBER,');
1686 l(' x_return_status OUT VARCHAR2,');
1687 l(' x_msg_count OUT NUMBER,');
1688 l(' x_msg_data OUT VARCHAR2');
1689 l(') IS');
1690 l(' l_num_matches NUMBER;');
1691 l(' BEGIN');
1692
1693
1694 d(fnd_log.level_procedure,'get_matching_party_sites-1(+)');
1695 d(fnd_log.level_statement,'Rule ID','p_rule_id');
1696
1697 l(' get_matching_party_sites(p_init_msg_list,p_rule_id,p_party_id,');
1698 l(' p_party_site_list,p_contact_point_list,');
1699 l(' NULL,NULL,x_search_ctx_id,');
1700 l(' l_num_matches,x_return_status,x_msg_count,x_msg_data);');
1701 d(fnd_log.level_procedure,'get_matching_party_sites-1(-)');
1702
1703 l(' END;');
1704
1705 l('PROCEDURE get_matching_party_sites (');
1706 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1707 l(' p_rule_id IN NUMBER,');
1708 l(' p_party_id IN NUMBER,');
1709 l(' p_party_site_list IN PARTY_SITE_LIST,');
1710 l(' p_contact_point_list IN CONTACT_POINT_LIST,');
1711 l(' p_restrict_sql IN VARCHAR2,');
1712 l(' p_match_type IN VARCHAR2,');
1713 l(' x_search_ctx_id OUT NUMBER,');
1714 l(' x_num_matches OUT NUMBER,');
1715 l(' x_return_status OUT VARCHAR2,');
1716 l(' x_msg_count OUT NUMBER,');
1717 l(' x_msg_data OUT VARCHAR2');
1718 l(') IS');
1719 l(' CURSOR c_match_rule IS ');
1720 l(' SELECT COMPILATION_FLAG ');
1721 l(' FROM HZ_MATCH_RULES_VL ');
1722 l(' WHERE MATCH_RULE_ID = p_rule_id;');
1723 l(' l_cmp_flag VARCHAR2(1);');
1724 l(' BEGIN');
1725
1726
1727 d(fnd_log.level_procedure,'get_matching_party_sites(+)');
1728 d(fnd_log.level_statement,'Rule ID','p_rule_id');
1729
1730
1731 l('');
1732 l(' -- Initialize return status and message stack');
1733 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
1734 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
1735 l(' FND_MSG_PUB.initialize;');
1736 l(' END IF;');
1737 l('');
1738 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1739 l(' -- No MATCH RULE FOUND');
1740 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1741 l(' FND_MSG_PUB.ADD;');
1742 l(' RAISE FND_API.G_EXC_ERROR;');
1743 l(' END IF;');
1744
1745 l(' OPEN c_match_rule;');
1746 l(' FETCH c_match_rule INTO l_cmp_flag;');
1747 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1748 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1749 l(' FND_MSG_PUB.ADD;');
1750 l(' RAISE FND_API.G_EXC_ERROR;');
1751 l(' END IF;');
1752
1753 FIRST := TRUE;
1754 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1755 FROM HZ_MATCH_RULES_VL
1756 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1757 AND (nvl(COMPILATION_FLAG,'N') = 'C'
1758 OR MATCH_RULE_ID = p_rule_id)) LOOP
1759 l(' -- Code for Match rule '||RULE.RULE_NAME);
1760 IF FIRST THEN
1761 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1762 FIRST := FALSE;
1763 ELSE
1764 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1765 END IF;
1766 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1767 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1768 l(' FND_MSG_PUB.ADD;');
1769 l(' RAISE FND_API.G_EXC_ERROR;');
1770 l(' END IF;');
1771 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_matching_party_sites(');
1772 l(' p_rule_id, p_party_id,p_party_site_list, p_contact_point_list,');
1773 l(' p_restrict_sql, p_match_type,null,x_search_ctx_id,x_num_matches);');
1774 END LOOP;
1775 l(' END IF;');
1776 d(fnd_log.level_procedure,'get_matching_party_sites(-)');
1777
1778 gen_exception_block;
1779 l(' END;');
1780 l('');
1781 -- Generate get_matching_contacts code
1782 l('PROCEDURE get_matching_contacts (');
1783 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1784 l(' p_rule_id IN NUMBER,');
1785 l(' p_party_id IN NUMBER,');
1786 l(' p_contact_list IN CONTACT_LIST,');
1787 l(' p_contact_point_list IN CONTACT_POINT_LIST,');
1788 l(' x_search_ctx_id OUT NUMBER,');
1789 l(' x_return_status OUT VARCHAR2,');
1790 l(' x_msg_count OUT NUMBER,');
1791 l(' x_msg_data OUT VARCHAR2');
1792 l(') IS');
1793 l(' l_num_matches NUMBER;');
1794 l(' BEGIN');
1795
1796
1797 d(fnd_log.level_procedure,'get_matching_contacts-1(+)');
1798 d(fnd_log.level_statement,'Rule ID','p_rule_id');
1799
1800 l(' get_matching_contacts(p_init_msg_list,p_rule_id,p_party_id,');
1801 l(' p_contact_list,p_contact_point_list,');
1802 l(' NULL,NULL,x_search_ctx_id,');
1803 l(' l_num_matches,x_return_status,x_msg_count,x_msg_data);');
1804 d(fnd_log.level_procedure,'get_matching_contacts-1(-)');
1805
1806 l(' END;');
1807
1808 l('PROCEDURE get_matching_contacts (');
1809 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1810 l(' p_rule_id IN NUMBER,');
1811 l(' p_party_id IN NUMBER,');
1812 l(' p_contact_list IN CONTACT_LIST,');
1813 l(' p_contact_point_list IN CONTACT_POINT_LIST,');
1814 l(' p_restrict_sql IN VARCHAR2,');
1815 l(' p_match_type IN VARCHAR2,');
1816 l(' x_search_ctx_id OUT NUMBER,');
1817 l(' x_num_matches OUT NUMBER,');
1818 l(' x_return_status OUT VARCHAR2,');
1819 l(' x_msg_count OUT NUMBER,');
1820 l(' x_msg_data OUT VARCHAR2');
1821 l(') IS');
1822 l(' CURSOR c_match_rule IS ');
1823 l(' SELECT COMPILATION_FLAG ');
1824 l(' FROM HZ_MATCH_RULES_VL ');
1825 l(' WHERE MATCH_RULE_ID = p_rule_id;');
1826 l(' l_cmp_flag VARCHAR2(1);');
1827 l(' BEGIN');
1828
1829
1830 d(fnd_log.level_procedure,'get_matching_contacts(+)');
1831 d(fnd_log.level_statement,'Rule ID','p_rule_id');
1832
1833
1834 l('');
1835 l(' -- Initialize return status and message stack');
1836 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
1837 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
1838 l(' FND_MSG_PUB.initialize;');
1839 l(' END IF;');
1840 l('');
1841 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1842 l(' -- No MATCH RULE FOUND');
1843 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1844 l(' FND_MSG_PUB.ADD;');
1845 l(' RAISE FND_API.G_EXC_ERROR;');
1846 l(' END IF;');
1847
1848 l(' OPEN c_match_rule;');
1849 l(' FETCH c_match_rule INTO l_cmp_flag;');
1850 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1851 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1852 l(' FND_MSG_PUB.ADD;');
1853 l(' RAISE FND_API.G_EXC_ERROR;');
1854 l(' END IF;');
1855
1856 FIRST := TRUE;
1857 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1858 FROM HZ_MATCH_RULES_VL
1859 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1860 AND (nvl(COMPILATION_FLAG,'N') = 'C'
1861 OR MATCH_RULE_ID = p_rule_id)) LOOP
1862 l(' -- Code for Match rule '||RULE.RULE_NAME);
1863 IF FIRST THEN
1864 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1865 FIRST := FALSE;
1866 ELSE
1867 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1868 END IF;
1869 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1870 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1871 l(' FND_MSG_PUB.ADD;');
1872 l(' RAISE FND_API.G_EXC_ERROR;');
1873 l(' END IF;');
1874 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_matching_contacts(');
1875 l(' p_rule_id, p_party_id,p_contact_list, p_contact_point_list,');
1876 l(' p_restrict_sql, p_match_type,null,x_search_ctx_id,x_num_matches);');
1877 END LOOP;
1878 l(' END IF;');
1879 gen_exception_block;
1880 d(fnd_log.level_procedure,'get_matching_contacts(-)');
1881
1882 l(' END;');
1883 l('');
1884 -- Generate get_matching_contact_points code
1885 l('PROCEDURE get_matching_contact_points (');
1886 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1887 l(' p_rule_id IN NUMBER,');
1888 l(' p_party_id IN NUMBER,');
1889 l(' p_contact_point_list IN CONTACT_POINT_LIST,');
1890 l(' x_search_ctx_id OUT NUMBER,');
1891 l(' x_return_status OUT VARCHAR2,');
1892 l(' x_msg_count OUT NUMBER,');
1893 l(' x_msg_data OUT VARCHAR2');
1894 l(') IS');
1895 l(' l_num_matches NUMBER;');
1896 l(' BEGIN');
1897
1898
1899 d(fnd_log.level_procedure,'get_matching_contact_points-1(+)');
1900 d(fnd_log.level_statement,'Rule ID','p_rule_id');
1901
1902 l(' get_matching_contact_points(p_init_msg_list,p_rule_id,p_party_id,');
1903 l(' p_contact_point_list,');
1904 l(' NULL,NULL,x_search_ctx_id,');
1905 l(' l_num_matches,x_return_status,x_msg_count,x_msg_data);');
1906 d(fnd_log.level_procedure,'get_matching_contact_points-1(-)');
1907
1908 l(' END;');
1909 l('PROCEDURE get_matching_contact_points (');
1910 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1911 l(' p_rule_id IN NUMBER,');
1912 l(' p_party_id IN NUMBER,');
1913 l(' p_contact_point_list IN CONTACT_POINT_LIST,');
1914 l(' p_restrict_sql IN VARCHAR2,');
1915 l(' p_match_type IN VARCHAR2,');
1916 l(' x_search_ctx_id OUT NUMBER,');
1917 l(' x_num_matches OUT NUMBER,');
1918 l(' x_return_status OUT VARCHAR2,');
1919 l(' x_msg_count OUT NUMBER,');
1920 l(' x_msg_data OUT VARCHAR2');
1921 l(') IS');
1922 l(' CURSOR c_match_rule IS ');
1923 l(' SELECT COMPILATION_FLAG ');
1924 l(' FROM HZ_MATCH_RULES_VL ');
1925 l(' WHERE MATCH_RULE_ID = p_rule_id;');
1926 l(' l_cmp_flag VARCHAR2(1);');
1927 l(' BEGIN');
1928
1929
1930 d(fnd_log.level_procedure,'get_matching_contact_points(+)');
1931 d(fnd_log.level_statement,'Rule ID','p_rule_id');
1932
1933 l('');
1934 l(' -- Initialize return status and message stack');
1935 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
1936 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
1937 l(' FND_MSG_PUB.initialize;');
1938 l(' END IF;');
1939 l('');
1940 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1941 l(' -- No MATCH RULE FOUND');
1942 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1943 l(' FND_MSG_PUB.ADD;');
1944 l(' RAISE FND_API.G_EXC_ERROR;');
1945 l(' END IF;');
1946
1947 l(' OPEN c_match_rule;');
1948 l(' FETCH c_match_rule INTO l_cmp_flag;');
1949 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1950 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1951 l(' FND_MSG_PUB.ADD;');
1952 l(' RAISE FND_API.G_EXC_ERROR;');
1953 l(' END IF;');
1954
1955 FIRST := TRUE;
1956 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1957 FROM HZ_MATCH_RULES_VL
1958 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1959 AND (nvl(COMPILATION_FLAG,'N') = 'C'
1960 OR MATCH_RULE_ID = p_rule_id)) LOOP
1961 l(' -- Code for Match rule '||RULE.RULE_NAME);
1962 IF FIRST THEN
1963 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1964 FIRST := FALSE;
1965 ELSE
1966 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1967 END IF;
1968 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1969 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1970 l(' FND_MSG_PUB.ADD;');
1971 l(' RAISE FND_API.G_EXC_ERROR;');
1972 l(' END IF;');
1973
1974 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_matching_contact_points(');
1975 l(' p_rule_id, p_party_id, p_contact_point_list,');
1976 l(' p_restrict_sql, p_match_type,null,x_search_ctx_id,x_num_matches);');
1977 END LOOP;
1978 l(' END IF;');
1979 d(fnd_log.level_procedure,'get_matching_contact_points(-)');
1980
1981 gen_exception_block;
1982 l(' END;');
1983 l('');
1984 -- Generate get_party_score_details code
1985 l('PROCEDURE get_party_score_details (');
1986 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
1987 l(' p_rule_id IN NUMBER,');
1988 l(' p_party_id IN NUMBER,');
1989 l(' p_search_ctx_id IN NUMBER,');
1990 l(' p_party_search_rec IN party_search_rec_type,');
1991 l(' p_party_site_list IN party_site_list,');
1992 l(' p_contact_list IN contact_list,');
1993 l(' p_contact_point_list IN contact_point_list,');
1994 l(' x_return_status OUT VARCHAR2,');
1995 l(' x_msg_count OUT NUMBER,');
1996 l(' x_msg_data OUT VARCHAR2');
1997 l(') IS');
1998 l(' l_search_ctx_id NUMBER;');
1999 l(' BEGIN');
2000
2001
2002 d(fnd_log.level_procedure,'get_party_score_details(+)');
2003 d(fnd_log.level_statement,'Rule ID','p_rule_id');
2004
2005 l(' l_search_ctx_id:=p_search_ctx_id;');
2006 l(' get_score_details(p_init_msg_list,p_rule_id,p_party_id,');
2007 l(' p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,');
2008 l(' l_search_ctx_id,x_return_status,x_msg_count,x_msg_data);');
2009 d(fnd_log.level_procedure,'get_party_score_details(-)');
2010
2011 l(' END;');
2012
2013 l('PROCEDURE get_score_details (');
2014 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
2015 l(' p_rule_id IN NUMBER,');
2016 l(' p_party_id IN NUMBER,');
2017 l(' p_party_search_rec IN party_search_rec_type,');
2018 l(' p_party_site_list IN party_site_list,');
2019 l(' p_contact_list IN contact_list,');
2020 l(' p_contact_point_list IN contact_point_list,');
2021 l(' x_search_ctx_id IN OUT NUMBER,');
2022 l(' x_return_status OUT VARCHAR2,');
2023 l(' x_msg_count OUT NUMBER,');
2024 l(' x_msg_data OUT VARCHAR2');
2025 l(') IS');
2026 l(' CURSOR c_match_rule IS ');
2027 l(' SELECT COMPILATION_FLAG ');
2028 l(' FROM HZ_MATCH_RULES_VL ');
2029 l(' WHERE MATCH_RULE_ID = p_rule_id;');
2030 l(' l_cmp_flag VARCHAR2(1);');
2031 l(' BEGIN');
2032
2033
2034 d(fnd_log.level_procedure,'get_score_details(+)');
2035 d(fnd_log.level_statement,'Rule ID','p_rule_id');
2036
2037
2038 l('');
2039 l(' -- Initialize return status and message stack');
2040 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
2041 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
2042 l(' FND_MSG_PUB.initialize;');
2043 l(' END IF;');
2044 l('');
2045 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
2046 l(' -- No MATCH RULE FOUND');
2047 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
2048 l(' FND_MSG_PUB.ADD;');
2049 l(' RAISE FND_API.G_EXC_ERROR;');
2050 l(' END IF;');
2051
2052 l(' OPEN c_match_rule;');
2053 l(' FETCH c_match_rule INTO l_cmp_flag;');
2054 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
2055 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
2056 l(' FND_MSG_PUB.ADD;');
2057 l(' RAISE FND_API.G_EXC_ERROR;');
2058 l(' END IF;');
2059
2060 FIRST := TRUE;
2061 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
2062 FROM HZ_MATCH_RULES_VL
2063 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
2064 AND (nvl(COMPILATION_FLAG,'N') = 'C'
2065 OR MATCH_RULE_ID = p_rule_id)) LOOP
2066 l(' -- Code for Match rule '||RULE.RULE_NAME);
2067 IF FIRST THEN
2068 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2069 FIRST := FALSE;
2070 ELSE
2071 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2072 END IF;
2073 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
2074 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
2075 l(' FND_MSG_PUB.ADD;');
2076 l(' RAISE FND_API.G_EXC_ERROR;');
2077 l(' END IF;');
2078 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_score_details(');
2079 l(' p_rule_id,');
2080 l(' p_party_id, p_party_search_rec,p_party_site_list,');
2081 l(' p_contact_list, p_contact_point_list,x_search_ctx_id);');
2082 END LOOP;
2083 l(' END IF;');
2084 d(fnd_log.level_procedure,'get_score_details(-)');
2085
2086 gen_exception_block;
2087 l(' END;');
2088 l('PROCEDURE get_party_for_search (');
2089 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
2090 l(' p_rule_id IN NUMBER,');
2091 l(' p_party_id IN NUMBER,');
2092 l(' x_party_search_rec OUT NOCOPY party_search_rec_type,');
2093 l(' x_party_site_list OUT NOCOPY party_site_list,');
2094 l(' x_contact_list OUT NOCOPY contact_list,');
2095 l(' x_contact_point_list OUT NOCOPY contact_point_list,');
2096 l(' x_return_status OUT VARCHAR2,');
2097 l(' x_msg_count OUT NUMBER,');
2098 l(' x_msg_data OUT VARCHAR2');
2099 l(') IS');
2100 l(' CURSOR c_match_rule IS ');
2101 l(' SELECT COMPILATION_FLAG ');
2102 l(' FROM HZ_MATCH_RULES_VL ');
2103 l(' WHERE MATCH_RULE_ID = p_rule_id;');
2104 l(' l_cmp_flag VARCHAR2(1);');
2105 l(' BEGIN');
2106
2107
2108 d(fnd_log.level_procedure,'get_party_for_search(+)');
2109 d(fnd_log.level_statement,'Rule ID','p_rule_id');
2110
2111 l('');
2112 l(' -- Initialize return status and message stack');
2113 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
2114 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
2115 l(' FND_MSG_PUB.initialize;');
2116 l(' END IF;');
2117 l('');
2118 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
2119 l(' -- No MATCH RULE FOUND');
2120 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
2121 l(' FND_MSG_PUB.ADD;');
2122 l(' RAISE FND_API.G_EXC_ERROR;');
2123 l(' END IF;');
2124
2125 l(' OPEN c_match_rule;');
2126 l(' FETCH c_match_rule INTO l_cmp_flag;');
2127 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
2128 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
2129 l(' FND_MSG_PUB.ADD;');
2130 l(' RAISE FND_API.G_EXC_ERROR;');
2131 l(' END IF;');
2132
2133 FIRST := TRUE;
2134 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
2135 FROM HZ_MATCH_RULES_VL
2136 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
2137 AND (nvl(COMPILATION_FLAG,'N') = 'C'
2138 OR MATCH_RULE_ID = p_rule_id)) LOOP
2139 l(' -- Code for Match rule '||RULE.RULE_NAME);
2140 IF FIRST THEN
2141 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2142 FIRST := FALSE;
2143 ELSE
2144 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2145 END IF;
2146 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
2147 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
2148 l(' FND_MSG_PUB.ADD;');
2149 l(' RAISE FND_API.G_EXC_ERROR;');
2150 l(' END IF;');
2151 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_party_for_search(');
2152 l(' p_party_id, x_party_search_rec,x_party_site_list,');
2153 l(' x_contact_list, x_contact_point_list);');
2154 END LOOP;
2155 l(' END IF;');
2156 d(fnd_log.level_procedure,'get_party_for_search(-)');
2157
2158 gen_exception_block;
2159 l(' END;');
2160
2161 l('PROCEDURE get_search_criteria (');
2162 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
2163 l(' p_rule_id IN NUMBER,');
2164 l(' p_party_id IN NUMBER,');
2165 l(' p_party_site_ids IN IDList,');
2166 l(' p_contact_ids IN IDList,');
2167 l(' p_contact_pt_ids IN IDList,');
2168 l(' x_party_search_rec OUT NOCOPY party_search_rec_type,');
2169 l(' x_party_site_list OUT NOCOPY party_site_list,');
2170 l(' x_contact_list OUT NOCOPY contact_list,');
2171 l(' x_contact_point_list OUT NOCOPY contact_point_list,');
2172 l(' x_return_status OUT VARCHAR2,');
2173 l(' x_msg_count OUT NUMBER,');
2174 l(' x_msg_data OUT VARCHAR2');
2175 l(') IS');
2176 l(' CURSOR c_match_rule IS ');
2177 l(' SELECT COMPILATION_FLAG ');
2178 l(' FROM HZ_MATCH_RULES_VL ');
2179 l(' WHERE MATCH_RULE_ID = p_rule_id;');
2180 l(' l_cmp_flag VARCHAR2(1);');
2181 l(' BEGIN');
2182
2183 d(fnd_log.level_procedure,'get_search_criteria(+)');
2184 d(fnd_log.level_statement,'Rule ID','p_rule_id');
2185
2186 l('');
2187 l(' -- Initialize return status and message stack');
2188 l(' x_return_status := FND_API.G_RET_STS_SUCCESS;');
2189 l(' IF FND_API.to_Boolean(p_init_msg_list) THEN');
2190 l(' FND_MSG_PUB.initialize;');
2191 l(' END IF;');
2192 l('');
2193 l(' IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
2194 l(' -- No MATCH RULE FOUND');
2195 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
2196 l(' FND_MSG_PUB.ADD;');
2197 l(' RAISE FND_API.G_EXC_ERROR;');
2198 l(' END IF;');
2199
2200 l(' OPEN c_match_rule;');
2201 l(' FETCH c_match_rule INTO l_cmp_flag;');
2202 l(' IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
2203 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
2204 l(' FND_MSG_PUB.ADD;');
2205 l(' RAISE FND_API.G_EXC_ERROR;');
2206 l(' END IF;');
2207
2208 FIRST := TRUE;
2209 FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
2210 FROM HZ_MATCH_RULES_VL
2211 WHERE nvl(ACTIVE_FLAG,'Y')='Y'
2212 AND (nvl(COMPILATION_FLAG,'N') = 'C'
2213 OR MATCH_RULE_ID = p_rule_id)) LOOP
2214 l(' -- Code for Match rule '||RULE.RULE_NAME);
2215 IF FIRST THEN
2216 l(' IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2217 FIRST := FALSE;
2218 ELSE
2219 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2220 END IF;
2221 l(' IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
2222 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
2223 l(' FND_MSG_PUB.ADD;');
2224 l(' RAISE FND_API.G_EXC_ERROR;');
2225 l(' END IF;');
2226 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_search_criteria(');
2227 l(' p_party_id, p_party_site_ids, p_contact_ids, p_contact_pt_ids, x_party_search_rec,x_party_site_list,');
2228 l(' x_contact_list, x_contact_point_list);');
2229 END LOOP;
2230 l(' END IF;');
2231 d(fnd_log.level_procedure,'get_search_criteria(-)');
2232
2233 gen_exception_block;
2234 l(' END;');
2235
2236 /*l(' PROCEDURE enable_debug IS');
2237
2238 l(' BEGIN');
2239 l(' g_debug_count := g_debug_count + 1;');
2240
2241 l(' IF g_debug_count = 1 THEN');
2242 l(' IF fnd_profile.value(''HZ_API_FILE_DEBUG_ON'') = ''Y'' OR');
2243 l(' fnd_profile.value(''HZ_API_DBMS_DEBUG_ON'') = ''Y''');
2244 l(' THEN');
2245 l(' hz_utility_v2pub.enable_debug;');
2246 l(' g_debug := TRUE;');
2247 l(' END IF;');
2248 l(' END IF;');
2249 d('PKG: HZ_PARTY_SEARCH (+)');
2250 l(' END enable_debug;');
2251
2252 l(' PROCEDURE disable_debug IS');
2253
2254 l(' BEGIN');
2255
2256 l(' IF g_debug THEN');
2257 d('PKG: HZ_PARTY_SEARCH (-)');
2258 l(' g_debug_count := g_debug_count - 1;');
2259
2260 l(' IF g_debug_count = 0 THEN');
2261 l(' hz_utility_v2pub.disable_debug;');
2262 l(' g_debug := FALSE;');
2263 l(' END IF;');
2264 l(' END IF;');
2265
2266 l(' END disable_debug;');
2267 */
2268
2269 l('END;');
2270 -- UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'C' WHERE COMPILATION_FLAG = 'T';
2271
2272 END;
2273
2274 /** Procedure to create score function for party sites, contacts and contact points ***/
2275 PROCEDURE add_score_function(p_entity VARCHAR2, p_rule_id NUMBER) IS
2276 FIRST boolean := TRUE;
2277 l_list VARCHAR2(255);
2278
2279 BEGIN
2280 l(' FUNCTION GET_'||p_entity||'_SCORE (');
2281 l(' x_matchidx OUT NUMBER');
2282 FIRST := TRUE;
2283 FOR TX IN (
2284 SELECT f.staged_attribute_column
2285 FROM hz_trans_functions_vl f, hz_secondary_trans st,
2286 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
2287 WHERE sa.match_rule_id = p_rule_id
2288 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
2289 AND st.function_id = f.function_id
2290 AND a.attribute_id = sa.attribute_id
2291 AND a.entity_name= p_entity
2292 ORDER BY sa.attribute_id) LOOP
2293 l(' ,p_table_'||TX.STAGED_ATTRIBUTE_COLUMN||' VARCHAR2');
2294 END LOOP;
2295 l(' ) RETURN NUMBER IS');
2296 l(' maxscore NUMBER := 0;');
2297 l(' l_current_score NUMBER := 0;');
2298 l(' BEGIN');
2299 l(' x_matchidx := 0;');
2300 IF p_entity='PARTY_SITES' THEN
2301 l_list := 'g_party_site_stage_list';
2302 ELSIF p_entity='CONTACTS' THEN
2303 l_list := 'g_contact_stage_list';
2304 ELSIF p_entity='CONTACT_POINTS' THEN
2305 l_list := 'g_contact_pt_stage_list';
2306 END IF;
2307 l(' IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN');
2308 l(' RETURN l_current_score;');
2309 l(' END IF;');
2310
2311 l(' FOR J IN 1..'||l_list||'.COUNT LOOP');
2312 l(' l_current_score := 0;');
2313 FOR SECATTRS IN (
2314 SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id
2315 FROM HZ_TRANS_ATTRIBUTES_VL a,
2316 HZ_MATCH_RULE_SECONDARY s
2317 WHERE s.match_rule_id = p_rule_id
2318 AND s.attribute_id = a.attribute_id
2319 AND a.entity_name = p_entity ) LOOP
2320 FIRST := TRUE;
2321 FOR SECTRANS IN (
2322 SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
2323 TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
2324 FROM HZ_SECONDARY_TRANS s,
2325 HZ_TRANS_FUNCTIONS_VL f
2326 WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
2327 AND s.FUNCTION_ID = f.FUNCTION_ID
2328 ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
2329 IF FIRST THEN
2330 FIRST := FALSE;
2331 IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
2332 l(' IF HZ_DQM_SEARCH_UTIL.is_similar_match('||l_list||'(J).'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2333 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||',(50000*(J-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2334 ELSE
2335 l(' IF HZ_DQM_SEARCH_UTIL.is_match('||l_list||'(J).'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2336 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',(50000*(J-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2337 END IF;
2338 l(' l_current_score:=l_current_score+ '||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
2339 ELSE
2340 IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
2341 l(' ELSIF l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) || ' AND ');
2342 l(' HZ_DQM_SEARCH_UTIL.is_similar_match('||l_list||'(J).'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2343 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||',(50000*(J-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2344 ELSE
2345 l(' ELSIF -- l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) || ' AND ');
2346 l(' HZ_DQM_SEARCH_UTIL.is_match('||l_list||'(J).'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2347 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',(50000*(J-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2348 END IF;
2349 l(' l_current_score:=l_current_score+ '||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
2350 END IF;
2351 l(' IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN');
2352 l(' x_matchidx:=J;');
2353 l(' RETURN l_current_score;');
2354 l(' END IF;');
2355 END LOOP;
2356 l(' END IF;');
2357 END LOOP;
2358 l(' IF maxscore<l_current_score THEN');
2359 l(' maxscore:=l_current_score;');
2360 l(' x_matchidx:=J;');
2361 l(' END IF;');
2362 l(' END LOOP;');
2363 l(' RETURN maxscore;');
2364 l(' END;');
2365 END;
2366
2367 /** Procedure to create score function for party sites, contacts and contact points ***/
2368 PROCEDURE add_insert_function(p_entity VARCHAR2, p_rule_id NUMBER) IS
2369 FIRST boolean := TRUE;
2370 l_list VARCHAR2(255);
2371
2372 BEGIN
2373 l(' PROCEDURE INSERT_'||p_entity||'_SCORE (');
2374 l(' p_party_id IN NUMBER');
2375 l(' ,p_record_id IN NUMBER');
2376 l(' ,p_search_ctx_id IN NUMBER');
2377 IF p_entity='PARTY' THEN
2378 l(' ,p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type');
2379 l(' ,p_stage_rec IN HZ_PARTY_STAGE.party_stage_rec_type');
2380 ELSIF p_entity='PARTY_SITES' THEN
2381 l(' ,p_search_rec IN HZ_PARTY_SEARCH.party_site_search_rec_type');
2382 l(' ,p_stage_rec IN HZ_PARTY_STAGE.party_site_stage_rec_type');
2383 ELSIF p_entity='CONTACTS' THEN
2384 l(' ,p_search_rec IN HZ_PARTY_SEARCH.contact_search_rec_type');
2385 l(' ,p_stage_rec IN HZ_PARTY_STAGE.contact_stage_rec_type');
2386 ELSIF p_entity='CONTACT_POINTS' THEN
2387 l(' ,p_search_rec IN HZ_PARTY_SEARCH.contact_point_search_rec_type');
2388 l(' ,p_stage_rec IN HZ_PARTY_STAGE.contact_pt_stage_rec_type');
2389 END IF;
2390 FIRST := TRUE;
2391 FOR TX IN (
2392 SELECT f.staged_attribute_column
2393 FROM hz_trans_functions_vl f, hz_secondary_trans st,
2394 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
2395 WHERE sa.match_rule_id = p_rule_id
2396 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
2397 AND st.function_id = f.function_id
2398 AND a.attribute_id = sa.attribute_id
2399 AND a.entity_name= p_entity
2400 ORDER BY sa.attribute_id) LOOP
2401 l(' ,p_table_'||TX.STAGED_ATTRIBUTE_COLUMN||' VARCHAR2');
2402 END LOOP;
2403 l(' ,p_idx IN NUMBER) IS');
2404 l(' l_current_score NUMBER:=0;');
2405 l(' l_score NUMBER;');
2406 l(' l_attrib_value VARCHAR2(2000);');
2407 l(' BEGIN');
2408 ldbg_s('Inside Calling Procedure - INSERT_'||p_entity||'_SCORE');
2409
2410 FOR SECATTRS IN (
2411 SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id,
2412 USER_DEFINED_ATTRIBUTE_NAME
2413 FROM HZ_TRANS_ATTRIBUTES_VL a,
2414 HZ_MATCH_RULE_SECONDARY s
2415 WHERE s.match_rule_id = p_rule_id
2416 AND s.attribute_id = a.attribute_id
2417 AND a.entity_name = p_entity ) LOOP
2418 FIRST := TRUE;
2419 l(' l_score :=0;');
2420 FOR SECTRANS IN (
2421 SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
2422 TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
2423 FROM HZ_SECONDARY_TRANS s,
2424 HZ_TRANS_FUNCTIONS_VL f
2425 WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
2426 AND s.FUNCTION_ID = f.FUNCTION_ID
2427 ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
2428 IF FIRST THEN
2429 FIRST := FALSE;
2430 IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
2431 l(' IF HZ_DQM_SEARCH_UTIL.is_similar_match(p_stage_rec.'||
2432 SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2433 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2434 ELSE
2435 IF(l_purpose='S' and SECATTRS.attribute_id=16) --6334571
2436 THEN
2437 l(' IF HZ_DQM_SEARCH_UTIL.is_match(case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2438 ' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
2439 ' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2440 ' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2441
2442 ELSE
2443 l(' IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2444 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2445 END IF;
2446 END IF;
2447 l(' l_score :='||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
2448 ldbg_sv('l_score is - ','l_score' ) ;
2449 ELSE
2450 IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
2451 l(' ELSIF l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) ||
2452 ' AND ');
2453 l(' HZ_DQM_SEARCH_UTIL.is_similar_match(p_stage_rec.'||
2454 SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2455 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2456 ELSE
2457 IF(l_purpose='S' and SECATTRS.attribute_id=16) --6334571
2458 THEN
2459 l(' ELSIF l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) || ' AND ');
2460 l(' HZ_DQM_SEARCH_UTIL.is_match(case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2461 ' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
2462 ' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2463 ' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2464 ELSE
2465 l(' ELSIF l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) || ' AND ');
2466 l(' HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2467 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2468 END IF;
2469 END IF;
2470 l(' l_score :='||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
2471 ldbg_sv('l_score is - ','l_score' ) ;
2472 END IF;
2473 END LOOP;
2474 l(' END IF;');
2475 l(' IF l_score>0 THEN');
2476 ldbg_s('l_score > 0');
2477 l(' l_attrib_value := get_attrib_val(p_record_id,'''||SECATTRS.ENTITY_NAME||''','''||SECATTRS.ATTRIBUTE_NAME||''');');
2478 ldbg_s('Inserting into HZ_PARTY_SCORE_DTLS_GT ...');
2479 l(' INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,');
2480 l(' ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)');
2481 l(' VALUES (');
2482 l(' p_party_id,p_record_id,p_search_ctx_id,'''||
2483 SECATTRS.ATTRIBUTE_NAME||''','); --Bug No: 3820598
2484 --replace(SECATTRS.USER_DEFINED_ATTRIBUTE_NAME,'''','''''')||''','); --Bug No: 3820598
2485 l(' '''||SECATTRS.ENTITY_NAME||''', p_search_rec.'||SECATTRS.ATTRIBUTE_NAME||',');
2486 l(' l_attrib_value,l_score);');
2487 ldbg_s('Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done');
2488 l(' END IF;');
2489 END LOOP;
2490 l(' NULL;');
2491 l(' END;');
2492 END;
2493
2494 PROCEDURE add_get_attrib_func(p_rule_id NUMBER) IS
2495 Type charTab IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
2496 entList charTab;
2497 entity VARCHAR2(255);
2498
2499 BEGIN
2500
2501 l(' FUNCTION get_attrib_val(');
2502 l(' p_record_id NUMBER');
2503 l(' ,p_entity VARCHAR2');
2504 l(' ,p_attribute VARCHAR2');
2505 l(' ) RETURN VARCHAR2 IS');
2506 l(' l_matched_value VARCHAR2(2000);');
2507 l(' l_party_type VARCHAR2(255);');
2508 l(' BEGIN');
2509
2510 entList(1) := 'PARTY';
2511 entList(2) := 'PARTY_SITES';
2512 entList(3) := 'CONTACTS';
2513 entList(4) := 'CONTACT_POINTS';
2514 FOR I IN 1..4 LOOP
2515 entity := entList(I);
2516 l(' IF p_entity = '''||entity||''' THEN');
2517 FOR SECATTRS IN (
2518 SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id,
2519 USER_DEFINED_ATTRIBUTE_NAME, SOURCE_TABLE, CUSTOM_ATTRIBUTE_PROCEDURE
2520 FROM HZ_TRANS_ATTRIBUTES_VL a,
2521 HZ_MATCH_RULE_SECONDARY s
2522 WHERE s.match_rule_id = p_rule_id
2523 AND s.attribute_id = a.attribute_id
2524 AND a.entity_name = entity) LOOP
2525 l(' IF p_attribute = '''||SECATTRS.ATTRIBUTE_NAME||''' THEN');
2526 IF entity = 'PARTY' THEN
2527 l('');
2528 IF SECATTRS.SOURCE_TABLE <> 'CUSTOM' AND SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
2529 l(' SELECT party_type INTO l_party_type ');
2530 l(' FROM HZ_PARTIES');
2531 l(' WHERE party_id = p_record_id;');
2532 l(' IF l_party_type = ''ORGANIZATION'' THEN');
2533 l(' SELECT '||SECATTRS.ATTRIBUTE_NAME ||
2534 ' INTO l_matched_value ');
2535 IF SECATTRS.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' or
2536 SECATTRS.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' or
2537 SECATTRS.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' THEN
2538 l(' FROM HZ_ORGANIZATION_PROFILES');
2539 l(' WHERE party_id = p_record_id ');
2540 l(' and effective_end_date is null');
2541 ELSE
2542 l(' FROM '||SECATTRS.SOURCE_TABLE);
2543 l(' WHERE party_id = p_record_id ');
2544 END IF;
2545 l(' and rownum = 1;');
2546
2547 l(' ELSIF l_party_type = ''PERSON'' THEN');
2548 l(' SELECT '||SECATTRS.ATTRIBUTE_NAME ||
2549 ' INTO l_matched_value ');
2550 IF SECATTRS.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' or
2551 SECATTRS.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' or
2552 SECATTRS.SOURCE_TABLE = 'HZ_PERSON_PROFILES' THEN
2553 l(' FROM HZ_PERSON_PROFILES');
2554 l(' WHERE party_id = p_record_id ');
2555 l(' and effective_end_date is null ');
2556 ELSE
2557 l(' FROM '||SECATTRS.SOURCE_TABLE);
2558 l(' WHERE party_id = p_record_id ');
2559 END IF;
2560 l(' and rownum = 1;');
2561 l(' END IF;');
2562 ELSE
2563 l(' l_matched_value := '||SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE ||
2564 ' (p_record_id, p_entity,'''||SECATTRS.ATTRIBUTE_NAME||''',''Y'');');
2565 END IF;
2566 l(' RETURN l_matched_value;');
2567 ELSIF entity = 'PARTY_SITES' THEN
2568 IF SECATTRS.SOURCE_TABLE <> 'CUSTOM' AND SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
2569 l(' BEGIN');
2570 l(' SELECT '|| SECATTRS.SOURCE_TABLE||'.'||
2571 SECATTRS.ATTRIBUTE_NAME);
2572 l(' INTO l_matched_value ');
2573 l(' FROM HZ_PARTY_SITES, HZ_LOCATIONS');
2574 l(' WHERE HZ_PARTY_SITES.party_site_id = p_record_id');
2575 l(' AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id and rownum=1;');
2576 l(' EXCEPTION');
2577 l(' WHEN NO_DATA_FOUND THEN');
2578 l(' l_matched_value := ''Err'';');
2579 l(' END;');
2580 ELSE
2581 l(' l_matched_value := '||SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE ||
2582 ' (p_record_id, p_entity,'''||SECATTRS.ATTRIBUTE_NAME||''',''Y'');');
2583 END IF;
2584 l(' RETURN l_matched_value;');
2585 ELSIF entity = 'CONTACTS' THEN
2586 IF SECATTRS.SOURCE_TABLE <> 'CUSTOM' AND SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
2587 l(' BEGIN');
2588 l(' SELECT '|| SECATTRS.SOURCE_TABLE||'.'||
2589 SECATTRS.ATTRIBUTE_NAME);
2590 l(' INTO l_matched_value ');
2591 l(' FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES');
2592 l(' WHERE HZ_ORG_CONTACTS.org_contact_id = p_record_id');
2593 l(' AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
2594 l(' AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
2595 l(' AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = ''F''');
2596 l(' AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
2597 l(' AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id');
2598 l(' AND HZ_PERSON_PROFILES.effective_end_date IS NULL and rownum=1;');
2599 l(' EXCEPTION');
2600 l(' WHEN NO_DATA_FOUND THEN');
2601 l(' l_matched_value := ''Err'';');
2602 l(' END;');
2603 ELSE
2604 l(' l_matched_value := '||SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE ||
2605 ' (p_record_id, p_entity,'''||SECATTRS.ATTRIBUTE_NAME||''',''Y'');');
2606 END IF;
2607 l(' RETURN l_matched_value;');
2608 ELSIF entity = 'CONTACT_POINTS' THEN
2609 IF SECATTRS.SOURCE_TABLE <> 'CUSTOM' AND SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
2610 l(' BEGIN');
2611 l(' SELECT ' || SECATTRS.ATTRIBUTE_NAME || ' INTO l_matched_value ');
2612 l(' FROM HZ_CONTACT_POINTS ');
2613 l(' WHERE contact_point_id = p_record_id and rownum=1;');
2614 l(' EXCEPTION');
2615 l(' WHEN NO_DATA_FOUND THEN');
2616 l(' l_matched_value := ''Err'';');
2617 l(' END;');
2618 ELSE
2619 l(' l_matched_value := '||SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE ||
2620 ' (p_record_id, p_entity,'''||SECATTRS.ATTRIBUTE_NAME||''',''Y'');');
2621 END IF;
2622 l(' RETURN l_matched_value;');
2623 END IF;
2624 l(' END IF;');
2625 END LOOP;
2626 l(' NULL;');
2627 l(' END IF;');
2628 END LOOP;
2629 l('END;');
2630 END;
2631
2632
2633 PROCEDURE add_query_gen_func (p_entity VARCHAR2, p_rule_id NUMBER) IS
2634
2635 l_num_primary NUMBER;
2636 l_list VARCHAR2(255);
2637 l_trans VARCHAR2(4000);
2638 l_query VARCHAR2(4000);
2639 FIRST BOOLEAN := TRUE;
2640 FIRST1 BOOLEAN := TRUE;
2641 l_den_section VARCHAR2(30) := null;
2642 tmp VARCHAR2(30);
2643
2644 BEGIN
2645 l(' FUNCTION INIT_'||p_entity||'_QUERY(p_match_str VARCHAR2, x_denorm_str OUT VARCHAR2) RETURN VARCHAR2 IS');
2646 l(' l_contains_str VARCHAR2(32000); ');
2647 l(' l_contains_str_temp VARCHAR2(32000); ');
2648 l(' l_den_contains_str VARCHAR2(32000); ');
2649 l(' l_den_contains_str_temp VARCHAR2(32000); ');
2650 l(' l_filter_str VARCHAR2(4000) := null;');
2651 l(' l_prim_temp VARCHAR2(4000) := null;');
2652 l(' l_prim_temp_den VARCHAR2(4000) := null;');
2653 if l_purpose='S' and p_entity='CONTACT_POINTS' then
2654 l(' TYPE CONTACT_PT_REC_TYPE IS RECORD (');
2655 l(' contact_pt_type VARCHAR2(100)) ;');
2656
2657 l(' TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;');
2658 l(' l_cnt_pt_type contact_pt_list;');
2659
2660 l(' N NUMBER:=1;');
2661 l(' x_modify VARCHAR2(1);');
2662 end if;
2663 l(' BEGIN');
2664 d(fnd_log.level_procedure,'INIT_'||p_entity||'_QUERY ');
2665 l(' x_denorm_str := NULL;');
2666
2667 -- Setup of contains str
2668 l_num_primary := 0;
2669 SELECT count(1) INTO l_num_primary
2670 FROM HZ_MATCH_RULE_PRIMARY p,
2671 HZ_TRANS_ATTRIBUTES_VL a
2672 WHERE p.match_rule_id = p_rule_id
2673 AND p.ATTRIBUTE_ID = a.ATTRIBUTE_ID
2674 AND ENTITY_NAME = p_entity;
2675
2676 IF p_entity='PARTY_SITES' THEN
2677 l_list := 'g_party_site_stage_list';
2678 l_den_section := 'D_PS';
2679 ELSIF p_entity='CONTACTS' THEN
2680 l_list := 'g_contact_stage_list';
2681 l_den_section := 'D_CT';
2682 ELSIF p_entity='CONTACT_POINTS' THEN
2683 l_list := 'g_contact_pt_stage_list';
2684 l_den_section := 'D_CPT';
2685 END IF;
2686
2687 l_query := null;
2688 IF l_num_primary >0 THEN
2689 l('');
2690 l(' -- Dynamic setup of party site contains str');
2691 l(' --');
2692 l(' -- For each primary transformation add to intermedia query if it ');
2693 l(' -- is not null');
2694 l(' FOR I IN 1..'||l_list||'.COUNT LOOP');
2695 l(' l_contains_str_temp := null;');
2696 l(' l_den_contains_str_temp := null;');
2697 l(' l_filter_str := null;');
2698 IF p_entity = 'CONTACT_POINTS' THEN
2699 l(' l_filter_str := ''(''||'||l_list||'(I).CONTACT_POINT_TYPE||'') '';');
2700 END IF;
2701
2702 if l_purpose='S' and p_entity='CONTACT_POINTS' then
2703 l(' if(l_cnt_pt_type.count>0) then');
2704 l(' x_modify := ''Y'';');
2705 l(' FOR J IN 1..l_cnt_pt_type.COUNT LOOP');
2706 l(' IF (l_cnt_pt_type(J).contact_pt_type=g_contact_pt_stage_list(I).CONTACT_POINT_TYPE) THEN');
2707 l(' x_modify := ''N'';');
2708 l(' END IF;');
2709 l(' END LOOP;');
2710 l(' if x_modify = ''Y'' then');
2711 l(' l_cnt_pt_type(N).contact_pt_type := g_contact_pt_stage_list(I).CONTACT_POINT_TYPE;');
2712 l(' N := N+1;');
2713 l(' end if;');
2714 l(' else');
2715 l(' l_cnt_pt_type(N).contact_pt_type := g_contact_pt_stage_list(I).CONTACT_POINT_TYPE;');
2716 l(' N := N+1;');
2717 l(' end if;');
2718 end if;
2719
2720 FIRST := TRUE;
2721 FOR PRIMATTRS IN (
2722 SELECT a.ATTRIBUTE_ID, PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME,nvl(FILTER_FLAG,'N') FILTER_FLAG,
2723 nvl(DENORM_FLAG,'N') DENORM_FLAG
2724 FROM HZ_TRANS_ATTRIBUTES_VL a,
2725 HZ_MATCH_RULE_PRIMARY p
2726 WHERE p.match_rule_id = p_rule_id
2727 AND p.attribute_id = a.attribute_id
2728 AND a.ENTITY_NAME = p_entity) LOOP
2729 l('');
2730 l(' -- Setup query string for '||PRIMATTRS.ATTRIBUTE_NAME);
2731 l(' l_prim_temp := null;');
2732 l(' l_prim_temp_den := null;');
2733 FIRST1 := TRUE;
2734 FOR PRIMTRANS IN (
2735 SELECT f.STAGED_ATTRIBUTE_COLUMN, f.TRANSFORMATION_NAME, nvl(f.PRIMARY_FLAG,'N') PRIMARY_FLAG
2736 FROM HZ_TRANS_FUNCTIONS_VL f,
2737 HZ_PRIMARY_TRANS pt
2738 WHERE pt.PRIMARY_ATTRIBUTE_ID = PRIMATTRS.PRIMARY_ATTRIBUTE_ID
2739 AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
2740 IF PRIMATTRS.FILTER_FLAG <> 'Y' THEN
2741
2742 IF PRIMTRANS.PRIMARY_FLAG = 'Y' THEN
2743 tmp := '''A'||PRIMATTRS.ATTRIBUTE_ID||'''';
2744 ELSE
2745 tmp := 'NULL';
2746 END IF;
2747
2748 l(' HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
2749 l(' '||l_list||'(I).'||
2750 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
2751 ','||tmp||',l_prim_temp);');
2752 IF PRIMATTRS.DENORM_FLAG = 'Y' THEN
2753 l(' HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
2754 l(' '||l_list||'(I).'||
2755 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
2756 ','''||l_den_section||''',l_prim_temp_den);');
2757 END IF;
2758 ELSE
2759 l(' HZ_DQM_SEARCH_UTIL.add_filter( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
2760 l(' '||l_list||'(I).'||
2761 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
2762 ',''A'||PRIMATTRS.ATTRIBUTE_ID||''',l_filter_str);');
2763 END IF;
2764 IF FIRST1 THEN
2765 l_trans := '('||l_list||'(1).'||
2766 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' '' || '||
2767 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||'||l_list||'(1).'||
2768 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
2769 FIRST1 := FALSE;
2770 ELSE
2771 l_trans := l_trans|| ' OR ('|| l_list||'(1).'||
2772 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' '' ||'||
2773 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||'||l_list||'(1).'||
2774 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
2775 END IF;
2776 END LOOP;
2777 /*
2778 IF FIRST THEN
2779 l_query := '('||l_trans||')';
2780 FIRST := FALSE;
2781 ELSE
2782 l_query := l_query || ' AND (' || l_trans||')';
2783 END IF;
2784 */
2785 IF PRIMATTRS.FILTER_FLAG <> 'Y' THEN
2786 IF PRIMATTRS.DENORM_FLAG = 'Y' THEN
2787 l(' HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp_den, '' AND '', l_den_contains_str_temp);');
2788 END IF;
2789 l(' HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, '' AND '', l_contains_str_temp);');
2790 END IF;
2791 END LOOP;
2792
2793 IF p_entity='PARTY_SITES' THEN
2794 g_party_site_query := l_query;
2795 ELSIF p_entity='CONTACTS' THEN
2796 g_contact_query := l_query;
2797 ELSIF p_entity='CONTACT_POINTS' THEN
2798 g_cpt_query := l_query;
2799 END IF;
2800 l('');
2801 l(' HZ_DQM_SEARCH_UTIL.add_search_record(l_contains_str_temp, '||
2802 ' l_filter_str, l_contains_str);');
2803 l(' HZ_DQM_SEARCH_UTIL.add_search_record(l_den_contains_str_temp, '||
2804 ' null, l_den_contains_str);');
2805 if l_purpose='S' and p_entity='CONTACT_POINTS' then
2806 l('IF N>1 THEN ');
2807 l(' distinct_search_cpt_types := N-1;');
2808 l('ELSE');
2809 l(' distinct_search_cpt_types := N;');
2810 l('END IF;');
2811 ldbg_sv('distinct_search_cpt_types is - ','distinct_search_cpt_types' ) ;
2812 end if;
2813
2814 l(' END LOOP;');
2815 l(' -- Add the search criteria to query string');
2816 l(' IF lengthb(l_contains_str) > 4000 THEN');
2817 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_SEARCH_CRIT_LARGE_ERROR'');');
2818 l(' FND_MESSAGE.SET_TOKEN(''ENTITY'','''||p_entity||''');');
2819 l(' FND_MSG_PUB.ADD;');
2820 l(' RAISE FND_API.G_EXC_ERROR;');
2821 l(' END IF;');
2822 l(' x_denorm_str := l_den_contains_str;');
2823 l(' RETURN l_contains_str;');
2824 l(' END;');
2825 l('');
2826 ELSE
2827 l(' RETURN NULL;');
2828 l(' END;');
2829 l('');
2830 END IF;
2831 END;
2832
2833 PROCEDURE get_column_list (
2834 p_rule_id IN NUMBER,
2835 p_entity IN VARCHAR2,
2836 x_select_list OUT NOCOPY VARCHAR2,
2837 x_param_list OUT NOCOPY VARCHAR2,
2838 x_into_list OUT NOCOPY VARCHAR2) IS
2839
2840 FIRST BOOLEAN;
2841 BEGIN
2842 x_select_list := '';
2843 x_into_list := '';
2844 x_param_list := '';
2845
2846 FIRST := TRUE;
2847 FOR TX IN (
2848 SELECT f.staged_attribute_column, a.attribute_name, f.procedure_name
2849 FROM hz_trans_functions_vl f, hz_secondary_trans st,
2850 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
2851 WHERE sa.match_rule_id = p_rule_id
2852 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
2853 AND st.function_id = f.function_id
2854 AND a.attribute_id = sa.attribute_id
2855 AND a.entity_name= p_entity
2856 ORDER BY sa.attribute_id) LOOP
2857 --- Modified for Bug 4016594
2858 IF TX.ATTRIBUTE_NAME = 'DUNS_NUMBER_C' AND upper(TX.PROCEDURE_NAME) = 'HZ_TRANS_PKG.EXACT' THEN
2859 x_select_list := x_select_list || ', lpad(rtrim('||TX.STAGED_ATTRIBUTE_COLUMN||'),9,chr('||ascii('0')||'))';
2860 ELSE
2861 x_select_list := x_select_list || ', '||TX.STAGED_ATTRIBUTE_COLUMN;
2862 END IF;
2863
2864 x_into_list := x_into_list || ', '||'l_'||TX.STAGED_ATTRIBUTE_COLUMN;
2865 IF FIRST AND p_entity = 'PARTY' THEN
2866 x_param_list := 'l_'||TX.STAGED_ATTRIBUTE_COLUMN;
2867 FIRST := FALSE;
2868 ELSE
2869 x_param_list := x_param_list||',l_'||TX.STAGED_ATTRIBUTE_COLUMN;
2870 END IF;
2871 END LOOP;
2872 RETURN;
2873 END;
2874
2875 /**
2876 * Private procedure to generate the body of the Public Match Rule API
2877 * for a match rule. Package Name is:
2878 * HZ_MATCH_RULE_<p_rule_id>
2879 *
2880 * This procedure generates the code required to execute searches
2881 *
2882 **/
2883 PROCEDURE gen_pkg_body (
2884 p_pkg_name IN VARCHAR2,
2885 p_rule_id IN NUMBER
2886 ) IS
2887
2888 -- Local Variables
2889 FIRST boolean;
2890 FIRST1 boolean;
2891 UPSTMT boolean;
2892 l_match_str VARCHAR2(255);
2893 l_attrib_cnt NUMBER;
2894 l_party_filter VARCHAR2(1) := null;
2895 l_ps_filter VARCHAR2(1) := null;
2896 l_contact_filter VARCHAR2(1) := null;
2897 l_cpt_filter VARCHAR2(1) := null;
2898 l_num_primary NUMBER;
2899 l_num_secondary NUMBER;
2900 l_ent VARCHAR2(30);
2901 l_max_score NUMBER;
2902 l_match_threshold NUMBER;
2903
2904 TYPE NumberList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
2905 TYPE CharList IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
2906 attribList NumberList;
2907
2908 l_party_filter_str VARCHAR2(2000);
2909 l_dyn_party_filter_str VARCHAR2(2000);
2910 l_p_select_list VARCHAR2(1000);
2911 l_p_param_list VARCHAR2(1000);
2912 l_p_into_list VARCHAR2(1000);
2913 l_ps_select_list VARCHAR2(1000);
2914 l_ps_param_list VARCHAR2(1000);
2915 l_ps_into_list VARCHAR2(1000);
2916 l_c_select_list VARCHAR2(1000);
2917 l_c_param_list VARCHAR2(1000);
2918 l_c_into_list VARCHAR2(1000);
2919 l_cpt_select_list VARCHAR2(1000);
2920 l_cpt_param_list VARCHAR2(1000);
2921 l_cpt_into_list VARCHAR2(1000);
2922 cnt NUMBER;
2923 l_party_filt_bind CharList;
2924 party_binds CharList;
2925 l_cpt_type VARCHAR2(255);
2926 l_trans VARCHAR2(4000);
2927 l_auto_merge_score NUMBER;
2928 tmp VARCHAR2(30);
2929 l_party_name_score VARCHAR2(255);
2930 l_party_level_cnt NUMBER;
2931 l_rule_type VARCHAR2(30); ---Code Change for Match Rule Set
2932
2933 l_entity_score_lh VARCHAR2(4000); --Bug No: 4162385
2934 l_entity_score_rh VARCHAR2(4000); --Bug No: 4162385
2935
2936 BEGIN
2937
2938 -- Query match thresholds and search type
2939 SELECT RULE_PURPOSE, MATCH_SCORE, nvl(AUTO_MERGE_SCORE,99999), decode(MATCH_ALL_FLAG,'Y',' AND ',' OR '),
2940 NVL(match_rule_type,'SINGLE') ---Code Change for Match Rule Set
2941 INTO l_purpose, l_match_threshold, l_auto_merge_score, l_match_str,l_rule_type---Code Change for Match Rule Set
2942 FROM HZ_MATCH_RULES_VL
2943 WHERE match_rule_id = p_rule_id;
2944
2945 SELECT nvl(SUM(SCORE),1) INTO l_max_score
2946 FROM HZ_MATCH_RULE_SECONDARY
2947 WHERE match_rule_id = p_rule_id;
2948
2949 --bug 5878732
2950 IF l_purpose='S' AND Nvl(l_match_threshold,0)<>0 THEN
2951 l_match_threshold:= ROUND((l_match_threshold/100) * l_max_score);
2952 END IF;
2953
2954 l('CREATE or REPLACE PACKAGE BODY ' || p_pkg_name || ' AS');
2955 l('/*=======================================================================+');
2956 l(' | Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|');
2957 l(' | All rights reserved. |');
2958 l(' +=======================================================================+');
2959 l(' | NAME');
2960 l(' | ' || p_pkg_name);
2961 l(' |');
2962 l(' | DESCRIPTION');
2963 l(' |');
2964 l(' | Compiled by the HZ Match Rule Compiler');
2965 l(' | -- Do Not Modify --');
2966 l(' |');
2967 l(' | PUBLIC PROCEDURES');
2968 l(' | find_parties');
2969 l(' | get_matching_party_sites');
2970 l(' | get_matching_contacts');
2971 l(' | get_matching_contact_points');
2972 l(' | get_score_details');
2973 l(' | ');
2974 l(' | HISTORY');
2975 l(' | '||TO_CHAR(SYSDATE,'DD-MON-YYYY') || ' Generated by HZ Match Rule Compiler');
2976 l(' |');
2977 l(' *=======================================================================*/');
2978
2979 IF l_purpose = 'S'
2980 THEN
2981 l('');
2982 l('-- ==========================================================================================');
2983 l('-- ============MATCH RULE COMPILER GENERATED CODE FOR SEARCH MATCH RULES ====================');
2984 l('-- ==========================================================================================');
2985 l('');
2986 ELSIF l_purpose = 'D'
2987 THEN
2988 l('');
2989 l('-- ==========================================================================================');
2990 l('-- ============MATCH RULE COMPILER GENERATED CODE FOR DUP IDENTIFICATION MATCH RULES ========');
2991 l('-- ==========================================================================================');
2992 l('');
2993 END IF;
2994
2995 l(' TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;');
2996 l(' call_order vlisttype;');
2997 l(' call_max_score HZ_PARTY_SEARCH.IDList;');
2998 l(' call_type vlisttype;');
2999 l(' g_party_stage_rec HZ_PARTY_STAGE.party_stage_rec_type;');
3000 l(' g_party_site_stage_list HZ_PARTY_STAGE.party_site_stage_list;');
3001 l(' g_contact_stage_list HZ_PARTY_STAGE.contact_stage_list;');
3002 l(' g_contact_pt_stage_list HZ_PARTY_STAGE.contact_pt_stage_list;');
3003 l(' g_mappings HZ_PARTY_SEARCH.IDList;');
3004 l(' g_max_id NUMBER:=2000000000;');
3005 l(' g_other_party_level_attribs BOOLEAN;');
3006 l('');
3007 l(' g_debug_count NUMBER := 0;');
3008 --l(' g_debug BOOLEAN := FALSE;');
3009 l(' g_score_until_thresh BOOLEAN:=false;');
3010 l(' ');
3011 l(' g_thres_score NUMBER:=1000;');
3012 l(' g_ps_den_only BOOLEAN;');
3013 l(' g_index_owner VARCHAR2(255);');
3014 l(' distinct_search_cpt_types NUMBER ; ');
3015 --l(' PROCEDURE enable_debug;');
3016 --l(' PROCEDURE disable_debug;');
3017
3018
3019 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
3020 ldbg_procedure;
3021 l('FUNCTION check_estimate_hits (');
3022 l(' p_entity VARCHAR2,');
3023 l(' p_contains_str VARCHAR2) RETURN NUMBER IS');
3024 l(' ');
3025 l(' ustatus VARCHAR2(255);');
3026 l(' dstatus VARCHAR2(255);');
3027 l(' l_bool BOOLEAN;');
3028 l(' l_hits NUMBER := 0;'); --Bug No: 6048573
3029 l('BEGIN');
3030 l(' IF g_index_owner IS NULL THEN');
3031 l(' l_bool := fnd_installation.GET_APP_INFO(''AR'',ustatus,dstatus,g_index_owner);');
3032 l(' END IF;');
3033 l(' IF p_entity=''PARTY'' THEN');
3034 l('');
3035 l(' l_hits := CTX_QUERY.count_hits(');
3036 l(' g_index_owner||''.''||''HZ_STAGE_PARTIES_T1'',p_contains_str, false);');
3037 l(' ELSIF p_entity=''PARTY_SITES'' THEN');
3038 l(' l_hits := CTX_QUERY.count_hits(');
3039 l(' g_index_owner||''.''||''HZ_STAGE_PARTY_SITES_T1'',p_contains_str, false);');
3040 l(' ELSIF p_entity=''CONTACTS'' THEN');
3041 l(' l_hits := CTX_QUERY.count_hits(');
3042 l(' g_index_owner||''.''||''HZ_STAGE_CONTACT_T1'',p_contains_str, false);');
3043 l(' ELSIF p_entity=''CONTACT_POINTS'' THEN');
3044 l(' l_hits := CTX_QUERY.count_hits(');
3045 l(' g_index_owner||''.''||''HZ_STAGE_CPT_T1'',p_contains_str, false);');
3046 l(' END IF;');
3047 l(' RETURN floor(l_hits/2) ;'); --Bug No: 6048573
3048 l(' ');
3049 l('');
3050 --bug 4959719 start
3051 l(' exception');
3052 l(' when others then');
3053 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
3054 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
3055 l(' FND_MSG_PUB.ADD;');
3056 l(' RAISE FND_API.G_EXC_ERROR;');
3057 --Start Bug No: 3032742.
3058 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
3059 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
3060 l(' FND_MSG_PUB.ADD;');
3061 l(' RAISE FND_API.G_EXC_ERROR;');
3062 --End Bug No : 3032742.
3063 l(' else ');
3064 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
3065 l(' end if;');
3066 --bug 4959719 end
3067 l('END;');
3068
3069 -- VJN Introduced function for Bug 3979089
3070 l('');
3071 l('');
3072 l('FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)');
3073 l('RETURN VARCHAR2');
3074 l('IS');
3075 l('p_person_restrict_sql VARCHAR2(32767);');
3076 l('p_restrict1_sql VARCHAR2(32767);');
3077 l('p_final_restrict_sql VARCHAR2(32767);');
3078 l('BEGIN');
3079 l(' p_final_restrict_sql := p_restrict_sql ; ');
3080 l(' IF p_restrict_sql IS NOT NULL');
3081 l(' THEN');
3082 l(' IF instrb(p_restrict_sql, ''STAGE.'') > 0');
3083 l(' THEN');
3084 l(' p_restrict1_sql := replace( p_restrict_sql, ''STAGE.'', ''stage1.'');');
3085 l(' ELSIF instrb(p_restrict_sql, ''stage.'') > 0');
3086 l(' THEN');
3087 l(' p_restrict1_sql := replace( p_restrict_sql, ''stage.'', ''stage1.'');');
3088 l(' END IF;');
3089
3090 l(' p_person_restrict_sql := ''exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r'' ');
3091 l(' ||' || ' '' where oc.org_contact_id = stage.org_contact_id and'' ');
3092 l(' ||' || ' '' r.relationship_id = oc.party_relationship_id'' ');
3093 l(' ||' || ' '' and r.subject_type = ''''PERSON'''' AND r.object_type = ''''ORGANIZATION'''' '' ');
3094 l(' ||' || ' '' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id'' ');
3095 l(' ||' || ' '' and '' || p_restrict1_sql || '' ) )'' ; ');
3096
3097 l('p_final_restrict_sql := ''((stage.org_contact_id is null and '' || p_restrict_sql || '') or (stage.org_contact_id is not null and '' ');
3098 l(' || p_person_restrict_sql || '' ))''; ');
3099 l(' END IF;');
3100 l(' return p_final_restrict_sql ;');
3101 l('END;');
3102
3103 /***********************************************************************
3104 * Private procedure to map IDs greater than the max allowed by PLSQL
3105 * Index-by tables.
3106 ************************************************************************/
3107 l(' FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS');
3108 l(' l_newidx NUMBER;');
3109 l(' BEGIN ');
3110 ldbg_s('-----------------','calling the function map_id');
3111 ldbg_sv('argument in_id = ', 'in_id');
3112
3113 l(' IF in_id<g_max_id THEN ');
3114 l(' RETURN in_id;');
3115 l(' ELSE');
3116 l(' FOR I in 1..g_mappings.COUNT LOOP');
3117 l(' IF in_id = g_mappings(I) THEN');
3118 l(' RETURN (g_max_id+I);');
3119 l(' END IF;');
3120 l(' END LOOP;');
3121 l(' l_newidx := g_mappings.COUNT+1;');
3122 l(' g_mappings(l_newidx) := in_id;');
3123 l(' RETURN (g_max_id+l_newidx);');
3124 l(' END IF;');
3125 l(' END;');
3126
3127 l(' FUNCTION GET_PARTY_SCORE ');
3128 FIRST := TRUE;
3129 FOR TX IN (
3130 SELECT f.staged_attribute_column
3131 FROM hz_trans_functions_vl f, hz_secondary_trans st,
3132 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
3133 WHERE sa.match_rule_id = p_rule_id
3134 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
3135 AND st.function_id = f.function_id
3136 AND a.attribute_id = sa.attribute_id
3137 AND a.entity_name= 'PARTY'
3138 ORDER BY sa.attribute_id) LOOP
3139 IF FIRST THEN
3140 l(' (');
3141 l(' p_table_'||TX.staged_attribute_column||' VARCHAR2');
3142 FIRST := FALSE;
3143 ELSE
3144 l(' ,p_table_'||TX.staged_attribute_column||' VARCHAR2');
3145 END IF;
3146 END LOOP;
3147 IF FIRST THEN
3148 l(' RETURN NUMBER IS');
3149 ELSE
3150 l(' ) RETURN NUMBER IS');
3151 END IF;
3152 l(' total NUMBER := 0;');
3153 l(' BEGIN');
3154 ldbg_s('-----------------','calling the function get_party_score');
3155 d(fnd_log.level_procedure,'GET_PARTY_SCORE ');
3156 l(' IF g_score_until_thresh AND (total)>=g_thres_score THEN');
3157 ldbg_sv('get_party_score returned total = ', 'total');
3158 l(' RETURN total;');
3159 l(' END IF;');
3160 FOR SECATTRS IN (
3161 SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id
3162 FROM HZ_TRANS_ATTRIBUTES_VL a,
3163 HZ_MATCH_RULE_SECONDARY s
3164 WHERE s.match_rule_id = p_rule_id
3165 AND s.attribute_id = a.attribute_id
3166 AND a.entity_name = 'PARTY') LOOP
3167 FIRST := TRUE;
3168 FOR SECTRANS IN (
3169 SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
3170 TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
3171 FROM HZ_SECONDARY_TRANS s,
3172 HZ_TRANS_FUNCTIONS_VL f
3173 WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
3174 AND s.FUNCTION_ID = f.FUNCTION_ID
3175 ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
3176 IF FIRST THEN
3177 FIRST := FALSE;
3178 IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
3179 l(' IF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3180 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
3181 ELSE
3182 IF(l_purpose='S' and SECATTRS.attribute_id=16) --6334571
3183 THEN
3184 l(' IF HZ_DQM_SEARCH_UTIL.is_match(case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3185 ' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
3186 ' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3187 ' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||SECTRANS.FUNCTION_ID||') THEN');
3188
3189
3190 ELSE
3191 l(' IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3192 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
3193 END IF;
3194 END IF;
3195 ELSE
3196 IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
3197 l(' ELSIF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3198 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
3199 ELSE
3200 IF(l_purpose='S' and SECATTRS.attribute_id=16) --6334571
3201 THEN
3202
3203 l(' ELSIF HZ_DQM_SEARCH_UTIL.is_match(case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3204 ' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
3205 ' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3206 ' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||SECTRANS.FUNCTION_ID||') THEN');
3207
3208 ELSE
3209
3210 l(' ELSIF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3211 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
3212 END IF;
3213 END IF;
3214 END IF;
3215 l(' total := total+'||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
3216 l(' IF g_score_until_thresh AND (total)>=g_thres_score THEN ');
3217 ldbg_sv('get_party_score returned total = ', 'total');
3218 l(' RETURN total;');
3219 l(' END IF;');
3220 END LOOP;
3221 l(' END IF;');
3222 END LOOP;
3223 l(' RETURN total;');
3224 l(' END;');
3225
3226 add_score_function('PARTY_SITES',p_rule_id);
3227 add_score_function('CONTACTS',p_rule_id);
3228 add_score_function('CONTACT_POINTS',p_rule_id);
3229 add_get_attrib_func(p_rule_id);
3230 add_insert_function('PARTY',p_rule_id);
3231 add_insert_function('PARTY_SITES',p_rule_id);
3232 add_insert_function('CONTACTS',p_rule_id);
3233 add_insert_function('CONTACT_POINTS',p_rule_id);
3234
3235 --- VJN Introduced for conditional Word Replacements
3236 --- Populate the global condition record before doing the mapping
3237 --- so that mapping takes into account conditional word replacements if any
3238 generate_ent_cond_pop_rec_proc('PARTY', p_rule_id);
3239 l('');
3240 generate_ent_cond_pop_rec_proc('PARTY_SITES', p_rule_id);
3241 l('');
3242 generate_ent_cond_pop_rec_proc('CONTACTS', p_rule_id);
3243 l('');
3244 generate_ent_cond_pop_rec_proc('CONTACT_POINTS', p_rule_id);
3245 l('');
3246
3247
3248 l(' PROCEDURE init_score_context (');
3249 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type:=');
3250 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
3251 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list:=');
3252 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
3253 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list:= ');
3254 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
3255 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list:=');
3256 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST');
3257 l(' ) IS');
3258 l(' l_dummy NUMBER;');
3259 l(' BEGIN');
3260 ldbg_s('-----------------','calling the procedure init_score_context');
3261 ldbg_s('In init_score_context calling the Map procedures');
3262 l(' -- Transform search criteria');
3263 l(' HZ_TRANS_PKG.clear_globals;');
3264 l(' MAP_PARTY_REC(FALSE,p_party_search_rec, l_dummy, g_party_stage_rec);');
3265 l(' MAP_PARTY_SITE_REC(FALSE,p_party_site_list, l_dummy, g_party_site_stage_list);');
3266 l(' MAP_CONTACT_REC(FALSE,p_contact_list, l_dummy, g_contact_stage_list);');
3267 l(' MAP_CONTACT_POINT_REC(FALSE,p_contact_point_list, l_dummy, g_contact_pt_stage_list);');
3268 l('');
3269 l(' END;');
3270
3271
3272 l(' FUNCTION init_search(');
3273 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type:=');
3274 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
3275 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list:=');
3276 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
3277 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list:= ');
3278 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
3279 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list:=');
3280 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,');
3281 l(' p_match_type IN VARCHAR2,');
3282 l(' x_party_max_score OUT NUMBER,');
3283 l(' x_ps_max_score OUT NUMBER,');
3284 l(' x_contact_max_score OUT NUMBER,');
3285 l(' x_cpt_max_score OUT NUMBER');
3286 l(' ) RETURN NUMBER IS ');
3287 l(' l_entered_max_score NUMBER:=0;');
3288 l(' l_ps_entered_max_score NUMBER:=0;');
3289 l(' l_ct_entered_max_score NUMBER:=0;');
3290 l(' l_cpt_entered_max_score NUMBER:=0;');
3291 l(' vlist vlisttype;');
3292 l(' maxscore HZ_PARTY_SEARCH.IDList;');
3293 l(' l_name VARCHAR2(200);');
3294 l(' l_idx NUMBER; ');
3295 l(' l_num NUMBER; ');
3296 l(' total NUMBER; ');
3297 l(' threshold NUMBER; ');
3298 l(' BEGIN');
3299 ldbg_s('-----------------','calling the function init_search');
3300 l(' IF NOT check_prim_cond (p_party_search_rec,');
3301 l(' p_party_site_list,');
3302 l(' p_contact_list,');
3303 l(' p_contact_point_list) THEN');
3304 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_PRIMARY_COND'');');
3305 l(' FND_MSG_PUB.ADD;');
3306 l(' RAISE FND_API.G_EXC_ERROR;');
3307 l(' END IF;');
3308 IF l_max_score=1 THEN
3309 ldbg_s('In init_search calling util package set_no_score');
3310 l(' HZ_DQM_SEARCH_UTIL.set_no_score;');
3311 ELSE
3312 ldbg_s('In init_search calling util package set_score');
3313 l(' HZ_DQM_SEARCH_UTIL.set_score;');
3314 END IF;
3315 l(' g_mappings.DELETE;');
3316 l(' g_party_site_stage_list.DELETE;');
3317 l(' g_contact_stage_list.DELETE;');
3318 l(' g_contact_pt_stage_list.DELETE;');
3319 l(' call_order.DELETE;');
3320 l(' call_max_score.DELETE;');
3321 l(' HZ_DQM_SEARCH_UTIL.new_search;');
3322 l(' HZ_TRANS_PKG.set_party_type(p_party_search_rec.PARTY_TYPE);');
3323 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
3324 l('');
3325 ldbg_s('In init_search calling the Map procedures');
3326 l(' -- Transform search criteria');
3327 -- VJN Introduced for conditional Word Replacements
3328 --- Populate the global condition record before doing the mapping
3329 --- so that mapping takes into account conditional word replacements if any
3330 l('POP_PARTY_COND_REC(p_party_search_rec);');
3331 l('');
3332 l('POP_PARTY_SITES_COND_REC(p_party_site_list);');
3333 l('');
3334 l('POP_CONTACTS_COND_REC(p_contact_list);');
3335 l('');
3336 l('POP_CONTACT_POINTS_COND_REC(p_contact_point_list);');
3337 l('');
3338
3339 l(' MAP_PARTY_REC(TRUE,p_party_search_rec, l_entered_max_score, g_party_stage_rec);');
3340 l(' MAP_PARTY_SITE_REC(TRUE,p_party_site_list, l_ps_entered_max_score, g_party_site_stage_list);');
3341 l(' MAP_CONTACT_REC(TRUE,p_contact_list, l_ct_entered_max_score, g_contact_stage_list);');
3342 l(' MAP_CONTACT_POINT_REC(TRUE,p_contact_point_list, l_cpt_entered_max_score, g_contact_pt_stage_list);');
3343 l('');
3344 l(' ');
3345 ldbg_s('In init_search determining call order of entities');
3346 l(' l_idx := l_entered_max_score+1;');
3347 l(' vlist (l_idx) := ''PARTY'';');
3348 l(' maxscore (l_idx) := l_entered_max_score;');
3349
3350 l(' l_idx := l_ps_entered_max_score+1;');
3351 l(' WHILE vlist.EXISTS(l_idx) LOOP');
3352 l(' l_idx := l_idx+1;');
3353 l(' END LOOP;');
3354 l(' vlist (l_idx) := ''PARTY_SITE'';');
3355 l(' maxscore (l_idx) := l_ps_entered_max_score;');
3356 l('');
3357 l(' l_idx := l_ct_entered_max_score+1;');
3358 l(' WHILE vlist.EXISTS(l_idx) LOOP');
3359 l(' l_idx := l_idx+1;');
3360 l(' END LOOP;');
3361 l(' vlist (l_idx) := ''CONTACT'';');
3362 l(' maxscore (l_idx) := l_ct_entered_max_score;');
3363 l('');
3364 l(' l_idx := l_cpt_entered_max_score+1;');
3365 l(' WHILE vlist.EXISTS(l_idx) LOOP');
3366 l(' l_idx := l_idx+1;');
3367 l(' END LOOP;');
3368 l(' vlist (l_idx) := ''CONTACT_POINT'';');
3369 l(' maxscore (l_idx) := l_cpt_entered_max_score;');
3370 l('');
3371 l(' l_num := 1;');
3372 l(' l_idx := vlist.LAST;');
3373 ldbg_s('Call order is the following');
3374 l(' WHILE l_idx IS NOT NULL LOOP');
3375 l(' call_order(l_num) := vlist(l_idx);');
3376 l(' call_max_score(l_num) := maxscore(l_idx);');
3377 ldbg_s('-----------------');
3378 ldbg_sv('l_num = ','l_num','entity = ', 'vlist(l_idx)', 'call_max_score for entity = ', 'maxscore(l_idx)');
3379 l(' l_idx := vlist.PRIOR(l_idx);');
3380 l(' l_num := l_num+1;');
3381 l(' END LOOP; ');
3382 ldbg_s('-----------------');
3383 l(' call_order(5):=''NONE'';');
3384 ldbg_s('In init_search determining call type of entities');
3385 l(' IF p_match_type = '' OR '' THEN');
3386 ldbg_s('This is an OR Match Rule');
3387 IF l_purpose = 'S' THEN
3388 l(' threshold := round(('||l_match_threshold||'/'||l_max_score||')*(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score));');
3389 ldbg_s('This is a search Match Rule');
3390 ldbg_sv('Threshold defined in Match Rule, after rounding off is ', 'threshold');
3391 ELSE
3392 l(' threshold := '||l_match_threshold||';');
3393 ldbg_s('This is a Duplicate Identification Match Rule');
3394 ldbg_sv('Threshold defined in Match Rule is ', 'threshold');
3395 END IF;
3396
3397 l(' l_idx := vlist.FIRST;');
3398 l(' total := 0;');
3399 l(' l_num := 4;');
3400 l(' WHILE l_idx IS NOT NULL LOOP');
3401 l(' total := total+maxscore(l_idx);');
3402 l(' IF total<threshold THEN');
3403 l(' call_type(l_num) := ''AND'';');
3404 l(' ELSE');
3405 l(' call_type(l_num) := ''OR'';');
3406 l(' END IF;');
3407 l(' l_idx := vlist.NEXT(l_idx);');
3408 l(' l_num := l_num-1;');
3409 l(' END LOOP;');
3410 l(' ELSE');
3411 l(' call_type(1) := ''OR'';');
3412 l(' call_type(2) := ''AND'';');
3413 l(' call_type(3) := ''AND'';');
3414 l(' call_type(4) := ''AND'';');
3415 l(' END IF;');
3416 ldbg_s('Call types are the following');
3417 ldbg_s('-----------------');
3418 ldbg_sv('call type 1 = ', 'call_type(1)', 'call type 2 = ', 'call_type(2)','call type 3 = ', 'call_type(3)','call type 4 = ', 'call_type(4)');
3419 ldbg_s('-----------------');
3420 l(' x_party_max_score := l_entered_max_score;');
3421 l(' x_ps_max_score := l_ps_entered_max_score;');
3422 l(' x_contact_max_score := l_ct_entered_max_score;');
3423 l(' x_cpt_max_score := l_cpt_entered_max_score;');
3424 ldbg_s('init_search returned with the following max scores at each level');
3425 ldbg_s('-----------------');
3426 ldbg_sv('entered party max score = ', 'l_entered_max_score',
3427 'entered paty site max score = ', 'l_ps_entered_max_score',
3428 'entered contact max score = ', 'l_ct_entered_max_score',
3429 'entered contact point max score = ', 'l_cpt_entered_max_score');
3430 ldbg_sv('entered total score = ', '(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score)');
3431 ldbg_s('-----------------');
3432 l(' RETURN (l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score);');
3433 l(' END;');
3434
3435
3436 l(' FUNCTION INIT_PARTY_QUERY(p_match_str VARCHAR2, ');
3437 l(' p_denorm_str VARCHAR2,');
3438 l(' p_party_max_score NUMBER,');
3439 l(' p_denorm_max_score NUMBER,');
3440 l(' p_non_denorm_max_score NUMBER,');
3441 l(' p_threshold NUMBER) RETURN VARCHAR2 IS');
3442 l(' l_party_contains_str VARCHAR2(32000); ');
3443 l(' l_party_filter VARCHAR2(1) := null;');
3444 l(' l_prim_temp VARCHAR2(4000);');
3445 l(' l_denorm_str VARCHAR2(4000);');
3446 l(' BEGIN');
3447 ldbg_s('-----------------','calling the function init_party_query');
3448 ldbg_sv('passed in p_match_str is ', 'p_match_str');
3449 ldbg_sv('passed in p_denorm_str is ', 'p_denorm_str');
3450 ldbg_sv('passed in p_denorm_max_score is ', 'p_denorm_max_score');
3451 ldbg_sv('passed in p_non_denorm_max_score is ', 'p_non_denorm_max_score');
3452 ldbg_sv('passed in p_threshold is ', 'p_threshold');
3453
3454 l(' IF p_party_max_score<=p_threshold OR p_match_str='' AND '' THEN');
3455 l(' l_denorm_str := NULL;');
3456 ldbg_sv('calculated denorm string l_denorm_str is ', 'l_denorm_str' );
3457 l(' ELSE');
3458 l(' l_denorm_str := p_denorm_str;');
3459 ldbg_sv('calculated denorm string l_denorm_str is ', 'l_denorm_str');
3460 l(' END IF;');
3461
3462 FIRST := TRUE;
3463 g_party_or_query := null;
3464 g_party_and_query := null;
3465 cnt := cnt+1;
3466 FOR PRIMATTRS IN (
3467 SELECT a.ATTRIBUTE_ID, PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME, nvl(SCORE,0) SCORE
3468 FROM HZ_TRANS_ATTRIBUTES_VL a,
3469 HZ_MATCH_RULE_PRIMARY p,
3470 HZ_MATCH_RULE_SECONDARY s
3471 WHERE p.match_rule_id = p_rule_id
3472 AND s.match_rule_id (+) = p_rule_id
3473 AND s.attribute_id (+) = a.attribute_id
3474 AND p.attribute_id = a.attribute_id
3475 AND a.ENTITY_NAME = 'PARTY'
3476 AND nvl(FILTER_FLAG,'N') <> 'Y'
3477 ORDER BY SCORE) LOOP
3478 FIRST1 := TRUE;
3479 l('');
3480 l(' -- Setup query string for '||PRIMATTRS.ATTRIBUTE_NAME);
3481 l(' l_prim_temp := null;');
3482 FOR PRIMTRANS IN (
3483 SELECT f.STAGED_ATTRIBUTE_COLUMN, f.TRANSFORMATION_NAME, nvl(f.PRIMARY_FLAG,'N') PRIMARY_FLAG, f.PROCEDURE_NAME
3484 FROM HZ_TRANS_FUNCTIONS_VL f,
3485 HZ_PRIMARY_TRANS pt
3486 WHERE pt.PRIMARY_ATTRIBUTE_ID = PRIMATTRS.PRIMARY_ATTRIBUTE_ID
3487 AND pt.FUNCTION_ID = f.FUNCTION_ID)
3488 LOOP
3489 IF FIRST1 THEN
3490 l_trans := '(g_party_stage_rec.'||
3491 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
3492 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
3493 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
3494 FIRST1 := FALSE;
3495 ELSE
3496 l_trans := l_trans||' OR (g_party_stage_rec.'||
3497 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
3498 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
3499 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
3500 END IF;
3501 IF PRIMTRANS.PRIMARY_FLAG = 'Y' THEN
3502 tmp := '''A'||PRIMATTRS.ATTRIBUTE_ID||'''';
3503 ELSE
3504 tmp := 'NULL';
3505 END IF;
3506 --- Modified for Bug 4016594
3507 IF PRIMATTRS.ATTRIBUTE_NAME = 'DUNS_NUMBER_C' AND upper(PRIMTRANS.PROCEDURE_NAME) = 'HZ_TRANS_PKG.EXACT' THEN
3508 l(' IF g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NOT NULL THEN');
3509 l(' IF ltrim(g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||',''0'') IS NOT NULL THEN');
3510 l(' FOR I in lengthb(ltrim(g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||',''0''))..9 LOOP');
3511 l(' HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
3512 l(' lpad(ltrim(g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
3513 ',''0''),I,chr('||ascii('0')||')),'||tmp||',l_prim_temp);');
3514 l(' END LOOP;');
3515 l(' END IF;');
3516 l(' END IF;');
3517 ELSE
3518 l(' HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
3519 l(' g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
3520 ','||tmp||',l_prim_temp);');
3521 END IF;
3522
3523 END LOOP;
3524
3525 IF FIRST THEN
3526 FIRST := FALSE;
3527 g_party_or_query := '('||l_trans||')';
3528 g_party_and_query := '('||l_trans||')';
3529 ELSE
3530 g_party_or_query := g_party_or_query || ' OR (' || l_trans||')';
3531 g_party_and_query := g_party_and_query || ' AND (' || l_trans||')';
3532 END IF;
3533
3534 l('');
3535 IF PRIMATTRS.SCORE = 0 THEN
3536 l(' HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);');
3537 ELSE
3538 l(' IF l_denorm_str IS NOT NULL THEN');
3539 l(' IF (p_non_denorm_max_score+'||PRIMATTRS.SCORE||')>=p_threshold THEN');
3540 l(' l_denorm_str := NULL;');
3541 l(' HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);');
3542 l(' ELSIF (p_non_denorm_max_score+p_denorm_max_score+'||PRIMATTRS.SCORE||')>=p_threshold THEN');
3543 l(' HZ_DQM_SEARCH_UTIL.add_attribute_with_denorm(l_prim_temp, p_match_str, l_denorm_str, l_party_contains_str);');
3544 l(' l_denorm_str := NULL;');
3545 l(' END IF;');
3546 l(' ELSE');
3547 l(' HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);');
3548 l(' END IF;');
3549 END IF;
3550 END LOOP;
3551 l(' IF lengthb(l_party_contains_str) > 4000 THEN');
3552 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_SEARCH_CRIT_LARGE_ERROR'');');
3553 l(' FND_MESSAGE.SET_TOKEN(''ENTITY'',''PARTY'');');
3554 l(' FND_MSG_PUB.ADD;');
3555 l(' RAISE FND_API.G_EXC_ERROR;');
3556 l(' END IF;');
3557 l(' IF (p_match_str = '' AND '' OR p_party_max_score<p_threshold) AND l_party_contains_str IS NOT NULL AND p_denorm_str IS NOT NULL THEN');
3558 ldbg_s('party contains string returned by init_search is an AND between these strings ');
3559 ldbg_sv('l_party_contains_str = ', 'l_party_contains_str');
3560 ldbg_sv('p_denorm_str = ', 'p_denorm_str');
3561 l(' RETURN ''(''||l_party_contains_str||'') AND (''||p_denorm_str||'')'';');
3562 l(' ELSE');
3563 ldbg_s('party contains string returned by init_search is ', 'l_party_contains_str');
3564 l(' RETURN l_party_contains_str;');
3565 l(' END IF;');
3566 l(' END;');
3567
3568 get_column_list(p_rule_id, 'PARTY',l_p_select_list,l_p_param_list, l_p_into_list);
3569 get_column_list(p_rule_id, 'PARTY_SITES',l_ps_select_list,l_ps_param_list, l_ps_into_list);
3570 get_column_list(p_rule_id, 'CONTACTS',l_c_select_list,l_c_param_list, l_c_into_list);
3571 get_column_list(p_rule_id, 'CONTACT_POINTS',l_cpt_select_list,l_cpt_param_list, l_cpt_into_list);
3572
3573 l_party_filter_str := NULL;
3574 l_dyn_party_filter_str := NULL;
3575 FIRST := TRUE;
3576 cnt := 1;
3577 for PRIMTRANS IN (
3578 SELECT f.STAGED_ATTRIBUTE_COLUMN
3579 FROM HZ_TRANS_FUNCTIONS_VL f,
3580 HZ_TRANS_ATTRIBUTES_VL a,
3581 HZ_MATCH_RULE_PRIMARY pattr,
3582 HZ_PRIMARY_TRANS pfunc
3583 WHERE pattr.MATCH_RULE_ID = p_rule_id
3584 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
3585 AND a.ENTITY_NAME = 'PARTY'
3586 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
3587 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
3588 AND FILTER_FLAG = 'Y'
3589
3590 UNION
3591
3592 SELECT f.STAGED_ATTRIBUTE_COLUMN
3593 FROM HZ_TRANS_FUNCTIONS_VL f,
3594 HZ_TRANS_ATTRIBUTES_VL a
3595 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
3596 AND a.entity_name = 'PARTY'
3597 AND a.attribute_name='PARTY_TYPE'
3598 AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
3599 AND nvl(f.active_flag,'Y')='Y'
3600 AND ROWNUM=1
3601 ) LOOP
3602
3603 IF FIRST THEN
3604 l_party_filter_str := '(g_party_stage_rec.'||
3605 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3606 ' IS NULL OR g_party_stage_rec.'||
3607 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' = p.' ||
3608 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3609 l_dyn_party_filter_str := '(:'||
3610 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3611 ' IS NULL OR :'||
3612 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' = p.' ||
3613 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3614 FIRST := FALSE;
3615 ELSE
3616 l_dyn_party_filter_str := l_dyn_party_filter_str || ' AND ' ||
3617 '(:'||
3618 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3619 ' IS NULL OR :'||
3620 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' = p.' ||
3621 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3622 l_party_filter_str := l_party_filter_str || ' AND ' ||
3623 '(g_party_stage_rec.'||
3624 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3625 ' IS NULL OR g_party_stage_rec.'||
3626 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' = p.' ||
3627 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3628 END IF;
3629 l_party_filt_bind(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3630 cnt:=cnt+1;
3631 END LOOP;
3632
3633 add_query_gen_func('PARTY_SITES',p_rule_id);
3634 add_query_gen_func('CONTACTS',p_rule_id);
3635 add_query_gen_func('CONTACT_POINTS',p_rule_id);
3636
3637 /*********************************************************************************
3638 * Match rule private procedures to open a cursor for performing intermedia queries.
3639 * open_party_cursor - Intermedia query on HZ_STAGED_PARTIES
3640 * open_party_site_cursor - Intermedia query on HZ_STAGED_PARTY_SITES
3641 * open_contact_cursor - Intermedia query on HZ_STAGED_CONTACTS
3642 * open_contact_pt_cursor - Intermedia query on HZ_STAGED_CONTACT_POINTS
3643 *
3644 * Input:
3645 * p_dup_party_id : Called in the duplicate identification case, to filter off
3646 * the party for which we are trying find duplicates.
3647 * p_restrict_sql : restrict_sql criteria passed to match rule
3648 * p_contains_str : Intermedia query string
3649 * p_search_ctx_id : Only to called from find_party_details, for filtering against
3650 * party_ids returned by the party query
3651 * p_party_id : USed in the get_matching_party_sites, get_matching_contacts and
3652 * get_matching_cpts procedures, to only find records belonging to the specified
3653 * party_id
3654 *********************************************************************************/
3655
3656 IF l_purpose = 'S' THEN
3657 l_party_name_score:='decode(TX8,g_party_stage_rec.TX8||'' '',100,90)';
3658 ELSE
3659 BEGIN
3660 SELECT to_char(score) INTO l_party_name_score from HZ_MATCH_RULE_SECONDARY s, HZ_TRANS_ATTRIBUTES_VL a
3661 WHERE a.attribute_id = s.attribute_id
3662 AND s.match_rule_id = p_rule_id
3663 AND attribute_name = 'PARTY_NAME';
3664 EXCEPTION
3665 WHEN NO_DATA_FOUND THEN
3666 l_party_name_score := '0';
3667 END;
3668 END IF;
3669 l(' PROCEDURE open_party_cursor_direct (');
3670 l(' p_dup_party_id NUMBER, ');
3671 l(' p_restrict_sql VARCHAR2, ');
3672 l(' p_match_str VARCHAR2,');
3673 l(' p_search_merged VARCHAR2,');
3674 l(' p_party_contains_str VARCHAR2,');
3675 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
3676 l(' l_sqlstr VARCHAR2(4000);');
3677 l(' l_search_merged VARCHAR2(1);');
3678 l(' BEGIN');
3679 ldbg_s('-----------------','calling procedure open party cursor direct');
3680 l(' IF (p_search_merged is null) then ');
3681 l(' l_search_merged := ''N''; ');
3682 l(' ELSE ');
3683 l(' l_search_merged := p_search_merged; ');
3684 l(' END IF; ');
3685 ldbg_sv('Search Merged Flag - ','l_search_merged');
3686 l(' IF p_restrict_sql IS NULL AND NOT g_other_party_level_attribs AND NOT (p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,''D_PS'')>0 AND g_party_site_stage_list.COUNT=1) THEN');
3687 ldbg_s('Restrict SQL is NULL and other conditions met to OPEN x_cursor');
3688 l(' OPEN x_cursor FOR ');
3689 l(' SELECT PARTY_ID '|| l_p_select_list);
3690 l(' FROM hz_staged_parties ');
3691 l(' WHERE TX8 LIKE g_party_stage_rec.TX8||'' %''');
3692 l(' AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||'' '' = TX36))');
3693 l(' AND( (l_search_merged =''Y'' ) ');
3694 l(' OR (l_search_merged = ''I'' AND nvl(status, ''A'') in (''A'', ''I'')) ');
3695 l(' OR (l_search_merged = ''N'' AND nvl(status, ''A'') in (''A''))) ');
3696 l(' AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id);');
3697 l(' ELSE');
3698 ldbg_s('Restrict SQL is NOT NULL OR other conditions not met, Else Part');
3699 l(' l_sqlstr := ''SELECT PARTY_ID '|| l_p_select_list||' FROM hz_staged_parties stage '';');
3700 l(' l_sqlstr := l_sqlstr || '' WHERE TX8 like :TX8||'''' %'''' '';');
3701 l(' l_sqlstr := l_sqlstr || '' AND (:TX36 IS NULL OR :TX36||'''' '''' = TX36) '';');
3702 l(' IF l_search_merged = ''N'' THEN');
3703 l(' l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''')=''''A'''' '';');
3704 l(' ELSIF l_search_merged = ''I'' THEN');
3705 l(' l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''') in (''''A'''',''''I'''') '';');
3706 l(' END IF;');
3707 l(' l_sqlstr := l_sqlstr || '' AND (:p_dup IS NULL OR party_id <> :p_dup ) '';');
3708 l(' IF g_other_party_level_attribs THEN');
3709 FIRST := TRUE;
3710 cnt := 1;
3711 FOR PATTRS IN (
3712 SELECT PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME
3713 FROM HZ_TRANS_ATTRIBUTES_VL a,
3714 HZ_MATCH_RULE_PRIMARY p
3715 WHERE p.match_rule_id = p_rule_id
3716 AND p.attribute_id = a.attribute_id
3717 AND a.ENTITY_NAME = 'PARTY'
3718 AND a.attribute_name <> 'PARTY_NAME'
3719 AND nvl(FILTER_FLAG,'N') = 'N') LOOP
3720 IF FIRST THEN
3721 l(' l_sqlstr := l_sqlstr || '' AND ((:attr IS NULL OR '';');
3722 FIRST := FALSE;
3723 ELSE
3724 l(' l_sqlstr := l_sqlstr || '' ''||p_match_str||'' (:attr IS NULL OR '';');
3725 END IF;
3726
3727 FIRST1 := TRUE;
3728 FOR PRIMTRANS IN (
3729 SELECT f.STAGED_ATTRIBUTE_COLUMN
3730 FROM HZ_TRANS_FUNCTIONS_VL f,
3731 HZ_PRIMARY_TRANS pt
3732 WHERE pt.PRIMARY_ATTRIBUTE_ID = PATTRS.PRIMARY_ATTRIBUTE_ID
3733 AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
3734 IF FIRST1 THEN
3735 l(' l_sqlstr := l_sqlstr || '' ('||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3736 FIRST1 := FALSE;
3737 party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3738 cnt := cnt+1;
3739 ELSE
3740 l(' l_sqlstr := l_sqlstr || '' OR '||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3741 END IF;
3742 party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3743 cnt := cnt+1;
3744 END LOOP;
3745 l(' l_sqlstr := l_sqlstr || '' )) '';');
3746 END LOOP;
3747 IF NOT FIRST THEN
3748 l(' l_sqlstr := l_sqlstr || '' ) '';');
3749 END IF;
3750
3751 FOR PATTRS IN (
3752 SELECT PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME
3753 FROM HZ_TRANS_ATTRIBUTES_VL a,
3754 HZ_MATCH_RULE_PRIMARY p
3755 WHERE p.match_rule_id = p_rule_id
3756 AND p.attribute_id = a.attribute_id
3757 AND a.ENTITY_NAME = 'PARTY'
3758 AND a.attribute_name <> 'PARTY_NAME'
3759 AND nvl(FILTER_FLAG,'N') = 'Y') LOOP
3760 l(' l_sqlstr := l_sqlstr || '' AND (:attr IS NULL OR '';');
3761
3762 FIRST1 := TRUE;
3763 FOR PRIMTRANS IN (
3764 SELECT f.STAGED_ATTRIBUTE_COLUMN
3765 FROM HZ_TRANS_FUNCTIONS_VL f,
3766 HZ_PRIMARY_TRANS pt
3767 WHERE pt.PRIMARY_ATTRIBUTE_ID = PATTRS.PRIMARY_ATTRIBUTE_ID
3768 AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
3769 IF FIRST1 THEN
3770 l(' l_sqlstr := l_sqlstr || '' ('||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3771 FIRST1 := FALSE;
3772 party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3773 cnt := cnt+1;
3774 ELSE
3775 l(' l_sqlstr := l_sqlstr || '' OR '||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3776 END IF;
3777 party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3778 cnt := cnt+1;
3779 END LOOP;
3780 l(' l_sqlstr := l_sqlstr || '' )) '';');
3781 END LOOP;
3782 IF party_binds.COUNT=0 THEN
3783 l(' NULL;');
3784 END IF;
3785 l(' END IF;');
3786 l_party_level_cnt := cnt;
3787 l(' IF p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,''D_PS'')>0 AND g_party_site_stage_list.COUNT=1 THEN');
3788 ldbg_s('p_party_contains_str string is NOT NULL and other conditions met');
3789 FIRST := TRUE;
3790 FOR DENATTR IN (
3791 SELECT PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME
3792 FROM HZ_TRANS_ATTRIBUTES_VL a,
3793 HZ_MATCH_RULE_PRIMARY p
3794 WHERE p.match_rule_id = p_rule_id
3795 AND p.attribute_id = a.attribute_id
3796 AND a.ENTITY_NAME = 'PARTY_SITES'
3797 AND nvl(a.denorm_flag,'N') = 'Y') LOOP
3798 l(' l_sqlstr := l_sqlstr || '' AND (:attr IS NULL OR '';');
3799 FIRST1 := TRUE;
3800 FOR DENTRANS IN (
3801 SELECT f.STAGED_ATTRIBUTE_COLUMN
3802 FROM HZ_TRANS_FUNCTIONS_VL f,
3803 HZ_PRIMARY_TRANS pt
3804 WHERE pt.PRIMARY_ATTRIBUTE_ID = DENATTR.PRIMARY_ATTRIBUTE_ID
3805 AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
3806 IF FIRST1 THEN
3807 l(' l_sqlstr := l_sqlstr || '' (D_PS like ''''% ''''||:'||DENTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3808 FIRST1 := FALSE;
3809 party_binds(cnt) := 'g_party_site_stage_list(1).'||DENTRANS.STAGED_ATTRIBUTE_COLUMN;
3810 cnt := cnt+1;
3811 ELSE
3812 l(' l_sqlstr := l_sqlstr || '' OR D_PS like ''''% ''''||:'||DENTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3813 END IF;
3814 party_binds(cnt) := 'g_party_site_stage_list(1).'||DENTRANS.STAGED_ATTRIBUTE_COLUMN;
3815 cnt := cnt+1;
3816 END LOOP;
3817 l(' l_sqlstr := l_sqlstr || '' )) '';');
3818 END LOOP;
3819 IF l_party_level_cnt=cnt THEN
3820 l(' null;');
3821 END IF;
3822 l(' END IF;');
3823 ldbg_s('l_sqlstr before appending restrict_sql');
3824 ldbg_sv('l_sqlstr is - ','l_sqlstr');
3825
3826 l(' IF p_restrict_sql IS NOT NULL THEN');
3827 l(' l_sqlstr := l_sqlstr || '' AND ''||p_restrict_sql||'' '';');
3828 l(' END IF;');
3829 ldbg_s('l_sqlstr after appending restrict_sql');
3830 ldbg_sv('l_sqlstr is - ','l_sqlstr');
3831 l(' IF g_other_party_level_attribs AND p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,''D_PS'')>0 AND g_party_site_stage_list.COUNT=1 THEN');
3832 ldbg_s('IF g_other_party_level_attribs AND p_party_contains_str IS NOT NULL AND ...');
3833 l(' OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id');
3834 FOR I in 1..party_binds.COUNT LOOP
3835 l(' ,'||party_binds(I));
3836 END LOOP;
3837 l(' ;');
3838 l(' ELSIF g_other_party_level_attribs THEN');
3839 ldbg_s('ELSIF g_other_party_level_attribs THEN');
3840 l(' OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id');
3841 FOR I in 1..(l_party_level_cnt-1)LOOP
3842 l(' ,'||party_binds(I));
3843 END LOOP;
3844 l(' ;');
3845 l(' ELSIF p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,''D_PS'')>0 AND g_party_site_stage_list.COUNT=1 THEN');
3846 ldbg_s('ELSIF p_party_contains_str IS NOT NULL AND ...');
3847 l(' OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id');
3848 FOR I in l_party_level_cnt..party_binds.COUNT LOOP
3849 l(' ,'||party_binds(I));
3850 END LOOP;
3851 l(' ;');
3852 l(' ELSE');
3853 ldbg_s('ELSE code fork');
3854 l(' OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id;');
3855 l(' END IF;');
3856 l(' END IF;');
3857 l(' END;');
3858
3859 l(' PROCEDURE open_party_cursor(');
3860 l(' p_dup_party_id NUMBER, ');
3861 l(' p_restrict_sql VARCHAR2, ');
3862 l(' p_contains_str VARCHAR2, ');
3863 l(' p_search_ctx_id NUMBER,');
3864 l(' p_match_str VARCHAR2,');
3865 l(' p_search_merged VARCHAR2,');
3866 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
3867 l(' l_sqlstr VARCHAR2(4000);');
3868 l(' l_hint VARCHAR2(100); ');
3869 l(' l_check NUMBER; ');
3870 l(' l_search_merged VARCHAR2(1); ');
3871 l(' BEGIN');
3872 ldbg_s('-----------------','calling procedure open party cursor');
3873 l(' IF (p_search_merged is null) then ');
3874 l(' l_search_merged := ''N''; ');
3875 l(' ELSE ');
3876 l(' l_search_merged := p_search_merged; ');
3877 l(' END IF; ');
3878 l(' IF p_contains_str IS NULL THEN');
3879 ldbg_s('part contains string is null');
3880 /**** To query based on party_id .. from the get_score_details flow ***/
3881 l(' OPEN x_cursor FOR ');
3882 l(' SELECT PARTY_ID '|| l_p_select_list);
3883 l(' FROM HZ_STAGED_PARTIES stage');
3884 l(' WHERE PARTY_ID = p_dup_party_id;');
3885
3886 /**** Static queries when restrict_sql is null OR if p_search_ctx_id IS NOT NULL *****/
3887 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
3888 ldbg_s('Either restrict sql is null or search context id is not null');
3889 /**** When search context ID is null .. Retrieve rows using intermedia index ****/
3890 l(' IF p_search_ctx_id IS NULL THEN');
3891 ldbg_s('Search context id is null');
3892 l(' OPEN x_cursor FOR ');
3893 l(' SELECT PARTY_ID '|| l_p_select_list);
3894 l(' FROM HZ_STAGED_PARTIES stage');
3895 IF l_party_filter_str IS NOT NULL THEN
3896 l(' WHERE contains( concat_col, p_contains_str)>0');
3897 l(' AND ('||replace(l_party_filter_str,'p.','stage.')||')');
3898 ELSE
3899 l(' WHERE contains( concat_col, p_contains_str)>0');
3900 END IF;
3901 l(' AND( (l_search_merged =''Y'' ) ');
3902 l(' OR (l_search_merged = ''I'' AND nvl(stage.status, ''A'') in (''A'', ''I'')) ');
3903 l(' OR (l_search_merged = ''N'' AND nvl(stage.status, ''A'') in (''A'')) ) ');
3904 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
3905
3906
3907 /**** When search context ID is not null .. Query using DQM_PARTIES_GT. Filter using
3908 intermedia index ****/
3909 l(' ELSE');
3910 ldbg_s('Search context id is not null');
3911 l(' OPEN x_cursor FOR ');
3912 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTIES_U1) */ stage.PARTY_ID '|| l_p_select_list);
3913 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTIES stage');
3914 l(' WHERE contains( concat_col, p_contains_str)>0');
3915 l(' AND d.SEARCH_CONTEXT_ID=p_search_ctx_id');
3916 l(' AND d.party_id = stage.party_id');
3917 IF l_party_filter_str IS NOT NULL THEN
3918 l(' AND ('||replace(l_party_filter_str,'p.','stage.')||')');
3919 END IF;
3920 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
3921 l(' AND( (l_search_merged =''Y'' ) ');
3922 l(' OR (l_search_merged = ''I'' AND nvl(stage.status, ''A'') in (''A'', ''I'')) ');
3923 l(' OR (l_search_merged = ''N'' AND nvl(stage.status, ''A'') in (''A'')) ); ');
3924 l(' END IF;');
3925
3926 /**** When restrict_sql is not null *****/
3927 l(' ELSE');
3928 ldbg_s('Restrict sql is not null');
3929 l(' l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
3930 l(' IF (l_check > 0 ) THEN ');
3931 ldbg_s('Restrict sql has a Selective Hint');
3932 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_PARTIES_U1) */''; ');
3933 l(' END IF; ');
3934 /**** When search context ID is null .. Access using intermedia index ***/
3935 l(' IF p_search_ctx_id IS NULL THEN');
3936 l(' l_sqlstr := ''SELECT '' || l_hint || '' PARTY_ID '|| l_p_select_list||'''||');
3937 l(' '' FROM HZ_STAGED_PARTIES stage''||');
3938 l(' '' WHERE contains( concat_col, :cont)>0''||');
3939 IF l_dyn_party_filter_str IS NOT NULL THEN
3940 l(' '' AND ('||replace(l_dyn_party_filter_str,'p.','stage.')||')''||');
3941 END IF;
3942 l(' '' AND (''||p_restrict_sql||'')'' ||');
3943 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
3944 l(' IF l_search_merged = ''Y'' THEN ');
3945 l(' l_sqlstr := l_sqlstr ; ');
3946 l(' ELSIF l_search_merged = ''I'' THEN ');
3947 l(' l_sqlstr := l_sqlstr ||'' AND nvl(stage.status,''''A'''') in (''''A'''', ''''I'''')''; ');
3948 l(' ELSE ');
3949 l(' l_sqlstr := l_sqlstr ||'' AND nvl(stage.status,''''A'''') in (''''A'''')''; ');
3950 l(' END IF; ');
3951 l(' output_long_strings(''----------------------------------------------------------'');');
3952 l(' output_long_strings(''Party Contains String = ''||p_contains_str);');
3953 l(' output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
3954 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
3955 FOR I in 1..l_party_filt_bind.COUNT LOOP
3956 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
3957 END LOOP;
3958 l(' ,p_dup_party_id, p_dup_party_id;');
3959 l(' END IF;');
3960 l(' END IF;');
3961 l(' exception');
3962 l(' when others then');
3963 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
3964 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
3965 l(' FND_MSG_PUB.ADD;');
3966 l(' RAISE FND_API.G_EXC_ERROR;');
3967 --Start Bug No: 3032742.
3968 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
3969 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
3970 l(' FND_MSG_PUB.ADD;');
3971 l(' RAISE FND_API.G_EXC_ERROR;');
3972 --Bug: 3392837
3973 l(' elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
3974 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
3975 l(' FND_MSG_PUB.ADD;');
3976 l(' RAISE FND_API.G_EXC_ERROR;');
3977 --End Bug No : 3032742.
3978 l(' else ');
3979 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
3980 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
3981 l(' FND_MSG_PUB.ADD;');
3982 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
3983 l(' end if;');
3984 l(' END;');
3985 l('');
3986
3987 l(' PROCEDURE open_party_site_cursor(');
3988 l(' p_dup_party_id NUMBER, ');
3989 l(' p_party_id NUMBER, ');
3990 l(' p_restrict_sql VARCHAR2, ');
3991 l(' p_contains_str VARCHAR2, ');
3992 l(' p_search_ctx_id NUMBER, ');
3993 l(' p_search_merged VARCHAR2, ');
3994 l(' p_search_rel_sites VARCHAR2, ');
3995 l(' p_person_api VARCHAR2, ');
3996 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
3997 l(' l_sqlstr VARCHAR2(4000);');
3998 l(' l_hint VARCHAR2(100); ');
3999 l(' l_check NUMBER; ');
4000 l(' l_check_dt NUMBER; ');
4001 l(' l_search_merged VARCHAR2(1); ');
4002 l(' l_status_sql VARCHAR2(100); ');
4003 l(' p_restrict_sql1 VARCHAR2(4000); ');
4004 l(' ');
4005 l(' BEGIN');
4006 ldbg_s('-----------------','calling the procedure open_party_site_cursor');
4007 l(' IF (p_search_merged is null) then ');
4008 l(' l_search_merged := ''N''; ');
4009 l(' ELSE ');
4010 l(' l_search_merged := p_search_merged; ');
4011 l(' END IF; ');
4012 /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
4013 l(' IF p_party_id IS NOT NULL THEN');
4014 ldbg_s('Single Party Scenario');
4015 l(' IF p_search_rel_sites = ''N'' THEN');
4016 l(' OPEN x_cursor FOR ');
4017 l(' SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4018 l(' FROM HZ_STAGED_PARTY_SITES stage');
4019 l(' WHERE contains( concat_col, p_contains_str)>0');
4020 --Start of BugNo: 4299785
4021 l(' AND( (l_search_merged =''Y'' ) ');
4022 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4023 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4024 --End of BugNo: 4299785
4025 l(' AND stage.party_id = p_party_id; ');
4026 l(' ELSE');
4027 l(' OPEN x_cursor FOR ');
4028 l(' SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4029 l(' FROM HZ_STAGED_PARTY_SITES stage');
4030 l(' WHERE contains( concat_col, p_contains_str)>0');
4031 --Start of BugNo: 4299785
4032 l(' AND( (l_search_merged =''Y'' ) ');
4033 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4034 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4035 --End of BugNo: 4299785
4036 l(' AND stage.party_id = p_party_id ');
4037 l(' UNION');
4038 l(' SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'|| l_ps_select_list);
4039 l(' FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc');
4040 l(' WHERE contains( concat_col, p_contains_str)>0');
4041 --Start of BugNo: 4299785
4042 l(' AND( (l_search_merged =''Y'' ) ');
4043 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4044 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4045 --End of BugNo: 4299785
4046 l(' AND r.object_id = p_party_id ');
4047 l(' AND r.subject_id = stage.party_id ');
4048 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
4049 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
4050 l(' AND r.relationship_id = oc.party_relationship_id');
4051 l(' AND oc.org_contact_id = stage.org_contact_id; ');
4052 l(' END IF;');
4053 /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
4054 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
4055 ldbg_s('Either restrict sql is null or search context id is not null');
4056 /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
4057 l(' IF p_search_ctx_id IS NULL THEN');
4058 ldbg_s('Search context id is null');
4059 l(' OPEN x_cursor FOR ');
4060 l(' SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4061 l(' FROM HZ_STAGED_PARTY_SITES stage');
4062 IF l_party_filter_str IS NOT NULL THEN
4063 l(' WHERE contains( concat_col, p_contains_str)>0');
4064 l(' AND EXISTS (');
4065 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
4066 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
4067 l(' AND( (l_search_merged =''Y'' ) ');
4068 l(' OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I'')) ');
4069 l(' OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A'')) ) ');
4070 l(' AND ('||l_party_filter_str||'))');
4071 ELSE
4072 l(' WHERE contains( concat_col, p_contains_str)>0');
4073
4074 END IF;
4075 --Start of BugNo: 4299785
4076 l(' AND( (l_search_merged =''Y'' ) ');
4077 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4078 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4079 --End of BugNo: 4299785
4080 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4081
4082 /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
4083 l(' ELSE');
4084 ldbg_s('Search context id is not null');
4085 l(' IF p_person_api = ''Y'' THEN');
4086 l(' OPEN x_cursor FOR ');
4087 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4088 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage');
4089 l(' WHERE contains( concat_col, p_contains_str)>0');
4090 --Start of BugNo: 4299785
4091 l(' AND( (l_search_merged =''Y'' ) ');
4092 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4093 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4094 --End of BugNo: 4299785
4095 l(' AND d.search_context_id = p_search_ctx_id');
4096 l(' AND d.party_id = stage.party_id');
4097 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
4098 l(' UNION ');
4099 l(' SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, r.subject_id, stage.ORG_CONTACT_ID'|| l_ps_select_list);
4100 l(' FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage');
4101 l(' WHERE contains( concat_col, p_contains_str)>0');
4102 --Start of BugNo: 4299785
4103 l(' AND( (l_search_merged =''Y'' ) ');
4104 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4105 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4106 --End of BugNo: 4299785
4107 l(' AND d.search_context_id = p_search_ctx_id');
4108 l(' AND d.party_id = r.subject_id');
4109 l(' AND r.relationship_id = oc.party_relationship_id');
4110 l(' AND oc.org_contact_id = stage.org_contact_id');
4111 l(' AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);');
4112 l(' ELSE');
4113 l(' OPEN x_cursor FOR ');
4114 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4115 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage');
4116 l(' WHERE contains( concat_col, p_contains_str)>0');
4117 --Start of BugNo: 4299785
4118 l(' AND( (l_search_merged =''Y'' ) ');
4119 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4120 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4121 --End of BugNo: 4299785
4122 l(' AND d.search_context_id = p_search_ctx_id');
4123 l(' AND d.party_id = stage.party_id');
4124 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4125 l(' END IF;');
4126
4127 l(' END IF;');
4128
4129 /**** Restrict_sql is not null. Retrieve using intermedia ****/
4130 l(' ELSE');
4131 ldbg_s('Restrict sql is not null');
4132 l(' l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
4133 l(' l_check_dt := instrb(p_restrict_sql, ''SELECTIVE_PS''); ');
4134 l(' IF (l_check_dt > 0 ) THEN ');
4135 ldbg_s('Restrict sql has the selective_ps hint');
4136 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */''; ');
4137 l(' ELSIF (l_check > 0 ) THEN ');
4138 ldbg_s('Restrict sql has the selective hint');
4139 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */''; ');
4140 l(' END IF; ');
4141 l(' IF l_search_merged = ''Y'' THEN ');
4142 l(' l_status_sql := '' '' ; ');
4143 l(' ELSIF l_search_merged = ''I'' THEN ');
4144 l(' l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''', ''''I'''')''; ');
4145 l(' ELSE ');
4146 l(' l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''')''; ');
4147 l(' END IF; ');
4148 /* Performance fix for Bug:4643321*/
4149 l(' /*Performance fix for Bug:4589953*/ ');
4150 l(' IF(p_person_api=''Y'') THEN ');
4151 l(' IF (l_check > 0 ) THEN ');
4152 l(' IF instrb(p_restrict_sql, ''STAGE.'') > 0 THEN ');
4153 l(' p_restrict_sql1 := replace( p_restrict_sql, ''STAGE.'', ''stage1.'');');
4154 l(' ELSIF instrb(p_restrict_sql, ''stage.'') > 0 THEN ');
4155 l(' p_restrict_sql1 := replace( p_restrict_sql, ''stage.'', ''stage1.'');');
4156 l(' ELSE');
4157 l(' p_restrict_sql1 := ''stage1.''||p_restrict_sql;');
4158 l(' END IF; ');
4159 l(' l_sqlstr := ''SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4160 l(' '' FROM HZ_STAGED_PARTY_SITES stage''||');
4161 l(' '' WHERE contains( concat_col, :cont)>0''||');
4162 --Start of BugNo: 4299785
4163 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''|| ');
4164 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''|| ');
4165 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''|| ');
4166 --End of BugNo: 4299785
4167 l(' '' AND (ORG_CONTACT_ID IS NULL '' ||');
4168 l(' '' AND (''||p_restrict_sql||''))'' ||');
4169 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '' ||');
4170 l(' '' UNION '' ||');
4171 l(' ''SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4172 l(' '' FROM HZ_STAGED_PARTY_SITES stage''||');
4173 l(' '' WHERE contains( concat_col, :cont)>0''||');
4174 --Start of BugNo: 4299785
4175 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''|| ');
4176 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''|| ');
4177 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''|| ');
4178 --End of BugNo: 4299785
4179
4180 l(' '' AND ORG_CONTACT_ID IN '' ||');
4181 l(' '' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships '' ||');
4182 l(' '' where subject_type = ''''PERSON'''' AND object_type = ''''ORGANIZATION'''') stage1 '' ||');
4183 l(' '' where stage1.relationship_id = oc.party_relationship_id '' || ');
4184 l(' '' and (''||p_restrict_sql1|| '') )'' ||') ;
4185 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4186 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str,');
4187 l(' p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;');
4188
4189 l(' ELSE ');
4190 l(' l_sqlstr := ''SELECT '' || l_hint ||'' PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4191 l(' '' FROM HZ_STAGED_PARTY_SITES stage''||');
4192 l(' '' WHERE contains( concat_col, :cont)>0''||');
4193 --Start of BugNo: 4299785
4194 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''|| ');
4195 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''|| ');
4196 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''|| ');
4197 --End of BugNo: 4299785
4198 IF l_dyn_party_filter_str IS NOT NULL THEN
4199 l(' '' AND EXISTS (''||');
4200 l(' '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4201 l(' '' WHERE p.party_id = stage.party_id '' || ');
4202 l(' '' AND ('||l_dyn_party_filter_str||') ''|| l_status_sql ||'' ) '' || ');
4203 END IF;
4204 l(' '' AND (''||get_adjusted_restrict_sql(p_restrict_sql)||'')'' ||');
4205 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4206 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4207 FOR I in 1..l_party_filt_bind.COUNT LOOP
4208 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4209 END LOOP;
4210 l(' ,p_dup_party_id, p_dup_party_id;');
4211 l(' END IF; ');
4212
4213 l(' ELSE ');
4214 l(' l_sqlstr := ''SELECT '' || l_hint ||'' PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4215 l(' '' FROM HZ_STAGED_PARTY_SITES stage''||');
4216 l(' '' WHERE contains( concat_col, :cont)>0''||');
4217 --Start of BugNo: 4299785
4218 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''|| ');
4219 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''|| ');
4220 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''|| ');
4221 --End of BugNo: 4299785
4222
4223 IF l_dyn_party_filter_str IS NOT NULL THEN
4224 l(' '' AND EXISTS (''||');
4225 l(' '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4226 l(' '' WHERE p.party_id = stage.party_id '' || ');
4227 l(' '' AND ('||l_dyn_party_filter_str||') ''|| l_status_sql ||'' ) '' || ');
4228 END IF;
4229 l(' '' AND (''||p_restrict_sql||'')'' ||');
4230 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4231 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4232 FOR I in 1..l_party_filt_bind.COUNT LOOP
4233 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4234 END LOOP;
4235 l(' ,p_dup_party_id, p_dup_party_id;');
4236 l(' END IF; ');
4237 l(' END IF;');
4238 l(' output_long_strings(''----------------------------------------------------------'');');
4239 l(' output_long_strings(''Party Site Contains String = ''||p_contains_str);');
4240 l(' output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
4241 l(' exception');
4242 l(' when others then');
4243 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
4244 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
4245 l(' FND_MSG_PUB.ADD;');
4246 l(' RAISE FND_API.G_EXC_ERROR;');
4247 --Start Bug No: 3032742.
4248 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
4249 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4250 l(' FND_MSG_PUB.ADD;');
4251 l(' RAISE FND_API.G_EXC_ERROR;');
4252 --Bug: 3392837
4253 l(' elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
4254 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4255 l(' FND_MSG_PUB.ADD;');
4256 l(' RAISE FND_API.G_EXC_ERROR;');
4257 --End Bug No : 3032742.
4258 l(' else ');
4259 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
4260 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4261 l(' FND_MSG_PUB.ADD;');
4262 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4263 l(' end if;');
4264 l(' END;');
4265 l('');
4266 l(' PROCEDURE open_contact_cursor(');
4267 l(' p_dup_party_id NUMBER, ');
4268 l(' p_party_id NUMBER, ');
4269 l(' p_restrict_sql VARCHAR2, ');
4270 l(' p_contains_str VARCHAR2, ');
4271 l(' p_search_ctx_id NUMBER, ');
4272 l(' p_search_merged VARCHAR2, ');
4273 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
4274 l(' l_sqlstr VARCHAR2(4000);');
4275 l(' l_hint VARCHAR2(100); ');
4276 l(' l_check NUMBER; ');
4277 l(' l_check_dt NUMBER; ');
4278 l(' l_search_merged VARCHAR2(1); ');
4279 l(' l_status_sql VARCHAR2(100); ');
4280 l(' ');
4281 l(' BEGIN');
4282 ldbg_s('-----------------','calling the procedure open_contact_cursor');
4283 l(' IF (p_search_merged is null) then ');
4284 l(' l_search_merged := ''N''; ');
4285 l(' ELSE ');
4286 l(' l_search_merged := p_search_merged; ');
4287 l(' END IF; ');
4288 /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
4289 l(' IF p_party_id IS NOT NULL THEN');
4290 ldbg_s('Single party scenario');
4291 l(' OPEN x_cursor FOR ');
4292 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
4293 l(' FROM HZ_STAGED_CONTACTS stage');
4294 IF l_party_filter_str IS NOT NULL THEN
4295 l(' WHERE contains( concat_col, p_contains_str)>0');
4296 l(' AND EXISTS (');
4297 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
4298 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
4299 l(' AND( (l_search_merged =''Y'' ) ');
4300 l(' OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I'')) ');
4301 l(' OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A'')) ) ');
4302 l(' AND ('||l_party_filter_str||'))');
4303 ELSE
4304 l(' WHERE contains( concat_col, p_contains_str)>0');
4305 END IF;
4306 --Start of BugNo: 4299785
4307 l(' AND( (l_search_merged =''Y'' ) ');
4308 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4309 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4310 --End of BugNo: 4299785
4311 l(' AND stage.party_id = p_party_id;');
4312 /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
4313 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
4314 ldbg_s('Either Restrict sql is null or Search Context Id is not null');
4315 /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
4316 l(' IF p_search_ctx_id IS NULL THEN');
4317 ldbg_s('Search Context id is null');
4318 l(' OPEN x_cursor FOR ');
4319 l(' SELECT ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
4320 l(' FROM HZ_STAGED_CONTACTS stage');
4321 IF l_party_filter_str IS NOT NULL THEN
4322 l(' WHERE contains( concat_col, p_contains_str)>0');
4323 l(' AND EXISTS (');
4324 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
4325 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
4326 l(' AND( (l_search_merged =''Y'' ) ');
4327 l(' OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I'')) ');
4328 l(' OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A'')) ) ');
4329 l(' AND ('||l_party_filter_str||'))');
4330 ELSE
4331 l(' WHERE contains( concat_col, p_contains_str)>0');
4332 END IF;
4333 --Start of BugNo: 4299785
4334 l(' AND( (l_search_merged =''Y'' ) ');
4335 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4336 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4337 --End of BugNo: 4299785
4338 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4339
4340 /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
4341 l(' ELSE');
4342 ldbg_s('Search Context id is not null');
4343 l(' OPEN x_cursor FOR ');
4344 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID'|| l_c_select_list);
4345 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage');
4346 l(' WHERE contains( concat_col, p_contains_str)>0');
4347 l(' AND d.search_context_id = p_search_ctx_id');
4348 l(' AND d.party_id = stage.party_id');
4349 /*
4350 IF l_party_filter_str IS NOT NULL THEN
4351 l(' AND EXISTS (');
4352 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
4353 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
4354 l(' AND ('||l_party_filter_str||'))');
4355 END IF;
4356 */
4357 --Start of BugNo: 4299785
4358 l(' AND( (l_search_merged =''Y'' ) ');
4359 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4360 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4361 --End of BugNo: 4299785
4362 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4363 l(' END IF;');
4364
4365 /**** Restrict_sql is not null. Retrieve using intermedia ****/
4366 l(' ELSE');
4367 ldbg_s('Restrict Sql is not null');
4368 l(' l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
4369 l(' l_check_dt := instrb(p_restrict_sql, ''SELECTIVE_CT''); ');
4370 l(' IF (l_check_dt > 0 ) THEN ');
4371 ldbg_s('Restrict sql has the selective_ct hint');
4372 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */''; ');
4373 l(' ELSIF (l_check > 0 ) THEN ');
4374 ldbg_s('Restrict sql has the selective hint');
4375 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */''; ');
4376 l(' END IF; ');
4377 l(' IF l_search_merged = ''Y'' THEN ');
4378 l(' l_status_sql := '' '' ; ');
4379 l(' ELSIF l_search_merged = ''I'' THEN ');
4380 l(' l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''', ''''I'''')''; ');
4381 l(' ELSE ');
4382 l(' l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''')''; ');
4383 l(' END IF; ');
4384 l(' l_sqlstr := ''SELECT '' || l_hint || '' ORG_CONTACT_ID, PARTY_ID '|| l_c_select_list||'''||');
4385 l(' '' FROM HZ_STAGED_CONTACTS stage''||');
4386 l(' '' WHERE contains( concat_col, :cont)>0''||');
4387 IF l_dyn_party_filter_str IS NOT NULL THEN
4388 l(' '' AND EXISTS (''||');
4389 l(' '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4390 l(' '' WHERE p.party_id = stage.party_id '' || ');
4391 l(' '' AND ('||l_dyn_party_filter_str||') ''|| l_status_sql ||'' ) '' || ');
4392 END IF;
4393 --Start of BugNo: 4299785
4394 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''||');
4395 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''||');
4396 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''||');
4397 --End of BugNo: 4299785
4398 l(' '' AND (''||p_restrict_sql||'')'' ||');
4399 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4400 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4401 FOR I in 1..l_party_filt_bind.COUNT LOOP
4402 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4403 END LOOP;
4404 l(' ,p_dup_party_id, p_dup_party_id;');
4405 l(' END IF;');
4406 l(' output_long_strings(''----------------------------------------------------------'');');
4407 l(' output_long_strings(''Contacts Contains String = ''||p_contains_str);');
4408 l(' output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
4409 l(' exception');
4410 l(' when others then');
4411 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
4412 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
4413 l(' FND_MSG_PUB.ADD;');
4414 l(' RAISE FND_API.G_EXC_ERROR;');
4415 --Start Bug No: 3032742.
4416 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
4417 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4418 l(' FND_MSG_PUB.ADD;');
4419 l(' RAISE FND_API.G_EXC_ERROR;');
4420 --Bug: 3392837
4421 l(' elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
4422 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4423 l(' FND_MSG_PUB.ADD;');
4424 l(' RAISE FND_API.G_EXC_ERROR;');
4425 --End Bug No : 3032742.
4426 l(' else ');
4427 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
4428 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4429 l(' FND_MSG_PUB.ADD;');
4430 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4431 l(' end if;');
4432 l(' END;');
4433 l('');
4434 l(' PROCEDURE open_contact_pt_cursor(');
4435 l(' p_dup_party_id NUMBER, ');
4436 l(' p_party_id NUMBER, ');
4437 l(' p_restrict_sql VARCHAR2, ');
4438 l(' p_contains_str VARCHAR2, ');
4439 l(' p_search_ctx_id NUMBER, ');
4440 l(' p_search_merged VARCHAR2, ');
4441 l(' p_search_rel_cpts VARCHAR2, ');
4442 l(' p_person_api VARCHAR2, ');
4443 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,');
4444 l(' p_restrict_entity VARCHAR2 DEFAULT NULL) IS');
4445 l(' l_sqlstr VARCHAR2(4000);');
4446 l(' l_hint VARCHAR2(100); ');
4447 l(' l_check NUMBER; ');
4448 l(' l_check_dt NUMBER; ');
4449 l(' l_search_merged VARCHAR2(1); ');
4450 l(' l_status_sql VARCHAR2(100); ');
4451 l(' p_restrict_sql1 VARCHAR2(4000); ');
4452 l(' ');
4453 l(' BEGIN');
4454 ldbg_s('-----------------','calling the procedure open_contact_pt_cursor');
4455 l(' IF (p_search_merged is null) then ');
4456 l(' l_search_merged := ''N''; ');
4457 l(' ELSE ');
4458 l(' l_search_merged := p_search_merged; ');
4459 l(' END IF; ');
4460 l(' IF p_restrict_entity = ''CONTACTS'' ');
4461 l(' THEN');
4462 l(' OPEN x_cursor FOR ');
4463 l(' SELECT /*+ USE_NL(d stage) ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4464 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage ');
4465 l(' WHERE contains( concat_col, p_contains_str)>0 ');
4466 l(' AND d.search_context_id = p_search_ctx_id ');
4467 --Start of BugNo: 4299785
4468 l(' AND( (l_search_merged =''Y'' ) ');
4469 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4470 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4471 --End of BugNo: 4299785
4472 l(' AND d.party_id = stage.org_contact_id ; ');
4473 l(' END IF; ');
4474
4475 l(' IF p_restrict_entity = ''PARTY_SITES'' ');
4476 l(' THEN');
4477 l(' OPEN x_cursor FOR ');
4478 l(' SELECT /*+ USE_NL(d stage) ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N3) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4479 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage ');
4480 l(' WHERE contains( concat_col, p_contains_str)>0 ');
4481 l(' AND d.search_context_id = p_search_ctx_id ');
4482 --Start of BugNo: 4299785
4483 l(' AND( (l_search_merged =''Y'' ) ');
4484 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4485 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4486 --End of BugNo: 4299785
4487 l(' AND d.party_id = stage.party_site_id ; ');
4488 l(' END IF; ');
4489
4490 l(' IF p_restrict_entity IS NULL');
4491 l(' THEN');
4492
4493 /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
4494 l(' IF p_party_id IS NOT NULL THEN');
4495 ldbg_s('Single Party Scenario');
4496 l(' IF p_search_rel_cpts = ''N'' THEN');
4497 l(' OPEN x_cursor FOR ');
4498 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4499 l(' FROM HZ_STAGED_CONTACT_POINTS stage');
4500 l(' WHERE contains( concat_col, p_contains_str)>0');
4501 --Start of BugNo: 4299785
4502 l(' AND( (l_search_merged =''Y'' ) ');
4503 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4504 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4505 --End of BugNo: 4299785
4506 l(' AND stage.party_id = p_party_id; ');
4507 l(' ELSE');
4508 l(' OPEN x_cursor FOR ');
4509 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4510 l(' FROM HZ_STAGED_CONTACT_POINTS stage');
4511 l(' WHERE contains( concat_col, p_contains_str)>0');
4512 --Start of BugNo: 4299785
4513 l(' AND( (l_search_merged =''Y'' ) ');
4514 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4515 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4516 --End of BugNo: 4299785
4517 l(' AND stage.party_id = p_party_id ');
4518 l(' UNION');
4519 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ stage.CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '|| l_cpt_select_list);
4520 l(' FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc');
4521 l(' WHERE contains( concat_col, p_contains_str)>0');
4522 l(' AND r.object_id = p_party_id ');
4523 --Start of BugNo: 4299785
4524 l(' AND( (l_search_merged =''Y'' ) ');
4525 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4526 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4527 --End of BugNo: 4299785
4528 l(' AND r.subject_id = stage.party_id ');
4529 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ' );
4530 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
4531 l(' AND r.relationship_id = oc.party_relationship_id');
4532 l(' AND oc.org_contact_id = stage.org_contact_id; ');
4533 l(' END IF;');
4534
4535 /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
4536 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
4537 ldbg_s('Either Restrict sql is null or search_context_id is not null');
4538 /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
4539 l(' IF p_search_ctx_id IS NULL THEN');
4540 ldbg_s('Either Search context id is null');
4541 l(' OPEN x_cursor FOR ');
4542 l(' SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4543 l(' FROM HZ_STAGED_CONTACT_POINTS stage');
4544 IF l_party_filter_str IS NOT NULL THEN
4545 l(' WHERE contains( concat_col, p_contains_str)>0');
4546 l(' AND EXISTS (');
4547 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
4548 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
4549 l(' AND( (l_search_merged =''Y'' ) ');
4550 l(' OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I'')) ');
4551 l(' OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A'')) ) ');
4552 l(' AND ('||l_party_filter_str||'))');
4553 ELSE
4554 l(' WHERE contains( concat_col, p_contains_str)>0');
4555 END IF;
4556 --Start of BugNo: 4299785
4557 l(' AND( (l_search_merged =''Y'' ) ');
4558 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4559 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4560 --End of BugNo: 4299785
4561 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4562
4563 /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
4564 l(' ELSE');
4565 ldbg_s('Search_context_id is not null');
4566 l(' IF p_person_api = ''Y'' THEN');
4567 l(' OPEN x_cursor FOR ');
4568 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4569 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage');
4570 l(' WHERE contains( concat_col, p_contains_str)>0');
4571 l(' AND d.search_context_id = p_search_ctx_id');
4572 l(' AND d.party_id = stage.party_id');
4573 --Start of BugNo: 4299785
4574 l(' AND( (l_search_merged =''Y'' ) ');
4575 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4576 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4577 --End of BugNo: 4299785
4578 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
4579 l(' UNION ');
4580 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, r.subject_id, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '|| l_cpt_select_list);
4581 l(' FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage');
4582 l(' WHERE contains( concat_col, p_contains_str)>0');
4583 l(' AND d.search_context_id = p_search_ctx_id');
4584 l(' AND d.party_id = r.subject_id');
4585 l(' AND r.relationship_id = oc.party_relationship_id');
4586 l(' AND oc.org_contact_id = stage.org_contact_id');
4587 --Start of BugNo: 4299785
4588 l(' AND( (l_search_merged =''Y'' ) ');
4589 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4590 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4591 --End of BugNo: 4299785
4592 l(' AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);');
4593 l(' ELSE');
4594 l(' OPEN x_cursor FOR ');
4595 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4596 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage');
4597 l(' WHERE contains( concat_col, p_contains_str)>0');
4598 l(' AND d.search_context_id = p_search_ctx_id');
4599 l(' AND d.party_id = stage.party_id');
4600 --Start of BugNo: 4299785
4601 l(' AND( (l_search_merged =''Y'' ) ');
4602 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4603 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4604 --End of BugNo: 4299785
4605 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4606 l(' END IF;');
4607
4608 l(' END IF;');
4609
4610 /**** Restrict_sql is not null. Retrieve using intermedia ****/
4611 l(' ELSE');
4612 ldbg_s('Restrict sql is not null');
4613 l(' l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
4614 l(' l_check_dt := instrb(p_restrict_sql, ''SELECTIVE_CPT''); ');
4615 l(' IF (l_check_dt > 0 ) THEN ');
4616 ldbg_s('Restrict Sql has the selective_cpt hint');
4617 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */''; ');
4618 l(' ELSIF (l_check > 0 ) THEN ');
4619 ldbg_s('Restrict Sql has the selective hint');
4620 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */''; ');
4621 l(' END IF; ');
4622 l(' IF l_search_merged = ''Y'' THEN ');
4623 l(' l_status_sql := '' '' ; ');
4624 l(' ELSIF l_search_merged = ''I'' THEN ');
4625 l(' l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''', ''''I'''')''; ');
4626 l(' ELSE ');
4627 l(' l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''')''; ');
4628 l(' END IF; ');
4629 /* IT Performance Bug:4589953, if person API then check for relationship contact points */
4630 l(' IF p_person_api = ''Y'' THEN');
4631 l(' /*Performance fix for Bug:4589953*/ ');
4632 l(' IF (l_check > 0 ) THEN ');
4633 l(' IF instrb(p_restrict_sql, ''STAGE.'') > 0 THEN ');
4634 l(' p_restrict_sql1 := replace( p_restrict_sql, ''STAGE.'', ''stage1.'');');
4635 l(' ELSIF instrb(p_restrict_sql, ''stage.'') > 0 THEN ');
4636 l(' p_restrict_sql1 := replace( p_restrict_sql, ''stage.'', ''stage1.'');');
4637 l(' ELSE');
4638 l(' p_restrict_sql1 := ''stage1.''||p_restrict_sql;');
4639 l(' END IF; ');
4640 l(' l_sqlstr := '' SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list||'''||');
4641 l(' '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4642 l(' '' WHERE contains( concat_col, :cont)>0 ''||');
4643 l(' '' AND (stage.org_contact_id is null ''||');
4644 --Start of BugNo: 4299785
4645 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''||');
4646 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''||');
4647 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''||');
4648 --End of BugNo: 4299785
4649 l(' '' AND (''||p_restrict_sql||''))'' ||');
4650 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '' ||');
4651 l(' '' UNION '' ||');
4652 l(' '' SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list||'''||');
4653 l(' '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4654 l(' '' WHERE contains( concat_col, :cont)>0 ''||');
4655 --Start of BugNo: 4299785
4656 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''||');
4657 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''||');
4658 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''||');
4659 --End of BugNo: 4299785
4660 l(' '' AND (stage.org_contact_id in '' || ');
4661 l(' '' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r '' ||');
4662 l(' '' where subject_type = ''''PERSON'''' AND object_type = ''''ORGANIZATION'''') stage1 '' || ');
4663 l(' '' where stage1.relationship_id = oc.party_relationship_id '' || ');
4664 l(' '' and (''||p_restrict_sql1 || '') ) )'' ||') ;
4665 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4666 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str,');
4667 l(' p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;');
4668
4669 l(' ELSE ');
4670 l(' l_sqlstr := ''SELECT '' || l_hint ||'' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list||'''||');
4671 l(' '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4672 l(' '' WHERE contains( concat_col, :cont)>0''||');
4673 IF l_dyn_party_filter_str IS NOT NULL THEN
4674 l(' '' AND EXISTS (''||');
4675 l(' '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4676 l(' '' WHERE p.party_id = stage.party_id '' || ');
4677 l(' '' AND ('||l_dyn_party_filter_str||') ''|| l_status_sql ||'' ) '' || ');
4678 END IF;
4679 --Start of BugNo: 4299785
4680 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''||');
4681 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''||');
4682 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''||');
4683 --End of BugNo: 4299785
4684 l(' '' AND (''||get_adjusted_restrict_sql(p_restrict_sql)||'')'' ||');
4685 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4686 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4687 FOR I in 1..l_party_filt_bind.COUNT LOOP
4688 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4689 END LOOP;
4690 l(' ,p_dup_party_id, p_dup_party_id;');
4691 l(' END IF; ');
4692
4693 l(' ELSE ');
4694 l(' l_sqlstr := ''SELECT '' || l_hint ||'' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list||'''||');
4695 l(' '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4696 l(' '' WHERE contains( concat_col, :cont)>0''||');
4697 IF l_dyn_party_filter_str IS NOT NULL THEN
4698 l(' '' AND EXISTS (''||');
4699 l(' '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4700 l(' '' WHERE p.party_id = stage.party_id '' || ');
4701 l(' '' AND ('||l_dyn_party_filter_str||') ''|| l_status_sql ||'' ) '' || ');
4702 END IF;
4703 --Start of BugNo: 4299785
4704 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''||');
4705 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''||');
4706 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''||');
4707 --End of BugNo: 4299785
4708 l(' '' AND (''||p_restrict_sql||'')'' ||');
4709 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4710 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4711 FOR I in 1..l_party_filt_bind.COUNT LOOP
4712 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4713 END LOOP;
4714 l(' ,p_dup_party_id, p_dup_party_id;');
4715 l(' END IF; ');
4716 l(' END IF;');
4717 l(' END IF; ');
4718 l(' output_long_strings(''----------------------------------------------------------'');');
4719 l(' output_long_strings(''Contact Points Contains String = ''||p_contains_str);');
4720 l(' output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
4721 l(' exception');
4722 l(' when others then');
4723 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
4724 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
4725 l(' FND_MSG_PUB.ADD;');
4726 l(' RAISE FND_API.G_EXC_ERROR;');
4727 --Start Bug No: 3032742.
4728 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
4729 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4730 l(' FND_MSG_PUB.ADD;');
4731 l(' RAISE FND_API.G_EXC_ERROR;');
4732 --Bug: 3392837
4733 l(' elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
4734 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4735 l(' FND_MSG_PUB.ADD;');
4736 l(' RAISE FND_API.G_EXC_ERROR;');
4737 --End Bug No : 3032742.
4738 l(' else ');
4739 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
4740 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4741 l(' FND_MSG_PUB.ADD;');
4742 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4743 l(' end if;');
4744 l(' END;');
4745 l('');
4746
4747 l('');
4748 l(' PROCEDURE return_direct_matches(p_restrict_sql VARCHAR2, p_match_str VARCHAR2, p_thresh NUMBER, p_search_ctx_id NUMBER, p_search_merged VARCHAR2, p_dup_party_id NUMBER, x_num_matches OUT NUMBER) IS');
4749
4750 l(' l_sqlstr VARCHAR2(4000);');
4751 l(' l_search_merged VARCHAR2(1);');
4752 l(' BEGIN');
4753 l(' IF (p_search_merged is null) then ');
4754 l(' l_search_merged := ''N''; ');
4755 l(' ELSE ');
4756 l(' l_search_merged := p_search_merged; ');
4757 l(' END IF; ');
4758 l(' IF p_restrict_sql IS NULL THEN');
4759 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
4760 l(' SELECT p_search_ctx_id, PARTY_ID, '||l_party_name_score);
4761 l(' FROM hz_staged_parties ');
4762 l(' WHERE TX8 LIKE g_party_stage_rec.TX8||'' %''');
4763 l(' AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||'' '' = TX36))');
4764 l(' AND( (l_search_merged =''Y'' ) ');
4765 l(' OR (l_search_merged = ''I'' AND nvl(status, ''A'') in (''A'', ''I'')) ');
4766 l(' OR (l_search_merged = ''N'' AND nvl(status, ''A'') in (''A''))) ');
4767 l(' AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)');
4768 l(' AND rownum <= p_thresh;');
4769 l(' ELSE');
4770 l_party_name_score:=replace(replace(l_party_name_score,'g_party_stage_rec.TX8',':TX8'),'''','''''');
4771 l(' l_sqlstr := ''INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) SELECT :ctx_id, PARTY_ID, '||l_party_name_score||' FROM hz_staged_parties stage '';');
4772 l(' l_sqlstr := l_sqlstr || '' WHERE TX8 like :TX8||'''' %'''' '';');
4773 l(' l_sqlstr := l_sqlstr || '' AND (:TX36 IS NULL OR :TX36||'''' '''' = TX36) '';');
4774 l(' IF l_search_merged = ''N'' THEN');
4775 l(' l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''')=''''A'''' '';');
4776 l(' ELSIF l_search_merged = ''Y'' THEN');
4777 l(' l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''') in (''''A'''',''''I'''') '';');
4778 l(' END IF;');
4779 l(' l_sqlstr := l_sqlstr || '' AND (:p_dup IS NULL OR party_id <> :p_dup ) '';');
4780 l(' l_sqlstr := l_sqlstr || '' AND ''||p_restrict_sql||'' '';');
4781 l(' l_sqlstr := l_sqlstr || '' AND ROWNUM <= :thresh '';');
4782
4783 IF l_purpose = 'S' THEN
4784 l(' EXECUTE IMMEDIATE l_sqlstr USING p_search_ctx_id, g_party_stage_rec.TX8,g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id,p_thresh;');
4785 ELSE
4786 l(' EXECUTE IMMEDIATE l_sqlstr USING p_search_ctx_id, g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id,p_thresh;');
4787 END IF;
4788
4789 l(' END IF;');
4790 l(' x_num_matches := SQL%ROWCOUNT;');
4791 l(' END;');
4792 l('');
4793 l(' FUNCTION get_new_score_rec (');
4794 l(' p_init_total_score NUMBER,');
4795 l(' p_init_party_score NUMBER,');
4796 l(' p_init_party_site_score NUMBER,');
4797 l(' p_init_contact_score NUMBER,');
4798 l(' p_init_contact_point_score NUMBER, ');
4799 l(' p_party_id NUMBER, ');
4800 l(' p_party_site_id NUMBER, ');
4801 l(' p_org_contact_id NUMBER, ');
4802 l(' p_contact_point_id NUMBER) ');
4803 l(' RETURN HZ_PARTY_SEARCH.score_rec IS');
4804 l(' l_score_rec HZ_PARTY_SEARCH.score_rec;');
4805 l(' BEGIN');
4806 ldbg_s('-----------------','calling the function get_new_score_rec to set the l_score_rec structure');
4807 l(' l_score_rec.TOTAL_SCORE := p_init_total_score;');
4808 l(' l_score_rec.PARTY_SCORE := p_init_party_score;');
4809 l(' l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;');
4810 l(' l_score_rec.CONTACT_SCORE := p_init_contact_score;');
4811 l(' l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;');
4812 l(' l_score_rec.PARTY_ID := p_party_id;');
4813 l(' l_score_rec.PARTY_SITE_ID := p_party_site_id;');
4814 l(' l_score_rec.ORG_CONTACT_ID := p_org_contact_id;');
4815 l(' l_score_rec.CONTACT_POINT_ID := p_contact_point_id;');
4816 l(' RETURN l_score_rec;');
4817 l(' END;');
4818 END IF; ---Code Change for Match Rule Set
4819 l('');
4820 l(' /**********************************************************');
4821 l(' This procedure finds the set of parties that match the search');
4822 l(' criteria and returns a scored set of parties');
4823 l('');
4824 l(' The steps in executing the search are as follows');
4825 l(' 1. Initialization and error checks');
4826 l(' 2. Setup of intermedia query strings for Acquisition query');
4827 l(' 3. Execution of Acquisition query');
4828 l(' 4. Execution of Secondary queries to score results');
4829 l(' 5. Setup of data temporary table to return search results');
4830 l(' **********************************************************/');
4831 l('');
4832 -- Generated
4833 l('PROCEDURE find_parties (');
4834 l(' p_rule_id IN NUMBER,');
4835 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
4836 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
4837 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
4838 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
4839 l(' p_restrict_sql IN VARCHAR2,');
4840 l(' p_match_type IN VARCHAR2,');
4841 l(' p_search_merged IN VARCHAR2,');
4842 l(' p_dup_party_id IN NUMBER,');
4843 l(' p_dup_set_id IN NUMBER,');
4844 l(' p_dup_batch_id IN NUMBER,');
4845 l(' p_ins_details IN VARCHAR2,');
4846 l(' x_search_ctx_id OUT NUMBER,');
4847 l(' x_num_matches OUT NUMBER');
4848 l(') IS');
4849 l('');
4850 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
4851 l(' -- Strings to hold the generated Intermedia query strings');
4852 l(' l_party_contains_str VARCHAR2(32000); ');
4853 l(' l_party_site_contains_str VARCHAR2(32000);');
4854 l(' l_contact_contains_str VARCHAR2(32000);');
4855 l(' l_contact_pt_contains_str VARCHAR2(32000);');
4856 l(' l_denorm_str VARCHAR2(32000);');
4857 l(' l_ps_denorm_str VARCHAR2(32000);');
4858 l(' l_ct_denorm_str VARCHAR2(32000);');
4859 l(' l_cpt_denorm_str VARCHAR2(32000);');
4860
4861 l('');
4862 l(' -- Other local variables');
4863 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
4864 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
4865 l(' -- For Score calculation');
4866 l(' l_max_score NUMBER;');
4867 l(' l_match_idx NUMBER;');
4868 l(' l_entered_max_score NUMBER;');
4869 l(' FIRST BOOLEAN;');
4870 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
4871 l('');
4872 FOR TX IN (
4873 SELECT distinct f.staged_attribute_column
4874 FROM hz_trans_functions_vl f, hz_secondary_trans st,
4875 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
4876 WHERE sa.match_rule_id = p_rule_id
4877 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
4878 AND st.function_id = f.function_id
4879 AND a.attribute_id = sa.attribute_id) LOOP
4880 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
4881 END LOOP;
4882 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
4883 l(' H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
4884 l(' H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
4885 l('');
4886 l(' l_score NUMBER;');
4887 l(' l_idx NUMBER;');
4888 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
4889 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
4890 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
4891 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
4892 l(' l_party_id NUMBER;');
4893 l(' l_ps_party_id NUMBER;');
4894 l(' l_ct_party_id NUMBER;');
4895 l(' l_cpt_party_id NUMBER;');
4896 l(' l_cpt_ps_id NUMBER;');
4897 l(' l_cpt_contact_id NUMBER;');
4898 l(' l_cpt_type VARCHAR2(100);');
4899 l(' l_party_site_id NUMBER;');
4900 l(' l_org_contact_id NUMBER;');
4901 l(' l_contact_pt_id NUMBER;');
4902 l(' l_ps_contact_id NUMBER;');
4903 l(' l_party_max_score NUMBER;');
4904 l(' l_ps_max_score NUMBER;');
4905 l(' l_contact_max_score NUMBER;');
4906 l(' l_cpt_max_score NUMBER;');
4907 l(' l_denorm_max_score NUMBER;');
4908 l(' l_non_denorm_max_score NUMBER;');
4909 l('');
4910 l(' defpt NUMBER :=0;');
4911 l(' defps NUMBER :=0;');
4912 l(' defct NUMBER :=0;');
4913 l(' defcpt NUMBER :=0;');
4914 l(' l_index NUMBER;');
4915 l(' l_max_thresh NUMBER;');
4916 l(' l_tmp NUMBER;');
4917 l(' l_merge_flag VARCHAR2(1);');
4918 l(' l_num_eval NUMBER:=0;');
4919 l('');
4920 l(' --Fix for bug 4417124 ');
4921 l(' l_use_contact_addr_info BOOLEAN := TRUE;');
4922 l(' l_use_contact_cpt_info BOOLEAN := TRUE;');
4923 l(' l_use_contact_addr_flag VARCHAR2(1) := ''Y'';');
4924 l(' l_use_contact_cpt_flag VARCHAR2(1) := ''Y'';');
4925 l('');
4926 l(' L_RETURN_IMM_EXC EXCEPTION;');
4927 l('');
4928 l(' ');
4929 l(' /********************* Find Parties private procedures *******/');
4930
4931 l(' PROCEDURE push_eval IS');
4932 l(' BEGIN');
4933 ldbg_s('-----------------','calling the procedure push_eval');
4934 ldbg_s('Emptying the lists H_PARTY_ID, H_PARTY_ID_LIST and H_SCORES');
4935 l(' H_PARTY_ID.DELETE;');
4936 l(' H_PARTY_ID_LIST.DELETE;');
4937 l(' H_SCORES.DELETE; ');
4938 l(' g_mappings.DELETE;');
4939 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
4940 l(' call_order(5) := call_order(1);');
4941 l(' call_type(5) := ''AND'';');
4942 l(' call_max_score(5) := call_max_score(1);');
4943 l(' call_type(2) := ''OR'';');
4944 l(' END;');
4945
4946 l('');
4947 l(' /** Private procedure to acquire and score at party level ***/');
4948 l(' PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
4949 l(' l_party_id_idx NUMBER:=1;');
4950 l(' l_ctx_id NUMBER;');
4951 l(' l_precalc_score BOOLEAN := FALSE;');
4952 l(' BEGIN');
4953 ldbg_s('-----------------','calling the procedure eval_party_level');
4954 l(' SAVEPOINT eval_start;');
4955 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
4956 l(' l_ctx_id := l_search_ctx_id;');
4957 ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
4958 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
4959 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
4960 l(' l_search_ctx_id,H_PARTY_ID(I));');
4961 l(' H_PARTY_ID.DELETE;');
4962 l(' H_PARTY_ID_LIST.DELETE;');
4963 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
4964 ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
4965 l(' l_ctx_id := l_search_ctx_id;');
4966 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
4967 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
4968 l(' l_search_ctx_id,H_PARTY_ID(I));');
4969 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
4970 l(' ELSE');
4971 l(' IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
4972 l(' and check_estimate_hits(''PARTY'',p_party_contains_str)>l_max_thresh THEN');
4973 ldbg_s('In eval party level estimated hits exceed threshold');
4974 l(' IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' AND p_dup_batch_id IS NULL THEN');
4975 ldbg_s('In eval party level resolution options is set to SQL search.');
4976 l(' IF (l_party_site_contains_str IS NULL AND');
4977 l(' l_contact_contains_str IS NULL AND');
4978 l(' l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN');
4979 l(' return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,p_search_merged,p_dup_party_id, x_num_matches);');
4980 l(' RAISE L_RETURN_IMM_EXC;');
4981 l(' ELSE');
4982 l(' open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);');
4983 l(' END IF;');
4984 l(' ELSE');
4985 l(' IF p_index>1 THEN');
4986 ldbg_s('In eval party level number of matches found exceeded threshold');
4987 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
4988 l(' FND_MSG_PUB.ADD;');
4989 l(' RAISE FND_API.G_EXC_ERROR;');
4990 l(' ELSE');
4991 l(' push_eval;');
4992 l(' RETURN;');
4993 l(' END IF;');
4994 l(' END IF;');
4995 l(' END IF;');
4996 l(' l_ctx_id := NULL;');
4997 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
4998 l(' END IF;');
4999 ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_CURSOR ================');
5000 l(' IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN');
5001 l(' open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);');
5002 l(' END IF;');
5003 l(' LOOP ');
5004 l(' FETCH l_party_cur INTO');
5005 l(' l_party_id '||l_p_into_list||';');
5006 l(' EXIT WHEN l_party_cur%NOTFOUND;');
5007 l(' l_index := map_id(l_party_id);');
5008 l(' l_score := GET_PARTY_SCORE('||l_p_param_list||');');
5009
5010 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
5011 l(' H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
5012 l(' ELSE');
5013 l(' H_SCORES(l_index).TOTAL_SCORE := ');
5014 l(' H_SCORES(l_index).TOTAL_SCORE+l_score;');
5015 l(' H_SCORES(l_index).PARTY_SCORE := l_score;');
5016 l(' END IF;');
5017 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5018 l(' H_PARTY_ID_LIST(l_index) := 1;');
5019 l(' H_PARTY_ID(l_party_id_idx) := l_party_id;');
5020 l(' l_party_id_idx:= l_party_id_idx+1;');
5021 l(' END IF;');
5022 l(' IF (l_party_id_idx-1)>l_max_thresh THEN');
5023 l(' IF p_index=1 AND call_order(2) = ''PARTY_SITE'' ');
5024 l(' AND call_type(2) = ''AND'' AND l_contact_contains_str IS NULL');
5025 l(' AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' ');
5026 l(' AND l_contact_pt_contains_str IS NULL THEN');
5027 l(' EXIT;');
5028 l(' END IF;');
5029 l(' CLOSE l_party_cur;'); --Bug No: 3872745
5030 l(' IF p_index>1 THEN');
5031 ldbg_s('In eval party level estimated hits exceed threshold');
5032 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5033 l(' FND_MSG_PUB.ADD;');
5034 l(' RAISE FND_API.G_EXC_ERROR;');
5035 l(' ELSE');
5036 l(' push_eval;');
5037 l(' RETURN;');
5038 l(' END IF;');
5039 l(' END IF;');
5040 ds(fnd_log.level_statement);
5041 dc(fnd_log.level_statement,'In eval_party_level l_party_id = ','l_party_id');
5042 dc(fnd_log.level_statement,'In eval_party_level l_score = ','l_score');
5043 de;
5044 l(' END LOOP;');
5045 ldbg_s('===========END of LOOP=====================');
5046 l(' CLOSE l_party_cur;');
5047 l(' ROLLBACK to eval_start;');
5048 l(' END;');
5049 l('');
5050 l(' /** Private procedure to acquire and score at party site level ***/');
5051 l(' PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
5052 l(' l_party_id_idx NUMBER:=1;');
5053 l(' l_ctx_id NUMBER;');
5054 l(' h_ps_id HZ_PARTY_SEARCH.IDList;');
5055 l(' h_ps_party_id HZ_PARTY_SEARCH.IDList;');
5056 l(' h_ps_score HZ_PARTY_SEARCH.IDList;');
5057 l(' detcnt NUMBER := 1;');
5058 l(' BEGIN');
5059 ldbg_s('-----------------','calling the procedure eval_party_site_level');
5060 l(' IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,''D_PS'')>0');
5061 l(' AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and');
5062 l(' l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> ''Y'' THEN');
5063 l(' l_party_id := H_SCORES.FIRST;');
5064 l(' WHILE l_party_id IS NOT NULL LOOP');
5065 l(' H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;');
5066 l(' l_party_id:=H_SCORES.NEXT(l_party_id);');
5067 l(' END LOOP;');
5068 l(' RETURN;');
5069
5070 l(' END IF;');
5071
5072 l(' SAVEPOINT eval_start;');
5073 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
5074 ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5075 l(' l_ctx_id := l_search_ctx_id;');
5076 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5077 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5078 l(' l_search_ctx_id,H_PARTY_ID(I));');
5079 l(' H_PARTY_ID.DELETE;');
5080 l(' H_PARTY_ID_LIST.DELETE;');
5081 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5082 ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5083 l(' l_ctx_id := l_search_ctx_id;');
5084 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5085 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5086 l(' l_search_ctx_id,H_PARTY_ID(I));');
5087 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5088 l(' ELSE');
5089 l(' IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5090 l(' and check_estimate_hits(''PARTY_SITES'',p_party_site_contains_str)>l_max_thresh THEN');
5091 ldbg_s('In eval party site level estimated hits exceed threshold');
5092 l(' IF p_index>1 THEN');
5093 ldbg_s('In eval party site level number of matches found exceeded threshold');
5094 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5095 l(' FND_MSG_PUB.ADD;');
5096 l(' RAISE FND_API.G_EXC_ERROR;');
5097 l(' ELSE');
5098 l(' push_eval;');
5099 l(' RETURN;');
5100 l(' END IF;');
5101 l(' END IF;');
5102
5103 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5104 l(' l_ctx_id := NULL;');
5105 l(' END IF;');
5106 ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_SITE_CURSOR ================');
5107 l(' open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, p_search_merged, ''N'',''N'',l_party_site_cur);');
5108 l(' LOOP ');
5109 l(' FETCH l_party_site_cur INTO');
5110 l(' l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
5111 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
5112 l(' --Fix for bug 4417124 ');
5113 l(' IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN');
5114 l(' l_index := map_id(l_ps_party_id);');
5115 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
5116
5117 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
5118 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);');
5119 l(' ELSE');
5120 l(' IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
5121 l(' H_SCORES(l_index).TOTAL_SCORE := ');
5122 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
5123 l(' H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
5124 l(' END IF;');
5125 l(' END IF;');
5126 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5127 l(' H_PARTY_ID_LIST(l_index) := 1;');
5128 l(' H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
5129 l(' l_party_id_idx:= l_party_id_idx+1;');
5130 l(' END IF;');
5131 l(' IF p_ins_details = ''Y'' THEN');
5132 l(' h_ps_id(detcnt) := l_party_site_id;');
5133 l(' h_ps_party_id(detcnt) := l_ps_party_id;');
5134 l(' IF (p_emax_score > 0) THEN ');
5135 l(' h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
5136 l(' ELSE ');
5137 l(' h_ps_score(detcnt) := 0; ');
5138 l(' END IF; ');
5139 l(' detcnt := detcnt +1;');
5140 l(' END IF;');
5141 ds(fnd_log.level_statement);
5142 dc(fnd_log.level_statement,'In eval_party_site_level l_party_site_id = ','l_party_site_id');
5143 dc(fnd_log.level_statement,'In eval_paty_site_level l_ps_party_id = ','l_ps_party_id');
5144 dc(fnd_log.level_statement,'In eval_party_site_level l_score = ','l_score');
5145 de;
5146 l(' END IF;');
5147 l(' END LOOP;');
5148 ldbg_s('===========END of LOOP=====================');
5149 l(' CLOSE l_party_site_cur;');
5150 l(' ROLLBACK to eval_start;');
5151 l(' IF p_ins_details = ''Y'' THEN');
5152 ldbg_s('In eval_party_site_level inserting into HZ_MATCHED_PARTY_SITES_GT from the H_PS_ID list');
5153 l(' FORALL I in 1..h_ps_id.COUNT ');
5154 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
5155 l(' l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
5156 l(' END IF;');
5157 l(' END;');
5158 l('');
5159 l(' /** Private procedure to acquire and score at contact point level ***/');
5160 l(' PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
5161 l(' l_party_id_idx NUMBER:=1;');
5162 l(' l_ctx_id NUMBER;');
5163 l(' h_ct_id HZ_PARTY_SEARCH.IDList;');
5164 l(' h_ct_party_id HZ_PARTY_SEARCH.IDList;');
5165 l(' h_ct_score HZ_PARTY_SEARCH.IDList;');
5166 l(' detcnt NUMBER := 1;');
5167 l(' BEGIN');
5168 ldbg_s('-----------------','calling the procedure eval_contact_level');
5169 l(' SAVEPOINT eval_start;');
5170 l(' IF l_match_str = '' AND '' AND p_call_type=''AND'' THEN');
5171 ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5172 l(' l_ctx_id := l_search_ctx_id;');
5173 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5174 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5175 l(' l_search_ctx_id,H_PARTY_ID(I));');
5176 l(' H_PARTY_ID.DELETE;');
5177 l(' H_PARTY_ID_LIST.DELETE;');
5178 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5179 ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5180 l(' l_ctx_id := l_search_ctx_id;');
5181 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5182 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5183 l(' l_search_ctx_id,H_PARTY_ID(I));');
5184 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5185 l(' ELSE');
5186 l(' IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5187 l(' and check_estimate_hits(''CONTACTS'',p_contact_contains_str)>l_max_thresh THEN');
5188 ldbg_s('In eval contact level estimated hits exceed threshold');
5189 l(' IF p_index>1 THEN');
5190 ldbg_s('In eval contact level number of matches found exceeded threshold');
5191 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5192 l(' FND_MSG_PUB.ADD;');
5193 l(' RAISE FND_API.G_EXC_ERROR;');
5194 l(' ELSE');
5195 l(' push_eval;');
5196 l(' RETURN;');
5197 l(' END IF;');
5198 l(' END IF;');
5199 l(' l_ctx_id := NULL;');
5200 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5201 l(' END IF;');
5202 ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_CURSOR ================');
5203 l(' open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id, p_search_merged, l_contact_cur);');
5204 l(' LOOP ');
5205 l(' FETCH l_contact_cur INTO');
5206 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
5207 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
5208 l(' l_index := map_id(l_ct_party_id);');
5209 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
5210
5211 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
5212 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id,null);');
5213 l(' ELSE');
5214 l(' IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
5215 l(' H_SCORES(l_index).TOTAL_SCORE := ');
5216 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
5217 l(' H_SCORES(l_index).CONTACT_SCORE := l_score;');
5218 l(' END IF;');
5219 l(' END IF;');
5220 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5221 l(' H_PARTY_ID_LIST(l_index) := 1;');
5222 l(' H_PARTY_ID(l_party_id_idx) := l_ct_party_id;');
5223 l(' l_party_id_idx:= l_party_id_idx+1;');
5224 l(' END IF;');
5225 l(' IF p_ins_details = ''Y'' THEN');
5226 l(' h_ct_id(detcnt) := l_org_contact_id;');
5227 l(' h_ct_party_id(detcnt) := l_ct_party_id;');
5228 l(' IF (p_emax_score > 0) THEN ');
5229 l(' h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
5230 l(' ELSE ');
5231 l(' h_ct_score(detcnt) := 0; ');
5232 l(' END IF; ');
5233 l(' detcnt := detcnt +1;');
5234 l(' END IF;');
5235 ds(fnd_log.level_statement);
5236 dc(fnd_log.level_statement,'In eval_contact_level l_org_contact_id = ','l_org_contact_id');
5237 dc(fnd_log.level_statement,'In eval_contact_level l_ct_party_id = ','l_ct_party_id');
5238 dc(fnd_log.level_statement,'In eval_contact_level l_score = ','l_score');
5239 de;
5240 l(' END LOOP;');
5241 ldbg_s('===========END of LOOP=====================');
5242 l(' CLOSE l_contact_cur;');
5243 l(' ROLLBACK to eval_start;');
5244 l(' IF p_ins_details = ''Y'' THEN');
5245 ldbg_s('In eval_contact_level inserting into HZ_MATCHED_CONTACTS_GT from the H_CT_ID list');
5246 l(' FORALL I in 1..h_ct_id.COUNT ');
5247 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
5248 l(' l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
5249 l(' END IF;');
5250 l(' END;');
5251 l('');
5252 l(' /** Private procedure to acquire and score at contact point level ***/');
5253 l(' PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
5254 l(' l_party_id_idx NUMBER:=1;');
5255 l(' l_ctx_id NUMBER;');
5256 l(' h_cpt_id HZ_PARTY_SEARCH.IDList;');
5257 l(' h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
5258 l(' h_cpt_score HZ_PARTY_SEARCH.IDList;');
5259 l(' detcnt NUMBER := 1;');
5260 l(' l_cpt_flag VARCHAR2(1) := ''N'';');
5261
5262 --l(' l_continue VARCHAR2(1) := ''Y'';');
5263 l(' is_a_match VARCHAR2(1) := ''Y'';');
5264 l(' BEGIN');
5265 ldbg_s('-----------------','calling the procedure eval_cpt_level');
5266 l(' SAVEPOINT eval_start;');
5267 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
5268 ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5269 l(' l_ctx_id := l_search_ctx_id;');
5270 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5271 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5272 l(' l_search_ctx_id,H_PARTY_ID(I));');
5273 l(' H_PARTY_ID.DELETE;');
5274 l(' H_PARTY_ID_LIST.DELETE;');
5275 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5276 ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5277 l(' l_ctx_id := l_search_ctx_id;');
5278 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5279 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5280 l(' l_search_ctx_id,H_PARTY_ID(I));');
5281 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5282 l(' ELSE');
5283 l(' IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5284 l(' and check_estimate_hits(''CONTACT_POINTS'',p_contact_pt_contains_str)>l_max_thresh THEN');
5285 ldbg_s('In eval contact point level estimated hits exceed threshold');
5286 l(' IF p_index>1 THEN');
5287 ldbg_s('In eval contact point level number of matches found exceeded threshold');
5288 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5289 l(' FND_MSG_PUB.ADD;');
5290 l(' RAISE FND_API.G_EXC_ERROR;');
5291 l(' ELSE');
5292 l(' push_eval;');
5293 l(' RETURN;');
5294 l(' END IF;');
5295 l(' END IF;');
5296
5297 l(' l_ctx_id := NULL;');
5298 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5299 l(' END IF;');
5300 ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR ================');
5301 l(' open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, p_search_merged, ''N'', ''N'',l_contact_pt_cur);');
5302 l(' LOOP ');
5303 l(' FETCH l_contact_pt_cur INTO');
5304 l(' l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
5305 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
5306 ldbg_s('----------------------------------------------------------------------------------');
5307 ldbg_sv('Processing party_id - ','l_cpt_party_id');
5308 ldbg_sv('Contact Point Type - ','l_cpt_type');
5309 l(' --Fix for bug 4417124 ');
5310 l(' IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN');
5311 l(' l_index := map_id(l_cpt_party_id);');
5312 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
5313
5314 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
5315 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);');
5316 if l_purpose='S' then
5317 l(' H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
5318 ldbg_s('Processing second Time for this party');
5319 else
5320 ldbg_s('Processing First Time for this party');
5321 end if;
5322 ldbg_sv('l_index is - ','l_index');
5323
5324 l(' ELSE');
5325 if l_purpose='S' then
5326 l(' IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then');
5327 l(' IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then');
5328 l(' H_SCORES(l_index).TOTAL_SCORE :=');
5329 l(' H_SCORES(l_index).TOTAL_SCORE-(H_SCORES(l_index).CONTACT_POINT_SCORE-H_SCORES(l_index).cpt_type_match(l_cpt_type))+l_score;');
5330 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE-H_SCORES(l_index).cpt_type_match(l_cpt_type) + l_score;');
5331 l(' H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
5332 ldbg_s('Passed in score greater than existing score');
5333 ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ' , 'H_SCORES(l_index).TOTAL_SCORE' );
5334 ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ' , 'H_SCORES(l_index).CONTACT_POINT_SCORE' );
5335 ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ', 'H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
5336 l(' END IF;');
5337 l(' ELSE');
5338 ldbg_s('Passed in score less than or equal to the existing score ');
5339 l(' H_SCORES(l_index).TOTAL_SCORE :=');
5340 l(' H_SCORES(l_index).TOTAL_SCORE+l_score;');
5341 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
5342 l(' H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
5343 ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ','H_SCORES(l_index).TOTAL_SCORE' );
5344 ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ','H_SCORES(l_index).CONTACT_POINT_SCORE' );
5345 ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
5346 l(' END IF;');
5347 else
5348
5349 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
5350 l(' H_SCORES(l_index).TOTAL_SCORE := ');
5351 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
5352 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
5353 l(' END IF;');
5354 end if;
5355 l(' END IF;');
5356 ldbg_sv('call type is - ','p_call_type' );
5357 ldbg_sv('match string is - ','l_match_str' );
5358 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5359 if l_purpose ='S' then
5360 l(' -- If rule is match all ');
5361 l(' IF l_match_str = '' AND '' THEN');
5362 ldbg_s('Match string is AND ');
5363 l(' IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
5364 l(' is_a_match := ''Y'';');
5365 ldbg_sv('is_a_match is ' , 'is_a_match');
5366 l(' ELSE');
5367 l(' is_a_match := ''N'';');
5368 ldbg_sv('is_a_match is ' , 'is_a_match');
5369 l(' END IF;');
5370 l(' -- Else it is construed to be a match anyway');
5371 l(' ELSE');
5372 l(' is_a_match := ''Y'';');
5373 ldbg_sv('is_a_match is ' , 'is_a_match');
5374 l(' END IF;');
5375 l(' IF (is_a_match=''Y'') then');
5376 end if;
5377
5378 l(' H_PARTY_ID_LIST(l_index) := 1;');
5379 l(' H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;');
5380 l(' l_party_id_idx:= l_party_id_idx+1;');
5381 if l_purpose='S' then
5382 l(' end if;');
5383 end if;
5384 l(' END IF;');
5385 l(' IF p_ins_details = ''Y'' THEN');
5386 if l_purpose ='S' then
5387 l(' IF l_match_str = '' AND '' THEN');
5388 ldbg_s('Match string is AND ');
5389 l(' IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
5390 l(' is_a_match := ''Y'';');
5391 ldbg_sv('is_a_match is ' , 'is_a_match');
5392 l(' ELSE');
5393 l(' is_a_match := ''N'';');
5394 ldbg_sv('is_a_match is ' , 'is_a_match');
5395 l(' END IF;');
5396 l(' ELSE');
5397 l(' is_a_match := ''Y'';');
5398 ldbg_sv('is_a_match is ' , 'is_a_match');
5399 l(' END IF;');
5400 l(' IF (is_a_match=''Y'') THEN');
5401 end if;
5402 l(' FOR I IN 1..h_cpt_id.COUNT LOOP');
5403 l(' IF h_cpt_id(I)=l_contact_pt_id THEN');
5404 l(' l_cpt_flag := ''Y'';');
5405 l(' END IF;');
5406 l(' END LOOP;');
5407 l(' IF l_cpt_flag = ''Y'' THEN');
5408 l(' NULL;');
5409 l(' ELSE');
5410 l(' h_cpt_id(detcnt) := l_contact_pt_id;');
5411 l(' h_cpt_party_id(detcnt) := l_cpt_party_id;');
5412 l(' IF (p_emax_score > 0) THEN ');
5413 l(' h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
5414 l(' ELSE ');
5415 l(' h_cpt_score(detcnt) := 0; ');
5416 l(' END IF; ');
5417 l(' detcnt := detcnt +1;');
5418 l(' END IF;');
5419
5420 if l_purpose='S' then
5421 l(' end if;');
5422 end if;
5423
5424 l(' END IF;');
5425 ds(fnd_log.level_statement);
5426 dc(fnd_log.level_statement,'In eval_cpt_level l_contact_pt_id = ','l_contact_pt_id');
5427 dc(fnd_log.level_statement,'In eval_cpt_level l_cpt_party_id = ','l_cpt_party_id');
5428 dc(fnd_log.level_statement,'In eval_cpt_level l_score = ','l_score');
5429 de;
5430 l(' END IF;');
5431 l(' END LOOP;');
5432 ldbg_s('===========END of LOOP=====================');
5433 l(' CLOSE l_contact_pt_cur;');
5434 l(' ROLLBACK to eval_start;');
5435 l(' IF p_ins_details = ''Y'' THEN');
5436 ldbg_s('In eval_contact_point_level inserting into HZ_MATCHED_CPTS_GT from the H_CPT_ID list');
5437 l(' FORALL I in 1..h_cpt_id.COUNT ');
5438 l(' INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
5439 l(' l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
5440 l(' END IF;');
5441 l(' END eval_cpt_level;');
5442 l('');
5443 l(' /** Private procedure to call the eval procedure at each entity in the correct order ***/');
5444 l(' PROCEDURE do_eval (p_index NUMBER) IS');
5445 l(' l_ctx_id NUMBER;');
5446 l(' l_threshold NUMBER;'); --Bug No: 4407425
5447 l(' other_acq_criteria_exists BOOLEAN; '); --Bug No: 4407425
5448 l(' acq_cnt NUMBER; '); --Bug No:5218095
5449 l(' BEGIN');
5450 ldbg_s('-----------------','calling the procedure do_eval');
5451 --Start of Bug No: 4407425
5452 l(' IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
5453 IF(l_purpose ='S') THEN
5454 l(' l_threshold := round(( l_entered_max_score / '|| l_max_score ||') * '|| l_match_threshold ||'); ');
5455 ELSE
5456 l(' l_threshold := '|| l_match_threshold ||'; ');
5457 END IF;
5458 l(' other_acq_criteria_exists := TRUE ;');
5459 --Start of Bug No:5218095
5460 /*l(' IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
5461 l(' other_criteria_exists := FALSE; ');
5462 l(' END IF ; ');*/
5463 l(' --check if acquisition criteria exists for any other entity');
5464 l(' IF l_party_contains_str IS NOT NULL THEN ');
5465 l(' acq_cnt := 1; ');
5466 l(' END IF; ');
5467 l(' IF l_party_site_contains_str IS NOT NULL THEN ');
5468 l(' acq_cnt := acq_cnt+1; ');
5469 l(' END IF; ');
5470 l(' IF l_contact_contains_str IS NOT NULL THEN ');
5471 l(' acq_cnt := acq_cnt+1; ');
5472 l(' END IF;');
5473 l(' IF l_contact_pt_contains_str IS NOT NULL THEN ');
5474 l(' acq_cnt := acq_cnt+1; ');
5475 l(' END IF; ');
5476
5477 l(' IF acq_cnt>1 THEN ');
5478 l(' other_acq_criteria_exists := TRUE; ');
5479 l(' ELSE');
5480 l(' other_acq_criteria_exists := FALSE; ');
5481 l(' END IF; ');
5482 dc(fnd_log.level_statement,'count of entities having acquisition attributes = ','acq_cnt');
5483 dc(fnd_log.level_statement,'call_max_score(p_index) = ','call_max_score(p_index)');
5484 dc(fnd_log.level_statement,'l_threshold = ','l_threshold');
5485 --End of Bug No:5218095
5486 l(' IF(l_match_str = '' AND '' AND other_acq_criteria_exists) THEN');
5487 --start of Bug No:5218095
5488 l(' IF ( call_max_score(p_index) < l_threshold) THEN ');
5489 ldbg_s('When max score of entity level<l_threshold, do not evaluate ');
5490 l(' RETURN; ');
5491 l(' ELSE ');
5492 ldbg_s('In do eval number of matches found exceeded threshold');
5493 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED''); ');
5494 l(' FND_MSG_PUB.ADD; ');
5495 l(' RAISE FND_API.G_EXC_ERROR; ');
5496 l(' END IF; ');
5497 --end of Bug No:5218095
5498 l(' ELSE');
5499 ldbg_s('In do eval number of matches found exceeded threshold');
5500 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5501 l(' FND_MSG_PUB.ADD;');
5502 l(' RAISE FND_API.G_EXC_ERROR;');
5503 l(' END IF; ');
5504 l(' END IF;');
5505 --End of Bug No: 4407425
5506 /*l(' IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
5507 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5508 l(' FND_MSG_PUB.ADD;');
5509 l(' RAISE FND_API.G_EXC_ERROR;');
5510 l(' END IF;');
5511 */
5512 l(' IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
5513 l(' eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
5514 l(' ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
5515 l(' eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
5516 l(' ELSIF call_order(p_index) = ''CONTACT'' AND l_contact_contains_str IS NOT NULL THEN');
5517 l(' eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
5518 l(' ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
5519 l(' eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
5520 l(' END IF;');
5521 l(' END;');
5522 l(' /************ End of find_parties private procedures **********/ ');
5523 l('');
5524 l(' BEGIN');
5525 l('');
5526
5527 ldbg_s('--------------------------------');
5528 ldbg_s('Entering Procedure find_parties');
5529 ds(fnd_log.level_statement);
5530 dc(fnd_log.level_statement,'Input Parameters are :');
5531 dc(fnd_log.level_statement,'p_match_type = ','p_match_type');
5532 dc(fnd_log.level_statement,'p_restrict_sql = ','p_restrict_sql');
5533 dc(fnd_log.level_statement,'p_dup_set_id = ','p_dup_set_id');
5534 dc(fnd_log.level_statement,'p_search_merged = ','p_search_merged');
5535 dc(fnd_log.level_statement,'p_dup_party_id = ','p_dup_party_id');
5536 de;
5537
5538 l(' -- ************************************');
5539 l(' -- STEP 1. Initialization and error checks');
5540 l('');
5541
5542 l(' l_match_str := ''' || l_match_str || ''';');
5543 l(' IF p_match_type = ''AND'' THEN');
5544 l(' l_match_str := '' AND '';');
5545 l(' ELSIF p_match_type = ''OR'' THEN');
5546 l(' l_match_str := '' OR '';');
5547 l(' END IF;');
5548 l(' l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
5549 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
5550 l('');
5551 IF l_purpose = 'D' THEN
5552 ldbg_s('This is Duplicate Identification match rule');
5553 l(' IF l_entered_max_score < '||l_match_threshold||' THEN');
5554 l(' x_num_matches:=0;');
5555 l(' x_search_ctx_id:=0;');
5556 ldbg_s('Returning since maximum obtainable score of input search criteria < threshold');
5557 l(' RETURN;');
5558 l(' END IF;');
5559 END IF;
5560 l('');
5561 l(' --Fix for bug 4417124 ');
5562 l('');
5563 l(' SELECT use_contact_addr_flag, use_contact_cpt_flag ');
5564 l(' INTO l_use_contact_addr_flag, l_use_contact_cpt_flag ');
5565 l(' FROM hz_match_rules_b ');
5566 l(' WHERE match_rule_id = '||p_rule_id||'; ');
5567 l('');
5568 l(' IF NVL(l_use_contact_addr_flag, ''Y'') = ''N'' THEN');
5569 l(' l_use_contact_addr_info := FALSE; ');
5570 l(' END IF; ');
5571 l('');
5572 l(' IF NVL(l_use_contact_cpt_flag, ''Y'') = ''N'' THEN');
5573 l(' l_use_contact_cpt_info := FALSE; ');
5574 l(' END IF; ');
5575 l('');
5576 l(' --End fix for bug 4417124');
5577 l('');
5578 l(' IF p_dup_batch_id IS NOT NULL THEN');
5579 l(' l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH_BATCH''),10000);');
5580 l(' ELSE');
5581 l(' l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
5582 l(' END IF;');
5583
5584 l(' IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
5585 l(' g_score_until_thresh := true;');
5586 ldbg_s('g_score_until_thresh is true');
5587 l(' ELSE');
5588 l(' g_score_until_thresh := false;');
5589 ldbg_s('g_score_until_thresh is false');
5590 l(' END IF;');
5591 ldbg_sv('Maximum records that will be evaluated is ', 'l_max_thresh');
5592
5593 l(' -- ************************************************************');
5594 l(' -- STEP 2. Setup of intermedia query strings for Acquisition query');
5595
5596 l(' l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);');
5597 l(' l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);');
5598 l(' l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);');
5599 ldbg_s('Commencing the DENORM LOGIC in find_parties');
5600 l(' l_denorm_max_score:=0;');
5601 l(' l_non_denorm_max_score:=0;');
5602 l(' IF l_ps_denorm_str IS NOT NULL THEN');
5603 l(' l_denorm_max_score := l_denorm_max_score+l_ps_max_score;');
5604 l(' l_denorm_str := l_ps_denorm_str;');
5605 l(' ELSE');
5606 l(' l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;');
5607 l(' END IF;');
5608
5609 l(' IF l_ct_denorm_str IS NOT NULL THEN');
5610 l(' l_denorm_max_score := l_denorm_max_score+l_contact_max_score;');
5611 l(' IF l_denorm_str IS NOT NULL THEN');
5612 l(' l_denorm_str := l_denorm_str || '' OR '' ||l_ct_denorm_str;');
5613 l(' ELSE');
5614 l(' l_denorm_str := l_ct_denorm_str;');
5615 l(' END IF;');
5616 l(' ELSE');
5617 l(' l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;');
5618 l(' END IF;');
5619
5620 l(' IF l_cpt_denorm_str IS NOT NULL THEN');
5621 l(' l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;');
5622 l(' IF l_denorm_str IS NOT NULL THEN');
5623 l(' l_denorm_str := l_denorm_str || '' OR '' ||l_cpt_denorm_str;');
5624 l(' ELSE');
5625 l(' l_denorm_str := l_cpt_denorm_str;');
5626 l(' END IF;');
5627 l(' ELSE');
5628 l(' l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;');
5629 l(' END IF;');
5630
5631 l(' l_party_contains_str := INIT_PARTY_QUERY(l_match_str, l_denorm_str, l_party_max_score, l_denorm_max_score, l_non_denorm_max_score, round(('||l_match_threshold||'/'||l_max_score||')*l_entered_max_score));');
5632
5633 l(' init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
5634 l('');
5635 l(' -- Setup Search Context ID');
5636 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
5637 l(' x_search_ctx_id := l_search_ctx_id;');
5638 l('');
5639 ldbg_sv('Search context id in find_parties is ', 'x_search_ctx_id');
5640 l(' IF l_party_contains_str IS NULL THEN');
5641 l(' defpt := 1;');
5642 l(' END IF;');
5643 l(' IF l_party_site_contains_str IS NULL THEN');
5644 l(' defps := 1;');
5645 l(' END IF;');
5646 l(' IF l_contact_contains_str IS NULL THEN');
5647 l(' defct := 1;');
5648 l(' END IF;');
5649 l(' IF l_contact_pt_contains_str IS NULL THEN');
5650 l(' defcpt := 1;');
5651 l(' END IF;');
5652 l('');
5653
5654 ds(fnd_log.level_statement);
5655 ldbg_s('------------------------');
5656 dc(fnd_log.level_statement,'In find_parties l_match_str = ','l_match_str');
5657 dc(fnd_log.level_statement,'In find_parties l_party_contains_str = ','l_party_contains_str');
5658 dc(fnd_log.level_statement,'In find_parties l_party_site_contains_str = ','l_party_site_contains_str');
5659 dc(fnd_log.level_statement,'In find_parties l_contact_contains_str = ','l_contact_contains_str');
5660 dc(fnd_log.level_statement,'In find_parties l_contact_pt_contains_str = ','l_contact_pt_contains_str');
5661 dc(fnd_log.level_statement,'In find_parties l_search_ctx_id = ','l_search_ctx_id');
5662 de;
5663
5664 IF l_max_score=1 THEN
5665 ldbg_s('In find_parties l_max_score = 1');
5666 l(' FOR I in 1..3 LOOP');
5667 l(' IF (call_order(I) = ''PARTY'' AND l_party_contains_str IS NULL)');
5668 l(' OR (call_order(I) = ''PARTY_SITE'' AND l_party_site_contains_str IS NULL)');
5669 l(' OR (call_order(I) = ''CONTACT'' AND l_contact_contains_str IS NULL)');
5670 l(' OR (call_order(I) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NULL) THEN');
5671 l(' IF call_type(I)=''OR'' THEN');
5672 l(' call_type(I+1):=''OR'';');
5673 l(' END IF;');
5674 l(' END IF;');
5675 l(' END LOOP;');
5676 END IF;
5677
5678 /**** Call all 4 evaluation procedures ***********/
5679 l(' FOR I in 1..5 LOOP');
5680 l(' do_eval(I);');
5681 l(' END LOOP;');
5682
5683 IF l_purpose = 'S' THEN
5684 d(fnd_log.level_statement,'In find_parties. This is a Search Rule. Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
5685 ELSE
5686 d(fnd_log.level_statement,'In find_parties. This is a Duplicate Identification Rule. Evaluating Matches. Threshold : '||l_match_threshold);
5687 END IF;
5688
5689 l(' x_num_matches := 0;');
5690 l(' l_num_eval := 0;');
5691 l(' IF l_match_str = '' OR '' THEN');
5692 l(' l_party_id := H_SCORES.FIRST;');
5693 l(' ELSE');
5694 l(' l_party_id := H_PARTY_ID_LIST.FIRST;');
5695 l(' END IF;');
5696
5697 l(' WHILE l_party_id IS NOT NULL LOOP');
5698 l(' l_num_eval:= l_num_eval+1;');
5699 ds(fnd_log.level_statement);
5700 ldbg_s('----------------------');
5701 dc(fnd_log.level_statement,'In find_parties Match Party ID = ','H_SCORES(l_party_id).PARTY_ID');
5702 IF l_purpose = 'S' THEN
5703 dc(fnd_log.level_statement,'In find_parties Score = ','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
5704 ELSE
5705 dc(fnd_log.level_statement,'In find_parties Score = ','H_SCORES(l_party_id).TOTAL_SCORE');
5706 END IF;
5707 de;
5708 IF l_purpose = 'S' THEN
5709 ldbg_s('In find_parties inserting Search Rule results into HZ_MATCHED_PARTIES_GT');
5710 l(' IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
5711 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
5712 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100));');
5713 l(' x_num_matches := x_num_matches+1;');
5714 ldbg_s('----------------------');
5715 ELSE
5716 ldbg_s('In find_parties inserting Duplicate Identification results into HZ_MATCHED_PARTIES_GT');
5717 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
5718 l(' IF p_dup_set_id IS NULL THEN');
5719 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
5720 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);');
5721 l(' x_num_matches := x_num_matches+1;');
5722 l(' ELSE');
5723 ldbg_s('Before Inserting Duplicate Identification results into HZ_DUP_SET_PARTIES, if dup party already exists');
5724 l(' BEGIN');
5725 l(' SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES'); --Bug No: 4244529
5726 l(' WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID');
5727 l(' AND DUP_SET_BATCH_ID = p_dup_batch_id '); --Bug No: 4244529
5728 l(' AND ROWNUM=1;');
5729 l(' EXCEPTION ');
5730 l(' WHEN NO_DATA_FOUND THEN');
5731 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_auto_merge_score||' THEN');
5732 l(' l_merge_flag := ''Y'';');
5733 l(' ELSE');
5734 l(' l_merge_flag := ''N'';');
5735 l(' END IF;');
5736 ldbg_s('In find_parties inserting Duplicate Identification results into HZ_DUP_SET_PARTIES');
5737 ldbg_s('----------------------');
5738 l(' INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
5739 l(' MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
5740 l(' LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
5741 l(' VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,');
5742 l(' H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,');
5743 l(' hz_utility_pub.created_by,hz_utility_pub.creation_date,');
5744 l(' hz_utility_pub.last_update_login,');
5745 l(' hz_utility_pub.last_update_date,');
5746 l(' hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
5747 l(' x_num_matches := x_num_matches+1;');
5748 l(' END;');
5749 l(' END IF;');
5750 END IF;
5751 l(' END IF;');
5752 l(' IF l_match_str = '' OR '' THEN');
5753 l(' l_party_id:=H_SCORES.NEXT(l_party_id);');
5754 l(' ELSE');
5755 l(' l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
5756 l(' END IF;');
5757 l(' END LOOP;');
5758 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
5759 ldbg_s('Exiting Procedure find_parties');
5760 ldbg_s('--------------------------------');
5761 l('EXCEPTION');
5762 l(' WHEN L_RETURN_IMM_EXC THEN');
5763 l(' RETURN;');
5764 ELSE ---Start of Code Change for Match Rule Set
5765 l(' BEGIN');
5766 l('');
5767
5768 d(fnd_log.level_procedure,'find_parties(+)');
5769 ds(fnd_log.level_statement);
5770 dc(fnd_log.level_statement,'Input Parameters:');
5771 dc(fnd_log.level_statement,'p_match_type','p_match_type');
5772 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
5773 dc(fnd_log.level_statement,'p_dup_set_id','p_dup_set_id');
5774 dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
5775 dc(fnd_log.level_statement,'p_dup_party_id','p_dup_party_id');
5776 de;
5777 pop_conditions(p_rule_id,'find_parties','p_rule_id,p_party_search_rec,p_party_site_list,
5778 p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,p_dup_party_id,
5779 p_dup_set_id,p_dup_batch_id,p_ins_details,x_search_ctx_id,x_num_matches','PARTY');
5780
5781 d(fnd_log.level_procedure,'find_parties(-)');
5782 l('EXCEPTION');
5783
5784 END IF; ---End of Code Change for Match Rule Set
5785
5786 l(' WHEN FND_API.G_EXC_ERROR THEN');
5787 l(' RAISE FND_API.G_EXC_ERROR;');
5788 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
5789 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
5790 l(' WHEN OTHERS THEN');
5791 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
5792 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_parties'');');
5793 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
5794 l(' FND_MSG_PUB.ADD;');
5795 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
5796 l('END find_parties;');
5797 l('');
5798
5799 l('PROCEDURE find_persons (');
5800 l(' p_rule_id IN NUMBER,');
5801 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
5802 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
5803 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
5804 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
5805 l(' p_restrict_sql IN VARCHAR2,');
5806 l(' p_match_type IN VARCHAR2,');
5807 l(' p_search_merged IN VARCHAR2,');
5808 l(' p_dup_party_id IN NUMBER,');
5809 l(' p_dup_set_id IN NUMBER,');
5810 l(' p_dup_batch_id IN NUMBER,');
5811 l(' p_ins_details IN VARCHAR2,');
5812 l(' x_search_ctx_id OUT NUMBER,');
5813 l(' x_num_matches OUT NUMBER');
5814 l(') IS');
5815 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
5816 l('');
5817 l(' -- Strings to hold the generated Intermedia query strings');
5818 l(' l_party_contains_str VARCHAR2(32000); ');
5819 l(' l_party_site_contains_str VARCHAR2(32000);');
5820 l(' l_contact_contains_str VARCHAR2(32000);');
5821 l(' l_contact_pt_contains_str VARCHAR2(32000);');
5822 l(' l_denorm_str VARCHAR2(32000);');
5823 l(' l_ps_denorm_str VARCHAR2(32000);');
5824 l(' l_ct_denorm_str VARCHAR2(32000);');
5825 l(' l_cpt_denorm_str VARCHAR2(32000);');
5826
5827 l('');
5828 l(' -- Other local variables');
5829 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
5830 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
5831 l(' -- For Score calculation');
5832 l(' l_max_score NUMBER;');
5833 l(' l_match_idx NUMBER;');
5834 l(' l_entered_max_score NUMBER;');
5835 l(' FIRST BOOLEAN;');
5836 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
5837 l('');
5838 FOR TX IN (
5839 SELECT distinct f.staged_attribute_column
5840 FROM hz_trans_functions_vl f, hz_secondary_trans st,
5841 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
5842 WHERE sa.match_rule_id = p_rule_id
5843 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
5844 AND st.function_id = f.function_id
5845 AND a.attribute_id = sa.attribute_id) LOOP
5846 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
5847 END LOOP;
5848 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
5849 l(' H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
5850 l(' H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
5851 l('');
5852 l(' l_score NUMBER;');
5853 l(' l_idx NUMBER;');
5854 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
5855 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
5856 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
5857 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
5858 l(' l_party_id NUMBER;');
5859 l(' l_ps_party_id NUMBER;');
5860 l(' l_ct_party_id NUMBER;');
5861 l(' l_cpt_party_id NUMBER;');
5862 l(' l_cpt_ps_id NUMBER;');
5863 l(' l_cpt_contact_id NUMBER;');
5864 l(' l_cpt_type VARCHAR2(100);');
5865 l(' l_party_site_id NUMBER;');
5866 l(' l_org_contact_id NUMBER;');
5867 l(' l_contact_pt_id NUMBER;');
5868 l(' l_cpt_level VARCHAR2(100);');
5869 l(' l_ps_contact_id NUMBER;');
5870 l(' l_party_max_score NUMBER;');
5871 l(' l_ps_max_score NUMBER;');
5872 l(' l_contact_max_score NUMBER;');
5873 l(' l_cpt_max_score NUMBER;');
5874 l(' l_denorm_max_score NUMBER;');
5875 l(' l_non_denorm_max_score NUMBER;');
5876 l('');
5877 l(' defpt NUMBER :=0;');
5878 l(' defps NUMBER :=0;');
5879 l(' defct NUMBER :=0;');
5880 l(' defcpt NUMBER :=0;');
5881 l(' l_index NUMBER;');
5882 l(' l_max_thresh NUMBER;');
5883 l(' l_tmp NUMBER;');
5884 l(' l_merge_flag VARCHAR2(1);');
5885 l(' l_num_eval NUMBER:=0;');
5886 l('');
5887 l(' L_RETURN_IMM_EXC Exception;');
5888 l('');
5889 l(' ');
5890 l(' /********************* Find Parties private procedures *******/');
5891 FOR TX IN (
5892 SELECT a.attribute_name,
5893 f.PROCEDURE_NAME,
5894 f.STAGED_ATTRIBUTE_COLUMN
5895 FROM HZ_TRANS_FUNCTIONS_VL f,
5896 HZ_TRANS_ATTRIBUTES_VL a
5897 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
5898 AND a.entity_name = 'PARTY'
5899 AND a.attribute_name='PARTY_TYPE'
5900 AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
5901 AND nvl(f.active_flag,'Y')='Y'
5902 AND ROWNUM=1
5903 ) LOOP
5904 l(' PROCEDURE set_person_party_type IS');
5905 l(' BEGIN');
5906 l(' g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||':= ');
5907 l(' HZ_TRANS_PKG.EXACT(');
5908 l(' ''PERSON''');
5909 l(' ,null,''PARTY_TYPE''');
5910 l(' ,''PARTY'');');
5911 l(' END;');
5912 l(' ');
5913 l(' PROCEDURE unset_person_party_type IS');
5914 l(' BEGIN');
5915 l(' g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||' := '''';');
5916 l(' END;');
5917 END LOOP;
5918 l(' ');
5919 l(' FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) ');
5920 l(' RETURN NUMBER IS');
5921 l(' l_party_type VARCHAR2(255);');
5922 l(' l_person_id NUMBER(15);');
5923 l(' BEGIN');
5924 l(' SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;');
5925 l(' IF l_party_type = ''PERSON'' THEN');
5926 l(' RETURN p_party_id;');
5927 l(' ELSIF p_contact_id IS NULL THEN');
5928 l(' RETURN NULL;');
5929 l(' ELSE');
5930 l(' BEGIN ');
5931 l(' SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p');
5932 l(' WHERE oc.org_contact_id = p_contact_id');
5933 l(' AND r.relationship_id = oc.party_relationship_id ');
5934 l(' AND r.object_id = p_party_id');
5935 l(' AND p.party_id = r.subject_id ');
5936 l(' AND p.party_type = ''PERSON''');
5937 l(' AND ROWNUM=1;');
5938 l(' ');
5939 l(' RETURN l_person_id;');
5940 l(' EXCEPTION');
5941 l(' WHEN NO_DATA_FOUND THEN');
5942 l(' RETURN NULL;');
5943 l(' END; ');
5944 l(' END IF;');
5945 l(' END; ');
5946 l('');
5947 l(' PROCEDURE push_eval IS');
5948 l(' BEGIN');
5949 l(' H_PARTY_ID.DELETE;');
5950 l(' H_PARTY_ID_LIST.DELETE;');
5951 l(' H_SCORES.DELETE; ');
5952 l(' g_mappings.DELETE;');
5953 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
5954 l(' call_order(5) := call_order(1);');
5955 l(' call_type(5) := ''AND'';');
5956 l(' call_max_score(5) := call_max_score(1);');
5957 l(' call_type(2) := ''OR'';');
5958 l(' END;');
5959 l('');
5960 l(' /** Private procedure to acquire and score at party level ***/');
5961 l(' PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
5962 l(' l_party_id_idx NUMBER:=1;');
5963 l(' l_ctx_id NUMBER;');
5964 l(' BEGIN');
5965 l(' SAVEPOINT eval_start;');
5966 l(' set_person_party_type;');
5967 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
5968 l(' l_ctx_id := l_search_ctx_id;');
5969 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5970 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5971 l(' l_search_ctx_id,H_PARTY_ID(I));');
5972 l(' H_PARTY_ID.DELETE;');
5973 l(' H_PARTY_ID_LIST.DELETE;');
5974 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5975 l(' l_ctx_id := l_search_ctx_id;');
5976 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5977 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5978 l(' l_search_ctx_id,H_PARTY_ID(I));');
5979 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5980 l(' ELSE');
5981 l(' IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5982 l(' and check_estimate_hits(''PARTY'',p_party_contains_str)>l_max_thresh THEN');
5983 ldbg_s('In eval party level estimated hits exceed threshold');
5984 l(' IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' THEN');
5985 ldbg_s('In eval party level resolution option is set to SQL search.');
5986 l(' IF (l_party_site_contains_str IS NULL AND');
5987 l(' l_contact_contains_str IS NULL AND');
5988 l(' l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN');
5989 l(' return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);');
5990 l(' RAISE L_RETURN_IMM_EXC;');
5991 l(' ELSE');
5992 l(' open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);');
5993 l(' END IF;');
5994 l(' ELSE');
5995 l(' IF p_index>1 THEN');
5996 ldbg_s('In eval party level number of matches found exceeded threshold');
5997 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5998 l(' FND_MSG_PUB.ADD;');
5999 l(' RAISE FND_API.G_EXC_ERROR;');
6000 l(' ELSE');
6001 l(' push_eval;');
6002 l(' RETURN;');
6003 l(' END IF;');
6004 l(' END IF;');
6005 l(' END IF;');
6006 l(' l_ctx_id := NULL;');
6007 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6008 l(' END IF;');
6009 l(' IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN');
6010 l(' open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);');
6011 l(' END IF;');
6012 l(' LOOP ');
6013 l(' FETCH l_party_cur INTO');
6014 l(' l_party_id '||l_p_into_list||';');
6015 l(' EXIT WHEN l_party_cur%NOTFOUND;');
6016 l(' l_index := map_id(l_party_id);');
6017 l(' l_score := GET_PARTY_SCORE('||l_p_param_list||');');
6018
6019 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
6020 l(' H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
6021 l(' ELSE');
6022 l(' H_SCORES(l_index).TOTAL_SCORE := ');
6023 l(' H_SCORES(l_index).TOTAL_SCORE+l_score;');
6024 l(' H_SCORES(l_index).PARTY_SCORE := l_score;');
6025 l(' END IF;');
6026 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
6027 l(' H_PARTY_ID_LIST(l_index) := 1;');
6028 l(' H_PARTY_ID(l_party_id_idx) := l_party_id;');
6029 l(' l_party_id_idx:= l_party_id_idx+1;');
6030 l(' END IF;');
6031 l(' IF (l_party_id_idx-1)>l_max_thresh THEN');
6032 l(' IF p_index=1 AND call_order(2) = ''PARTY_SITE'' ');
6033 l(' AND call_type(2) = ''AND'' AND l_contact_contains_str IS NULL');
6034 l(' AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' ');
6035 l(' AND l_contact_pt_contains_str IS NULL THEN');
6036 l(' H_PARTY_ID.DELETE(l_party_id_idx-1);');
6037 l(' H_PARTY_ID_LIST.DELETE(l_index);');
6038 l(' H_SCORES.DELETE(l_index);');
6039 l(' EXIT;');
6040 l(' END IF;');
6041
6042 l(' CLOSE l_party_cur;'); --Bug No: 3872745
6043 l(' IF p_index>1 THEN');
6044 ldbg_s('In eval party level number of matches found exceeded threshold');
6045 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6046 l(' FND_MSG_PUB.ADD;');
6047 l(' RAISE FND_API.G_EXC_ERROR;');
6048 l(' ELSE');
6049 l(' push_eval;');
6050 l(' RETURN;');
6051 l(' END IF;');
6052 l(' END IF;');
6053 ds(fnd_log.level_statement);
6054 dc(fnd_log.level_statement,'Party Level Matches');
6055 dc(fnd_log.level_statement,'l_party_id','l_party_id');
6056 dc(fnd_log.level_statement,'l_score','l_score');
6057 de;
6058 l(' END LOOP;');
6059 l(' CLOSE l_party_cur;');
6060 l(' ROLLBACK to eval_start;');
6061 l(' END;');
6062 l(' PROCEDURE open_person_contact_cursor(');
6063 l(' p_contains_str VARCHAR2, ');
6064 l(' p_search_ctx_id NUMBER, ');
6065 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
6066 l(' BEGIN');
6067 l(' OPEN x_cursor FOR ');
6068 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
6069 l(' FROM HZ_STAGED_CONTACTS stage');
6070 l(' WHERE contains( concat_col, p_contains_str)>0');
6071 l(' AND ORG_CONTACT_ID in (');
6072 l(' SELECT /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ ');
6073 l(' org_contact_id');
6074 l(' from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc');
6075 l(' where d.party_id = r.subject_id');
6076 l(' and oc.party_relationship_id = r.relationship_id');
6077 l(' and d.search_context_id = p_search_ctx_id); ');
6078 --bug 4959719 start
6079 l(' exception');
6080 l(' when others then');
6081 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
6082 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
6083 l(' FND_MSG_PUB.ADD;');
6084 l(' RAISE FND_API.G_EXC_ERROR;');
6085 --Start Bug No: 3032742.
6086 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
6087 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
6088 l(' FND_MSG_PUB.ADD;');
6089 l(' RAISE FND_API.G_EXC_ERROR;');
6090 --End Bug No : 3032742.
6091 l(' else ');
6092 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6093 l(' end if;');
6094 --bug 4959719 end
6095 l(' END;');
6096
6097 l('');
6098 l(' /** Private procedure to acquire and score at party site level ***/');
6099 l(' PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
6100 l(' l_party_id_idx NUMBER:=1;');
6101 l(' l_ctx_id NUMBER;');
6102 l(' h_ps_id HZ_PARTY_SEARCH.IDList;');
6103 l(' h_ps_party_id HZ_PARTY_SEARCH.IDList;');
6104 l(' h_ps_score HZ_PARTY_SEARCH.IDList;');
6105 l(' detcnt NUMBER := 1;');
6106 l(' l_person_id NUMBER;');
6107 l(' BEGIN');
6108 l(' SAVEPOINT eval_start;');
6109 l(' unset_person_party_type;');
6110 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
6111 l(' l_ctx_id := l_search_ctx_id;');
6112 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
6113 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6114 l(' l_search_ctx_id,H_PARTY_ID(I));');
6115 l(' H_PARTY_ID.DELETE;');
6116 l(' H_PARTY_ID_LIST.DELETE;');
6117 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
6118 l(' l_ctx_id := l_search_ctx_id;');
6119 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
6120 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6121 l(' l_search_ctx_id,H_PARTY_ID(I));');
6122 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6123 l(' ELSE');
6124 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6125 l(' l_ctx_id := NULL;');
6126 l(' END IF;');
6127 l(' open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, p_search_merged,''N'', ''Y'',l_party_site_cur);');
6128 l(' LOOP ');
6129 l(' FETCH l_party_site_cur INTO');
6130 l(' l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
6131 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
6132 l(' IF l_ctx_id IS NULL THEN');
6133 l(' l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);');
6134 l(' ELSE');
6135 l(' l_person_id := l_ps_party_id;');
6136 l(' END IF;');
6137
6138 l(' IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN');
6139 l(' l_index := map_id(l_person_id);');
6140 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
6141
6142 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
6143 l(' IF l_ctx_id IS NULL THEN');
6144 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);');
6145 l(' END IF;');
6146 l(' ELSE');
6147 l(' IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
6148 l(' H_SCORES(l_index).TOTAL_SCORE := ');
6149 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
6150 l(' H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
6151 l(' END IF;');
6152 l(' END IF;');
6153 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
6154 l(' H_PARTY_ID_LIST(l_index) := 1;');
6155 --l(' H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
6156 --Bug:4995382: SDIB BATCH W/ RULE DL ORG/PERSON DUPLICATES' ERRORS OUT
6157 l(' H_PARTY_ID(l_party_id_idx) := l_person_id;');
6158 l(' l_party_id_idx:= l_party_id_idx+1;');
6159 l(' END IF;');
6160 l(' IF (l_party_id_idx-1)>l_max_thresh THEN');
6161 l(' CLOSE l_party_site_cur;'); --Bug No: 3872745
6162 l(' IF p_index>1 THEN');
6163 ldbg_s('In eval party site level number of matches found exceeded threshold');
6164 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6165 l(' FND_MSG_PUB.ADD;');
6166 l(' RAISE FND_API.G_EXC_ERROR;');
6167 l(' ELSE');
6168 l(' push_eval;');
6169 l(' RETURN;');
6170 l(' END IF;');
6171 l(' END IF;');
6172 l(' IF p_ins_details = ''Y'' THEN');
6173 l(' h_ps_id(detcnt) := l_party_site_id;');
6174 l(' h_ps_party_id(detcnt) := l_person_id;');
6175 l(' IF (p_emax_score > 0) THEN ');
6176 l(' h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
6177 l(' ELSE ');
6178 l(' h_ps_score(detcnt) := 0; ');
6179 l(' END IF; ');
6180 l(' detcnt := detcnt +1;');
6181 l(' END IF;');
6182 ds(fnd_log.level_statement);
6183 dc(fnd_log.level_statement,'Party Site Level Matches');
6184 dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
6185 dc(fnd_log.level_statement,'l_ps_party_id','l_person_id');
6186 dc(fnd_log.level_statement,'l_score','l_score');
6187 de;
6188 l(' END IF;');
6189 l(' END LOOP;');
6190 l(' CLOSE l_party_site_cur;');
6191 l(' ROLLBACK to eval_start;');
6192 l(' IF p_ins_details = ''Y'' THEN');
6193 l(' FORALL I in 1..h_ps_id.COUNT ');
6194 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
6195 l(' l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
6196 l(' END IF;');
6197 l(' END;');
6198 l('');
6199 l(' /** Private procedure to acquire and score at party site level ***/');
6200 l(' PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
6201 l(' l_party_id_idx NUMBER:=1;');
6202 l(' l_ctx_id NUMBER;');
6203 l(' h_ct_id HZ_PARTY_SEARCH.IDList;');
6204 l(' h_ct_party_id HZ_PARTY_SEARCH.IDList;');
6205 l(' h_ct_score HZ_PARTY_SEARCH.IDList;');
6206 l(' detcnt NUMBER := 1;');
6207 l(' l_person_id NUMBER;');
6208 l(' BEGIN');
6209 l(' SAVEPOINT eval_start;');
6210 l(' l_ctx_id := l_search_ctx_id;');
6211 l(' unset_person_party_type;');
6212 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
6213 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6214 l(' l_search_ctx_id,H_PARTY_ID(I));');
6215 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6216 l(' open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);');
6217 l(' LOOP ');
6218 l(' FETCH l_contact_cur INTO');
6219 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
6220 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
6221 l(' l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);');
6222 l(' l_index := map_id(l_person_id);');
6223 l(' IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN');
6224 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
6225 l(' IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
6226 l(' H_SCORES(l_index).TOTAL_SCORE := ');
6227 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
6228 l(' H_SCORES(l_index).CONTACT_SCORE := l_score;');
6229 l(' END IF;');
6230 l(' END IF;');
6231 l(' IF p_ins_details = ''Y'' THEN');
6232 l(' h_ct_id(detcnt) := l_org_contact_id;');
6233 l(' h_ct_party_id(detcnt) := l_person_id;');
6234 l(' IF (p_emax_score > 0) THEN ');
6235 l(' h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
6236 l(' ELSE ');
6237 l(' h_ct_score(detcnt) := 0; ');
6238 l(' END IF; ');
6239 l(' detcnt := detcnt +1;');
6240 l(' END IF;');
6241 ds(fnd_log.level_statement);
6242 dc(fnd_log.level_statement,'Contact Level Matches');
6243 dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
6244 dc(fnd_log.level_statement,'l_ct_party_id','l_person_id');
6245 dc(fnd_log.level_statement,'l_score','l_score');
6246 de;
6247 l(' END LOOP;');
6248 l(' CLOSE l_contact_cur;');
6249 l(' ROLLBACK to eval_start;');
6250 l(' IF p_ins_details = ''Y'' THEN');
6251 l(' FORALL I in 1..h_ct_id.COUNT ');
6252 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
6253 l(' l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
6254 l(' END IF;');
6255 l(' END;');
6256 l('');
6257 l(' /** Private procedure to acquire and score at contact point level ***/');
6258 l(' PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
6259 l(' l_party_id_idx NUMBER:=1;');
6260 l(' l_ctx_id NUMBER;');
6261 l(' h_cpt_id HZ_PARTY_SEARCH.IDList;');
6262 l(' h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
6263 l(' h_cpt_score HZ_PARTY_SEARCH.IDList;');
6264 l(' detcnt NUMBER := 1;');
6265 l(' l_person_id NUMBER;');
6266 --l(' l_continue VARCHAR2(1) := ''Y'';');
6267 l(' is_a_match VARCHAR2(1) := ''Y'';');
6268 l(' l_cpt_flag VARCHAR2(1) := ''N'';');
6269 l(' BEGIN');
6270 ldbg_s('-----------------');
6271 ldbg_s('calling the procedure eval_cpt_level - from find_persons');
6272 l(' SAVEPOINT eval_start;');
6273 l(' unset_person_party_type;');
6274 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
6275 l(' l_ctx_id := l_search_ctx_id;');
6276 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
6277 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6278 l(' l_search_ctx_id,H_PARTY_ID(I));');
6279 l(' H_PARTY_ID.DELETE;');
6280 l(' H_PARTY_ID_LIST.DELETE;');
6281 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
6282 ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
6283 l(' l_ctx_id := l_search_ctx_id;');
6284 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
6285 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6286 l(' l_search_ctx_id,H_PARTY_ID(I));');
6287 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6288 l(' ELSE');
6289 ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
6290 l(' l_ctx_id := NULL;');
6291 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6292 l(' END IF;');
6293 ldbg_s('====== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR =======');
6294 l(' open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, p_search_merged,''N'', ''Y'',l_contact_pt_cur);');
6295 l(' LOOP ');
6296 l(' FETCH l_contact_pt_cur INTO');
6297 l(' l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
6298 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
6299 ldbg_s(' ------------------------------------' );
6300 ldbg_sv('Processing party_id - ','l_cpt_party_id' );
6301 ldbg_sv('contact point type - ','l_cpt_type' );
6302 l(' IF l_ctx_id IS NULL THEN');
6303 l(' l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);');
6304 l(' ELSE');
6305 l(' l_person_id := l_cpt_party_id;');
6306 l(' END IF;');
6307
6308 l(' IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN');
6309 l(' l_index := map_id(l_person_id);');
6310 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
6311
6312 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
6313 l(' IF l_ctx_id IS NULL THEN');
6314 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_person_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);');
6315 if l_purpose='S' then
6316 l(' H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
6317 ldbg_s('Processing first time for this party');
6318 ldbg_sv('l_index is - ','l_index' );
6319 ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
6320 end if;
6321 l(' END IF;');
6322 l(' ELSE');
6323 if l_purpose='S' then
6324 ldbg_s('Processing Second time for this party');
6325 l(' IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then');
6326 l(' IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then');
6327 l(' H_SCORES(l_index).TOTAL_SCORE :=');
6328 l(' H_SCORES(l_index).TOTAL_SCORE-(H_SCORES(l_index).CONTACT_POINT_SCORE - H_SCORES(l_index).cpt_type_match(l_cpt_type) )+l_score;');
6329 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE - H_SCORES(l_index).cpt_type_match(l_cpt_type) + l_score;');
6330 l(' H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
6331 ldbg_s('Passed in score greater than existing score');
6332 ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ','H_SCORES(l_index).TOTAL_SCORE' );
6333 ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ','H_SCORES(l_index).CONTACT_POINT_SCORE' );
6334 ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
6335 l(' END IF;');
6336 l(' ELSE');
6337 ldbg_s('Passed in score less than or equal to the existing score ');
6338 l(' H_SCORES(l_index).TOTAL_SCORE :=');
6339 l(' H_SCORES(l_index).TOTAL_SCORE+l_score;');
6340 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
6341 l(' H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
6342 ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ','H_SCORES(l_index).TOTAL_SCORE' );
6343 ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ','H_SCORES(l_index).CONTACT_POINT_SCORE' );
6344 ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
6345 l(' END IF;');
6346 else
6347 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
6348 l(' H_SCORES(l_index).TOTAL_SCORE := ');
6349 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
6350 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
6351 l(' END IF;');
6352 end if;
6353 l(' END IF;');
6354 ldbg_sv('call type is - ','p_call_type' );
6355 ldbg_sv('match string is - ','l_match_str' );
6356 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
6357 if l_purpose ='S' then
6358 l(' -- If rule is match all ');
6359 l(' IF l_match_str = '' AND '' THEN');
6360 ldbg_s('Match String is - AND ');
6361 l(' IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
6362 l(' is_a_match := ''Y'';');
6363 ldbg_sv('is_a_match is ', 'is_a_match');
6364 l(' ELSE');
6365 l(' is_a_match := ''N'';');
6366 ldbg_sv('is_a_match is ', 'is_a_match');
6367 l(' END IF;');
6368 l(' -- Else it is construed as a match anyway ');
6369 l(' ELSE');
6370 l(' is_a_match := ''Y'';');
6371 ldbg_sv('is_a_match is ', 'is_a_match');
6372 l(' END IF;');
6373 l(' IF (is_a_match=''Y'') THEN');
6374 end if;
6375 l(' H_PARTY_ID_LIST(l_index) := 1;');
6376 l(' H_PARTY_ID(l_party_id_idx) := l_person_id;');
6377 l(' l_party_id_idx:= l_party_id_idx+1;');
6378 if l_purpose='S' then
6379 l(' end if;');
6380 end if;
6381 l(' END IF;');
6382 l(' IF (l_party_id_idx-1)>l_max_thresh THEN');
6383 l(' CLOSE l_contact_pt_cur;'); --Bug No: 3872745
6384 l(' IF p_index>1 THEN');
6385 ldbg_s('In eval contact point level number of matches found exceeded threshold');
6386 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6387 l(' FND_MSG_PUB.ADD;');
6388 l(' RAISE FND_API.G_EXC_ERROR;');
6389 l(' ELSE');
6390 l(' push_eval;');
6391 l(' RETURN;');
6392 l(' END IF;');
6393 l(' END IF;');
6394 l(' IF p_ins_details = ''Y'' THEN');
6395 if l_purpose ='S' then
6396 l(' -- If rule is match all ');
6397 l(' IF l_match_str = '' AND '' THEN');
6398 ldbg_s('Match String is - AND ');
6399 l(' IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
6400 l(' is_a_match := ''Y'';');
6401 ldbg_sv('is_a_match is ', 'is_a_match');
6402 l(' ELSE');
6403 l(' is_a_match := ''N'';');
6404 ldbg_sv('is_a_match is ', 'is_a_match');
6405 l(' END IF;');
6406 l(' -- Else it is construed as a match anyway ');
6407 l(' ELSE');
6408 l(' is_a_match := ''Y'';');
6409 ldbg_sv('is_a_match is ', 'is_a_match');
6410 l(' END IF;');
6411 l(' IF (is_a_match=''Y'') THEN');
6412 end if;
6413 ldbg_sv('Inserting into the final array, the person_id - ','l_person_id');
6414 l(' FOR I IN 1..h_cpt_id.COUNT LOOP');
6415 l(' IF h_cpt_id(I)=l_contact_pt_id THEN');
6416 l(' l_cpt_flag := ''Y'';');
6417 l(' END IF;');
6418 l(' END LOOP;');
6419 l(' IF l_cpt_flag = ''Y'' THEN');
6420 l(' NULL;');
6421 l(' ELSE ');
6422 l(' h_cpt_id(detcnt) := l_contact_pt_id;');
6423 l(' h_cpt_party_id(detcnt) := l_person_id;');
6424 l(' IF (p_emax_score > 0) THEN ');
6425 l(' h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
6426 l(' ELSE ');
6427 l(' h_cpt_score(detcnt) := 0; ');
6428 l(' END IF; ');
6429 l(' detcnt := detcnt +1;');
6430 l(' END IF;');
6431 if l_purpose='S' then
6432 l(' end if;');
6433 end if;
6434
6435 l(' END IF;');
6436 ds(fnd_log.level_statement);
6437 dc(fnd_log.level_statement,'Contact pt Level Matches');
6438 dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
6439 dc(fnd_log.level_statement,'l_cpt_party_id','l_person_id');
6440 dc(fnd_log.level_statement,'l_score','l_score');
6441 de;
6442 l(' END IF;');
6443 l(' END LOOP;');
6444 l(' CLOSE l_contact_pt_cur;');
6445 l(' ROLLBACK to eval_start;');
6446 l(' IF p_ins_details = ''Y'' THEN');
6447 l(' FORALL I in 1..h_cpt_id.COUNT ');
6448 l(' INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
6449 l(' l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
6450 l(' END IF;');
6451 l(' END;');
6452 l('');
6453 l(' /** Private procedure to call the eval procedure at each entity in the correct order ***/');
6454 l(' PROCEDURE do_eval (p_index NUMBER) IS');
6455 l(' l_ctx_id NUMBER;');
6456 l(' l_threshold NUMBER;'); --Bug No: 4407425
6457 l(' other_acq_criteria_exists BOOLEAN; '); --Bug No: 4407425
6458 l(' acq_cnt NUMBER; '); --Bug No:5218095
6459 l(' BEGIN');
6460 --Start of Bug No: 4407425
6461 l(' IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
6462 IF(l_purpose ='S') THEN
6463 l(' l_threshold := round(( l_entered_max_score / '|| l_max_score ||') * '|| l_match_threshold ||'); ');
6464 ELSE
6465 l(' l_threshold := '|| l_match_threshold ||'; ');
6466 END IF;
6467 l(' other_acq_criteria_exists := TRUE ;');
6468 --Start of Bug No:5218095
6469 /*l(' IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
6470 l(' other_criteria_exists := FALSE; ');
6471 l(' END IF ; ');*/
6472 l(' --check if acquisition criteria exists for any other entity');
6473 l(' IF l_party_contains_str IS NOT NULL THEN ');
6474 l(' acq_cnt := 1; ');
6475 l(' END IF; ');
6476 l(' IF l_party_site_contains_str IS NOT NULL THEN ');
6477 l(' acq_cnt := acq_cnt+1; ');
6478 l(' END IF; ');
6479 l(' IF l_contact_contains_str IS NOT NULL THEN ');
6480 l(' acq_cnt := acq_cnt+1; ');
6481 l(' END IF;');
6482 l(' IF l_contact_pt_contains_str IS NOT NULL THEN ');
6483 l(' acq_cnt := acq_cnt+1; ');
6484 l(' END IF; ');
6485
6486 l(' IF acq_cnt>1 THEN ');
6487 l(' other_acq_criteria_exists := TRUE; ');
6488 l(' ELSE');
6489 l(' other_acq_criteria_exists := FALSE; ');
6490 l(' END IF; ');
6491 dc(fnd_log.level_statement,'count of entities having acquisition attributes = ','acq_cnt');
6492 dc(fnd_log.level_statement,'call_max_score(p_index) = ','call_max_score(p_index)');
6493 dc(fnd_log.level_statement,'l_threshold = ','l_threshold');
6494 --End of Bug No:5218095
6495 l(' IF(l_match_str = '' AND '' AND other_acq_criteria_exists) THEN');
6496 --start of Bug No:5218095
6497 l(' IF ( call_max_score(p_index) < l_threshold) THEN ');
6498 ldbg_s('When max score of entity level<l_threshold, do not evaluate ');
6499 l(' RETURN; ');
6500 l(' ELSE ');
6501 ldbg_s('In do eval number of matches found exceeded threshold');
6502 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED''); ');
6503 l(' FND_MSG_PUB.ADD; ');
6504 l(' RAISE FND_API.G_EXC_ERROR; ');
6505 l(' END IF; ');
6506 --end of Bug No:5218095
6507 l(' ELSE');
6508 ldbg_s('In do eval number of matches found exceeded threshold');
6509 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6510 l(' FND_MSG_PUB.ADD;');
6511 l(' RAISE FND_API.G_EXC_ERROR;');
6512 l(' END IF; ');
6513 l(' END IF;');
6514 --End of Bug No: 4407425
6515 /*l(' IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
6516 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6517 l(' FND_MSG_PUB.ADD;');
6518 l(' RAISE FND_API.G_EXC_ERROR;');
6519 l(' END IF;');
6520 */
6521 l(' IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
6522 l(' eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
6523 l(' ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
6524 l(' eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
6525 l(' ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
6526 l(' eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
6527 l(' END IF;');
6528 l(' END;');
6529 l(' /************ End of find_persons private procedures **********/ ');
6530 l('');
6531 l(' BEGIN');
6532 l('');
6533
6534
6535 d(fnd_log.level_procedure,'find_persons(+)');
6536 ds(fnd_log.level_statement);
6537 dc(fnd_log.level_statement,'Input Parameters:');
6538 dc(fnd_log.level_statement,'p_match_type','p_match_type');
6539 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6540 de;
6541
6542 l(' -- ************************************');
6543 l(' -- STEP 1. Initialization and error checks');
6544 l('');
6545
6546 l(' l_match_str := ''' || l_match_str || ''';');
6547 l(' IF p_match_type = ''AND'' THEN');
6548 l(' l_match_str := '' AND '';');
6549 l(' ELSIF p_match_type = ''OR'' THEN');
6550 l(' l_match_str := '' OR '';');
6551 l(' END IF;');
6552 l(' l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
6553 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
6554 l('');
6555 l(' l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
6556 l(' IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
6557 l(' g_score_until_thresh := true;');
6558 l(' ELSE');
6559 l(' g_score_until_thresh := false;');
6560 l(' END IF;');
6561
6562
6563 l(' -- ************************************************************');
6564 l(' -- STEP 2. Setup of intermedia query strings for Acquisition query');
6565
6566 l(' l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);');
6567 l(' l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);');
6568 l(' l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);');
6569 l(' l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);');
6570 l(' init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
6571 l('');
6572 l(' -- Setup Search Context ID');
6573 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
6574 l(' x_search_ctx_id := l_search_ctx_id;');
6575 l('');
6576
6577 l(' IF l_party_contains_str IS NULL THEN');
6578 l(' defpt := 1;');
6579 l(' END IF;');
6580 l(' IF l_party_site_contains_str IS NULL THEN');
6581 l(' defps := 1;');
6582 l(' END IF;');
6583 l(' IF l_contact_contains_str IS NULL THEN');
6584 l(' defct := 1;');
6585 l(' END IF;');
6586 l(' IF l_contact_pt_contains_str IS NULL THEN');
6587 l(' defcpt := 1;');
6588 l(' END IF;');
6589 l('');
6590
6591 ds(fnd_log.level_statement);
6592 dc(fnd_log.level_statement,'l_match_str','l_match_str');
6593 dc(fnd_log.level_statement,'l_party_contains_str','l_party_contains_str');
6594 dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
6595 dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
6596 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
6597 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
6598 de;
6599
6600 /**** Call all 4 evaluation procedures ***********/
6601 l(' FOR I in 1..5 LOOP');
6602 l(' do_eval(I);');
6603 l(' END LOOP;');
6604 l(' IF l_contact_contains_str IS NOT NULL THEN');
6605 l(' eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);');
6606 l(' END IF;');
6607 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
6608
6609 l(' x_num_matches := 0;');
6610 l(' l_num_eval := 0;');
6611 l(' IF l_match_str = '' OR '' THEN');
6612 l(' l_party_id := H_SCORES.FIRST;');
6613 l(' ELSE');
6614 l(' l_party_id := H_PARTY_ID_LIST.FIRST;');
6615 l(' END IF;');
6616
6617
6618 l(' WHILE l_party_id IS NOT NULL LOOP');
6619 l(' l_num_eval:= l_num_eval+1;');
6620 ds(fnd_log.level_statement);
6621 dc(fnd_log.level_statement,'Match Party ID','H_SCORES(l_party_id).PARTY_ID');
6622 IF l_purpose = 'S' THEN
6623 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
6624 ELSE
6625 dc(fnd_log.level_statement,'Score','H_SCORES(l_party_id).TOTAL_SCORE');
6626 END IF;
6627 de;
6628 IF l_purpose = 'S' THEN
6629 l(' IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
6630 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
6631 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100));');
6632 l(' x_num_matches := x_num_matches+1;');
6633 ELSE
6634 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
6635 l(' IF p_dup_set_id IS NULL THEN');
6636 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
6637 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);');
6638 l(' x_num_matches := x_num_matches+1;');
6639 l(' ELSE');
6640 l(' BEGIN');
6641 l(' SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES'); --Bug No: 4244529
6642 l(' WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID');
6643 l(' AND DUP_SET_BATCH_ID = p_dup_batch_id '); --Bug No: 4244529
6644 l(' AND ROWNUM=1;');
6645 l(' EXCEPTION ');
6646 l(' WHEN NO_DATA_FOUND THEN');
6647 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_auto_merge_score||' THEN');
6648 l(' l_merge_flag := ''Y'';');
6649 l(' ELSE');
6650 l(' l_merge_flag := ''N'';');
6651 l(' END IF;');
6652 l(' INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
6653 l(' MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
6654 l(' LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
6655 l(' VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,');
6656 l(' H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,');
6657 l(' hz_utility_pub.created_by,hz_utility_pub.creation_date,');
6658 l(' hz_utility_pub.last_update_login,');
6659 l(' hz_utility_pub.last_update_date,');
6660 l(' hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
6661 l(' x_num_matches := x_num_matches+1;');
6662 l(' END;');
6663 l(' END IF;');
6664 END IF;
6665 l(' END IF;');
6666 l(' IF l_match_str = '' OR '' THEN');
6667 l(' l_party_id:=H_SCORES.NEXT(l_party_id);');
6668 l(' ELSE');
6669 l(' l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
6670 l(' END IF;');
6671 l(' END LOOP;');
6672
6673 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
6674 d(fnd_log.level_procedure,'find_persons(-)');
6675
6676
6677 l('EXCEPTION');
6678 l(' WHEN L_RETURN_IMM_EXC THEN');
6679 l(' RETURN;');
6680 l(' WHEN FND_API.G_EXC_ERROR THEN');
6681 l(' RAISE FND_API.G_EXC_ERROR;');
6682 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6683 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6684 l(' WHEN OTHERS THEN');
6685 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6686 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_persons'');');
6687 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6688 l(' FND_MSG_PUB.ADD;');
6689 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6690 l('END find_persons;');
6691 l('');
6692 ELSE ---Start of Code Change for Match Rule Set
6693 l('BEGIN');
6694 d(fnd_log.level_procedure,'find_persons(+)');
6695 ds(fnd_log.level_statement);
6696 dc(fnd_log.level_statement,'Input Parameters:');
6697 dc(fnd_log.level_statement,'p_match_type','p_match_type');
6698 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6699 de;
6700 pop_conditions(p_rule_id,'find_persons','p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,p_ins_details,x_search_ctx_id,x_num_matches','PARTY');
6701 d(fnd_log.level_procedure,'find_persons(-)');
6702 l('EXCEPTION');
6703 l(' WHEN FND_API.G_EXC_ERROR THEN');
6704 l(' RAISE FND_API.G_EXC_ERROR;');
6705 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6706 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6707 l(' WHEN OTHERS THEN');
6708 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6709 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_persons'');');
6710 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6711 l(' FND_MSG_PUB.ADD;');
6712 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6713 l('END find_persons;');
6714 END IF; ---End of Code Change for Match Rule Set
6715
6716 l('PROCEDURE find_persons (');
6717 l(' p_rule_id IN NUMBER,');
6718 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
6719 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
6720 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
6721 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
6722 l(' p_restrict_sql IN VARCHAR2,');
6723 l(' p_match_type IN VARCHAR2,');
6724 l(' p_search_merged IN VARCHAR2,');
6725 l(' p_ins_details IN VARCHAR2,');
6726 l(' x_search_ctx_id OUT NUMBER,');
6727 l(' x_num_matches OUT NUMBER');
6728 l(') IS');
6729 l('');
6730 l(' BEGIN');
6731 l(' find_persons(p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,null,null,null,p_ins_details,x_search_ctx_id,x_num_matches);');
6732 l(' END;');
6733
6734
6735 /************** find_party_details API ***************/
6736 l('PROCEDURE find_party_details (');
6737 l(' p_rule_id IN NUMBER,');
6738 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
6739 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
6740 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
6741 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
6742 l(' p_restrict_sql IN VARCHAR2,');
6743 l(' p_match_type IN VARCHAR2,');
6744 l(' p_search_merged IN VARCHAR2,');
6745 l(' x_search_ctx_id OUT NUMBER,');
6746 l(' x_num_matches OUT NUMBER');
6747 l(') IS');
6748 l('');
6749 l(' BEGIN');
6750
6751
6752 d(fnd_log.level_procedure,'find_party_details(+)');
6753 ds(fnd_log.level_statement);
6754 dc(fnd_log.level_statement,'Input Parameters:');
6755 dc(fnd_log.level_statement,'p_match_type','p_match_type');
6756 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6757 dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
6758 de;
6759
6760 l(' find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,');
6761 l(' p_restrict_sql,p_match_type,p_search_merged,null,null, null,''Y'',');
6762 l(' x_search_ctx_id,x_num_matches);');
6763 l(' DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
6764 l(' AND NOT EXISTS ');
6765 l(' (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);');
6766 l(' DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
6767 l(' AND NOT EXISTS ');
6768 l(' (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);');
6769 l(' DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
6770 l(' AND NOT EXISTS ');
6771 l(' (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);');
6772
6773 d(fnd_log.level_procedure,'find_party_details(-)');
6774
6775
6776 l('EXCEPTION');
6777 l(' WHEN FND_API.G_EXC_ERROR THEN');
6778 l(' RAISE FND_API.G_EXC_ERROR;');
6779 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6780 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6781 l(' WHEN OTHERS THEN');
6782 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6783 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_party_details'');');
6784 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6785 l(' FND_MSG_PUB.ADD;');
6786 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6787 l('END find_party_details;');
6788 l('');
6789 /************** find_duplicate_parties API ***************/
6790 l('PROCEDURE find_duplicate_parties (');
6791 l(' p_rule_id IN NUMBER,');
6792 l(' p_party_id IN NUMBER,');
6793 l(' p_restrict_sql IN VARCHAR2,');
6794 l(' p_match_type IN VARCHAR2,');
6795 l(' p_dup_batch_id IN NUMBER,');
6796 l(' p_search_merged IN VARCHAR2,');
6797 l(' x_dup_set_id OUT NUMBER,');
6798 l(' x_search_ctx_id OUT NUMBER,');
6799 l(' x_num_matches OUT NUMBER');
6800 l(') IS');
6801 l(' l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
6802 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
6803 l(' l_contact_list HZ_PARTY_SEARCH.contact_list;');
6804 l(' l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
6805 l(' l_match_idx NUMBER;');
6806 l('');
6807 l(' --Fix for bug 4417124');
6808 l(' l_use_contact_addr_info BOOLEAN := TRUE;');
6809 l(' l_use_contact_cpt_info BOOLEAN := TRUE;');
6810 l(' l_use_contact_addr_flag VARCHAR2(1) := ''Y'';');
6811 l(' l_use_contact_cpt_flag VARCHAR2(1) := ''Y'';');
6812 l('');
6813 l('BEGIN');
6814 l('');
6815 d(fnd_log.level_procedure,'find_duplicate_parties(+)');
6816 ds(fnd_log.level_statement);
6817 dc(fnd_log.level_statement,'Input Parameters:');
6818 dc(fnd_log.level_statement,'p_party_id','p_party_id');
6819 dc(fnd_log.level_statement,'p_match_type','p_match_type');
6820 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6821 dc(fnd_log.level_statement,'p_dup_batch_id','p_dup_batch_id');
6822 dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
6823 de;
6824 l('');
6825 l(' --Fix for bug 4417124 ');
6826 l('');
6827 l(' SELECT use_contact_addr_flag, use_contact_cpt_flag ');
6828 l(' INTO l_use_contact_addr_flag, l_use_contact_cpt_flag ');
6829 l(' FROM hz_match_rules_b ');
6830 l(' WHERE match_rule_id = '||p_rule_id||'; ');
6831 l('');
6832 l(' IF NVL(l_use_contact_addr_flag, ''Y'') = ''N'' THEN');
6833 l(' l_use_contact_addr_info := FALSE; ');
6834 l(' END IF; ');
6835 l('');
6836 l(' IF NVL(l_use_contact_cpt_flag, ''Y'') = ''N'' THEN');
6837 l(' l_use_contact_cpt_info := FALSE; ');
6838 l(' END IF; ');
6839 l('');
6840 l(' --End fix for bug 4417124');
6841 l('');
6842
6843 l(' get_party_for_search(');
6844 l(' p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);');
6845 l('');
6846 l(' IF NOT check_prim_cond (l_party_rec,');
6847 l(' l_party_site_list,');
6848 l(' l_contact_list,');
6849 l(' l_cpt_list) THEN');
6850 l(' x_dup_set_id:=NULL;');
6851 l(' x_search_ctx_id:=NULL;');
6852 l(' x_num_matches:=0;');
6853 l(' RETURN;');
6854 l(' END IF;');
6855
6856 l(' x_dup_set_id := NULL;');
6857 l(' IF p_dup_batch_id IS NOT NULL THEN');
6858 l(' SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;');
6859 l(' END IF;');
6860 l('');
6861 l(' --Fix for bug 4417124 ');
6862 l(' IF l_party_rec.PARTY_TYPE = ''PERSON'' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN');
6863 l(' find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
6864 l(' p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,''N'',');
6865 l(' x_search_ctx_id,x_num_matches);');
6866 l(' ELSE');
6867 l(' find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
6868 l(' p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,''N'',');
6869 l(' x_search_ctx_id,x_num_matches);');
6870 l(' END IF;');
6871 l('');
6872 l(' IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN');
6873 l(' INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,');
6874 l(' STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,');
6875 l(' LAST_UPDATE_DATE, LAST_UPDATED_BY) ');
6876 l(' VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, ''SYSBATCH'',');
6877 l(' ''PARTY_MERGE'', hz_utility_pub.created_by, hz_utility_pub.creation_date,');
6878 l(' hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,');
6879 l(' hz_utility_pub.user_id);');
6880 l('');
6881 l(' INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
6882 l(' MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
6883 l(' LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
6884 l(' VALUES (p_party_id,x_dup_set_id,0,0,');
6885 l(' ''Y'',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,');
6886 l(' hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,');
6887 l(' hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
6888 l(' ELSE');
6889 l(' x_dup_set_id := NULL;');
6890 l(' END IF;');
6891 d(fnd_log.level_procedure,'find_duplicate_parties(-)');
6892
6893
6894 l('EXCEPTION');
6895 l(' WHEN FND_API.G_EXC_ERROR THEN');
6896 l(' RAISE FND_API.G_EXC_ERROR;');
6897 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6898 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6899 l(' WHEN OTHERS THEN');
6900 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6901 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_parties'');');
6902 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6903 l(' FND_MSG_PUB.ADD;');
6904 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6905 l('END find_duplicate_parties;');
6906
6907
6908 l('');
6909 /************** find_duplicate_party_sites API ***************/
6910 l('PROCEDURE find_duplicate_party_sites (');
6911 l(' p_rule_id IN NUMBER,');
6912 l(' p_party_site_id IN NUMBER,');
6913 l(' p_party_id IN NUMBER,');
6914 l(' p_restrict_sql IN VARCHAR2,');
6915 l(' p_match_type IN VARCHAR2,');
6916 l(' x_search_ctx_id OUT NUMBER,');
6917 l(' x_num_matches OUT NUMBER');
6918 l(') IS');
6919 l('');
6920
6921
6922 l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
6923 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
6924 l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
6925 l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
6926 l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
6927 l(' p_party_site_list HZ_PARTY_SEARCH.IDList; ');
6928 l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
6929 l(' l_match_idx NUMBER;');
6930
6931 l(' cursor get_cpts_for_party_sites is select contact_point_id ');
6932 l(' from hz_contact_points ');
6933 l(' where owner_table_name = ''HZ_PARTY_SITES'' ');
6934 l(' and primary_flag=''Y''');
6935 l(' and owner_table_id = p_party_site_id; ');
6936
6937 l(' BEGIN ');
6938
6939
6940 d(fnd_log.level_procedure,'find_duplicate_party_sites(+)');
6941 ds(fnd_log.level_statement);
6942 dc(fnd_log.level_statement,'Input Parameters:');
6943 dc(fnd_log.level_statement,'p_party_site_id','p_party_site_id');
6944 dc(fnd_log.level_statement,'p_party_id','p_party_id');
6945 dc(fnd_log.level_statement,'p_match_type','p_match_type');
6946 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6947 de;
6948
6949 l(' p_party_site_list(1) := p_party_site_id; ');
6950 l(' OPEN get_cpts_for_party_sites;');
6951 l(' LOOP ');
6952 l(' FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; ');
6953 l(' EXIT WHEN get_cpts_for_party_sites%NOTFOUND; ');
6954 l(' END LOOP; ');
6955 l(' CLOSE get_cpts_for_party_sites; ');
6956 l(' ');
6957 l(' get_search_criteria (');
6958 l(' null,');
6959 l(' p_party_site_list,');
6960 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
6961 l(' contact_point_ids, ');
6962 l(' l_party_search_rec,');
6963 l(' l_party_site_list,');
6964 l(' l_contact_list,');
6965 l(' l_contact_point_list) ;');
6966 l(' IF NOT check_prim_cond (l_party_search_rec,');
6967 l(' l_party_site_list,');
6968 l(' l_contact_list,');
6969 l(' l_contact_point_list) THEN');
6970 l(' x_search_ctx_id:=NULL;');
6971 l(' x_num_matches:=0;');
6972 l(' RETURN;');
6973 l(' END IF;');
6974 l(' ');
6975 l(' get_matching_party_sites (p_rule_id, ');
6976 l(' p_party_id, ');
6977 l(' l_party_site_list, ');
6978 l(' l_contact_point_list,');
6979 l(' p_restrict_sql, ');
6980 l(' p_match_type, ');
6981 l(' p_party_site_id, ');
6982 l(' x_search_ctx_id,');
6983 l(' x_num_matches);');
6984 d(fnd_log.level_procedure,'find_duplicate_party_sites(-)');
6985
6986
6987 l('EXCEPTION');
6988 l(' WHEN FND_API.G_EXC_ERROR THEN');
6989 l(' RAISE FND_API.G_EXC_ERROR;');
6990 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6991 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6992 l(' WHEN OTHERS THEN');
6993 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6994 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_party_sites'');');
6995 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6996 l(' FND_MSG_PUB.ADD;');
6997 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6998 l('END find_duplicate_party_sites; ');
6999 l(' ');
7000
7001 /************** find_duplicate_contacts API ***************/
7002 l('PROCEDURE find_duplicate_contacts (');
7003 l(' p_rule_id IN NUMBER,');
7004 l(' p_org_contact_id IN NUMBER,');
7005 l(' p_party_id IN NUMBER,');
7006 l(' p_restrict_sql IN VARCHAR2,');
7007 l(' p_match_type IN VARCHAR2,');
7008 l(' x_search_ctx_id OUT NUMBER,');
7009 l(' x_num_matches OUT NUMBER');
7010 l(') IS');
7011 l('');
7012
7013 l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;');
7014 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
7015 l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
7016 l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
7017 l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
7018 l(' p_party_site_list HZ_PARTY_SEARCH.IDList; ');
7019 l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
7020 l(' l_match_idx NUMBER;');
7021
7022 l(' cursor get_cpt_for_contact_id is select contact_point_id ');
7023 l(' from hz_org_contacts a, hz_relationships b, hz_contact_points c ');
7024 l(' where a.party_relationship_id = b.relationship_id ');
7025 l(' and c.owner_table_name = ''HZ_PARTIES'' ');
7026 l(' and c.primary_flag=''Y''');
7027 l(' and c.owner_table_id = b.party_id ');
7028 l(' and b.directional_flag = ''F'' ');
7029 l(' and a.org_contact_id = p_org_contact_id; ');
7030
7031 l('BEGIN ');
7032
7033
7034 d(fnd_log.level_procedure,'find_duplicate_contacts(+)');
7035 ds(fnd_log.level_statement);
7036 dc(fnd_log.level_statement,'Input Parameters:');
7037 dc(fnd_log.level_statement,'p_org_contact_id','p_org_contact_id');
7038 dc(fnd_log.level_statement,'p_party_id','p_party_id');
7039 dc(fnd_log.level_statement,'p_match_type','p_match_type');
7040 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7041 de;
7042
7043
7044 l(' p_contact_ids(1) := p_org_contact_id; ');
7045 l(' OPEN get_cpt_for_contact_id; ');
7046 l(' LOOP ');
7047 l(' FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; ');
7048 l(' EXIT WHEN get_cpt_for_contact_id%NOTFOUND; ');
7049 l(' END LOOP; ');
7050 l(' CLOSE get_cpt_for_contact_id; ');
7051 l(' ');
7052 l(' get_search_criteria (');
7053 l(' null,');
7054 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
7055 l(' p_contact_ids,');
7056 l(' contact_point_ids, ');
7057 l(' l_party_search_rec,');
7058 l(' l_party_site_list, ');
7059 l(' l_contact_list,');
7060 l(' l_contact_point_list) ;');
7061 l(' IF NOT check_prim_cond (l_party_search_rec,');
7062 l(' l_party_site_list,');
7063 l(' l_contact_list,');
7064 l(' l_contact_point_list) THEN');
7065 l(' x_search_ctx_id:=NULL;');
7066 l(' x_num_matches:=0;');
7067 l(' RETURN;');
7068 l(' END IF;');
7069 l(' ');
7070 l(' get_matching_contacts (p_rule_id, ');
7071 l(' p_party_id, ');
7072 l(' l_contact_list, ');
7073 l(' l_contact_point_list, ');
7074 l(' p_restrict_sql, ');
7075 l(' p_match_type, ');
7076 l(' p_org_contact_id, ');
7077 l(' x_search_ctx_id, ');
7078 l(' x_num_matches);');
7079 l(' ');
7080 d(fnd_log.level_procedure,'find_duplicate_contacts(-)');
7081
7082
7083 l('EXCEPTION');
7084 l(' WHEN FND_API.G_EXC_ERROR THEN');
7085 l(' RAISE FND_API.G_EXC_ERROR;');
7086 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7087 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7088 l(' WHEN OTHERS THEN');
7089 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7090 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contacts'');');
7091 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7092 l(' FND_MSG_PUB.ADD;');
7093 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7094 l('END find_duplicate_contacts; ');
7095 l('');
7096 /************** find_duplicate_contact_points API ***************/
7097 l('PROCEDURE find_duplicate_contact_points (');
7098 l(' p_rule_id IN NUMBER,');
7099 l(' p_contact_point_id IN NUMBER,');
7100 l(' p_party_id IN NUMBER,');
7101 l(' p_restrict_sql IN VARCHAR2,');
7102 l(' p_match_type IN VARCHAR2,');
7103 l(' x_search_ctx_id OUT NUMBER,');
7104 l(' x_num_matches OUT NUMBER');
7105 l(') IS');
7106 l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
7107 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
7108 l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
7109 l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
7110 l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
7111 l(' p_party_site_list HZ_PARTY_SEARCH.IDList; ');
7112 l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
7113 l(' l_match_idx NUMBER;');
7114
7115 l('');
7116 l('BEGIN');
7117
7118
7119 d(fnd_log.level_procedure,'find_duplicate_contact_points(+)');
7120 ds(fnd_log.level_statement);
7121 dc(fnd_log.level_statement,'Input Parameters:');
7122 dc(fnd_log.level_statement,'p_contact_point_id','p_contact_point_id');
7123 dc(fnd_log.level_statement,'p_party_id','p_party_id');
7124 dc(fnd_log.level_statement,'p_match_type','p_match_type');
7125 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7126 de;
7127
7128 l(' contact_point_ids(1) := p_contact_point_id; ');
7129 l(' get_search_criteria ( ');
7130 l(' null, ');
7131 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
7132 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
7133 l(' contact_point_ids, ');
7134 l(' l_party_search_rec, ');
7135 l(' l_party_site_list, ');
7136 l(' l_contact_list, ');
7137 l(' l_contact_point_list ); ');
7138 l(' ');
7139 l(' IF NOT check_prim_cond (l_party_search_rec,');
7140 l(' l_party_site_list,');
7141 l(' l_contact_list,');
7142 l(' l_contact_point_list) THEN');
7143 l(' x_search_ctx_id:=NULL;');
7144 l(' x_num_matches:=0;');
7145 l(' RETURN;');
7146 l(' END IF;');
7147 l(' get_matching_contact_points ( ');
7148 l(' p_rule_id, ');
7149 l(' p_party_id, ');
7150 l(' l_contact_point_list, ');
7151 l(' p_restrict_sql, ');
7152 l(' p_match_type, ');
7153 l(' p_contact_point_id, ');
7154 l(' x_search_ctx_id, ');
7155 l(' x_num_matches ); ');
7156 d(fnd_log.level_procedure,'find_duplicate_contact_points(-)');
7157
7158
7159 l('EXCEPTION');
7160 l(' WHEN FND_API.G_EXC_ERROR THEN');
7161 l(' RAISE FND_API.G_EXC_ERROR;');
7162 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7163 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7164 l(' WHEN OTHERS THEN');
7165 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7166 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contact_points'');');
7167 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7168 l(' FND_MSG_PUB.ADD;');
7169 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7170 l('END find_duplicate_contact_points;');
7171 l('');
7172 l('PROCEDURE find_parties_dynamic (');
7173 l(' p_rule_id IN NUMBER,');
7174 l(' p_attrib_id1 IN NUMBER,');
7175 l(' p_attrib_id2 IN NUMBER,');
7176 l(' p_attrib_id3 IN NUMBER,');
7177 l(' p_attrib_id4 IN NUMBER,');
7178 l(' p_attrib_id5 IN NUMBER,');
7179 l(' p_attrib_id6 IN NUMBER,');
7180 l(' p_attrib_id7 IN NUMBER,');
7181 l(' p_attrib_id8 IN NUMBER,');
7182 l(' p_attrib_id9 IN NUMBER,');
7183 l(' p_attrib_id10 IN NUMBER,');
7184 l(' p_attrib_id11 IN NUMBER,');
7185 l(' p_attrib_id12 IN NUMBER,');
7186 l(' p_attrib_id13 IN NUMBER,');
7187 l(' p_attrib_id14 IN NUMBER,');
7188 l(' p_attrib_id15 IN NUMBER,');
7189 l(' p_attrib_id16 IN NUMBER,');
7190 l(' p_attrib_id17 IN NUMBER,');
7191 l(' p_attrib_id18 IN NUMBER,');
7192 l(' p_attrib_id19 IN NUMBER,');
7193 l(' p_attrib_id20 IN NUMBER,');
7194 l(' p_attrib_val1 IN VARCHAR2,');
7195 l(' p_attrib_val2 IN VARCHAR2,');
7196 l(' p_attrib_val3 IN VARCHAR2,');
7197 l(' p_attrib_val4 IN VARCHAR2,');
7198 l(' p_attrib_val5 IN VARCHAR2,');
7199 l(' p_attrib_val6 IN VARCHAR2,');
7200 l(' p_attrib_val7 IN VARCHAR2,');
7201 l(' p_attrib_val8 IN VARCHAR2,');
7202 l(' p_attrib_val9 IN VARCHAR2,');
7203 l(' p_attrib_val10 IN VARCHAR2,');
7204 l(' p_attrib_val11 IN VARCHAR2,');
7205 l(' p_attrib_val12 IN VARCHAR2,');
7206 l(' p_attrib_val13 IN VARCHAR2,');
7207 l(' p_attrib_val14 IN VARCHAR2,');
7208 l(' p_attrib_val15 IN VARCHAR2,');
7209 l(' p_attrib_val16 IN VARCHAR2,');
7210 l(' p_attrib_val17 IN VARCHAR2,');
7211 l(' p_attrib_val18 IN VARCHAR2,');
7212 l(' p_attrib_val19 IN VARCHAR2,');
7213 l(' p_attrib_val20 IN VARCHAR2,');
7214 l(' p_restrict_sql IN VARCHAR2,');
7215 l(' p_match_type IN VARCHAR2,');
7216 l(' p_search_merged IN VARCHAR2,');
7217 l(' x_search_ctx_id OUT NUMBER,');
7218 l(' x_num_matches OUT NUMBER');
7219 l(') IS');
7220 l(' BEGIN');
7221 l(' call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
7222 l(' p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
7223 l(' p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
7224 l(' p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
7225 l(' p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
7226 l(' p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
7227 l(' p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
7228 l(' p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
7229 l(' p_restrict_sql,''FIND_PARTIES'',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);');
7230 l(' END;');
7231
7232 l('');
7233 /************** call_api_dynamic API ***************/
7234 l('PROCEDURE call_api_dynamic (');
7235 l(' p_rule_id IN NUMBER,');
7236 l(' p_attrib_id1 IN NUMBER,');
7237 l(' p_attrib_id2 IN NUMBER,');
7238 l(' p_attrib_id3 IN NUMBER,');
7239 l(' p_attrib_id4 IN NUMBER,');
7240 l(' p_attrib_id5 IN NUMBER,');
7241 l(' p_attrib_id6 IN NUMBER,');
7242 l(' p_attrib_id7 IN NUMBER,');
7243 l(' p_attrib_id8 IN NUMBER,');
7244 l(' p_attrib_id9 IN NUMBER,');
7245 l(' p_attrib_id10 IN NUMBER,');
7246 l(' p_attrib_id11 IN NUMBER,');
7247 l(' p_attrib_id12 IN NUMBER,');
7248 l(' p_attrib_id13 IN NUMBER,');
7249 l(' p_attrib_id14 IN NUMBER,');
7250 l(' p_attrib_id15 IN NUMBER,');
7251 l(' p_attrib_id16 IN NUMBER,');
7252 l(' p_attrib_id17 IN NUMBER,');
7253 l(' p_attrib_id18 IN NUMBER,');
7254 l(' p_attrib_id19 IN NUMBER,');
7255 l(' p_attrib_id20 IN NUMBER,');
7256 l(' p_attrib_val1 IN VARCHAR2,');
7257 l(' p_attrib_val2 IN VARCHAR2,');
7258 l(' p_attrib_val3 IN VARCHAR2,');
7259 l(' p_attrib_val4 IN VARCHAR2,');
7260 l(' p_attrib_val5 IN VARCHAR2,');
7261 l(' p_attrib_val6 IN VARCHAR2,');
7262 l(' p_attrib_val7 IN VARCHAR2,');
7263 l(' p_attrib_val8 IN VARCHAR2,');
7264 l(' p_attrib_val9 IN VARCHAR2,');
7265 l(' p_attrib_val10 IN VARCHAR2,');
7266 l(' p_attrib_val11 IN VARCHAR2,');
7267 l(' p_attrib_val12 IN VARCHAR2,');
7268 l(' p_attrib_val13 IN VARCHAR2,');
7269 l(' p_attrib_val14 IN VARCHAR2,');
7270 l(' p_attrib_val15 IN VARCHAR2,');
7271 l(' p_attrib_val16 IN VARCHAR2,');
7272 l(' p_attrib_val17 IN VARCHAR2,');
7273 l(' p_attrib_val18 IN VARCHAR2,');
7274 l(' p_attrib_val19 IN VARCHAR2,');
7275 l(' p_attrib_val20 IN VARCHAR2,');
7276 l(' p_restrict_sql IN VARCHAR2,');
7277 l(' p_api_name IN VARCHAR2,');
7278 l(' p_match_type IN VARCHAR2,');
7279 l(' p_party_id IN NUMBER,');
7280 l(' p_search_merged IN VARCHAR2,');
7281 l(' x_search_ctx_id OUT NUMBER,');
7282 l(' x_num_matches OUT NUMBER');
7283 l(') IS');
7284 l(' TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;');
7285 l(' l_match_idx NUMBER;');
7286 l(' AttrVals AttrList;');
7287 l(' l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
7288 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
7289 l(' l_contact_list HZ_PARTY_SEARCH.contact_list;');
7290 l(' l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
7291 l(' l_dup_set_id NUMBER;');
7292 l(' l_idx NUMBER;');
7293 l(' l_cpt_type VARCHAR2(255);');
7294 l(' FIRST BOOLEAN := TRUE; ');
7295 l('');
7296 l('BEGIN');
7297
7298 d(fnd_log.level_procedure,'call_api_dynamic(+)');
7299 l('');
7300 FOR I in 1..20 LOOP
7301 l(' IF p_attrib_id'||I||' IS NOT NULL THEN');
7302 l(' AttrVals(p_attrib_id'||I||'):=p_attrib_val'||I||';');
7303 l(' END IF;');
7304 END LOOP;
7305
7306 FIRST := TRUE;
7307 FOR ATTRS IN (
7308 SELECT a.attribute_id, a.attribute_name, a.entity_name
7309 FROM HZ_TRANS_ATTRIBUTES_VL a,
7310 HZ_MATCH_RULE_PRIMARY p
7311 WHERE p.match_rule_id = p_rule_id
7312 AND p.attribute_id = a.attribute_id
7313
7314 UNION
7315
7316 SELECT a.attribute_id, a.attribute_name, a.entity_name
7317 FROM HZ_TRANS_ATTRIBUTES_VL a,
7318 HZ_MATCH_RULE_SECONDARY s
7319 WHERE s.match_rule_id = p_rule_id
7320 AND s.attribute_id = a.attribute_id) LOOP
7321 l(' IF AttrVals.EXISTS('||ATTRS.attribute_id||') THEN');
7322 IF ATTRS.entity_name='PARTY' THEN
7323 l(' l_party_rec.'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7324 d(fnd_log.level_statement,'l_party_rec.'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7325 ELSIF ATTRS.entity_name='PARTY_SITES' THEN
7326 l(' l_party_site_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7327 d(fnd_log.level_statement,'l_party_site_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7328 ELSIF ATTRS.entity_name='CONTACTS' THEN
7329 l(' l_contact_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7330 d(fnd_log.level_statement,'l_contact_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7331 ELSIF ATTRS.entity_name='CONTACT_POINTS' THEN
7332 BEGIN
7333 SELECT tag INTO l_cpt_type FROM fnd_lookup_values
7334 WHERE lookup_type = 'HZ_DQM_CPT_ATTR_TYPE'
7335 AND lookup_code = ATTRS.attribute_name
7336 AND ROWNUM=1;
7337 EXCEPTION
7338 WHEN NO_DATA_FOUND THEN
7339 l_cpt_type:='PHONE';
7340 END;
7341
7342 l(' l_cpt_type := '''||l_cpt_type||''';');
7343 l(' FIRST := FALSE;');
7344 l(' FOR I in 1..l_cpt_list.COUNT LOOP');
7345 l(' IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN');
7346 l(' l_cpt_list(I).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7347 l(' FIRST := TRUE;');
7348 ds(fnd_log.level_statement);
7349 dc(fnd_log.level_statement,'l_cpt_list(''||I||'').CONTACT_POINT_TYPE','l_cpt_type');
7350 dc(fnd_log.level_statement,'l_cpt_list(''||I||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7351 de;
7352 l(' END IF;');
7353 l(' END LOOP;');
7354 l(' IF not FIRST THEN');
7355 l(' l_idx := l_cpt_list.COUNT+1;');
7356 l(' l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;');
7357 l(' l_cpt_list(l_idx).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7358 ds(fnd_log.level_statement);
7359 dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').CONTACT_POINT_TYPE','l_cpt_type');
7360 dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7361 de;
7362 l(' END IF;');
7363 END IF;
7364 l(' END IF;');
7365 l('');
7366 END LOOP;
7367 l('');
7368
7369 l(' IF AttrVals.EXISTS(14) THEN');
7370 l(' l_party_rec.PARTY_TYPE:= AttrVals(14); ');
7371 l(' END IF; ');
7372
7373 l(' IF upper(p_api_name) = ''FIND_PARTIES'' THEN');
7374 l(' find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
7375 l(' p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,''N'',');
7376 l(' x_search_ctx_id,x_num_matches);');
7377 l(' ELSIF upper(p_api_name) = ''FIND_PARTY_DETAILS'' THEN');
7378 l(' find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
7379 l(' p_restrict_sql,p_match_type,p_search_merged,');
7380 l(' x_search_ctx_id,x_num_matches);');
7381 l(' ELSIF upper(p_api_name) = ''FIND_PERSONS'' THEN');
7382 l(' find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
7383 l(' p_restrict_sql,p_match_type,p_search_merged,''N'',');
7384 l(' x_search_ctx_id,x_num_matches);');
7385 l(' ELSIF upper(p_api_name) = ''GET_MATCHING_PARTY_SITES'' THEN');
7386 l(' get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,');
7387 l(' p_restrict_sql,p_match_type,NULL,');
7388 l(' x_search_ctx_id,x_num_matches);');
7389 l(' ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACTS'' THEN');
7390 l(' get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,');
7391 l(' p_restrict_sql,p_match_type,NULL,');
7392 l(' x_search_ctx_id,x_num_matches);');
7393 l(' ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACT_POINTS'' THEN');
7394 l(' get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,');
7395 l(' p_restrict_sql,p_match_type,NULL,');
7396 l(' x_search_ctx_id,x_num_matches);');
7397 l(' END IF;');
7398 d(fnd_log.level_procedure,'call_api_dynamic(-)');
7399
7400
7401 l('EXCEPTION');
7402 l(' WHEN FND_API.G_EXC_ERROR THEN');
7403 l(' RAISE FND_API.G_EXC_ERROR;');
7404 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7405 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7406 l(' WHEN OTHERS THEN');
7407 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7408 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.call_api_dynamic'');');
7409 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7410 l(' FND_MSG_PUB.ADD;');
7411 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7412
7413
7414 l('END call_api_dynamic; ');
7415 l('');
7416
7417 /************** get_matching_party_sites API ***************/
7418 l('');
7419 l('PROCEDURE get_matching_party_sites (');
7420 l(' p_rule_id IN NUMBER,');
7421 l(' p_party_id IN NUMBER,');
7422 l(' p_party_site_list IN HZ_PARTY_SEARCH.PARTY_SITE_LIST,');
7423 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
7424 l(' p_restrict_sql IN VARCHAR2,');
7425 l(' p_match_type IN VARCHAR2,');
7426 l(' p_dup_party_site_id IN NUMBER, ');
7427 l(' x_search_ctx_id OUT NUMBER,');
7428 l(' x_num_matches OUT NUMBER');
7429 l(') IS');
7430 l(' ');
7431 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
7432 l(' -- Strings to hold the generated Intermedia query strings');
7433 l(' l_party_contains_str VARCHAR2(32000); ');
7434 l(' l_match_idx NUMBER;');
7435 l(' l_party_site_contains_str VARCHAR2(32000);');
7436 l(' l_contact_contains_str VARCHAR2(32000);');
7437 l(' l_contact_pt_contains_str VARCHAR2(32000);');
7438 l(' l_tmp VARCHAR2(32000);');
7439 l('');
7440 l(' -- Other local variables');
7441 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
7442 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
7443 l(' -- For Score calculation');
7444 l(' l_max_score NUMBER;');
7445 l(' l_entered_max_score NUMBER;');
7446 l(' FIRST BOOLEAN;');
7447 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
7448 l('');
7449 FOR TX IN (
7450 SELECT distinct f.staged_attribute_column
7451 FROM hz_trans_functions_vl f, hz_secondary_trans st,
7452 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
7453 WHERE sa.match_rule_id = p_rule_id
7454 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
7455 AND st.function_id = f.function_id
7456 AND (a.ENTITY_NAME='PARTY_SITES' OR a.ENTITY_NAME='CONTACT_POINTS')
7457 AND a.attribute_id = sa.attribute_id) LOOP
7458 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
7459 END LOOP;
7460 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
7461 l('');
7462 l(' l_score NUMBER;');
7463 l(' l_idx NUMBER;');
7464 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
7465 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
7466 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
7467 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
7468 l(' l_party_id NUMBER;');
7469 l(' l_ps_party_id NUMBER;');
7470 l(' l_ct_party_id NUMBER;');
7471 l(' l_cpt_party_id NUMBER;');
7472 l(' l_cpt_ps_id NUMBER;');
7473 l(' l_cpt_contact_id NUMBER;');
7474 l(' l_cpt_type VARCHAR2(100);');
7475 l(' l_cpt_level VARCHAR2(100);');
7476 l(' l_party_site_id NUMBER;');
7477 l(' l_org_contact_id NUMBER;');
7478 l(' l_contact_pt_id NUMBER;');
7479 l(' l_cpt_level VARCHAR2(100);');
7480 l(' l_ps_contact_id NUMBER;');
7481 l(' l_party_max_score NUMBER;');
7482 l(' l_ps_max_score NUMBER;');
7483 l(' l_contact_max_score NUMBER;');
7484 l(' l_cpt_max_score NUMBER;');
7485 l('');
7486 l(' defpt NUMBER :=0;');
7487 l(' defps NUMBER :=0;');
7488 l(' defct NUMBER :=0;');
7489 l(' defcpt NUMBER :=0;');
7490 l(' l_index NUMBER;');
7491 l(' l_match_ps_list HZ_PARTY_SEARCH.IDList;');
7492 l(' l_cnt NUMBER:=1;');
7493 l('');
7494 l(' ');
7495 l(' BEGIN');
7496
7497
7498 d(fnd_log.level_procedure,'get_matching_party_sites(+)');
7499 ds(fnd_log.level_statement);
7500 dc(fnd_log.level_statement,'Input Parameters:');
7501 dc(fnd_log.level_statement,'p_match_type','p_match_type');
7502 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7503 dc(fnd_log.level_statement,'p_dup_party_site_id','p_dup_party_site_id');
7504 de;
7505 l('');
7506 l(' -- ************************************');
7507 l(' -- STEP 1. Initialization and error checks');
7508 l('');
7509 l(' l_match_str := ''' || l_match_str || ''';');
7510 l(' IF p_match_type = ''AND'' THEN');
7511 l(' l_match_str := '' AND '';');
7512 l(' ELSIF p_match_type = ''OR'' THEN');
7513 l(' l_match_str := '' OR '';');
7514 l(' END IF;');
7515 l(' l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, p_party_site_list, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
7516 l(' g_score_until_thresh := false;');
7517 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
7518
7519 l('');
7520
7521 l(' -- ************************************************************');
7522 l(' -- STEP 2. Setup of intermedia query strings for Acquisition query');
7523 l(' l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);');
7524 l(' l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
7525 l(' init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,p_party_site_list,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);');
7526 l('');
7527 l(' -- Setup Search Context ID');
7528 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
7529 l(' x_search_ctx_id := l_search_ctx_id;');
7530 l('');
7531
7532 ds(fnd_log.level_statement);
7533 dc(fnd_log.level_statement,'l_match_str','l_match_str');
7534 dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
7535 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
7536 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
7537 de;
7538
7539 l(' IF l_party_site_contains_str IS NULL THEN');
7540 l(' defps := 1;');
7541 l(' END IF;');
7542 l(' IF l_contact_pt_contains_str IS NULL THEN');
7543 l(' defcpt := 1;');
7544 l(' END IF;');
7545 l('');
7546 l(' IF l_party_site_contains_str IS NOT NULL THEN');
7547 l(' open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,''N'', ''N'',l_party_site_cur);');
7548 l(' LOOP');
7549 l(' FETCH l_party_site_cur INTO ');
7550 l(' l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
7551 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
7552 l(' IF (p_dup_party_site_id IS NULL OR (');
7553 l(' p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND ');
7554 l(' l_party_site_id <> p_dup_party_site_id)) THEN ');
7555 l(' l_index := map_id(l_party_site_id);');
7556 l(' l_match_ps_list(l_cnt):= l_party_site_id ;');
7557 l(' l_cnt:=l_cnt+1;');
7558 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
7559 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);');
7560 ds(fnd_log.level_statement);
7561 dc(fnd_log.level_statement,'Party Site Level Matches');
7562 dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
7563 dc(fnd_log.level_statement,'l_score','l_score');
7564 de;
7565
7566 l(' END IF; ');
7567 l(' END LOOP;');
7568 l(' CLOSE l_party_site_cur;');
7569 l(' END IF;');
7570 l('');
7571 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
7572 l(' SAVEPOINT eval_start;');
7573 l(' IF l_match_str = '' AND '' OR (');
7574 l(' ((l_cpt_max_score/l_entered_max_score)<' ||'('||l_match_threshold||'/'||l_max_score || '))' );
7575 l(' ) THEN');
7576 l(' FORALL I in 1..l_match_ps_list.COUNT');
7577 l(' INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)');
7578 l(' values (l_search_ctx_id,l_match_ps_list(I));');
7579 l(' open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur,''PARTY_SITES'');');
7580 l(' ELSE');
7581 l(' open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur);');
7582 l(' END IF;');
7583 l(' LOOP');
7584 l(' FETCH l_contact_pt_cur INTO ');
7585 l(' l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
7586 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
7587 l(' IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (');
7588 l(' p_dup_party_site_id IS NOT NULL AND l_cpt_contact_id IS NULL AND p_dup_party_site_id <> l_cpt_ps_id))) THEN ');
7589 l(' l_index := map_id(l_cpt_ps_id);');
7590 l(' IF l_match_str = '' OR '' THEN');
7591 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7592 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
7593 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
7594 l(' ELSE');
7595 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7596 l(' H_SCORES(l_index).TOTAL_SCORE := ');
7597 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7598 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7599 l(' END IF;');
7600 l(' END IF;');
7601 l(' ELSE');
7602 l(' IF H_SCORES.EXISTS(l_index) THEN');
7603 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7604 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7605 l(' H_SCORES(l_index).TOTAL_SCORE := ');
7606 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7607 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7608 l(' END IF;');
7609 l(' ELSIF defps=1 THEN');
7610 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7611 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
7612 l(' END IF;');
7613 l(' END IF;');
7614 l(' END IF; ');
7615 ds(fnd_log.level_statement);
7616 dc(fnd_log.level_statement,'Contact_point Level Matches');
7617 dc(fnd_log.level_statement,'l_party_site_id','l_cpt_ps_id');
7618 dc(fnd_log.level_statement,'l_score','l_score');
7619 de;
7620 l(' END LOOP;');
7621 l(' CLOSE l_contact_pt_cur;');
7622 l(' ROLLBACK TO eval_start;');
7623 l(' END IF;');
7624 l(' x_num_matches := 0;');
7625 l(' l_party_site_id := H_SCORES.FIRST;');
7626 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
7627 l(' WHILE l_party_site_id IS NOT NULL LOOP');
7628 ds(fnd_log.level_statement);
7629 dc(fnd_log.level_statement,'Match Party Site ID','H_SCORES(l_party_site_id).PARTY_SITE_ID');
7630 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100)');
7631 de;
7632 l(' IF l_match_str = '' OR '' THEN');
7633 --Start of Bug No: 4162385
7634 IF l_purpose = 'D' THEN
7635 l_entity_score_lh := 'H_SCORES(l_party_site_id).TOTAL_SCORE';
7636 l_entity_score_rh := 'ROUND(('||get_entity_level_score(p_rule_id,'PARTY_SITES')||'/'||l_max_score||') * '|| l_match_threshold || ')';
7637 ELSE
7638 l_entity_score_lh := 'H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score';
7639 l_entity_score_rh := l_match_threshold||'/'||l_max_score;
7640 END IF;
7641 --End of Bug No: 4162385
7642 l('IF ('||l_entity_score_lh||')>=( '||l_entity_score_rh||' ) THEN'); --Bug No: 4162385
7643 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
7644 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100);');
7645 l(' x_num_matches := x_num_matches+1;');
7646 l(' END IF;');
7647 l(' ELSE');
7648 l(' IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND');
7649 l(' H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND');
7650 l(' ('||l_entity_score_lh||')>=('||l_entity_score_rh||') THEN'); --Bug No: 4162385
7651 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
7652 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100));');
7653 l(' x_num_matches := x_num_matches+1;');
7654 l(' END IF;');
7655 l(' END IF;');
7656 l(' l_party_site_id:=H_SCORES.NEXT(l_party_site_id);');
7657 l(' END LOOP;');
7658 ELSE ---Start of Code Change for Match Rule Set
7659 l(' ');
7660 l(' BEGIN');
7661 d(fnd_log.level_procedure,'get_matching_party_sites(+)');
7662 ds(fnd_log.level_statement);
7663 dc(fnd_log.level_statement,'Input Parameters:');
7664 dc(fnd_log.level_statement,'p_match_type','p_match_type');
7665 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7666 dc(fnd_log.level_statement,'p_dup_party_site_id','p_dup_party_site_id');
7667 de;
7668 l('');
7669 pop_conditions(p_rule_id,'get_matching_party_sites','p_rule_id,p_party_id,p_party_site_list,p_contact_point_list,p_restrict_sql,p_match_type,p_dup_party_site_id,x_search_ctx_id,x_num_matches','PARTY_SITES');
7670
7671 END IF; ---End of Code Change for Match Rule Set
7672 d(fnd_log.level_procedure,'get_matching_party_sites(-)');
7673
7674 l('EXCEPTION');
7675 l(' WHEN FND_API.G_EXC_ERROR THEN');
7676 l(' RAISE FND_API.G_EXC_ERROR;');
7677 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7678 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7679 l(' WHEN OTHERS THEN');
7680 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7681 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_party_sites'');');
7682 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7683 l(' FND_MSG_PUB.ADD;');
7684 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7685 l('END get_matching_party_sites;');
7686 l('');
7687
7688 -- l(' NULL;');
7689 -- l('END;');
7690
7691 /************** get_matching_contacts API ***************/
7692 l('');
7693 l('PROCEDURE get_matching_contacts (');
7694 l(' p_rule_id IN NUMBER,');
7695 l(' p_party_id IN NUMBER,');
7696 l(' p_contact_list IN HZ_PARTY_SEARCH.CONTACT_LIST,');
7697 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
7698 l(' p_restrict_sql IN VARCHAR2,');
7699 l(' p_match_type IN VARCHAR2,');
7700 l(' p_dup_contact_id IN NUMBER, ');
7701 l(' x_search_ctx_id OUT NUMBER,');
7702 l(' x_num_matches OUT NUMBER');
7703 l(') IS');
7704 l(' ');
7705 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
7706 l(' -- Strings to hold the generated Intermedia query strings');
7707 l(' l_party_contains_str VARCHAR2(32000); ');
7708 l(' l_party_site_contains_str VARCHAR2(32000);');
7709 l(' l_contact_contains_str VARCHAR2(32000);');
7710 l(' l_contact_pt_contains_str VARCHAR2(32000);');
7711 l(' l_tmp VARCHAR2(32000);');
7712 l('');
7713 l(' -- Other local variables');
7714 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
7715 l(' l_match_idx NUMBER;');
7716 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
7717 l(' -- For Score calculation');
7718 l(' l_max_score NUMBER;');
7719 l(' l_entered_max_score NUMBER;');
7720 l(' FIRST BOOLEAN;');
7721 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
7722 l('');
7723 FOR TX IN (
7724 SELECT distinct f.staged_attribute_column
7725 FROM hz_trans_functions_vl f, hz_secondary_trans st,
7726 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
7727 WHERE sa.match_rule_id = p_rule_id
7728 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
7729 AND st.function_id = f.function_id
7730 AND (a.ENTITY_NAME='CONTACTS' OR a.ENTITY_NAME='CONTACT_POINTS')
7731 AND a.attribute_id = sa.attribute_id) LOOP
7732 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
7733 END LOOP;
7734 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
7735 l('');
7736 l(' l_score NUMBER;');
7737 l(' l_idx NUMBER;');
7738 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
7739 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
7740 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
7741 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
7742 l(' l_party_id NUMBER;');
7743 l(' l_ps_party_id NUMBER;');
7744 l(' l_ct_party_id NUMBER;');
7745 l(' l_cpt_party_id NUMBER;');
7746 l(' l_cpt_ps_id NUMBER;');
7747 l(' l_cpt_contact_id NUMBER;');
7748 l(' l_cpt_type VARCHAR2(100);');
7749 l(' l_party_site_id NUMBER;');
7750 l(' l_org_contact_id NUMBER;');
7751 l(' l_contact_pt_id NUMBER;');
7752 l('');
7753 l(' defpt NUMBER :=0;');
7754 l(' defps NUMBER :=0;');
7755 l(' defct NUMBER :=0;');
7756 l(' defcpt NUMBER :=0;');
7757 l(' l_index NUMBER;');
7758 l(' l_party_max_score NUMBER;');
7759 l(' l_ps_max_score NUMBER;');
7760 l(' l_contact_max_score NUMBER;');
7761 l(' l_cpt_max_score NUMBER;');
7762 l(' l_match_contact_list HZ_PARTY_SEARCH.IDList;');
7763 l(' l_cnt NUMBER:=1;');
7764 l('');
7765 l(' ');
7766 l(' BEGIN');
7767
7768
7769 d(fnd_log.level_procedure,'get_matching_contacts(+)');
7770 ds(fnd_log.level_statement);
7771 dc(fnd_log.level_statement,'Input Parameters:');
7772 dc(fnd_log.level_statement,'p_match_type','p_match_type');
7773 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7774 dc(fnd_log.level_statement,'p_dup_contact_id','p_dup_contact_id');
7775 de;
7776
7777 l('');
7778 l(' -- ************************************');
7779 l(' -- STEP 1. Initialization and error checks');
7780 l('');
7781 l(' l_match_str := ''' || l_match_str || ''';');
7782 l(' IF p_match_type = ''AND'' THEN');
7783 l(' l_match_str := '' AND '';');
7784 l(' ELSIF p_match_type = ''OR'' THEN');
7785 l(' l_match_str := '' OR '';');
7786 l(' END IF;');
7787 l(' l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, p_contact_list, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
7788 l(' g_score_until_thresh := false;');
7789 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
7790 l('');
7791
7792 l(' -- ************************************************************');
7793 l(' -- STEP 2. Setup of intermedia query strings for Acquisition query');
7794 l(' l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);');
7795 l(' l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
7796 l(' init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,p_contact_list,p_contact_point_list);');
7797
7798 l('');
7799 l(' -- Setup Search Context ID');
7800 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
7801 l(' x_search_ctx_id := l_search_ctx_id;');
7802 l('');
7803
7804 ds(fnd_log.level_statement);
7805 dc(fnd_log.level_statement,'l_match_str','l_match_str');
7806 dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
7807 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
7808 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
7809 de;
7810
7811 l(' IF l_contact_contains_str IS NULL THEN');
7812 l(' defct := 1;');
7813 l(' END IF;');
7814 l(' IF l_contact_pt_contains_str IS NULL THEN');
7815 l(' defcpt := 1;');
7816 l(' END IF;');
7817 l('');
7818 l(' IF l_contact_contains_str IS NOT NULL THEN');
7819 l(' open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);');
7820 l(' LOOP');
7821 l(' FETCH l_contact_cur INTO ');
7822 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
7823 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
7824 l(' IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN ');
7825 l(' l_index := map_id(l_org_contact_id);');
7826 l(' l_match_contact_list(l_cnt):=l_org_contact_id;');
7827 l(' l_cnt:=l_cnt+1;');
7828
7829 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
7830 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id, null);');
7831
7832 ds(fnd_log.level_statement);
7833 dc(fnd_log.level_statement,'Contact Level Matches');
7834 dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
7835 dc(fnd_log.level_statement,'l_score','l_score');
7836 de;
7837
7838 l(' END IF; ');
7839 l(' END LOOP;');
7840 l(' CLOSE l_contact_cur;');
7841 l(' END IF;');
7842
7843 l('');
7844 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
7845 l(' SAVEPOINT eval_start;');
7846 l(' IF l_match_str = '' AND '' OR (');
7847 l(' ((l_cpt_max_score/l_entered_max_score)<' ||'('||l_match_threshold||'/'||l_max_score || '))' );
7848 l(' ) THEN');
7849 l(' FORALL I in 1..l_match_contact_list.COUNT');
7850 l(' INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)');
7851 l(' values (l_search_ctx_id,l_match_contact_list(I));');
7852 l(' open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur,''CONTACTS'');');
7853 l(' ELSE');
7854 l(' open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur);');
7855 l(' END IF;');
7856 l(' LOOP');
7857 l(' FETCH l_contact_pt_cur INTO ');
7858 l(' l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
7859 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
7860 l(' IF (l_cpt_contact_id IS NOT NULL AND (p_dup_contact_id IS NULL OR l_cpt_contact_id <> p_dup_contact_id)) THEN ');
7861 l(' l_index := map_id(l_cpt_contact_id);');
7862 l(' IF l_match_str = '' OR '' THEN');
7863 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7864 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
7865 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
7866 l(' ELSE');
7867 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7868 l(' H_SCORES(l_index).TOTAL_SCORE := ');
7869 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7870 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7871 l(' END IF;');
7872 l(' END IF;');
7873 l(' ELSE');
7874 l(' IF H_SCORES.EXISTS(l_index) THEN');
7875 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7876 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7877 l(' H_SCORES(l_index).TOTAL_SCORE := ');
7878 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7879 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7880 l(' END IF;');
7881 l(' ELSIF defps=1 THEN');
7882 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7883 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
7884 l(' END IF;');
7885 l(' END IF;');
7886 l(' END IF; ');
7887 l(' END LOOP;');
7888 ds(fnd_log.level_statement);
7889 dc(fnd_log.level_statement,'Contact_point Level Matches');
7890 dc(fnd_log.level_statement,'l_org_contact_id','l_cpt_contact_id');
7891 dc(fnd_log.level_statement,'l_score','l_score');
7892 de;
7893 l(' CLOSE l_contact_pt_cur;');
7894 l(' END IF;');
7895 l(' x_num_matches := 0;');
7896 l(' l_org_contact_id := H_SCORES.FIRST;');
7897 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
7898 l(' WHILE l_org_contact_id IS NOT NULL LOOP');
7899 l(' IF l_match_str = '' OR '' THEN');
7900 ds(fnd_log.level_statement);
7901 dc(fnd_log.level_statement,'Match Contact ID','H_SCORES(l_org_contact_id).ORG_CONTACT_ID');
7902 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100)');
7903 de;
7904 --Start of Bug No: 4162385
7905 IF l_purpose = 'D' THEN
7906 l_entity_score_lh := 'H_SCORES(l_org_contact_id).TOTAL_SCORE';
7907 l_entity_score_rh := 'ROUND(('||get_entity_level_score(p_rule_id,'CONTACTS')||'/'||l_max_score||') * '|| l_match_threshold || ')';
7908 ELSE
7909 l_entity_score_lh := 'H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score';
7910 l_entity_score_rh := l_match_threshold||'/'||l_max_score;
7911 END IF;
7912 --End of Bug No: 4162385
7913 -- IF l_purpose = 'S' THEN
7914 l(' IF (' || l_entity_score_lh ||')>=('|| l_entity_score_rh ||') THEN'); --Bug No: 4162385
7915 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
7916 l(' VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100);');
7917 -- ELSE
7918 -- END IF;
7919 l(' x_num_matches := x_num_matches+1;');
7920 l(' END IF;');
7921 l(' ELSE');
7922 -- IF l_purpose = 'S' THEN
7923 l(' IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND');
7924 l(' H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND');
7925 l(' (' || l_entity_score_lh ||')>=('|| l_entity_score_rh ||') THEN'); --Bug No: 4162385
7926 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
7927 l(' VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100));');
7928 -- ELSE
7929 -- END IF;
7930 l(' x_num_matches := x_num_matches+1;');
7931 l(' END IF;');
7932 l(' END IF;');
7933 l(' l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);');
7934 l(' END LOOP;');
7935 ELSE ---Start of Code Change for Match Rule Set
7936 l(' ');
7937 l(' BEGIN');
7938 d(fnd_log.level_procedure,'get_matching_contacts(+)');
7939 ds(fnd_log.level_statement);
7940 dc(fnd_log.level_statement,'Input Parameters:');
7941 dc(fnd_log.level_statement,'p_match_type','p_match_type');
7942 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7943 dc(fnd_log.level_statement,'p_dup_contact_id','p_dup_contact_id');
7944 de;
7945 pop_conditions(p_rule_id,'get_matching_contacts','p_rule_id,p_party_id,p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_dup_contact_id,x_search_ctx_id,x_num_matches','CONTACTS');
7946 END IF; ---End of Code Change for Match Rule Set
7947
7948 d(fnd_log.level_procedure,'get_matching_contacts(-)');
7949
7950 l('EXCEPTION');
7951 l(' WHEN FND_API.G_EXC_ERROR THEN');
7952 l(' RAISE FND_API.G_EXC_ERROR;');
7953 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7954 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7955 l(' WHEN OTHERS THEN');
7956 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7957 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contacts'');');
7958 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7959 l(' FND_MSG_PUB.ADD;');
7960 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7961 l('END get_matching_contacts;');
7962 l('');
7963
7964
7965 /************** get_matching_contact_points API ***************/
7966 l('');
7967 l('PROCEDURE get_matching_contact_points (');
7968 l(' p_rule_id IN NUMBER,');
7969 l(' p_party_id IN NUMBER,');
7970 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
7971 l(' p_restrict_sql IN VARCHAR2,');
7972 l(' p_match_type IN VARCHAR2,');
7973 l(' p_dup_contact_point_id IN NUMBER, ');
7974 l(' x_search_ctx_id OUT NUMBER,');
7975 l(' x_num_matches OUT NUMBER');
7976 l(') IS');
7977 l('');
7978 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
7979 l('');
7980 l(' -- Strings to hold the generated Intermedia query strings');
7981 l(' l_contact_pt_contains_str VARCHAR2(32000);');
7982 l(' l_tmp VARCHAR2(32000);');
7983 l('');
7984 l(' -- Other local variables');
7985 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
7986 l(' l_match_idx NUMBER;');
7987 l(' -- For Score calculation');
7988 l(' l_entered_max_score NUMBER;');
7989 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
7990 l('');
7991 FOR TX IN (
7992 SELECT distinct f.staged_attribute_column
7993 FROM hz_trans_functions_vl f, hz_secondary_trans st,
7994 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
7995 WHERE sa.match_rule_id = p_rule_id
7996 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
7997 AND st.function_id = f.function_id
7998 AND a.ENTITY_NAME='CONTACT_POINTS'
7999 AND a.attribute_id = sa.attribute_id) LOOP
8000 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
8001 END LOOP;
8002 l('');
8003 l(' l_score NUMBER;');
8004 l(' l_idx NUMBER;');
8005 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
8006 l(' l_cpt_party_id NUMBER;');
8007 l(' l_cpt_ps_id NUMBER;');
8008 l(' l_cpt_contact_id NUMBER;');
8009 l(' l_contact_pt_id NUMBER;');
8010 l(' l_cpt_type VARCHAR2(100);');
8011 l(' H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
8012 l(' H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;');
8013 l(' H_SCORE HZ_PARTY_SEARCH.IDList;');
8014 l('');
8015 l(' cnt NUMBER :=0;');
8016 l(' l_party_max_score NUMBER;');
8017 l(' l_ps_max_score NUMBER;');
8018 l(' l_contact_max_score NUMBER;');
8019 l(' l_cpt_max_score NUMBER;');
8020 l('');
8021 l(' ');
8022 l(' BEGIN');
8023
8024
8025
8026 d(fnd_log.level_procedure,'get_matching_contact_points(+)');
8027 ds(fnd_log.level_statement);
8028 dc(fnd_log.level_statement,'Input Parameters:');
8029 dc(fnd_log.level_statement,'p_match_type','p_match_type');
8030 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
8031 dc(fnd_log.level_statement,'p_dup_contact_point_id','p_dup_contact_point_id');
8032 de;
8033
8034 l('');
8035 l(' -- ************************************');
8036 l(' -- STEP 1. Initialization and error checks');
8037 l('');
8038
8039 l(' l_match_str := ''' || l_match_str || ''';');
8040 l(' IF p_match_type = ''AND'' THEN');
8041 l(' l_match_str := '' AND '';');
8042 l(' ELSIF p_match_type = ''OR'' THEN');
8043 l(' l_match_str := '' OR '';');
8044 l(' END IF;');
8045 l(' l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, ');
8046 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
8047 l(' p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
8048 l(' g_score_until_thresh := false;');
8049 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
8050 l('');
8051
8052 l(' -- ************************************************************');
8053 l(' -- STEP 2. Setup of intermedia query strings for Acquisition query');
8054 l(' l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
8055 l(' init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);');
8056
8057 l('');
8058 l(' -- Setup Search Context ID');
8059 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
8060 l(' x_search_ctx_id := l_search_ctx_id;');
8061
8062 ds(fnd_log.level_statement);
8063 dc(fnd_log.level_statement,'l_match_str','l_match_str');
8064 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
8065 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
8066 de;
8067
8068 l('');
8069 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
8070 l(' open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur);');
8071 l(' cnt := 1;');
8072 l(' LOOP');
8073 l(' FETCH l_contact_pt_cur INTO ');
8074 l(' l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
8075 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
8076 l(' IF (p_dup_contact_point_id IS NULL OR (');
8077 l(' p_dup_contact_point_id IS NOT NULL AND ');
8078 l(' l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND ');
8079 l(' p_dup_contact_point_id <> l_contact_pt_id)) THEN ');
8080 l(' H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;');
8081 l(' H_PARTY_ID(cnt) := l_cpt_party_id;');
8082 l(' H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
8083 l(' cnt := cnt+1;');
8084 ds(fnd_log.level_statement);
8085 dc(fnd_log.level_statement,'Contact Point Matches');
8086 dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
8087 dc(fnd_log.level_statement,'l_score','l_score');
8088 de;
8089
8090 l(' END IF; ');
8091 l(' END LOOP;');
8092 l(' CLOSE l_contact_pt_cur;');
8093
8094 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
8095 l(' x_num_matches := 0; ');
8096 l(' FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP');
8097 ds(fnd_log.level_statement);
8098 dc(fnd_log.level_statement,'Match Contact Point ID','H_CONTACT_POINT_ID(I)');
8099 dc(fnd_log.level_statement,'Score','round((H_SCORE(I)/l_entered_max_score)*100)');
8100 de;
8101 --Start of Bug No: 4162385
8102 IF l_purpose = 'D' THEN
8103 l_entity_score_lh := 'H_SCORE(I)';
8104 l_entity_score_rh := 'ROUND(('||get_entity_level_score(p_rule_id,'CONTACT_POINTS')||'/'||l_max_score||') * '|| l_match_threshold || ')';
8105 ELSE
8106 l_entity_score_lh := 'H_SCORE(I)/l_entered_max_score';
8107 l_entity_score_rh := l_match_threshold||'/'||l_max_score;
8108 END IF;
8109 --End of Bug No: 4162385
8110
8111 l(' IF ('|| l_entity_score_lh ||') >= ('|| l_entity_score_rh ||') THEN'); --Bug No: 4162385
8112 l(' INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
8113 l(' l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);');
8114 l(' x_num_matches := x_num_matches + 1; ');
8115 l(' END IF;');
8116 l(' END LOOP; ');
8117 l(' END IF;');
8118 ELSE ---Start of Code Change for Match Rule Set
8119 l(' BEGIN');
8120 d(fnd_log.level_procedure,'get_matching_contact_points(+)');
8121 ds(fnd_log.level_statement);
8122 dc(fnd_log.level_statement,'Input Parameters:');
8123 dc(fnd_log.level_statement,'p_match_type','p_match_type');
8124 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
8125 dc(fnd_log.level_statement,'p_dup_contact_point_id','p_dup_contact_point_id');
8126 de;
8127 pop_conditions(p_rule_id,'get_matching_contact_points','p_rule_id,p_party_id,p_contact_point_list,p_restrict_sql,p_match_type,p_dup_contact_point_id,x_search_ctx_id,x_num_matches','CONTACT_POINTS');
8128
8129 END IF; ---End of Code Change for Match Rule Set
8130 d(fnd_log.level_procedure,'get_matching_contact_points(-)');
8131
8132 l('EXCEPTION');
8133 l(' WHEN FND_API.G_EXC_ERROR THEN');
8134 l(' RAISE FND_API.G_EXC_ERROR;');
8135 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
8136 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8137 l(' WHEN OTHERS THEN');
8138 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8139 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contact_points'');');
8140 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8141 l(' FND_MSG_PUB.ADD;');
8142 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8143 l('END get_matching_contact_points;');
8144
8145 l('');
8146 l(' /**********************************************************');
8147 l(' This procedure finds the score details for a specific party that ');
8148 l(' matched ');
8149 l('');
8150 l(' **********************************************************/');
8151 l('');
8152 l('PROCEDURE get_score_details (');
8153 l(' p_rule_id IN NUMBER,');
8154 l(' p_party_id IN NUMBER,');
8155 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
8156 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
8157 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
8158 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
8159 l(' x_search_ctx_id IN OUT NUMBER');
8160 l(') IS');
8161 l('');
8162 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
8163 l(' -- Strings to hold the generated Intermedia query strings');
8164 l(' l_party_contains_str VARCHAR2(32000); ');
8165 l(' l_party_site_contains_str VARCHAR2(32000);');
8166 l(' l_contact_contains_str VARCHAR2(32000);');
8167 l(' l_contact_pt_contains_str VARCHAR2(32000);');
8168 l(' l_tmp VARCHAR2(32000);');
8169 l('');
8170 l(' -- Other local variables');
8171 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
8172 l(' -- For Score calculation');
8173 l(' l_max_score NUMBER;');
8174 l(' l_entered_max_score NUMBER;');
8175 l(' FIRST BOOLEAN;');
8176 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
8177 l('');
8178 FOR TX IN (
8179 SELECT distinct f.staged_attribute_column
8180 FROM hz_trans_functions_vl f, hz_secondary_trans st,
8181 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8182 WHERE sa.match_rule_id = p_rule_id
8183 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8184 AND st.function_id = f.function_id
8185 AND a.attribute_id = sa.attribute_id) LOOP
8186 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
8187 l(' l_max_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
8188 END LOOP;
8189 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
8190 l('');
8191 l(' l_score NUMBER;');
8192 l(' l_match_idx NUMBER;');
8193 l(' l_idx NUMBER;');
8194 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
8195 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
8196 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
8197 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
8198 l(' l_party_id NUMBER;');
8199 l(' l_ps_party_id NUMBER;');
8200 l(' l_ct_party_id NUMBER;');
8201 l(' l_cpt_party_id NUMBER;');
8202 l(' l_cpt_ps_id NUMBER;');
8203 l(' l_cpt_contact_id NUMBER;');
8204 l(' l_cpt_type VARCHAR2(100);');
8205 l(' l_party_site_id NUMBER;');
8206 l(' l_org_contact_id NUMBER;');
8207 l(' l_contact_pt_id NUMBER;');
8208 l(' l_ps_contact_id NUMBER;');
8209 l(' l_max_id NUMBER;');
8210 l(' l_max_idx NUMBER;');
8211 l('');
8212 l(' l_index NUMBER;');
8213 l(' l_party_max_score NUMBER;');
8214 l(' l_ps_max_score NUMBER;');
8215 l(' l_contact_max_score NUMBER;');
8216 l(' l_cpt_max_score NUMBER;');
8217 l('');
8218 l(' --Fix for bug 4417124 ');
8219 l(' l_use_contact_addr_info BOOLEAN:=TRUE;');
8220 l(' l_use_contact_cpt_info BOOLEAN:=TRUE;');
8221 l('');
8222 l(' BEGIN');
8223 l('');
8224 d(fnd_log.level_statement,'get_score_details(+)');
8225 l(' -- ************************************');
8226 l(' -- STEP 1. Initialization and error checks');
8227 l('');
8228 l(' l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,'' OR '', l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
8229 l(' g_score_until_thresh := false;');
8230 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
8231
8232 l(' -- ************************************************************');
8233 l(' -- STEP 2. Setup of intermedia query strings for Acquisition query');
8234
8235 l(' l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);');
8236 l(' l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);');
8237 l(' l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
8238
8239 l(' init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
8240 l('');
8241 l(' -- Setup Search Context ID');
8242 l(' IF x_search_ctx_id IS NULL THEN');
8243 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
8244 l(' x_search_ctx_id := l_search_ctx_id;');
8245 l(' ELSE');
8246 l(' l_search_ctx_id := x_search_ctx_id;');
8247 l(' END IF;');
8248 l('');
8249 l(' open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);');
8250 l(' LOOP ');
8251 l(' FETCH l_party_cur INTO');
8252 l(' l_party_id '||l_p_into_list||';');
8253 l(' EXIT WHEN l_party_cur%NOTFOUND;');
8254 IF l_p_param_list IS NOT NULL THEN
8255 l(' INSERT_PARTY_SCORE(p_party_id, p_party_id, l_search_ctx_id, p_party_search_rec, g_party_stage_rec, '||l_p_param_list||',1);');
8256 END IF;
8257 l(' END LOOP;');
8258 l(' CLOSE l_party_cur;');
8259 l('');
8260 l(' IF l_party_site_contains_str IS NOT NULL THEN');
8261 l(' l_max_score := 0;');
8262 l(' l_max_id := 0;');
8263 l(' l_max_idx := 0;');
8264 l(' IF p_party_search_rec.PARTY_TYPE = ''PERSON'' AND l_use_contact_addr_info THEN');
8265 l(' open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, ''Y'',''N'',l_party_site_cur);');
8266 l(' ELSE');
8267 l(' open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, ''N'',''N'',l_party_site_cur);');
8268 l(' END IF;');
8269 l(' LOOP');
8270 l(' FETCH l_party_site_cur INTO ');
8271 l(' l_party_site_id, l_ps_party_id,l_ps_contact_id '||l_ps_into_list||';');
8272 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
8273 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
8274 l(' IF l_score > l_max_score THEN');
8275 l(' l_max_score := l_score;');
8276 l(' l_max_id := l_party_site_id;');
8277 l(' l_max_idx := l_match_idx;');
8278 FOR TX IN (
8279 SELECT distinct f.staged_attribute_column
8280 FROM hz_trans_functions_vl f, hz_secondary_trans st,
8281 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8282 WHERE sa.match_rule_id = p_rule_id
8283 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8284 AND st.function_id = f.function_id
8285 AND a.entity_name = 'PARTY_SITES'
8286 AND a.attribute_id = sa.attribute_id) LOOP
8287 l(' l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
8288 END LOOP;
8289 l(' END IF;');
8290 l(' END LOOP;');
8291 l(' CLOSE l_party_site_cur;');
8292 l(' IF l_max_score>0 THEN');
8293 l(' INSERT_PARTY_SITES_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_party_site_list(l_max_idx), g_party_site_stage_list(l_max_idx) '||replace(l_ps_param_list,'l_TX','l_max_TX')||',l_max_idx);');
8294 l(' END IF;');
8295 l(' END IF;');
8296 l('');
8297 l(' IF l_contact_contains_str IS NOT NULL THEN');
8298 l(' l_max_score := 0;');
8299 l(' l_max_id := 0;');
8300 l(' l_max_idx := 0;');
8301 l(' open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);');
8302 l(' LOOP');
8303 l(' FETCH l_contact_cur INTO ');
8304 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
8305 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
8306 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
8307 l(' IF l_score > l_max_score THEN');
8308 l(' l_max_score := l_score;');
8309 l(' l_max_id := l_org_contact_id;');
8310 l(' l_max_idx := l_match_idx;');
8311 FOR TX IN (
8312 SELECT distinct f.staged_attribute_column
8313 FROM hz_trans_functions_vl f, hz_secondary_trans st,
8314 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8315 WHERE sa.match_rule_id = p_rule_id
8316 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8317 AND st.function_id = f.function_id
8318 AND a.entity_name = 'CONTACTS'
8319 AND a.attribute_id = sa.attribute_id) LOOP
8320 l(' l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
8321 END LOOP;
8322 l(' END IF;');
8323 l(' END LOOP;');
8324 l(' CLOSE l_contact_cur;');
8325 l(' IF l_max_score>0 THEN');
8326 l(' INSERT_CONTACTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_list(l_max_idx), g_contact_stage_list(l_max_idx) '||replace(l_c_param_list,'l_TX','l_max_TX')||',l_max_idx);');
8327 l(' END IF;');
8328 l(' END IF;');
8329 l('');
8330 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
8331 l(' l_max_score := 0;');
8332 l(' l_max_id := 0;');
8333 l(' l_max_idx := 0;');
8334 l(' IF p_party_search_rec.PARTY_TYPE = ''PERSON'' AND l_use_contact_cpt_info THEN');
8335 l(' open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, ''Y'',''N'',l_contact_pt_cur);');
8336 l(' ELSE');
8337 l(' open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, ''N'',''N'',l_contact_pt_cur);');
8338 l(' END IF;');
8339 l(' LOOP');
8340 l(' FETCH l_contact_pt_cur INTO ');
8341 l(' l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
8342 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
8343 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
8344 l(' IF l_score > l_max_score THEN');
8345 l(' l_max_score := l_score;');
8346 l(' l_max_id := l_contact_pt_id;');
8347 l(' l_max_idx := l_match_idx;');
8348 FOR TX IN (
8349 SELECT distinct f.staged_attribute_column
8350 FROM hz_trans_functions_vl f, hz_secondary_trans st,
8351 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8352 WHERE sa.match_rule_id = p_rule_id
8353 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8354 AND st.function_id = f.function_id
8355 AND a.entity_name = 'CONTACT_POINTS'
8356 AND a.attribute_id = sa.attribute_id) LOOP
8357 l(' l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
8358 END LOOP;
8359 l(' END IF;');
8360 l(' END LOOP;');
8361 l(' IF l_max_score>0 THEN');
8362 l(' INSERT_CONTACT_POINTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_point_list(l_max_idx), g_contact_pt_stage_list(l_max_idx) '||replace(l_cpt_param_list,'l_TX','l_max_TX')||',l_max_idx);');
8363 l(' END IF;');
8364 l(' CLOSE l_contact_pt_cur;');
8365 l(' END IF;');
8366 d(fnd_log.level_procedure,'get_score_details(-)');
8367 ELSE ---Start of Code Change for Match Rule Set
8368 l(' BEGIN');
8369 l('');
8370 d(fnd_log.level_statement,'get_score_details(+)');
8371 pop_conditions(p_rule_id,'get_score_details','p_rule_id,p_party_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,x_search_ctx_id','PARTY');
8372 d(fnd_log.level_procedure,'get_score_details(-)');
8373 END IF; ---End of Code Change for Match Rule Set
8374
8375 l('EXCEPTION');
8376 l(' WHEN FND_API.G_EXC_ERROR THEN');
8377 l(' RAISE FND_API.G_EXC_ERROR;');
8378 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
8379 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8380 l(' WHEN OTHERS THEN');
8381 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8382 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_score_details'');');
8383 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8384 l(' FND_MSG_PUB.ADD;');
8385 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8386 l('END get_score_details;');
8387 l('');
8388
8389 generate_acquire_proc(p_rule_id, NULL);
8390
8391
8392 generate_party_map_proc('MAP_PARTY_REC', p_rule_id);
8393 l('');
8394 generate_map_proc('PARTY_SITES', 'MAP_PARTY_SITE_REC', p_rule_id);
8395 l('');
8396 generate_map_proc('CONTACTS', 'MAP_CONTACT_REC', p_rule_id);
8397 l('');
8398 generate_map_proc('CONTACT_POINTS', 'MAP_CONTACT_POINT_REC', p_rule_id);
8399 l('');
8400 generate_check_proc(p_rule_id);
8401 generate_check_staged (p_rule_id);
8402 /*l(' PROCEDURE enable_debug IS');
8403
8404 l(' BEGIN');
8405 l(' g_debug_count := g_debug_count + 1;');
8406
8407 l(' IF g_debug_count = 1 THEN');
8408 l(' IF fnd_profile.value(''HZ_API_FILE_DEBUG_ON'') = ''Y'' OR');
8409 l(' fnd_profile.value(''HZ_API_DBMS_DEBUG_ON'') = ''Y''');
8410 l(' THEN');
8411 l(' hz_utility_v2pub.enable_debug;');
8412 l(' g_debug := TRUE;');
8413 d('PKG: '||p_pkg_name||' (+)');
8414 l(' END IF;');
8415 l(' END IF;');
8416 l(' END enable_debug;');
8417
8418 l(' PROCEDURE disable_debug IS');
8419
8420 l(' BEGIN');
8421
8422 l(' IF g_debug THEN');
8423 l(' g_debug_count := g_debug_count - 1;');
8424
8425 l(' IF g_debug_count = 0 THEN');
8426 d('PKG: '||p_pkg_name||' (-)');
8427 l(' hz_utility_v2pub.disable_debug;');
8428 l(' g_debug := FALSE;');
8429 l(' END IF;');
8430 l(' END IF;');
8431
8432 l(' END disable_debug;');
8433 */
8434
8435 l('END;');
8436 l('');
8437 END;
8438
8439
8440 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8441 -- which would essentially return a 'Y' or null to signify the corresponding
8442 -- XXX_contains_string contains user passed information or not.
8443
8444 PROCEDURE generate_check_parties_bulk (
8445 p_rule_id NUMBER) IS
8446 FIRST BOOLEAN;
8447 BEGIN
8448 l('');
8449 l('/************************************************');
8450 l(' This procedure checks if the input search criteria ');
8451 l(' is valid. It checks if : ');
8452 l(' 1. At least one primary condition is passed');
8453 l('************************************************/');
8454 l('');
8455
8456 l('FUNCTION check_parties_bulk(');
8457 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type)');
8458 l('RETURN VARCHAR2 IS');
8459 l(' BEGIN');
8460
8461 FIRST := TRUE;
8462 FOR PRIMATTRS IN (
8463 SELECT ATTRIBUTE_NAME
8464 FROM HZ_TRANS_ATTRIBUTES_VL a,
8465 HZ_MATCH_RULE_PRIMARY p
8466 WHERE p.match_rule_id = p_rule_id
8467 AND p.attribute_id = a.attribute_id
8468 AND a.ENTITY_NAME = 'PARTY'
8469 AND nvl(p.FILTER_FLAG,'N') = 'N') LOOP
8470 l(' IF p_party_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
8471 l(' RETURN ''Y'' ;');
8472 l(' END IF;');
8473 END LOOP;
8474
8475 l('RETURN null;');
8476
8477 l('EXCEPTION');
8478 l(' WHEN OTHERS THEN');
8479 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8480 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_parties_bulk'');');
8481 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8482 l(' FND_MSG_PUB.ADD;');
8483 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8484 l(' END check_parties_bulk ;');
8485 l('');
8486 END generate_check_parties_bulk ;
8487
8488
8489 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8490 -- which would essentially return a 'Y' or null to signify the corresponding
8491 -- XXX_contains_string contains user passed information or not.
8492
8493 PROCEDURE generate_check_partysites_bulk (
8494 p_rule_id NUMBER) IS
8495 FIRST BOOLEAN;
8496 BEGIN
8497 l('/************************************************');
8498 l(' This procedure checks if the input search condition ');
8499 l(' has party site criteria. ');
8500 l('************************************************/');
8501
8502 l('');
8503 l('FUNCTION check_party_sites_bulk(');
8504 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list');
8505 l(')');
8506 l('RETURN VARCHAR2 IS');
8507 l(' x_primary boolean := FALSE;');
8508 l(' BEGIN');
8509 l(' FOR I IN 1..p_party_site_list.COUNT LOOP');
8510 FIRST := TRUE;
8511 FOR PRIMATTRS IN (
8512 SELECT ATTRIBUTE_NAME
8513 FROM HZ_TRANS_ATTRIBUTES_VL a,
8514 HZ_MATCH_RULE_PRIMARY p
8515 WHERE p.match_rule_id = p_rule_id
8516 AND a.ENTITY_NAME = 'PARTY_SITES'
8517 AND p.attribute_id = a.attribute_id)
8518 LOOP
8519 IF FIRST THEN
8520 l(' IF p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
8521 FIRST := FALSE;
8522 ELSE
8523 l(' OR p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
8524 END IF;
8525 END LOOP;
8526 IF NOT FIRST THEN
8527 l(' THEN');
8528 l(' x_primary := TRUE;');
8529 l(' END IF;');
8530 l(' EXIT WHEN x_primary;');
8531 ELSE
8532 l(' NULL;');
8533 END IF;
8534 l(' END LOOP;');
8535
8536 l('');
8537
8538 l(' IF x_primary = TRUE THEN RETURN ''Y''; ELSE RETURN null; END IF; ');
8539 l('EXCEPTION');
8540 l(' WHEN OTHERS THEN');
8541 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8542 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_party_sites_bulk'');');
8543 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8544 l(' FND_MSG_PUB.ADD;');
8545 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8546 l(' END check_party_sites_bulk ;');
8547 l('');
8548
8549 END generate_check_partysites_bulk ;
8550
8551
8552
8553 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8554 -- which would essentially return a 'Y' or null to signify the corresponding
8555 -- XXX_contains_string contains user passed information or not.
8556
8557 PROCEDURE generate_check_contacts_bulk (
8558 p_rule_id NUMBER) IS
8559 FIRST BOOLEAN;
8560 BEGIN
8561 l('/************************************************');
8562 l(' This procedure checks if the input search condition ');
8563 l(' has contact criteria. ');
8564 l('************************************************/');
8565
8566 l('');
8567 l('FUNCTION check_contacts_bulk (');
8568 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list');
8569 l(')');
8570 l('RETURN VARCHAR2 IS');
8571 l(' x_primary boolean := FALSE;');
8572 l(' BEGIN');
8573 l(' FOR I IN 1..p_contact_list.COUNT LOOP');
8574 FIRST := TRUE;
8575 FOR PRIMATTRS IN (
8576 SELECT ATTRIBUTE_NAME
8577 FROM HZ_TRANS_ATTRIBUTES_VL a,
8578 HZ_MATCH_RULE_PRIMARY p
8579 WHERE p.match_rule_id = p_rule_id
8580 AND a.ENTITY_NAME = 'CONTACTS'
8581 AND p.attribute_id = a.attribute_id)
8582 LOOP
8583 IF FIRST THEN
8584 l(' IF p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
8585 FIRST := FALSE;
8586 ELSE
8587 l(' OR p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
8588 END IF;
8589 END LOOP;
8590 IF NOT FIRST THEN
8591 l(' THEN');
8592 l(' x_primary := TRUE;');
8593 l(' END IF;');
8594 l(' EXIT WHEN x_primary;');
8595 ELSE
8596 l(' NULL;');
8597 END IF;
8598 l(' END LOOP;');
8599
8600 l('');
8601
8602 l(' IF x_primary = TRUE THEN RETURN ''Y''; ELSE RETURN null; END IF; ');
8603 l('EXCEPTION');
8604 l(' WHEN OTHERS THEN');
8605 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8606 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_contacts_bulk'');');
8607 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8608 l(' FND_MSG_PUB.ADD;');
8609 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8610 l(' END check_contacts_bulk ;');
8611 l('');
8612
8613 END generate_check_contacts_bulk ;
8614
8615 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8616 -- which would essentially return a 'Y' or null to signify the corresponding
8617 -- XXX_contains_string contains user passed information or not.
8618
8619 PROCEDURE generate_check_cpts_bulk (
8620 p_rule_id NUMBER) IS
8621 FIRST BOOLEAN;
8622 BEGIN
8623 l('/************************************************');
8624 l(' This procedure checks if the input search condition ');
8625 l(' has contact criteria. ');
8626 l('************************************************/');
8627
8628 l('');
8629 l('FUNCTION check_cpts_bulk (');
8630 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list');
8631 l(')');
8632 l('RETURN VARCHAR2 IS');
8633 l(' x_primary boolean := FALSE;');
8634 l(' BEGIN');
8635 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
8636 FIRST := TRUE;
8637 FOR PRIMATTRS IN (
8638 SELECT ATTRIBUTE_NAME
8639 FROM HZ_TRANS_ATTRIBUTES_VL a,
8640 HZ_MATCH_RULE_PRIMARY p
8641 WHERE p.match_rule_id = p_rule_id
8642 AND a.ENTITY_NAME = 'CONTACT_POINTS'
8643 AND p.attribute_id = a.attribute_id)
8644 LOOP
8645 IF FIRST THEN
8646 l(' IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
8647 FIRST := FALSE;
8648 ELSE
8649 l(' OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
8650 END IF;
8651 END LOOP;
8652 IF NOT FIRST THEN
8653 l(' THEN');
8654 l(' x_primary := TRUE;');
8655 l(' END IF;');
8656 l(' EXIT WHEN x_primary;');
8657 ELSE
8658 l(' NULL;');
8659 END IF;
8660 l(' END LOOP;');
8661
8662 l('');
8663
8664 l(' IF x_primary = TRUE THEN RETURN ''Y''; ELSE RETURN null; END IF; ');
8665 l('EXCEPTION');
8666 l(' WHEN OTHERS THEN');
8667 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8668 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_cpts_bulk'');');
8669 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8670 l(' FND_MSG_PUB.ADD;');
8671 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8672 l(' END check_cpts_bulk ;');
8673 l('');
8674
8675 END generate_check_cpts_bulk ;
8676
8677
8678
8679 /**
8680 * VJN introduced Private procedure to generate the body of the Public Match Rule API
8681 * for a bulk match rule. This will generate Package Body for the following kind of Match rules:
8682 * HZ_IMP_MATCH_RULE_<p_rule_id>
8683 *
8684 *
8685 **/
8686 PROCEDURE gen_pkg_body_bulk (
8687 p_pkg_name IN VARCHAR2,
8688 p_rule_id IN NUMBER
8689 ) IS
8690
8691 -- Local Variables
8692 FIRST boolean;
8693 FIRST1 boolean;
8694 UPSTMT boolean;
8695 l_match_str VARCHAR2(255);
8696 l_attrib_cnt NUMBER;
8697 l_party_filter VARCHAR2(1) := null;
8698 l_ps_filter VARCHAR2(1) := null;
8699 l_contact_filter VARCHAR2(1) := null;
8700 l_cpt_filter VARCHAR2(1) := null;
8701 l_num_primary NUMBER;
8702 l_num_secondary NUMBER;
8703 l_ent VARCHAR2(30);
8704 l_max_score NUMBER;
8705 l_match_threshold NUMBER;
8706
8707 l_purpose VARCHAR2(30);
8708 TYPE NumberList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
8709 TYPE CharList IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
8710 attribList NumberList;
8711
8712 l_party_filter_str VARCHAR2(2000);
8713 l_dyn_party_filter_str VARCHAR2(2000);
8714 l_p_select_list VARCHAR2(1000);
8715 l_p_param_list VARCHAR2(1000);
8716 l_p_into_list VARCHAR2(1000);
8717 l_ps_select_list VARCHAR2(1000);
8718 l_ps_param_list VARCHAR2(1000);
8719 l_ps_into_list VARCHAR2(1000);
8720 l_c_select_list VARCHAR2(1000);
8721 l_c_param_list VARCHAR2(1000);
8722 l_c_into_list VARCHAR2(1000);
8723 l_cpt_select_list VARCHAR2(1000);
8724 l_cpt_param_list VARCHAR2(1000);
8725 l_cpt_into_list VARCHAR2(1000);
8726 cnt NUMBER;
8727 l_party_filt_bind CharList;
8728 l_cpt_type VARCHAR2(255);
8729 l_trans VARCHAR2(4000);
8730 l_auto_merge_score NUMBER;
8731 tmp VARCHAR2(30);
8732 attrib_count NUMBER;
8733 BEGIN
8734
8735 -- Query match thresholds and search type
8736 SELECT RULE_PURPOSE, MATCH_SCORE, nvl(AUTO_MERGE_SCORE,99999), decode(MATCH_ALL_FLAG,'Y',' AND ',' OR ')
8737 INTO l_purpose, l_match_threshold, l_auto_merge_score, l_match_str
8738 FROM HZ_MATCH_RULES_VL
8739 WHERE match_rule_id = p_rule_id;
8740
8741 SELECT nvl(SUM(SCORE),1) INTO l_max_score
8742 FROM HZ_MATCH_RULE_SECONDARY
8743 WHERE match_rule_id = p_rule_id;
8744
8745 l('CREATE or REPLACE PACKAGE BODY ' || p_pkg_name || ' AS');
8746 l('/*=======================================================================+');
8747 l(' | Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|');
8748 l(' | All rights reserved. |');
8749 l(' +=======================================================================+');
8750 l(' | NAME');
8751 l(' | ' || p_pkg_name);
8752 l(' |');
8753 l(' | DESCRIPTION');
8754 l(' |');
8755 l(' | Compiled by the HZ Match Rule Compiler');
8756 l(' | -- Do Not Modify --');
8757 l(' |');
8758 l(' | PUBLIC PROCEDURES');
8759 l(' | find_parties');
8760 l(' | get_matching_party_sites');
8761 l(' | get_matching_contacts');
8762 l(' | get_matching_contact_points');
8763 l(' | get_score_details');
8764 l(' | ');
8765 l(' | HISTORY');
8766 l(' | '||TO_CHAR(SYSDATE,'DD-MON-YYYY') || ' Generated by HZ Match Rule Compiler');
8767 l(' |');
8768 l(' *=======================================================================*/');
8769 l('');
8770 l('-- ==========================================================================================');
8771 l('-- ============MATCH RULE COMPILER GENERATED CODE FOR BULK MATCH RULES ======================');
8772 l('-- ==========================================================================================');
8773 l('');
8774 l(' TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;');
8775 l(' call_order vlisttype;');
8776 l(' call_max_score HZ_PARTY_SEARCH.IDList;');
8777 l(' call_type vlisttype;');
8778 l(' g_party_stage_rec HZ_PARTY_STAGE.party_stage_rec_type;');
8779 l(' g_party_site_stage_list HZ_PARTY_STAGE.party_site_stage_list;');
8780 l(' g_contact_stage_list HZ_PARTY_STAGE.contact_stage_list;');
8781 l(' g_contact_pt_stage_list HZ_PARTY_STAGE.contact_pt_stage_list;');
8782 l(' g_mappings HZ_PARTY_SEARCH.IDList;');
8783 l(' g_max_id NUMBER:=2000000000;');
8784 l('');
8785 l(' g_debug_count NUMBER := 0;');
8786 --l(' g_debug BOOLEAN := FALSE;');
8787 l(' g_score_until_thresh BOOLEAN:=false;');
8788 l(' ');
8789 l(' g_thres_score NUMBER:=1000;');
8790 --l(' PROCEDURE enable_debug;');
8791 --l(' PROCEDURE disable_debug;');
8792
8793 -- VJN introduced for bulk_match_rule
8794 generate_check_parties_bulk(p_rule_id);
8795 generate_check_partysites_bulk(p_rule_id);
8796 generate_check_contacts_bulk(p_rule_id);
8797 generate_check_cpts_bulk(p_rule_id);
8798
8799 /***********************************************************************
8800 * Private procedure to map IDs greater than the max allowed by PLSQL
8801 * Index-by tables.
8802 ************************************************************************/
8803 l(' FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS');
8804 l(' l_newidx NUMBER;');
8805 l(' BEGIN ');
8806 l(' IF in_id<g_max_id THEN ');
8807 l(' RETURN in_id;');
8808 l(' ELSE');
8809 l(' FOR I in 1..g_mappings.COUNT LOOP');
8810 l(' IF in_id = g_mappings(I) THEN');
8811 l(' RETURN (g_max_id+I);');
8812 l(' END IF;');
8813 l(' END LOOP;');
8814 l(' l_newidx := g_mappings.COUNT+1;');
8815 l(' g_mappings(l_newidx) := in_id;');
8816 l(' RETURN (g_max_id+l_newidx);');
8817 l(' END IF;');
8818 l(' END;');
8819
8820 l(' FUNCTION GET_PARTY_SCORE ');
8821 FIRST := TRUE;
8822 FOR TX IN (
8823 SELECT f.staged_attribute_column
8824 FROM hz_trans_functions_vl f, hz_secondary_trans st,
8825 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8826 WHERE sa.match_rule_id = p_rule_id
8827 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8828 AND st.function_id = f.function_id
8829 AND a.attribute_id = sa.attribute_id
8830 AND a.entity_name= 'PARTY'
8831 ORDER BY sa.attribute_id) LOOP
8832 IF FIRST THEN
8833 l(' (');
8834 l(' p_table_'||TX.staged_attribute_column||' VARCHAR2');
8835 FIRST := FALSE;
8836 ELSE
8837 l(' ,p_table_'||TX.staged_attribute_column||' VARCHAR2');
8838 END IF;
8839 END LOOP;
8840 IF FIRST THEN
8841 l(' RETURN NUMBER IS');
8842 ELSE
8843 l(' ) RETURN NUMBER IS');
8844 END IF;
8845 l(' total NUMBER := 0;');
8846 l(' BEGIN');
8847 d(fnd_log.level_procedure,'GET_PARTY_SCORE ');
8848 l(' IF g_score_until_thresh AND (total)>=g_thres_score THEN');
8849 l(' RETURN total;');
8850 l(' END IF;');
8851 FOR SECATTRS IN (
8852 SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id
8853 FROM HZ_TRANS_ATTRIBUTES_VL a,
8854 HZ_MATCH_RULE_SECONDARY s
8855 WHERE s.match_rule_id = p_rule_id
8856 AND s.attribute_id = a.attribute_id
8857 AND a.entity_name = 'PARTY') LOOP
8858 FIRST := TRUE;
8859 FOR SECTRANS IN (
8860 SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
8861 TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
8862 FROM HZ_SECONDARY_TRANS s,
8863 HZ_TRANS_FUNCTIONS_VL f
8864 WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
8865 AND s.FUNCTION_ID = f.FUNCTION_ID
8866 ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
8867 IF FIRST THEN
8868 FIRST := FALSE;
8869 IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
8870 l(' IF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8871 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
8872 ELSE
8873 l(' IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8874 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
8875 END IF;
8876 ELSE
8877 IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
8878 l(' ELSIF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8879 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
8880 ELSE
8881 l(' ELSIF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8882 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
8883 END IF;
8884 END IF;
8885 l(' total := total+'||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
8886 l(' IF g_score_until_thresh AND (total)>=g_thres_score THEN ');
8887 l(' RETURN total;');
8888 l(' END IF;');
8889 END LOOP;
8890 l(' END IF;');
8891 END LOOP;
8892 l(' RETURN total;');
8893 l(' END;');
8894
8895 add_score_function('PARTY_SITES',p_rule_id);
8896 add_score_function('CONTACTS',p_rule_id);
8897 add_score_function('CONTACT_POINTS',p_rule_id);
8898 add_get_attrib_func(p_rule_id);
8899 add_insert_function('PARTY',p_rule_id);
8900 add_insert_function('PARTY_SITES',p_rule_id);
8901 add_insert_function('CONTACTS',p_rule_id);
8902 add_insert_function('CONTACT_POINTS',p_rule_id);
8903
8904 --- VJN Introduced for conditional Word Replacements
8905 --- Populate the global condition record before doing the mapping
8906 --- so that mapping takes into account conditional word replacements if any
8907 generate_ent_cond_pop_rec_proc('PARTY', p_rule_id);
8908 l('');
8909 generate_ent_cond_pop_rec_proc('PARTY_SITES', p_rule_id);
8910 l('');
8911 generate_ent_cond_pop_rec_proc('CONTACTS', p_rule_id);
8912 l('');
8913 generate_ent_cond_pop_rec_proc('CONTACT_POINTS', p_rule_id);
8914 l('');
8915
8916
8917 l(' PROCEDURE init_score_context (');
8918 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type:=');
8919 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
8920 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list:=');
8921 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
8922 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list:= ');
8923 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
8924 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list:=');
8925 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST');
8926 l(' ) IS');
8927 l(' l_dummy NUMBER;');
8928 l(' BEGIN');
8929 l(' -- Transform search criteria');
8930 l(' HZ_TRANS_PKG.clear_globals;');
8931 l(' MAP_PARTY_REC(FALSE,p_party_search_rec, l_dummy, g_party_stage_rec);');
8932 l(' MAP_PARTY_SITE_REC(FALSE,p_party_site_list, l_dummy, g_party_site_stage_list);');
8933 l(' MAP_CONTACT_REC(FALSE,p_contact_list, l_dummy, g_contact_stage_list);');
8934 l(' MAP_CONTACT_POINT_REC(FALSE,p_contact_point_list, l_dummy, g_contact_pt_stage_list);');
8935 l('');
8936 l(' END;');
8937
8938
8939 l(' FUNCTION init_search(');
8940 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type:=');
8941 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
8942 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list:=');
8943 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
8944 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list:= ');
8945 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
8946 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list:=');
8947 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,');
8948 l(' p_match_type IN VARCHAR2,');
8949 l(' x_party_max_score OUT NUMBER,');
8950 l(' x_ps_max_score OUT NUMBER,');
8951 l(' x_contact_max_score OUT NUMBER,');
8952 l(' x_cpt_max_score OUT NUMBER');
8953 l(' ) RETURN NUMBER IS ');
8954 l(' l_entered_max_score NUMBER:=0;');
8955 l(' l_ps_entered_max_score NUMBER:=0;');
8956 l(' l_ct_entered_max_score NUMBER:=0;');
8957 l(' l_cpt_entered_max_score NUMBER:=0;');
8958 l(' vlist vlisttype;');
8959 l(' maxscore HZ_PARTY_SEARCH.IDList;');
8960 l(' l_name VARCHAR2(200);');
8961 l(' l_idx NUMBER; ');
8962 l(' l_num NUMBER; ');
8963 l(' total NUMBER; ');
8964 l(' threshold NUMBER; ');
8965 l(' BEGIN');
8966 l(' IF NOT check_prim_cond (p_party_search_rec,');
8967 l(' p_party_site_list,');
8968 l(' p_contact_list,');
8969 l(' p_contact_point_list) THEN');
8970 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_PRIMARY_COND'');');
8971 l(' FND_MSG_PUB.ADD;');
8972 l(' RAISE FND_API.G_EXC_ERROR;');
8973 l(' END IF;');
8974 IF l_max_score=1 THEN
8975 l(' HZ_DQM_SEARCH_UTIL.set_no_score;');
8976 ELSE
8977 l(' HZ_DQM_SEARCH_UTIL.set_score;');
8978 END IF;
8979 l(' g_mappings.DELETE;');
8980 l(' g_party_site_stage_list.DELETE;');
8981 l(' g_contact_stage_list.DELETE;');
8982 l(' g_contact_pt_stage_list.DELETE;');
8983 l(' call_order.DELETE;');
8984 l(' call_max_score.DELETE;');
8985 l(' HZ_DQM_SEARCH_UTIL.new_search;');
8986 l(' HZ_TRANS_PKG.set_party_type(p_party_search_rec.PARTY_TYPE);');
8987 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
8988 l('');
8989 l(' -- Transform search criteria');
8990 l(' MAP_PARTY_REC(TRUE,p_party_search_rec, l_entered_max_score, g_party_stage_rec);');
8991 l(' MAP_PARTY_SITE_REC(TRUE,p_party_site_list, l_ps_entered_max_score, g_party_site_stage_list);');
8992 l(' MAP_CONTACT_REC(TRUE,p_contact_list, l_ct_entered_max_score, g_contact_stage_list);');
8993 l(' MAP_CONTACT_POINT_REC(TRUE,p_contact_point_list, l_cpt_entered_max_score, g_contact_pt_stage_list);');
8994 l('');
8995 l(' ');
8996 l(' l_idx := l_entered_max_score+1;');
8997 l(' vlist (l_idx) := ''PARTY'';');
8998 l(' maxscore (l_idx) := l_entered_max_score;');
8999
9000 l(' l_idx := l_ps_entered_max_score+1;');
9001 l(' WHILE vlist.EXISTS(l_idx) LOOP');
9002 l(' l_idx := l_idx+1;');
9003 l(' END LOOP;');
9004 l(' vlist (l_idx) := ''PARTY_SITE'';');
9005 l(' maxscore (l_idx) := l_ps_entered_max_score;');
9006 l('');
9007 l(' l_idx := l_ct_entered_max_score+1;');
9008 l(' WHILE vlist.EXISTS(l_idx) LOOP');
9009 l(' l_idx := l_idx+1;');
9010 l(' END LOOP;');
9011 l(' vlist (l_idx) := ''CONTACT'';');
9012 l(' maxscore (l_idx) := l_ct_entered_max_score;');
9013 l('');
9014 l(' l_idx := l_cpt_entered_max_score+1;');
9015 l(' WHILE vlist.EXISTS(l_idx) LOOP');
9016 l(' l_idx := l_idx+1;');
9017 l(' END LOOP;');
9018 l(' vlist (l_idx) := ''CONTACT_POINT'';');
9019 l(' maxscore (l_idx) := l_cpt_entered_max_score;');
9020 l('');
9021 l(' l_num := 1;');
9022 l(' l_idx := vlist.LAST;');
9023 l(' WHILE l_idx IS NOT NULL LOOP');
9024 l(' call_order(l_num) := vlist(l_idx);');
9025 l(' call_max_score(l_num) := maxscore(l_idx);');
9026 l(' l_idx := vlist.PRIOR(l_idx);');
9027 l(' l_num := l_num+1;');
9028 l(' END LOOP; ');
9029 l(' call_order(5):=''NONE'';');
9030 l(' IF p_match_type = '' OR '' THEN');
9031 IF l_purpose = 'S' THEN
9032 l(' threshold := round(('||l_match_threshold||'/'||l_max_score||')*(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score));');
9033 ELSE
9034 l(' threshold := '||l_match_threshold||';');
9035 END IF;
9036
9037 l(' l_idx := vlist.FIRST;');
9038 l(' total := 0;');
9039 l(' l_num := 4;');
9040 l(' WHILE l_idx IS NOT NULL LOOP');
9041 l(' total := total+maxscore(l_idx);');
9042 l(' IF total<threshold THEN');
9043 l(' call_type(l_num) := ''AND'';');
9044 l(' ELSE');
9045 l(' call_type(l_num) := ''OR'';');
9046 l(' END IF;');
9047 l(' l_idx := vlist.NEXT(l_idx);');
9048 l(' l_num := l_num-1;');
9049 l(' END LOOP;');
9050 l(' ELSE');
9051 l(' call_type(1) := ''OR'';');
9052 l(' call_type(2) := ''AND'';');
9053 l(' call_type(3) := ''AND'';');
9054 l(' call_type(4) := ''AND'';');
9055 l(' END IF;');
9056 l(' x_party_max_score := l_entered_max_score;');
9057 l(' x_ps_max_score := l_ps_entered_max_score;');
9058 l(' x_contact_max_score := l_ct_entered_max_score;');
9059 l(' x_cpt_max_score := l_cpt_entered_max_score;');
9060
9061 l(' RETURN (l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score);');
9062 l(' END;');
9063
9064
9065
9066 FIRST := TRUE;
9067 g_party_or_query := null;
9068 g_party_and_query := null;
9069 cnt := cnt+1;
9070 FOR PRIMATTRS IN (
9071 SELECT a.ATTRIBUTE_ID, PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME, nvl(SCORE,0) SCORE
9072 FROM HZ_TRANS_ATTRIBUTES_VL a,
9073 HZ_MATCH_RULE_PRIMARY p,
9074 HZ_MATCH_RULE_SECONDARY s
9075 WHERE p.match_rule_id = p_rule_id
9076 AND s.match_rule_id (+) = p_rule_id
9077 AND s.attribute_id (+) = a.attribute_id
9078 AND p.attribute_id = a.attribute_id
9079 AND a.ENTITY_NAME = 'PARTY'
9080 AND nvl(FILTER_FLAG,'N') <> 'Y'
9081 ORDER BY SCORE) LOOP
9082 FIRST1 := TRUE;
9083 FOR PRIMTRANS IN (
9084 SELECT f.STAGED_ATTRIBUTE_COLUMN, f.TRANSFORMATION_NAME, nvl(f.PRIMARY_FLAG,'N') PRIMARY_FLAG
9085 FROM HZ_TRANS_FUNCTIONS_VL f,
9086 HZ_PRIMARY_TRANS pt
9087 WHERE pt.PRIMARY_ATTRIBUTE_ID = PRIMATTRS.PRIMARY_ATTRIBUTE_ID
9088 AND pt.FUNCTION_ID = f.FUNCTION_ID)
9089 LOOP
9090 IF FIRST1 THEN
9091 l_trans := '(g_party_stage_rec.'||
9092 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
9093 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
9094 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
9095 FIRST1 := FALSE;
9096 ELSE
9097 l_trans := l_trans||' OR (g_party_stage_rec.'||
9098 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
9099 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
9100 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
9101 END IF;
9102 IF PRIMTRANS.PRIMARY_FLAG = 'Y' THEN
9103 tmp := '''A'||PRIMATTRS.ATTRIBUTE_ID||'''';
9104 ELSE
9105 tmp := 'NULL';
9106 END IF;
9107
9108 END LOOP;
9109
9110 l('');
9111
9112
9113
9114 END LOOP;
9115
9116 get_column_list(p_rule_id, 'PARTY',l_p_select_list,l_p_param_list, l_p_into_list);
9117 get_column_list(p_rule_id, 'PARTY_SITES',l_ps_select_list,l_ps_param_list, l_ps_into_list);
9118 get_column_list(p_rule_id, 'CONTACTS',l_c_select_list,l_c_param_list, l_c_into_list);
9119 get_column_list(p_rule_id, 'CONTACT_POINTS',l_cpt_select_list,l_cpt_param_list, l_cpt_into_list);
9120
9121 l_party_filter_str := NULL;
9122 l_dyn_party_filter_str := NULL;
9123 FIRST := TRUE;
9124 cnt := 1;
9125 for PRIMTRANS IN (
9126 SELECT f.STAGED_ATTRIBUTE_COLUMN
9127 FROM HZ_TRANS_FUNCTIONS_VL f,
9128 HZ_TRANS_ATTRIBUTES_VL a,
9129 HZ_MATCH_RULE_PRIMARY pattr,
9130 HZ_PRIMARY_TRANS pfunc
9131 WHERE pattr.MATCH_RULE_ID = p_rule_id
9132 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9133 AND a.ENTITY_NAME = 'PARTY'
9134 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
9135 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
9136 AND nvl(FILTER_FLAG,'N') = 'Y'
9137
9138 UNION
9139
9140 SELECT f.STAGED_ATTRIBUTE_COLUMN
9141 FROM HZ_TRANS_FUNCTIONS_VL f,
9142 HZ_TRANS_ATTRIBUTES_VL a
9143 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9144 AND a.entity_name = 'PARTY'
9145 AND a.attribute_name='PARTY_TYPE'
9146 AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
9147 AND nvl(f.active_flag,'Y')='Y'
9148 AND ROWNUM=1
9149 ) LOOP
9150
9151 IF FIRST THEN
9152 l_party_filter_str := '(g_party_stage_rec.'||
9153 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9154 ' IS NULL OR g_party_stage_rec.'||
9155 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' = p.' ||
9156 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9157 l_dyn_party_filter_str := '(:'||
9158 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9159 ' IS NULL OR :'||
9160 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' = p.' ||
9161 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9162 FIRST := FALSE;
9163 ELSE
9164 l_dyn_party_filter_str := l_dyn_party_filter_str || ' AND ' ||
9165 '(:'||
9166 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9167 ' IS NULL OR :'||
9168 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' = p.' ||
9169 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9170 l_party_filter_str := l_party_filter_str || ' AND ' ||
9171 '(g_party_stage_rec.'||
9172 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9173 ' IS NULL OR g_party_stage_rec.'||
9174 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' = p.' ||
9175 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9176 END IF;
9177 l_party_filt_bind(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
9178 cnt:=cnt+1;
9179 END LOOP;
9180
9181
9182
9183
9184 /*********************************************************************************
9185 * Match rule private procedures to open a cursor for performing B-tree index queries.
9186 * open_party_cursor - B-tree index query on HZ_STAGED_PARTIES
9187 * open_party_site_cursor - B-tree index query on HZ_STAGED_PARTY_SITES
9188 * open_contact_cursor - B-tree index query on HZ_STAGED_CONTACTS
9189 * open_contact_pt_cursor - B-tree index query on HZ_STAGED_CONTACT_POINTS
9190 *
9191 * Input:
9192 * p_dup_party_id : Called in the duplicate identification case, to filter off
9193 * the party for which we are trying find duplicates.
9194 * p_restrict_sql : restrict_sql criteria passed to match rule
9195 * p_contains_str : null or 'Y'
9196 * p_search_ctx_id : Only to called from find_party_details, for filtering against
9197 * party_ids returned by the party query
9198 * p_party_id : USed in the get_matching_party_sites, get_matching_contacts and
9199 * get_matching_cpts procedures, to only find records belonging to the specified
9200 * party_id
9201 *********************************************************************************/
9202
9203 -- VJN: Introduced the code generation of match rules based on rule purpose
9204 -- so that Expanded Duplicate Identification Match rules uses intermedia indexes
9205 -- where as the bulk duplicate identification match rules use the conventional
9206 -- B-tree indexes.
9207 l(' PROCEDURE open_party_cursor(');
9208 l(' p_dup_party_id NUMBER, ');
9209 l(' p_restrict_sql VARCHAR2, ');
9210 l(' p_contains_str VARCHAR2, ');
9211 l(' p_search_ctx_id NUMBER,');
9212 l(' p_match_str VARCHAR2,');
9213 l(' p_search_merged VARCHAR2,');
9214 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9215 l(' l_sqlstr VARCHAR2(4000);');
9216 l(' BEGIN');
9217 IF has_acquisition_attribs (p_rule_id, 'PARTY')
9218 THEN
9219 l(' IF p_contains_str IS NULL THEN');
9220 /**** To query based on party_id .. from the get_score_details flow ***/
9221 l(' OPEN x_cursor FOR ');
9222 l(' SELECT PARTY_ID '|| l_p_select_list);
9223 l(' FROM HZ_STAGED_PARTIES stage');
9224 l(' WHERE PARTY_ID = p_dup_party_id;');
9225
9226 /**** Static queries when restrict_sql is null OR if p_search_ctx_id IS NOT NULL *****/
9227 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9228
9229 /**** When search context ID is null .. Retrieve rows using B-tree indexes ****/
9230 l(' IF p_search_ctx_id IS NULL THEN');
9231 l(' OPEN x_cursor FOR ');
9232 l(' SELECT /*+ ORDERED */ stage.PARTY_ID '|| replace(l_p_select_list,'T','stage.T'));
9233 l(' FROM HZ_SRCH_PARTIES srch, HZ_STAGED_PARTIES stage');
9234 l(' WHERE');
9235
9236 generate_bulk_predicate(p_rule_id,'N',l_match_str,'PARTY');
9237
9238 IF l_party_filter_str IS NOT NULL THEN
9239 l(' AND ('||replace(l_party_filter_str,'p.','stage.')||')');
9240 END IF;
9241 l(' AND (nvl(p_search_merged,''N'')=''Y'' OR nvl(stage.status,''A'') in (''A''))');
9242 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9243
9244
9245 /**** When search context ID is not null .. Query using DQM_PARTIES_GT. Filter using
9246 B-tree index ****/
9247 l(' ELSE');
9248 l(' OPEN x_cursor FOR ');
9249 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTIES_U1) */ stage.PARTY_ID '|| replace(l_p_select_list,'T','stage.T'));
9250 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTIES stage, HZ_SRCH_PARTIES srch');
9251 l(' WHERE');
9252
9253 generate_bulk_predicate(p_rule_id,'N',l_match_str,'PARTY');
9254
9255 l(' AND d.SEARCH_CONTEXT_ID=p_search_ctx_id');
9256 l(' AND d.party_id = stage.party_id');
9257 IF l_party_filter_str IS NOT NULL THEN
9258 l(' AND ('||replace(l_party_filter_str,'p.','stage.')||')');
9259 END IF;
9260 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
9261 l(' AND (nvl(p_search_merged,''N'')=''Y'' OR nvl(stage.status,''A'') in (''A''));');
9262 l(' END IF;');
9263
9264 /**** When restrict_sql is not null *****/
9265 l(' ELSE');
9266
9267 /**** When search context ID is null .. Access using B-tree index ***/
9268 l(' IF p_search_ctx_id IS NULL THEN');
9269 l(' l_sqlstr := ''SELECT /*+ ORDERED */ stage.PARTY_ID '|| replace(l_p_select_list,'T','stage.T')||'''||');
9270 l(' '' FROM HZ_SRCH_PARTIES srch, HZ_STAGED_PARTIES stage''||');
9271 l(' '' WHERE''||');
9272
9273 generate_bulk_predicate(p_rule_id,'Y',l_match_str,'PARTY');
9274
9275 IF l_dyn_party_filter_str IS NOT NULL THEN
9276 l(' '' AND ('||replace(l_dyn_party_filter_str,'p.','stage.')||')''||');
9277 END IF;
9278 l(' '' AND (''||p_restrict_sql||'')'' ||');
9279 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9280 l(' IF p_search_merged IS NULL OR p_search_merged <> ''Y'' THEN');
9281 l(' l_sqlstr := l_sqlstr ||'' AND nvl(stage.status,''''A'''') in (''''A'''')'';');
9282 l(' END IF;');
9283 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9284 FOR I in 1..l_party_filt_bind.COUNT LOOP
9285 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9286 END LOOP;
9287 l(' ,p_dup_party_id, p_dup_party_id;');
9288 l(' END IF;');
9289 l(' END IF;');
9290 l(' exception');
9291 l(' when others then');
9292 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9293 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9294 l(' FND_MSG_PUB.ADD;');
9295 l(' RAISE FND_API.G_EXC_ERROR;');
9296 l(' else ');
9297 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9298 l(' end if;');
9299 ELSE
9300 l('NULL ;');
9301 END IF;
9302 l(' END;');
9303 l('');
9304
9305
9306 l(' PROCEDURE open_party_site_cursor(');
9307 l(' p_dup_party_id NUMBER, ');
9308 l(' p_party_id NUMBER, ');
9309 l(' p_restrict_sql VARCHAR2, ');
9310 l(' p_contains_str VARCHAR2, ');
9311 l(' p_search_ctx_id NUMBER, ');
9312 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9313 l(' l_sqlstr VARCHAR2(4000);');
9314 l(' BEGIN');
9315 IF has_acquisition_attribs (p_rule_id, 'PARTY_SITES')
9316 THEN
9317
9318 /**** For a single party_id scenario. Retrieve using party_id ****/
9319 l(' IF p_party_id IS NOT NULL THEN');
9320 l(' OPEN x_cursor FOR ');
9321 l(' SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'||
9322 replace(l_ps_select_list,'T','stage.T') );
9323 l(' FROM HZ_STAGED_PARTY_SITES stage,HZ_SRCH_PSITES srch');
9324 l('WHERE');
9325 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9326 IF l_party_filter_str IS NOT NULL THEN
9327 l(' AND EXISTS (');
9328 l(' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9329 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9330 l(' AND ('||l_party_filter_str||'))');
9331 END IF;
9332 l(' AND stage.party_id = p_party_id;');
9333 /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
9334 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9335
9336 -- VJN new hints introduced for performance
9337 IF l_party_filter_str IS NOT NULL THEN
9338 /**** When p_search_ctx_id IS NULL, retreive using B-tree index ***/
9339 l(' IF p_search_ctx_id IS NULL THEN');
9340 l(' OPEN x_cursor FOR ');
9341 l(' SELECT /*+ ORDERED USE_NL(srch stage p) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'||
9342 replace(l_ps_select_list,'T','stage.T'));
9343 l(' FROM HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage, HZ_STAGED_PARTIES p');
9344 l('WHERE');
9345 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9346 l(' AND p.PARTY_ID = stage.PARTY_ID');
9347 l(' AND ('||l_party_filter_str||')');
9348 ELSE
9349 /**** When p_search_ctx_id IS NULL, retreive using B-tree index ***/
9350 l(' IF p_search_ctx_id IS NULL THEN');
9351 l(' OPEN x_cursor FOR ');
9352 l(' SELECT /*+ USE_NL(srch stage) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'||
9353 replace(l_ps_select_list,'T','stage.T'));
9354 l(' FROM HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage');
9355 l('WHERE');
9356 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9357 END IF;
9358
9359
9360 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9361
9362 /***** Search_ctx_id is not null. Retreive using HZ_DQM_PARTIES_GT ****/
9363 l(' ELSE');
9364 l(' OPEN x_cursor FOR ');
9365 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'
9366 || replace(l_ps_select_list,'T','stage.T'));
9367 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage, HZ_SRCH_PSITES srch');
9368 l('WHERE');
9369 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9370 l(' AND d.search_context_id = p_search_ctx_id');
9371 l(' AND d.party_id = stage.party_id');
9372 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9373 l(' END IF;');
9374
9375 -- VJN new hints introduced for performance
9376 IF l_dyn_party_filter_str IS NOT NULL THEN
9377 /**** Restrict_sql is not null ****/
9378 l(' ELSE');
9379 l(' l_sqlstr := ''SELECT /*+ ORDERED USE_NL(srch stage p) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID ' ||
9380 replace(l_ps_select_list,'T','stage.T')||'''||');
9381 l(' '' FROM HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage, HZ_STAGED_PARTIES p''||');
9382 l(' '' WHERE'' ||');
9383 generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'PARTY_SITES');
9384 l(' '' AND p.party_id = stage.party_id '' || ');
9385 l(' '' AND ('||l_dyn_party_filter_str||')) '' || ');
9386 ELSE
9387 /**** Restrict_sql is not null ****/
9388 l(' ELSE');
9389 l(' l_sqlstr := ''SELECT /*+ USE_NL(srch stage) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID ' ||
9390 replace(l_ps_select_list,'T','stage.T')||'''||');
9391 l(' '' FROM HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage''||');
9392 l(' '' WHERE'' ||');
9393 generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'PARTY_SITES');
9394 END IF;
9395 l(' '' AND (''||p_restrict_sql||'')'' ||');
9396 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9397 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9398 FOR I in 1..l_party_filt_bind.COUNT LOOP
9399 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9400 END LOOP;
9401 l(' ,p_dup_party_id, p_dup_party_id;');
9402 l(' END IF;');
9403 l(' exception');
9404 l(' when others then');
9405 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9406 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9407 l(' FND_MSG_PUB.ADD;');
9408 l(' RAISE FND_API.G_EXC_ERROR;');
9409 l(' else ');
9410 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9411 l(' end if;');
9412 ELSE
9413 l('NULL ;');
9414 END IF;
9415 l(' END;');
9416
9417 l('');
9418 l(' PROCEDURE open_contact_cursor(');
9419 l(' p_dup_party_id NUMBER, ');
9420 l(' p_party_id NUMBER, ');
9421 l(' p_restrict_sql VARCHAR2, ');
9422 l(' p_contains_str VARCHAR2, ');
9423 l(' p_search_ctx_id NUMBER, ');
9424 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9425 l(' l_sqlstr VARCHAR2(4000);');
9426 l(' BEGIN');
9427 IF has_acquisition_attribs (p_rule_id, 'CONTACTS')
9428 THEN
9429 /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
9430 l(' IF p_party_id IS NOT NULL THEN');
9431 l(' OPEN x_cursor FOR ');
9432 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ stage.ORG_CONTACT_ID, stage.PARTY_ID'||
9433 replace(l_c_select_list,'T' , 'stage.T') );
9434 l(' FROM HZ_STAGED_CONTACTS stage, HZ_SRCH_CONTACTS srch');
9435 l(' WHERE');
9436 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACTS');
9437 IF l_party_filter_str IS NOT NULL THEN
9438 l(' AND EXISTS (');
9439 l(' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9440 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9441 l(' AND ('||l_party_filter_str||'))');
9442 END IF;
9443 l(' AND stage.party_id = p_party_id;');
9444 /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
9445 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9446
9447 /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
9448 l(' IF p_search_ctx_id IS NULL THEN');
9449 l(' OPEN x_cursor FOR ');
9450 l(' SELECT /*+ USE_NL(srch stage) */ stage.ORG_CONTACT_ID, stage.PARTY_ID'|| replace(l_c_select_list,'T','stage.T') );
9451 l(' FROM HZ_SRCH_CONTACTS srch, HZ_STAGED_CONTACTS stage');
9452 l(' WHERE');
9453 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACTS');
9454 IF l_party_filter_str IS NOT NULL THEN
9455 l(' AND EXISTS (');
9456 l(' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9457 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9458 l(' AND ('||l_party_filter_str||'))');
9459 END IF;
9460 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9461
9462 /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
9463 l(' ELSE');
9464 l(' OPEN x_cursor FOR ');
9465 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ stage.ORG_CONTACT_ID, stage.PARTY_ID'
9466 || replace(l_c_select_list,'T' , 'stage.T') );
9467 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage, HZ_SRCH_CONTACTS srch');
9468 l(' WHERE');
9469 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACTS');
9470 l(' AND d.search_context_id = p_search_ctx_id');
9471 l(' AND d.party_id = stage.party_id');
9472 /*
9473 IF l_party_filter_str IS NOT NULL THEN
9474 l(' AND EXISTS (');
9475 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
9476 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9477 l(' AND ('||l_party_filter_str||'))');
9478 END IF;
9479 */
9480 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9481 l(' END IF;');
9482
9483 /**** Restrict_sql is not null. Retrieve using intermedia ****/
9484 l(' ELSE');
9485 l(' l_sqlstr := ''SELECT /*+ USE_NL(srch stage) */ stage.ORG_CONTACT_ID, stage.PARTY_ID '||
9486 replace(l_c_select_list,'T','stage.T')||'''||');
9487 l(' '' FROM HZ_SRCH_CONTACTS srch, HZ_STAGED_CONTACTS stage''||');
9488 l(' '' WHERE ''||');
9489 generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'CONTACTS');
9490 IF l_dyn_party_filter_str IS NOT NULL THEN
9491 l(' '' AND EXISTS (''||');
9492 l(' '' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p '' || ');
9493 l(' '' WHERE p.party_id = stage.party_id '' || ');
9494 l(' '' AND ('||l_dyn_party_filter_str||')) '' || ');
9495 END IF;
9496 l(' '' AND (''||p_restrict_sql||'')'' ||');
9497 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9498 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9499 FOR I in 1..l_party_filt_bind.COUNT LOOP
9500 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9501 END LOOP;
9502 l(' ,p_dup_party_id, p_dup_party_id;');
9503 l(' END IF;');
9504 l(' exception');
9505 l(' when others then');
9506 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9507 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9508 l(' FND_MSG_PUB.ADD;');
9509 l(' RAISE FND_API.G_EXC_ERROR;');
9510 l(' else ');
9511 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9512 l(' end if;');
9513 ELSE
9514 l('NULL ;');
9515 END IF;
9516 l(' END;');
9517 l('');
9518
9519
9520 l(' PROCEDURE open_contact_pt_cursor(');
9521 l(' p_dup_party_id NUMBER, ');
9522 l(' p_party_id NUMBER, ');
9523 l(' p_restrict_sql VARCHAR2, ');
9524 l(' p_contains_str VARCHAR2, ');
9525 l(' p_search_ctx_id NUMBER, ');
9526 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9527 l(' l_sqlstr VARCHAR2(4000);');
9528 l(' BEGIN');
9529
9530 IF has_acquisition_attribs (p_rule_id, 'CONTACT_POINTS')
9531 THEN
9532
9533 /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
9534 l(' IF p_party_id IS NOT NULL THEN');
9535 l(' OPEN x_cursor FOR ');
9536 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ stage.CONTACT_POINT_ID, stage.PARTY_ID,'
9537 || 'stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9538 || replace(l_cpt_select_list,'T','stage.T') );
9539 l(' FROM HZ_STAGED_CONTACT_POINTS stage, HZ_SRCH_CPTS srch');
9540 l(' WHERE');
9541 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACT_POINTS');
9542 IF l_party_filter_str IS NOT NULL THEN
9543
9544 l(' AND EXISTS (');
9545 l(' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9546 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9547 l(' AND ('||l_party_filter_str||'))');
9548 END IF;
9549 l(' AND stage.party_id = p_party_id;');
9550 /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
9551 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9552
9553 /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
9554 l(' IF p_search_ctx_id IS NULL THEN');
9555 l(' OPEN x_cursor FOR ');
9556 l(' SELECT /*+ USE_NL(srch stage) */ stage.CONTACT_POINT_ID, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9557 || replace(l_cpt_select_list,'T','stage.T') );
9558 l(' FROM HZ_SRCH_CPTS srch, HZ_STAGED_CONTACT_POINTS stage');
9559 l(' WHERE');
9560 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACT_POINTS');
9561 IF l_party_filter_str IS NOT NULL THEN
9562 l(' AND EXISTS (');
9563 l(' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9564 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9565 l(' AND ('||l_party_filter_str||'))');
9566 END IF;
9567 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9568
9569 /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
9570 l(' ELSE');
9571 l(' OPEN x_cursor FOR ');
9572 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ stage.CONTACT_POINT_ID, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9573 || replace(l_cpt_select_list,'T','stage.T') );
9574 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage, HZ_SRCH_CPTS srch');
9575 l(' WHERE');
9576 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACT_POINTS');
9577 l(' AND d.search_context_id = p_search_ctx_id');
9578 l(' AND d.party_id = stage.party_id');
9579 /*
9580 IF l_party_filter_str IS NOT NULL THEN
9581 l(' AND EXISTS (');
9582 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
9583 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9584 l(' AND ('||l_party_filter_str||'))');
9585 END IF;
9586 */
9587 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9588 l(' END IF;');
9589
9590 /**** Restrict_sql is not null. Retrieve using intermedia ****/
9591 l(' ELSE');
9592 l(' l_sqlstr := ''SELECT /*+ USE_NL(srch stage) */ stage.CONTACT_POINT_ID, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9593 || replace(l_cpt_select_list,'T','stage.T')||'''||');
9594 l(' '' FROM HZ_SRCH_CPTS srch, HZ_STAGED_CONTACT_POINTS stage''||');
9595 l(' '' WHERE''||');
9596 generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'CONTACT_POINTS');
9597 IF l_dyn_party_filter_str IS NOT NULL THEN
9598 l(' '' AND EXISTS (''||');
9599 l(' '' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p '' || ');
9600 l(' '' WHERE p.party_id = stage.party_id '' || ');
9601 l(' '' AND ('||l_dyn_party_filter_str||')) '' || ');
9602 END IF;
9603 l(' '' AND (''||p_restrict_sql||'')'' ||');
9604 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9605 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9606 FOR I in 1..l_party_filt_bind.COUNT LOOP
9607 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9608 END LOOP;
9609 l(' ,p_dup_party_id, p_dup_party_id;');
9610 l(' END IF;');
9611 l(' exception');
9612 l(' when others then');
9613 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9614 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9615 l(' FND_MSG_PUB.ADD;');
9616 l(' RAISE FND_API.G_EXC_ERROR;');
9617 l(' else ');
9618 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9619 l(' end if;');
9620 ELSE
9621 l('NULL ;');
9622 END IF;
9623 l(' END;');
9624
9625 l('');
9626 l(' FUNCTION get_new_score_rec (');
9627 l(' p_init_total_score NUMBER,');
9628 l(' p_init_party_score NUMBER,');
9629 l(' p_init_party_site_score NUMBER,');
9630 l(' p_init_contact_score NUMBER,');
9631 l(' p_init_contact_point_score NUMBER, ');
9632 l(' p_party_id NUMBER, ');
9633 l(' p_party_site_id NUMBER, ');
9634 l(' p_org_contact_id NUMBER, ');
9635 l(' p_contact_point_id NUMBER) ');
9636 l(' RETURN HZ_PARTY_SEARCH.score_rec IS');
9637 l(' l_score_rec HZ_PARTY_SEARCH.score_rec;');
9638 l(' BEGIN');
9639 l(' l_score_rec.TOTAL_SCORE := p_init_total_score;');
9640 l(' l_score_rec.PARTY_SCORE := p_init_party_score;');
9641 l(' l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;');
9642 l(' l_score_rec.CONTACT_SCORE := p_init_contact_score;');
9643 l(' l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;');
9644 l(' l_score_rec.PARTY_ID := p_party_id;');
9645 l(' l_score_rec.PARTY_SITE_ID := p_party_site_id;');
9646 l(' l_score_rec.ORG_CONTACT_ID := p_org_contact_id;');
9647 l(' l_score_rec.CONTACT_POINT_ID := p_contact_point_id;');
9648 l(' RETURN l_score_rec;');
9649 l(' END;');
9650
9651 l('');
9652 l(' /**********************************************************');
9653 l(' This procedure finds the set of parties that match the search');
9654 l(' criteria and returns a scored set of parties');
9655 l('');
9656 l(' The steps in executing the search are as follows');
9657 l(' 1. Initialization and error checks');
9658 l(' 2. Setup of intermedia query strings for Acquisition query');
9659 l(' 3. Execution of Acquisition query');
9660 l(' 4. Execution of Secondary queries to score results');
9661 l(' 5. Setup of data temporary table to return search results');
9662 l(' **********************************************************/');
9663 l('');
9664 l('-------------------------------------------------------------------------------------');
9665 l('-------------------- BULK MATCH RULE ::: find_parties ------------------------------');
9666 l('-------------------------------------------------------------------------------------');
9667 l('PROCEDURE find_parties (');
9668 l(' p_rule_id IN NUMBER,');
9669 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
9670 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
9671 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
9672 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
9673 l(' p_restrict_sql IN VARCHAR2,');
9674 l(' p_match_type IN VARCHAR2,');
9675 l(' p_search_merged IN VARCHAR2,');
9676 l(' p_dup_party_id IN NUMBER,');
9677 l(' p_dup_set_id IN NUMBER,');
9678 l(' p_dup_batch_id IN NUMBER,');
9679 l(' p_ins_details IN VARCHAR2,');
9680 l(' x_search_ctx_id OUT NUMBER,');
9681 l(' x_num_matches OUT NUMBER');
9682 l(') IS');
9683 l('');
9684 l(' -- Strings to hold the generated Intermedia query strings');
9685 l(' l_party_contains_str VARCHAR2(32000); ');
9686 l(' l_party_site_contains_str VARCHAR2(32000);');
9687 l(' l_contact_contains_str VARCHAR2(32000);');
9688 l(' l_contact_pt_contains_str VARCHAR2(32000);');
9689 l(' l_denorm_str VARCHAR2(32000);');
9690 l(' l_ps_denorm_str VARCHAR2(32000);');
9691 l(' l_ct_denorm_str VARCHAR2(32000);');
9692 l(' l_cpt_denorm_str VARCHAR2(32000);');
9693
9694 l('');
9695 l(' -- Other local variables');
9696 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
9697 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
9698 l(' -- For Score calculation');
9699 l(' l_max_score NUMBER;');
9700 l(' l_match_idx NUMBER;');
9701 l(' l_entered_max_score NUMBER;');
9702 l(' FIRST BOOLEAN;');
9703 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
9704 l('');
9705 FOR TX IN (
9706 SELECT distinct f.staged_attribute_column
9707 FROM hz_trans_functions_vl f, hz_secondary_trans st,
9708 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
9709 WHERE sa.match_rule_id = p_rule_id
9710 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
9711 AND st.function_id = f.function_id
9712 AND a.attribute_id = sa.attribute_id) LOOP
9713 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
9714 END LOOP;
9715 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
9716 l(' H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
9717 l(' H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
9718 l('');
9719 l(' l_score NUMBER;');
9720 l(' l_idx NUMBER;');
9721 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
9722 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
9723 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
9724 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
9725 l(' l_party_id NUMBER;');
9726 l(' l_ps_party_id NUMBER;');
9727 l(' l_ct_party_id NUMBER;');
9728 l(' l_cpt_party_id NUMBER;');
9729 l(' l_cpt_ps_id NUMBER;');
9730 l(' l_cpt_contact_id NUMBER;');
9731 l(' l_party_site_id NUMBER;');
9732 l(' l_org_contact_id NUMBER;');
9733 l(' l_contact_pt_id NUMBER;');
9734 l(' l_ps_contact_id NUMBER;');
9735 l(' l_party_max_score NUMBER;');
9736 l(' l_ps_max_score NUMBER;');
9737 l(' l_contact_max_score NUMBER;');
9738 l(' l_cpt_max_score NUMBER;');
9739 l(' l_denorm_max_score NUMBER;');
9740 l(' l_non_denorm_max_score NUMBER;');
9741 l('');
9742 l(' defpt NUMBER :=0;');
9743 l(' defps NUMBER :=0;');
9744 l(' defct NUMBER :=0;');
9745 l(' defcpt NUMBER :=0;');
9746 l(' l_index NUMBER;');
9747 l(' l_max_thresh NUMBER;');
9748 l(' l_tmp NUMBER;');
9749 l(' l_merge_flag VARCHAR2(1);');
9750 l(' l_num_eval NUMBER:=0;');
9751 l('');
9752 l(' --Fix for bug 4417124 ');
9753 l(' l_use_contact_addr_info BOOLEAN := TRUE;');
9754 l(' l_use_contact_cpt_info BOOLEAN := TRUE;');
9755 l(' l_use_contact_addr_flag VARCHAR2(1) := ''Y'';');
9756 l(' l_use_contact_cpt_flag VARCHAR2(1) := ''Y'';');
9757 l('');
9758 l(' h_ps_id HZ_PARTY_SEARCH.IDList;');
9759 l(' h_ps_party_id HZ_PARTY_SEARCH.IDList;');
9760 l(' h_ps_score HZ_PARTY_SEARCH.IDList;');
9761 l(' h_ct_id HZ_PARTY_SEARCH.IDList;');
9762 l(' h_ct_party_id HZ_PARTY_SEARCH.IDList;');
9763 l(' h_ct_score HZ_PARTY_SEARCH.IDList;');
9764 l(' h_cpt_id HZ_PARTY_SEARCH.IDList;');
9765 l(' h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
9766 l(' h_cpt_score HZ_PARTY_SEARCH.IDList;');
9767 l(' detcnt NUMBER := 1;');
9768 l('');
9769 l(' ');
9770 l(' /********************* Find Parties private procedures *******/');
9771
9772 l(' PROCEDURE push_eval IS');
9773 l(' BEGIN');
9774 l(' H_PARTY_ID.DELETE;');
9775 l(' H_PARTY_ID_LIST.DELETE;');
9776 l(' H_SCORES.DELETE; ');
9777 l(' g_mappings.DELETE;');
9778 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
9779 l(' call_order(5) := call_order(1);');
9780 l(' call_type(5) := ''AND'';');
9781 l(' call_max_score(5) := call_max_score(1);');
9782 l(' call_type(2) := ''OR'';');
9783 l(' END;');
9784
9785 l('');
9786 l(' /** Private procedure to acquire and score at party level ***/');
9787 l(' PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
9788 l(' l_party_id_idx NUMBER:=1;');
9789 l(' l_ctx_id NUMBER;');
9790 l(' BEGIN');
9791 l(' SAVEPOINT eval_start;');
9792 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
9793 l(' l_ctx_id := l_search_ctx_id;');
9794 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
9795 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9796 l(' l_search_ctx_id,H_PARTY_ID(I));');
9797 l(' H_PARTY_ID.DELETE;');
9798 l(' H_PARTY_ID_LIST.DELETE;');
9799 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
9800 l(' l_ctx_id := l_search_ctx_id;');
9801 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
9802 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9803 l(' l_search_ctx_id,H_PARTY_ID(I));');
9804 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
9805 l(' ELSE');
9806 l(' l_ctx_id := NULL;');
9807 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
9808 l(' END IF;');
9809 l(' open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);');
9810 l(' LOOP ');
9811 l(' FETCH l_party_cur INTO');
9812 l(' l_party_id '||l_p_into_list||';');
9813 l(' EXIT WHEN l_party_cur%NOTFOUND;');
9814 l(' l_index := map_id(l_party_id);');
9815 l(' l_score := GET_PARTY_SCORE('||l_p_param_list||');');
9816
9817 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
9818 l(' H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
9819 l(' ELSE');
9820 l(' H_SCORES(l_index).TOTAL_SCORE := ');
9821 l(' H_SCORES(l_index).TOTAL_SCORE+l_score;');
9822 l(' H_SCORES(l_index).PARTY_SCORE := l_score;');
9823 l(' END IF;');
9824 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
9825 l(' H_PARTY_ID_LIST(l_index) := 1;');
9826 l(' H_PARTY_ID(l_party_id_idx) := l_party_id;');
9827 l(' l_party_id_idx:= l_party_id_idx+1;');
9828 l(' END IF;');
9829 l(' IF l_party_id_idx>l_max_thresh THEN');
9830 l(' CLOSE l_party_cur;'); --Bug No: 3872745
9831 l(' IF p_index>1 THEN');
9832 ldbg_s('In eval party level number of matches found exceeded threshold');
9833 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
9834 l(' FND_MSG_PUB.ADD;');
9835 l(' RAISE FND_API.G_EXC_ERROR;');
9836 l(' ELSE');
9837 l(' push_eval;');
9838 l(' RETURN;');
9839 l(' END IF;');
9840 l(' END IF;');
9841 ds(fnd_log.level_statement);
9842 dc(fnd_log.level_statement,'Party Level Matches');
9843 dc(fnd_log.level_statement,'l_party_id','l_party_id');
9844 dc(fnd_log.level_statement,'l_score','l_score');
9845 de;
9846 l(' END LOOP;');
9847 l(' CLOSE l_party_cur;');
9848 l(' ROLLBACK to eval_start;');
9849 l(' END;');
9850 l('');
9851 l(' /** Private procedure to acquire and score at party site level ***/');
9852 l(' PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
9853 l(' l_party_id_idx NUMBER:=1;');
9854 l(' l_ctx_id NUMBER;');
9855 --l(' h_ps_id HZ_PARTY_SEARCH.IDList;');
9856 --l(' h_ps_party_id HZ_PARTY_SEARCH.IDList;');
9857 --l(' h_ps_score HZ_PARTY_SEARCH.IDList;');
9858 --l(' detcnt NUMBER := 1;');
9859 l(' BEGIN');
9860 l(' SAVEPOINT eval_start;');
9861 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
9862 l(' l_ctx_id := l_search_ctx_id;');
9863 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
9864 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9865 l(' l_search_ctx_id,H_PARTY_ID(I));');
9866 l(' H_PARTY_ID.DELETE;');
9867 l(' H_PARTY_ID_LIST.DELETE;');
9868 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
9869 l(' l_ctx_id := l_search_ctx_id;');
9870 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
9871 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9872 l(' l_search_ctx_id,H_PARTY_ID(I));');
9873 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
9874 l(' ELSE');
9875 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
9876 l(' l_ctx_id := NULL;');
9877 l(' END IF;');
9878 l(' open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, l_party_site_cur);');
9879 l(' LOOP ');
9880 l(' FETCH l_party_site_cur INTO');
9881 l(' l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
9882 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
9883 l(' IF l_use_contact_addr_info OR l_ps_contact_id IS NOT NULL THEN');
9884 l(' l_index := map_id(l_ps_party_id);');
9885 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
9886
9887 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
9888 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);');
9889 l(' ELSE');
9890 l(' IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
9891 l(' H_SCORES(l_index).TOTAL_SCORE := ');
9892 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
9893 l(' H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
9894 l(' END IF;');
9895 l(' END IF;');
9896 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
9897 l(' H_PARTY_ID_LIST(l_index) := 1;');
9898 l(' H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
9899 l(' l_party_id_idx:= l_party_id_idx+1;');
9900 l(' END IF;');
9901 l(' IF l_party_id_idx>l_max_thresh THEN');
9902 l(' CLOSE l_party_site_cur;'); --Bug No: 3872745
9903 l(' IF p_index>1 THEN');
9904 ldbg_s('In eval party site level number of matches found exceeded threshold');
9905 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
9906 l(' FND_MSG_PUB.ADD;');
9907 l(' RAISE FND_API.G_EXC_ERROR;');
9908 l(' ELSE');
9909 l(' push_eval;');
9910 l(' RETURN;');
9911 l(' END IF;');
9912 l(' END IF;');
9913 l(' IF p_ins_details = ''Y'' THEN');
9914 l(' h_ps_id(detcnt) := l_party_site_id;');
9915 l(' h_ps_party_id(detcnt) := l_ps_party_id;');
9916 l(' h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
9917 l(' detcnt := detcnt +1;');
9918 l(' END IF;');
9919 ds(fnd_log.level_statement);
9920 dc(fnd_log.level_statement,'Party Site Level Matches');
9921 dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
9922 dc(fnd_log.level_statement,'l_ps_party_id','l_ps_party_id');
9923 dc(fnd_log.level_statement,'l_score','l_score');
9924 de;
9925 l(' END IF;');
9926 l(' END LOOP;');
9927 l(' CLOSE l_party_site_cur;');
9928 l(' ROLLBACK to eval_start;');
9929 -- l(' IF p_ins_details = ''Y'' THEN');
9930 -- l(' FORALL I in 1..h_ps_id.COUNT ');
9931 -- l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
9932 -- l(' l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
9933 -- l(' END IF;');
9934 l(' END;');
9935 l('');
9936 l(' /** Private procedure to acquire and score at party site level ***/');
9937 l(' PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
9938 l(' l_party_id_idx NUMBER:=1;');
9939 l(' l_ctx_id NUMBER;');
9940 -- l(' h_ct_id HZ_PARTY_SEARCH.IDList;');
9941 -- l(' h_ct_party_id HZ_PARTY_SEARCH.IDList;');
9942 -- l(' h_ct_score HZ_PARTY_SEARCH.IDList;');
9943 -- l(' detcnt NUMBER := 1;');
9944 l(' BEGIN');
9945 l(' SAVEPOINT eval_start;');
9946 l(' IF l_match_str = '' AND '' AND p_call_type=''AND'' THEN');
9947 l(' l_ctx_id := l_search_ctx_id;');
9948 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
9949 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9950 l(' l_search_ctx_id,H_PARTY_ID(I));');
9951 l(' H_PARTY_ID.DELETE;');
9952 l(' H_PARTY_ID_LIST.DELETE;');
9953 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
9954 l(' l_ctx_id := l_search_ctx_id;');
9955 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
9956 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9957 l(' l_search_ctx_id,H_PARTY_ID(I));');
9958 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
9959 l(' ELSE');
9960 l(' l_ctx_id := NULL;');
9961 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
9962 l(' END IF;');
9963 l(' open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id, l_contact_cur);');
9964 l(' LOOP ');
9965 l(' FETCH l_contact_cur INTO');
9966 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
9967 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
9968 l(' l_index := map_id(l_ct_party_id);');
9969 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
9970
9971 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
9972 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id,null);');
9973 l(' ELSE');
9974 l(' IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
9975 l(' H_SCORES(l_index).TOTAL_SCORE := ');
9976 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
9977 l(' H_SCORES(l_index).CONTACT_SCORE := l_score;');
9978 l(' END IF;');
9979 l(' END IF;');
9980 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
9981 l(' H_PARTY_ID_LIST(l_index) := 1;');
9982 l(' H_PARTY_ID(l_party_id_idx) := l_ct_party_id;');
9983 l(' l_party_id_idx:= l_party_id_idx+1;');
9984 l(' END IF;');
9985 l(' IF l_party_id_idx>l_max_thresh THEN');
9986 l(' CLOSE l_contact_cur;'); --Bug No: 3872745
9987 l(' IF p_index>1 THEN');
9988 ldbg_s('In eval contact level number of matches found exceeded threshold');
9989 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
9990 l(' FND_MSG_PUB.ADD;');
9991 l(' RAISE FND_API.G_EXC_ERROR;');
9992 l(' ELSE');
9993 l(' push_eval;');
9994 l(' RETURN;');
9995 l(' END IF;');
9996 l(' END IF;');
9997 l(' IF p_ins_details = ''Y'' THEN');
9998 l(' h_ct_id(detcnt) := l_org_contact_id;');
9999 l(' h_ct_party_id(detcnt) := l_ct_party_id;');
10000 l(' h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
10001 l(' detcnt := detcnt +1;');
10002 l(' END IF;');
10003 ds(fnd_log.level_statement);
10004 dc(fnd_log.level_statement,'Contact Level Matches');
10005 dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
10006 dc(fnd_log.level_statement,'l_ct_party_id','l_ct_party_id');
10007 dc(fnd_log.level_statement,'l_score','l_score');
10008 de;
10009 l(' END LOOP;');
10010 l(' CLOSE l_contact_cur;');
10011 l(' ROLLBACK to eval_start;');
10012 -- l(' IF p_ins_details = ''Y'' THEN');
10013 -- l(' FORALL I in 1..h_ct_id.COUNT ');
10014 -- l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
10015 -- l(' l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
10016 -- l(' END IF;');
10017 l(' END;');
10018 l('');
10019 l(' /** Private procedure to acquire and score at contact point level ***/');
10020 l(' PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10021 l(' l_party_id_idx NUMBER:=1;');
10022 l(' l_ctx_id NUMBER;');
10023 -- l(' h_cpt_id HZ_PARTY_SEARCH.IDList;');
10024 -- l(' h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
10025 -- l(' h_cpt_score HZ_PARTY_SEARCH.IDList;');
10026 -- l(' detcnt NUMBER := 1;');
10027 l(' BEGIN');
10028 l(' SAVEPOINT eval_start;');
10029 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10030 l(' l_ctx_id := l_search_ctx_id;');
10031 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10032 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10033 l(' l_search_ctx_id,H_PARTY_ID(I));');
10034 l(' H_PARTY_ID.DELETE;');
10035 l(' H_PARTY_ID_LIST.DELETE;');
10036 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10037 l(' l_ctx_id := l_search_ctx_id;');
10038 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10039 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10040 l(' l_search_ctx_id,H_PARTY_ID(I));');
10041 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10042 l(' ELSE');
10043 l(' l_ctx_id := NULL;');
10044 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10045 l(' END IF;');
10046 l(' open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, l_contact_pt_cur);');
10047 l(' LOOP ');
10048 l(' FETCH l_contact_pt_cur INTO');
10049 l(' l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
10050 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
10051 l(' IF l_use_contact_cpt_info OR l_ps_contact_id IS NOT NULL THEN');
10052 l(' l_index := map_id(l_cpt_party_id);');
10053 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
10054
10055 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
10056 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);');
10057 l(' ELSE');
10058 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
10059 l(' H_SCORES(l_index).TOTAL_SCORE := ');
10060 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
10061 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
10062 l(' END IF;');
10063 l(' END IF;');
10064 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
10065 l(' H_PARTY_ID_LIST(l_index) := 1;');
10066 l(' H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;');
10067 l(' l_party_id_idx:= l_party_id_idx+1;');
10068 l(' END IF;');
10069 l(' IF l_party_id_idx>l_max_thresh THEN');
10070 l(' CLOSE l_contact_pt_cur;'); --Bug No: 3872745
10071 l(' IF p_index>1 THEN');
10072 ldbg_s('In eval contact point level number of matches found exceeded threshold');
10073 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10074 l(' FND_MSG_PUB.ADD;');
10075 l(' RAISE FND_API.G_EXC_ERROR;');
10076 l(' ELSE');
10077 l(' push_eval;');
10078 l(' RETURN;');
10079 l(' END IF;');
10080 l(' END IF;');
10081 l(' IF p_ins_details = ''Y'' THEN');
10082 l(' h_cpt_id(detcnt) := l_contact_pt_id;');
10083 l(' h_cpt_party_id(detcnt) := l_cpt_party_id;');
10084 l(' h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
10085 l(' detcnt := detcnt +1;');
10086 l(' END IF;');
10087 ds(fnd_log.level_statement);
10088 dc(fnd_log.level_statement,'Contact pt Level Matches');
10089 dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
10090 dc(fnd_log.level_statement,'l_cpt_party_id','l_cpt_party_id');
10091 dc(fnd_log.level_statement,'l_score','l_score');
10092 de;
10093 l(' END IF;');
10094 l(' END LOOP;');
10095 l(' CLOSE l_contact_pt_cur;');
10096 l(' ROLLBACK to eval_start;');
10097 -- l(' IF p_ins_details = ''Y'' THEN');
10098 -- l(' FORALL I in 1..h_cpt_id.COUNT ');
10099 -- l(' INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
10100 -- l(' l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
10101 -- l(' END IF;');
10102 l(' END;');
10103 l('');
10104 l(' /** Private procedure to call the eval procedure at each entity in the correct order ***/');
10105 l(' PROCEDURE do_eval (p_index NUMBER) IS');
10106 l(' l_ctx_id NUMBER;');
10107 l(' l_threshold NUMBER;'); --Bug No: 4407425
10108 l(' other_criteria_exists BOOLEAN; '); --Bug No: 4407425
10109 l(' BEGIN');
10110 --Start of Bug No: 4407425
10111 l(' IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
10112 l(' l_threshold := '|| l_match_threshold ||'; ');
10113 l(' other_criteria_exists := TRUE ;');
10114 l(' IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
10115 l(' other_criteria_exists := FALSE; ');
10116 l(' END IF ; ');
10117 l(' IF( (l_match_str = '' AND '' AND other_criteria_exists) OR ( call_max_score(p_index) < l_threshold) )THEN');
10118 l(' RETURN; ');
10119 l(' ELSE');
10120 ldbg_s('In do eval number of matches found exceeded threshold');
10121 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10122 l(' FND_MSG_PUB.ADD;');
10123 l(' RAISE FND_API.G_EXC_ERROR;');
10124 l(' END IF; ');
10125 l(' END IF;');
10126 --End of Bug No: 4407425
10127 /*l(' IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
10128 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10129 l(' FND_MSG_PUB.ADD;');
10130 l(' RAISE FND_API.G_EXC_ERROR;');
10131 l(' END IF;');
10132 */
10133 l(' IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
10134 l(' eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
10135 l(' ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
10136 l(' eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10137 l(' ELSIF call_order(p_index) = ''CONTACT'' AND l_contact_contains_str IS NOT NULL THEN');
10138 l(' eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10139 l(' ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
10140 l(' eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10141 l(' END IF;');
10142 l(' END;');
10143 l(' /************ End of find_parties private procedures **********/ ');
10144 l('');
10145 l(' BEGIN');
10146 l('');
10147
10148
10149 d(fnd_log.level_procedure,'find_parties(+)');
10150 ds(fnd_log.level_statement);
10151 dc(fnd_log.level_statement,'Input Parameters:');
10152 dc(fnd_log.level_statement,'p_match_type','p_match_type');
10153 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
10154 dc(fnd_log.level_statement,'p_dup_set_id','p_dup_set_id');
10155 dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
10156 dc(fnd_log.level_statement,'p_dup_party_id','p_dup_party_id');
10157 de;
10158
10159 l(' -- ************************************');
10160 l(' -- STEP 1. Initialization and error checks');
10161 l('');
10162
10163 l(' l_match_str := ''' || l_match_str || ''';');
10164 l(' IF p_match_type = ''AND'' THEN');
10165 l(' l_match_str := '' AND '';');
10166 l(' ELSIF p_match_type = ''OR'' THEN');
10167 l(' l_match_str := '' OR '';');
10168 l(' END IF;');
10169 l(' SAVEPOINT find_parties;');
10170 l(' l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
10171 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
10172 l('');
10173 IF l_purpose = 'D' THEN
10174 l('');
10175 l(' IF l_entered_max_score < '||l_match_threshold||' THEN');
10176 l(' x_num_matches:=0;');
10177 l(' x_search_ctx_id:=0;');
10178 l(' RETURN;');
10179 l(' END IF;');
10180 l('');
10181 END IF;
10182 l('');
10183 l(' --Fix for bug 4417124 ');
10184 l('');
10185 l(' SELECT use_contact_addr_flag, use_contact_cpt_flag ');
10186 l(' INTO l_use_contact_addr_flag, l_use_contact_cpt_flag ');
10187 l(' FROM hz_match_rules_b ');
10188 l(' WHERE match_rule_id = '||p_rule_id||'; ');
10189 l('');
10190 l(' IF p_dup_batch_id IS NOT NULL AND NVL(l_use_contact_addr_flag, ''Y'') = ''N'' THEN');
10191 l(' l_use_contact_addr_info := FALSE; ');
10192 l(' END IF; ');
10193 l('');
10194 l(' IF p_dup_batch_id IS NOT NULL AND NVL(l_use_contact_cpt_flag, ''Y'') = ''N'' THEN');
10195 l(' l_use_contact_cpt_info := FALSE; ');
10196 l(' END IF; ');
10197 l('');
10198 l(' --End fix for bug 4417124');
10199 l('');
10200 l(' l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
10201 l(' IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
10202 l(' g_score_until_thresh := true;');
10203 l(' ELSE');
10204 l(' g_score_until_thresh := false;');
10205 l(' END IF;');
10206
10207 l(' l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
10208 l(' l_contact_contains_str := check_contacts_bulk (p_contact_list);');
10209 l(' l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
10210 /*
10211 l(' l_denorm_max_score:=0;');
10212 l(' l_non_denorm_max_score:=0;');
10213 l(' IF l_ps_denorm_str IS NOT NULL THEN');
10214 l(' l_denorm_max_score := l_denorm_max_score+l_ps_max_score;');
10215 l(' l_denorm_str := l_ps_denorm_str;');
10216 l(' ELSE');
10217 l(' l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;');
10218 l(' END IF;');
10219
10220 l(' IF l_ct_denorm_str IS NOT NULL THEN');
10221 l(' l_denorm_max_score := l_denorm_max_score+l_contact_max_score;');
10222 l(' IF l_denorm_str IS NOT NULL THEN');
10223 l(' l_denorm_str := l_denorm_str || '' OR '' ||l_ct_denorm_str;');
10224 l(' ELSE');
10225 l(' l_denorm_str := l_ct_denorm_str;');
10226 l(' END IF;');
10227 l(' ELSE');
10228 l(' l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;');
10229 l(' END IF;');
10230
10231 l(' IF l_cpt_denorm_str IS NOT NULL THEN');
10232 l(' l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;');
10233 l(' IF l_denorm_str IS NOT NULL THEN');
10234 l(' l_denorm_str := l_denorm_str || '' OR '' ||l_cpt_denorm_str;');
10235 l(' ELSE');
10236 l(' l_denorm_str := l_cpt_denorm_str;');
10237 l(' END IF;');
10238 l(' ELSE');
10239 l(' l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;');
10240 l(' END IF;');
10241 */
10242 l(' l_party_contains_str := check_parties_bulk (p_party_search_rec) ;');
10243 l(' init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
10244 l('');
10245 l(' -- Setup Search Context ID');
10246 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
10247 l(' x_search_ctx_id := l_search_ctx_id;');
10248 l('');
10249
10250 l(' IF l_party_contains_str IS NULL THEN');
10251 l(' defpt := 1;');
10252 l(' END IF;');
10253 l(' IF l_party_site_contains_str IS NULL THEN');
10254 l(' defps := 1;');
10255 l(' END IF;');
10256 l(' IF l_contact_contains_str IS NULL THEN');
10257 l(' defct := 1;');
10258 l(' END IF;');
10259 l(' IF l_contact_pt_contains_str IS NULL THEN');
10260 l(' defcpt := 1;');
10261 l(' END IF;');
10262 l('');
10263
10264 ds(fnd_log.level_statement);
10265 dc(fnd_log.level_statement,'l_match_str','l_match_str');
10266 dc(fnd_log.level_statement,'l_party_contains_str','l_party_contains_str');
10267 dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
10268 dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
10269 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
10270 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
10271 de;
10272
10273 IF l_max_score=1 THEN
10274 l(' FOR I in 1..3 LOOP');
10275 l(' IF (call_order(I) = ''PARTY'' AND l_party_contains_str IS NULL)');
10276 l(' OR (call_order(I) = ''PARTY_SITE'' AND l_party_site_contains_str IS NULL)');
10277 l(' OR (call_order(I) = ''CONTACT'' AND l_contact_contains_str IS NULL)');
10278 l(' OR (call_order(I) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NULL) THEN');
10279 l(' IF call_type(I)=''OR'' THEN');
10280 l(' call_type(I+1):=''OR'';');
10281 l(' END IF;');
10282 l(' END IF;');
10283 l(' END LOOP;');
10284 END IF;
10285
10286 /**** Call all 4 evaluation procedures ***********/
10287 l(' FOR I in 1..5 LOOP');
10288 l(' do_eval(I);');
10289 l(' END LOOP;');
10290 l('ROLLBACK to find_parties;');
10291 IF l_purpose = 'S' THEN
10292 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
10293 ELSE
10294 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||l_match_threshold);
10295 END IF;
10296
10297 l(' x_num_matches := 0;');
10298 l(' l_num_eval := 0;');
10299 l(' IF l_match_str = '' OR '' THEN');
10300 l(' l_party_id := H_SCORES.FIRST;');
10301 l(' ELSE');
10302 l(' l_party_id := H_PARTY_ID_LIST.FIRST;');
10303 l(' END IF;');
10304
10305 l(' WHILE l_party_id IS NOT NULL LOOP');
10306 l(' l_num_eval:= l_num_eval+1;');
10307 ds(fnd_log.level_statement);
10308 dc(fnd_log.level_statement,'Match Party ID','H_SCORES(l_party_id).PARTY_ID');
10309 IF l_purpose = 'S' THEN
10310 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
10311 ELSE
10312 dc(fnd_log.level_statement,'Score','H_SCORES(l_party_id).TOTAL_SCORE');
10313 END IF;
10314 de;
10315 IF l_purpose = 'S' THEN
10316 l(' IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
10317 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
10318 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100));');
10319 l(' x_num_matches := x_num_matches+1;');
10320 ELSE
10321 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
10322 l(' IF p_dup_set_id IS NULL THEN');
10323 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
10324 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);');
10325 l(' x_num_matches := x_num_matches+1;');
10326 l(' ELSE');
10327 l(' BEGIN');
10328 l(' SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES'); --Bug No: 4244529
10329 l(' WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID');
10330 l(' AND DUP_SET_BATCH_ID = p_dup_batch_id '); --Bug No: 4244529
10331 l(' AND ROWNUM=1;');
10332 l(' EXCEPTION ');
10333 l(' WHEN NO_DATA_FOUND THEN');
10334 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_auto_merge_score||' THEN');
10335 l(' l_merge_flag := ''Y'';');
10336 l(' ELSE');
10337 l(' l_merge_flag := ''N'';');
10338 l(' END IF;');
10339 l(' INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
10340 l(' MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
10341 l(' LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
10342 l(' VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,');
10343 l(' H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,');
10344 l(' hz_utility_pub.created_by,hz_utility_pub.creation_date,');
10345 l(' hz_utility_pub.last_update_login,');
10346 l(' hz_utility_pub.last_update_date,');
10347 l(' hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
10348 l(' x_num_matches := x_num_matches+1;');
10349 l(' END;');
10350 l(' END IF;');
10351 END IF;
10352 l(' END IF;');
10353 l(' IF l_match_str = '' OR '' THEN');
10354 l(' l_party_id:=H_SCORES.NEXT(l_party_id);');
10355 l(' ELSE');
10356 l(' l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
10357 l(' END IF;');
10358 l(' END LOOP;');
10359 l('');
10360 l('----------INSERT INTO HZ_MATCHED_PARTY_SITES -----');
10361 l(' IF p_ins_details = ''Y'' THEN');
10362 l(' FORALL I in 1..h_ps_id.COUNT ');
10363 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
10364 l(' l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
10365 l(' END IF;');
10366 l('----------INSERT INTO HZ_MATCHED_CONTACTS-----');
10367 l(' IF p_ins_details = ''Y'' THEN');
10368 l(' FORALL I in 1..h_ct_id.COUNT ');
10369 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
10370 l(' l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
10371 l(' END IF;');
10372 l('----------INSERT INTO HZ_MATCHED_CPTS-----');
10373 l(' IF p_ins_details = ''Y'' THEN');
10374 l(' FORALL I in 1..h_cpt_id.COUNT ');
10375 l(' INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
10376 l(' l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
10377 l(' END IF;');
10378 l('');
10379 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
10380 d(fnd_log.level_procedure,'find_parties(-)');
10381
10382
10383 l('EXCEPTION');
10384 l(' WHEN FND_API.G_EXC_ERROR THEN');
10385 l(' ROLLBACK to find_parties;');
10386 l(' RAISE FND_API.G_EXC_ERROR;');
10387 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
10388 l(' ROLLBACK to find_parties;');
10389 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
10390 l(' WHEN OTHERS THEN');
10391 l(' ROLLBACK to find_parties;');
10392 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
10393 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_parties'');');
10394 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
10395 l(' FND_MSG_PUB.ADD;');
10396 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
10397 l('END find_parties;');
10398 l('');
10399
10400 l('-------------------------------------------------------------------------------------');
10401 l('-------------------- BULK MATCH RULE ::: find_persons ------------------------------');
10402 l('-------------------------------------------------------------------------------------');
10403
10404 l('PROCEDURE find_persons (');
10405 l(' p_rule_id IN NUMBER,');
10406 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
10407 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
10408 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
10409 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
10410 l(' p_restrict_sql IN VARCHAR2,');
10411 l(' p_match_type IN VARCHAR2,');
10412 l(' p_search_merged IN VARCHAR2,');
10413 l(' p_ins_details IN VARCHAR2,');
10414 l(' x_search_ctx_id OUT NUMBER,');
10415 l(' x_num_matches OUT NUMBER');
10416 l(') IS');
10417 l('');
10418 IF l_purpose <> 'D' THEN
10419 l(' -- Strings to hold the generated Intermedia query strings');
10420 l(' l_party_contains_str VARCHAR2(32000); ');
10421 l(' l_party_site_contains_str VARCHAR2(32000);');
10422 l(' l_contact_contains_str VARCHAR2(32000);');
10423 l(' l_contact_pt_contains_str VARCHAR2(32000);');
10424 l(' l_denorm_str VARCHAR2(32000);');
10425 l(' l_ps_denorm_str VARCHAR2(32000);');
10426 l(' l_ct_denorm_str VARCHAR2(32000);');
10427 l(' l_cpt_denorm_str VARCHAR2(32000);');
10428
10429 l('');
10430 l(' -- Other local variables');
10431 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
10432 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
10433 l(' -- For Score calculation');
10434 l(' l_max_score NUMBER;');
10435 l(' l_match_idx NUMBER;');
10436 l(' l_entered_max_score NUMBER;');
10437 l(' FIRST BOOLEAN;');
10438 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
10439 l('');
10440 FOR TX IN (
10441 SELECT distinct f.staged_attribute_column
10442 FROM hz_trans_functions_vl f, hz_secondary_trans st,
10443 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
10444 WHERE sa.match_rule_id = p_rule_id
10445 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
10446 AND st.function_id = f.function_id
10447 AND a.attribute_id = sa.attribute_id) LOOP
10448 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
10449 END LOOP;
10450 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
10451 l(' H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
10452 l(' H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
10453 l('');
10454 l(' l_score NUMBER;');
10455 l(' l_idx NUMBER;');
10456 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
10457 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
10458 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
10459 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
10460 l(' l_party_id NUMBER;');
10461 l(' l_ps_party_id NUMBER;');
10462 l(' l_ct_party_id NUMBER;');
10463 l(' l_cpt_party_id NUMBER;');
10464 l(' l_cpt_ps_id NUMBER;');
10465 l(' l_cpt_contact_id NUMBER;');
10466 l(' l_party_site_id NUMBER;');
10467 l(' l_org_contact_id NUMBER;');
10468 l(' l_contact_pt_id NUMBER;');
10469 l(' l_ps_contact_id NUMBER;');
10470 l(' l_party_max_score NUMBER;');
10471 l(' l_ps_max_score NUMBER;');
10472 l(' l_contact_max_score NUMBER;');
10473 l(' l_cpt_max_score NUMBER;');
10474 l(' l_denorm_max_score NUMBER;');
10475 l(' l_non_denorm_max_score NUMBER;');
10476 l('');
10477 l(' defpt NUMBER :=0;');
10478 l(' defps NUMBER :=0;');
10479 l(' defct NUMBER :=0;');
10480 l(' defcpt NUMBER :=0;');
10481 l(' l_index NUMBER;');
10482 l(' l_max_thresh NUMBER;');
10483 l(' l_tmp NUMBER;');
10484 l(' l_merge_flag VARCHAR2(1);');
10485 l(' l_num_eval NUMBER:=0;');
10486 l('');
10487 l(' h_ps_id HZ_PARTY_SEARCH.IDList;');
10488 l(' h_ps_party_id HZ_PARTY_SEARCH.IDList;');
10489 l(' h_ps_score HZ_PARTY_SEARCH.IDList;');
10490 l(' h_ct_id HZ_PARTY_SEARCH.IDList;');
10491 l(' h_ct_party_id HZ_PARTY_SEARCH.IDList;');
10492 l(' h_ct_score HZ_PARTY_SEARCH.IDList;');
10493 l(' h_cpt_id HZ_PARTY_SEARCH.IDList;');
10494 l(' h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
10495 l(' h_cpt_score HZ_PARTY_SEARCH.IDList;');
10496 l(' detcnt NUMBER := 1;');
10497 l(' l_person_id NUMBER;');
10498
10499 l(' ');
10500 l(' /********************* Find Parties private procedures *******/');
10501 FOR TX IN (
10502 SELECT a.attribute_name,
10503 f.PROCEDURE_NAME,
10504 f.STAGED_ATTRIBUTE_COLUMN
10505 FROM HZ_TRANS_FUNCTIONS_VL f,
10506 HZ_TRANS_ATTRIBUTES_VL a
10507 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10508 AND a.entity_name = 'PARTY'
10509 AND a.attribute_name='PARTY_TYPE'
10510 AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
10511 AND nvl(f.active_flag,'Y')='Y'
10512 AND ROWNUM=1
10513 ) LOOP
10514 l(' PROCEDURE set_person_party_type IS');
10515 l(' BEGIN');
10516 l(' g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||':= ');
10517 l(' HZ_TRANS_PKG.EXACT(');
10518 l(' ''PERSON''');
10519 l(' ,null,''PARTY_TYPE''');
10520 l(' ,''PARTY'');');
10521 l(' END;');
10522 l(' ');
10523 l(' PROCEDURE unset_person_party_type IS');
10524 l(' BEGIN');
10525 l(' g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||' := '''';');
10526 l(' END;');
10527 END LOOP;
10528 l(' ');
10529 l(' FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) ');
10530 l(' RETURN NUMBER IS');
10531 l(' l_party_type VARCHAR2(255);');
10532 l(' l_person_id NUMBER(15);');
10533 l(' BEGIN');
10534 l(' SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;');
10535 l(' IF l_party_type = ''PERSON'' THEN');
10536 l(' RETURN p_party_id;');
10537 l(' ELSIF p_contact_id IS NULL THEN');
10538 l(' RETURN NULL;');
10539 l(' ELSE');
10540 l(' BEGIN ');
10541 l(' SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p');
10542 l(' WHERE oc.org_contact_id = p_contact_id');
10543 l(' AND r.relationship_id = oc.party_relationship_id ');
10544 l(' AND r.object_id = p_party_id');
10545 l(' AND p.party_id = r.subject_id ');
10546 l(' AND p.party_type = ''PERSON''');
10547 l(' AND ROWNUM=1;');
10548 l(' ');
10549 l(' RETURN l_person_id;');
10550 l(' EXCEPTION');
10551 l(' WHEN NO_DATA_FOUND THEN');
10552 l(' RETURN NULL;');
10553 l(' END; ');
10554 l(' END IF;');
10555 l(' END; ');
10556 l('');
10557 l(' PROCEDURE push_eval IS');
10558 l(' BEGIN');
10559 l(' H_PARTY_ID.DELETE;');
10560 l(' H_PARTY_ID_LIST.DELETE;');
10561 l(' H_SCORES.DELETE; ');
10562 l(' g_mappings.DELETE;');
10563 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
10564 l(' call_order(5) := call_order(1);');
10565 l(' call_type(5) := ''AND'';');
10566 l(' call_max_score(5) := call_max_score(1);');
10567 l(' call_type(2) := ''OR'';');
10568 l(' END;');
10569 l('');
10570 l(' /** Private procedure to acquire and score at party level ***/');
10571 l(' PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
10572 l(' l_party_id_idx NUMBER:=1;');
10573 l(' l_ctx_id NUMBER;');
10574 l(' BEGIN');
10575 l(' SAVEPOINT eval_start;');
10576 l(' set_person_party_type;');
10577 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10578 l(' l_ctx_id := l_search_ctx_id;');
10579 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10580 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10581 l(' l_search_ctx_id,H_PARTY_ID(I));');
10582 l(' H_PARTY_ID.DELETE;');
10583 l(' H_PARTY_ID_LIST.DELETE;');
10584 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10585 l(' l_ctx_id := l_search_ctx_id;');
10586 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10587 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10588 l(' l_search_ctx_id,H_PARTY_ID(I));');
10589 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10590 l(' ELSE');
10591 l(' l_ctx_id := NULL;');
10592 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10593 l(' END IF;');
10594 l(' open_party_cursor(null, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,null,l_party_cur);');
10595 l(' LOOP ');
10596 l(' FETCH l_party_cur INTO');
10597 l(' l_party_id '||l_p_into_list||';');
10598 l(' EXIT WHEN l_party_cur%NOTFOUND;');
10599 l(' l_index := map_id(l_party_id);');
10600 l(' l_score := GET_PARTY_SCORE('||l_p_param_list||');');
10601
10602 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
10603 l(' H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
10604 l(' ELSE');
10605 l(' H_SCORES(l_index).TOTAL_SCORE := ');
10606 l(' H_SCORES(l_index).TOTAL_SCORE+l_score;');
10607 l(' H_SCORES(l_index).PARTY_SCORE := l_score;');
10608 l(' END IF;');
10609 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
10610 l(' H_PARTY_ID_LIST(l_index) := 1;');
10611 l(' H_PARTY_ID(l_party_id_idx) := l_party_id;');
10612 l(' l_party_id_idx:= l_party_id_idx+1;');
10613 l(' END IF;');
10614 l(' IF l_party_id_idx>l_max_thresh THEN');
10615 l(' CLOSE l_party_cur;'); --Bug No: 3872745
10616 l(' IF p_index>1 THEN');
10617 ldbg_s('In eval party level number of matches found exceeded threshold');
10618 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10619 l(' FND_MSG_PUB.ADD;');
10620 l(' RAISE FND_API.G_EXC_ERROR;');
10621 l(' ELSE');
10622 l(' push_eval;');
10623 l(' RETURN;');
10624 l(' END IF;');
10625 l(' END IF;');
10626 ds(fnd_log.level_statement);
10627 dc(fnd_log.level_statement,'Party Level Matches');
10628 dc(fnd_log.level_statement,'l_party_id','l_party_id');
10629 dc(fnd_log.level_statement,'l_score','l_score');
10630 de;
10631 l(' END LOOP;');
10632 l(' CLOSE l_party_cur;');
10633 l(' ROLLBACK to eval_start;');
10634 l(' END;');
10635 l(' PROCEDURE open_person_contact_cursor(');
10636 l(' p_contains_str VARCHAR2, ');
10637 l(' p_search_ctx_id NUMBER, ');
10638 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
10639 l(' BEGIN');
10640 l(' OPEN x_cursor FOR ');
10641 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
10642 l(' FROM HZ_STAGED_CONTACTS stage');
10643 l(' WHERE contains( concat_col, p_contains_str)>0');
10644 l(' AND ORG_CONTACT_ID in (');
10645 l(' SELECT /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ ');
10646 l(' org_contact_id');
10647 l(' from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc');
10648 l(' where d.party_id = r.subject_id');
10649 l(' and oc.party_relationship_id = r.relationship_id');
10650 l(' and d.search_context_id = p_search_ctx_id); ');
10651 --bug 4959719 start
10652 l(' exception');
10653 l(' when others then');
10654 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
10655 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
10656 l(' FND_MSG_PUB.ADD;');
10657 l(' RAISE FND_API.G_EXC_ERROR;');
10658 --Start Bug No: 3032742.
10659 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
10660 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
10661 l(' FND_MSG_PUB.ADD;');
10662 l(' RAISE FND_API.G_EXC_ERROR;');
10663 --End Bug No : 3032742.
10664 l(' else ');
10665 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
10666 l(' end if;');
10667 --bug 4959719 end
10668 l(' END;');
10669
10670 l('');
10671 l(' /** Private procedure to acquire and score at party site level ***/');
10672 l(' PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10673 l(' l_party_id_idx NUMBER:=1;');
10674 l(' l_ctx_id NUMBER;');
10675 -- l(' h_ps_id HZ_PARTY_SEARCH.IDList;');
10676 -- l(' h_ps_party_id HZ_PARTY_SEARCH.IDList;');
10677 -- l(' h_ps_score HZ_PARTY_SEARCH.IDList;');
10678 -- l(' detcnt NUMBER := 1;');
10679 l(' l_person_id NUMBER;');
10680 l(' BEGIN');
10681 l(' SAVEPOINT eval_start;');
10682 l(' unset_person_party_type;');
10683 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10684 l(' l_ctx_id := l_search_ctx_id;');
10685 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10686 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10687 l(' l_search_ctx_id,H_PARTY_ID(I));');
10688 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10689 l(' SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10690 l(' HZ_RELATIONSHIPS r');
10691 l(' WHERE oc.party_relationship_id = r.relationship_id');
10692 l(' AND r.object_id = d.party_id');
10693 l(' AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10694 l(' H_PARTY_ID.DELETE;');
10695 l(' H_PARTY_ID_LIST.DELETE;');
10696 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10697 l(' l_ctx_id := l_search_ctx_id;');
10698 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10699 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10700 l(' l_search_ctx_id,H_PARTY_ID(I));');
10701 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10702 l(' SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10703 l(' HZ_RELATIONSHIPS r');
10704 l(' WHERE oc.party_relationship_id = r.relationship_id');
10705 l(' AND r.object_id = d.party_id');
10706 l(' AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10707 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10708 l(' ELSE');
10709 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10710 l(' l_ctx_id := NULL;');
10711 l(' END IF;');
10712 l(' open_party_site_cursor(null,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, l_party_site_cur);');
10713 l(' LOOP ');
10714 l(' FETCH l_party_site_cur INTO');
10715 l(' l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
10716 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
10717 l(' l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);');
10718 l(' IF l_person_id IS NOT NULL THEN');
10719 l(' l_index := map_id(l_person_id);');
10720 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
10721
10722 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
10723 l(' IF l_ctx_id IS NULL THEN');
10724 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);');
10725 l(' END IF;');
10726 l(' ELSE');
10727 l(' IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
10728 l(' H_SCORES(l_index).TOTAL_SCORE := ');
10729 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
10730 l(' H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
10731 l(' END IF;');
10732 l(' END IF;');
10733 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
10734 l(' H_PARTY_ID_LIST(l_index) := 1;');
10735 l(' H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
10736 l(' l_party_id_idx:= l_party_id_idx+1;');
10737 l(' END IF;');
10738 l(' IF l_party_id_idx>l_max_thresh THEN');
10739 l(' CLOSE l_party_site_cur;'); --Bug No: 3872745
10740 l(' IF p_index>1 THEN');
10741 ldbg_s('In eval party site level number of matches found exceeded threshold');
10742 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10743 l(' FND_MSG_PUB.ADD;');
10744 l(' RAISE FND_API.G_EXC_ERROR;');
10745 l(' ELSE');
10746 l(' push_eval;');
10747 l(' RETURN;');
10748 l(' END IF;');
10749 l(' END IF;');
10750 l(' IF p_ins_details = ''Y'' THEN');
10751 l(' h_ps_id(detcnt) := l_party_site_id;');
10752 l(' h_ps_party_id(detcnt) := l_person_id;');
10753 l(' h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
10754 l(' detcnt := detcnt +1;');
10755 l(' END IF;');
10756 ds(fnd_log.level_statement);
10757 dc(fnd_log.level_statement,'Party Site Level Matches');
10758 dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
10759 dc(fnd_log.level_statement,'l_ps_party_id','l_person_id');
10760 dc(fnd_log.level_statement,'l_score','l_score');
10761 de;
10762 l(' END IF;');
10763 l(' END LOOP;');
10764 l(' CLOSE l_party_site_cur;');
10765 l(' ROLLBACK to eval_start;');
10766 --l(' IF p_ins_details = ''Y'' THEN');
10767 --l(' FORALL I in 1..h_ps_id.COUNT ');
10768 --l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
10769 --l(' l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
10770 --l(' END IF;');
10771 l(' END;');
10772 l('');
10773 l(' /** Private procedure to acquire and score at party site level ***/');
10774 l(' PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10775 l(' l_party_id_idx NUMBER:=1;');
10776 l(' l_ctx_id NUMBER;');
10777 -- l(' h_ct_id HZ_PARTY_SEARCH.IDList;');
10778 -- l(' h_ct_party_id HZ_PARTY_SEARCH.IDList;');
10779 -- l(' h_ct_score HZ_PARTY_SEARCH.IDList;');
10780 -- l(' detcnt NUMBER := 1;');
10781 -- l(' l_person_id NUMBER;');
10782 l(' BEGIN');
10783 l(' SAVEPOINT eval_start;');
10784 l(' l_ctx_id := l_search_ctx_id;');
10785 l(' unset_person_party_type;');
10786 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10787 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10788 l(' l_search_ctx_id,H_PARTY_ID(I));');
10789 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10790 l(' open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);');
10791 l(' LOOP ');
10792 l(' FETCH l_contact_cur INTO');
10793 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
10794 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
10795 l(' l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);');
10796 l(' l_index := map_id(l_person_id);');
10797 l(' IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) THEN');
10798 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
10799 l(' IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
10800 l(' H_SCORES(l_index).TOTAL_SCORE := ');
10801 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
10802 l(' H_SCORES(l_index).CONTACT_SCORE := l_score;');
10803 l(' END IF;');
10804 l(' END IF;');
10805 l(' IF p_ins_details = ''Y'' THEN');
10806 l(' h_ct_id(detcnt) := l_org_contact_id;');
10807 l(' h_ct_party_id(detcnt) := l_person_id;');
10808 l(' h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
10809 l(' detcnt := detcnt +1;');
10810 l(' END IF;');
10811 ds(fnd_log.level_statement);
10812 dc(fnd_log.level_statement,'Contact Level Matches');
10813 dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
10814 dc(fnd_log.level_statement,'l_ct_party_id','l_person_id');
10815 dc(fnd_log.level_statement,'l_score','l_score');
10816 de;
10817 l(' END LOOP;');
10818 l(' CLOSE l_contact_cur;');
10819 l(' ROLLBACK to eval_start;');
10820 -- l(' IF p_ins_details = ''Y'' THEN');
10821 -- l(' FORALL I in 1..h_ct_id.COUNT ');
10822 -- l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
10823 -- l(' l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
10824 -- l(' END IF;');
10825 l(' END;');
10826 l('');
10827 l(' /** Private procedure to acquire and score at contact point level ***/');
10828 l(' PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10829 l(' l_party_id_idx NUMBER:=1;');
10830 l(' l_ctx_id NUMBER;');
10831 -- l(' h_cpt_id HZ_PARTY_SEARCH.IDList;');
10832 -- l(' h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
10833 -- l(' h_cpt_score HZ_PARTY_SEARCH.IDList;');
10834 -- l(' detcnt NUMBER := 1;');
10835 -- l(' l_person_id NUMBER;');
10836 l(' BEGIN');
10837 l(' SAVEPOINT eval_start;');
10838 l(' unset_person_party_type;');
10839 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10840 l(' l_ctx_id := l_search_ctx_id;');
10841 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10842 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10843 l(' l_search_ctx_id,H_PARTY_ID(I));');
10844 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10845 l(' SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10846 l(' HZ_RELATIONSHIPS r');
10847 l(' WHERE oc.party_relationship_id = r.relationship_id');
10848 l(' AND r.object_id = d.party_id');
10849 l(' AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10850 l(' H_PARTY_ID.DELETE;');
10851 l(' H_PARTY_ID_LIST.DELETE;');
10852 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10853 l(' l_ctx_id := l_search_ctx_id;');
10854 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10855 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10856 l(' l_search_ctx_id,H_PARTY_ID(I));');
10857 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10858 l(' SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10859 l(' HZ_RELATIONSHIPS r');
10860 l(' WHERE oc.party_relationship_id = r.relationship_id');
10861 l(' AND r.object_id = d.party_id');
10862 l(' AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10863 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10864 l(' ELSE');
10865 l(' l_ctx_id := NULL;');
10866 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10867 l(' END IF;');
10868 l(' open_contact_pt_cursor(null,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, l_contact_pt_cur);');
10869 l(' LOOP ');
10870 l(' FETCH l_contact_pt_cur INTO');
10871 l(' l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
10872 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
10873 l(' l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);');
10874 l(' IF l_person_id IS NOT NULL THEN');
10875 l(' l_index := map_id(l_person_id);');
10876 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
10877
10878 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
10879 l(' IF l_ctx_id IS NULL THEN');
10880 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_person_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);');
10881 l(' END IF;');
10882 l(' ELSE');
10883 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
10884 l(' H_SCORES(l_index).TOTAL_SCORE := ');
10885 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
10886 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
10887 l(' END IF;');
10888 l(' END IF;');
10889 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
10890 l(' H_PARTY_ID_LIST(l_index) := 1;');
10891 l(' H_PARTY_ID(l_party_id_idx) := l_person_id;');
10892 l(' l_party_id_idx:= l_party_id_idx+1;');
10893 l(' END IF;');
10894 l(' IF l_party_id_idx>l_max_thresh THEN');
10895 l(' CLOSE l_contact_pt_cur;'); --Bug No: 3872745
10896 l(' IF p_index>1 THEN');
10897 ldbg_s('In eval contact point level number of matches found exceeded threshold');
10898 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10899 l(' FND_MSG_PUB.ADD;');
10900 l(' RAISE FND_API.G_EXC_ERROR;');
10901 l(' ELSE');
10902 l(' push_eval;');
10903 l(' RETURN;');
10904 l(' END IF;');
10905 l(' END IF;');
10906 l(' IF p_ins_details = ''Y'' THEN');
10907 l(' h_cpt_id(detcnt) := l_contact_pt_id;');
10908 l(' h_cpt_party_id(detcnt) := l_person_id;');
10909 l(' h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
10910 l(' detcnt := detcnt +1;');
10911 l(' END IF;');
10912 ds(fnd_log.level_statement);
10913 dc(fnd_log.level_statement,'Contact pt Level Matches');
10914 dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
10915 dc(fnd_log.level_statement,'l_cpt_party_id','l_person_id');
10916 dc(fnd_log.level_statement,'l_score','l_score');
10917 de;
10918 l(' END IF;');
10919 l(' END LOOP;');
10920 l(' CLOSE l_contact_pt_cur;');
10921 l(' ROLLBACK to eval_start;');
10922 l(' IF p_ins_details = ''Y'' THEN');
10923 l(' FORALL I in 1..h_cpt_id.COUNT ');
10924 l(' INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
10925 l(' l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
10926 l(' END IF;');
10927 l(' END;');
10928 l('');
10929 l(' /** Private procedure to call the eval procedure at each entity in the correct order ***/');
10930 l(' PROCEDURE do_eval (p_index NUMBER) IS');
10931 l(' l_ctx_id NUMBER;');
10932 l(' l_threshold NUMBER;'); --Bug No: 4407425
10933 l(' other_criteria_exists BOOLEAN; '); --Bug No: 4407425
10934 l(' BEGIN');
10935 --Start of Bug No: 4407425
10936 l(' IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
10937 l(' l_threshold := '|| l_match_threshold ||'; ');
10938 l(' other_criteria_exists := TRUE ;');
10939 l(' IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
10940 l(' other_criteria_exists := FALSE; ');
10941 l(' END IF ; ');
10942 l(' IF( (l_match_str = '' AND '' AND other_criteria_exists) OR ( call_max_score(p_index) < l_threshold) )THEN');
10943 l(' RETURN; ');
10944 l(' ELSE');
10945 ldbg_s('In do eval number of matches found exceeded threshold');
10946 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10947 l(' FND_MSG_PUB.ADD;');
10948 l(' RAISE FND_API.G_EXC_ERROR;');
10949 l(' END IF; ');
10950 l(' END IF;');
10951 --End of Bug No: 4407425
10952 /*
10953 l(' IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
10954 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10955 l(' FND_MSG_PUB.ADD;');
10956 l(' RAISE FND_API.G_EXC_ERROR;');
10957 l(' END IF;');
10958 */
10959 l(' IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
10960 l(' eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
10961 l(' ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
10962 l(' eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10963 l(' ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
10964 l(' eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10965 l(' END IF;');
10966 l(' END;');
10967 l(' /************ End of find_persons private procedures **********/ ');
10968 l('');
10969 l(' BEGIN');
10970 l('');
10971
10972
10973 d(fnd_log.level_procedure,'find_persons(+)');
10974 ds(fnd_log.level_statement);
10975 dc(fnd_log.level_statement,'Input Parameters:');
10976 dc(fnd_log.level_statement,'p_match_type','p_match_type');
10977 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
10978 de;
10979
10980 l(' -- ************************************');
10981 l(' -- STEP 1. Initialization and error checks');
10982 l('');
10983
10984 l(' l_match_str := ''' || l_match_str || ''';');
10985 l(' IF p_match_type = ''AND'' THEN');
10986 l(' l_match_str := '' AND '';');
10987 l(' ELSIF p_match_type = ''OR'' THEN');
10988 l(' l_match_str := '' OR '';');
10989 l(' END IF;');
10990 l(' SAVEPOINT find_persons;');
10991 l(' l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
10992 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
10993 l('');
10994 l(' l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
10995 l(' IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
10996 l(' g_score_until_thresh := true;');
10997 l(' ELSE');
10998 l(' g_score_until_thresh := false;');
10999 l(' END IF;');
11000
11001 l(' l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
11002 l(' l_contact_contains_str := check_contacts_bulk (p_contact_list);');
11003 l(' l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
11004 l(' l_party_contains_str := check_parties_bulk (p_party_search_rec) ;');
11005
11006 l(' init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
11007 l('');
11008 l(' -- Setup Search Context ID');
11009 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
11010 l(' x_search_ctx_id := l_search_ctx_id;');
11011 l('');
11012
11013 l(' IF l_party_contains_str IS NULL THEN');
11014 l(' defpt := 1;');
11015 l(' END IF;');
11016 l(' IF l_party_site_contains_str IS NULL THEN');
11017 l(' defps := 1;');
11018 l(' END IF;');
11019 l(' IF l_contact_contains_str IS NULL THEN');
11020 l(' defct := 1;');
11021 l(' END IF;');
11022 l(' IF l_contact_pt_contains_str IS NULL THEN');
11023 l(' defcpt := 1;');
11024 l(' END IF;');
11025 l('');
11026
11027 ds(fnd_log.level_statement);
11028 dc(fnd_log.level_statement,'l_match_str','l_match_str');
11029 dc(fnd_log.level_statement,'l_party_contains_str','l_party_contains_str');
11030 dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
11031 dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
11032 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
11033 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
11034 de;
11035
11036 /**** Call all 4 evaluation procedures ***********/
11037 l(' FOR I in 1..5 LOOP');
11038 l(' do_eval(I);');
11039 l(' END LOOP;');
11040 l(' ROLLBACK to find_persons;');
11041 l(' IF l_contact_contains_str IS NOT NULL THEN');
11042 l(' eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);');
11043 l(' END IF;');
11044 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
11045
11046 l(' x_num_matches := 0;');
11047 l(' l_num_eval := 0;');
11048 l(' IF l_match_str = '' OR '' THEN');
11049 l(' l_party_id := H_SCORES.FIRST;');
11050 l(' ELSE');
11051 l(' l_party_id := H_PARTY_ID_LIST.FIRST;');
11052 l(' END IF;');
11053
11054 l(' WHILE l_party_id IS NOT NULL LOOP');
11055 l(' l_num_eval:= l_num_eval+1;');
11056 ds(fnd_log.level_statement);
11057 dc(fnd_log.level_statement,'Match Party ID','H_SCORES(l_party_id).PARTY_ID');
11058 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
11059 de;
11060 l(' IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
11061 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
11062 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100));');
11063 l(' x_num_matches := x_num_matches+1;');
11064 l(' END IF;');
11065 l(' IF l_match_str = '' OR '' THEN');
11066 l(' l_party_id:=H_SCORES.NEXT(l_party_id);');
11067 l(' ELSE');
11068 l(' l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
11069 l(' END IF;');
11070 l(' END LOOP;');
11071 l('');
11072 l('----------INSERT INTO HZ_MATCHED_PARTY_SITES -----');
11073 l(' IF p_ins_details = ''Y'' THEN');
11074 l(' FORALL I in 1..h_ps_id.COUNT ');
11075 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
11076 l(' l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
11077 l(' END IF;');
11078
11079 l('----------INSERT INTO HZ_MATCHED_CONTACTS-----');
11080 l(' IF p_ins_details = ''Y'' THEN');
11081 l(' FORALL I in 1..h_ct_id.COUNT ');
11082 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
11083 l(' l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
11084 l(' END IF;');
11085 l('----------INSERT INTO HZ_MATCHED_CPTS-----');
11086 l(' IF p_ins_details = ''Y'' THEN');
11087 l(' FORALL I in 1..h_cpt_id.COUNT ');
11088 l(' INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
11089 l(' l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
11090 l(' END IF;');
11091 l('');
11092 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
11093 d(fnd_log.level_procedure,'find_persons(-)');
11094
11095
11096 l('EXCEPTION');
11097 l(' WHEN FND_API.G_EXC_ERROR THEN');
11098 l(' ROLLBACK to find_persons;');
11099 l(' RAISE FND_API.G_EXC_ERROR;');
11100 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11101 l(' ROLLBACK to find_persons;');
11102 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11103 l(' WHEN OTHERS THEN');
11104 l(' ROLLBACK to find_persons;');
11105 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11106 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_persons'');');
11107 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11108 l(' FND_MSG_PUB.ADD;');
11109 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11110 l('END find_persons;');
11111 ELSE
11112 l('BEGIN');
11113 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
11114 l(' FND_MSG_PUB.ADD;');
11115 l(' RAISE FND_API.G_EXC_ERROR;');
11116 l('END find_persons;');
11117 l('');
11118 END IF;
11119 l('PROCEDURE find_persons (');
11120 l(' p_rule_id IN NUMBER,');
11121 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
11122 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
11123 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
11124 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
11125 l(' p_restrict_sql IN VARCHAR2,');
11126 l(' p_match_type IN VARCHAR2,');
11127 l(' p_ins_details IN VARCHAR2,');
11128 l(' x_search_ctx_id OUT NUMBER,');
11129 l(' x_num_matches OUT NUMBER');
11130 l(') IS');
11131 l(' BEGIN');
11132 l(' find_persons(p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,');
11133 l(' p_restrict_sql,p_match_type,NULL,p_ins_details,x_search_ctx_id,x_num_matches);');
11134 l(' END find_persons;');
11135 l('');
11136 l('-------------------------------------------------------------------------------------');
11137 l('-------------------- BULK MATCH RULE ::: find_party_details ------------------------');
11138 l('-------------------------------------------------------------------------------------');
11139 l('PROCEDURE find_party_details (');
11140 l(' p_rule_id IN NUMBER,');
11141 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
11142 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
11143 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
11144 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
11145 l(' p_restrict_sql IN VARCHAR2,');
11146 l(' p_match_type IN VARCHAR2,');
11147 l(' p_search_merged IN VARCHAR2,');
11148 l(' x_search_ctx_id OUT NUMBER,');
11149 l(' x_num_matches OUT NUMBER');
11150 l(') IS');
11151 l('');
11152 l(' BEGIN');
11153
11154
11155 d(fnd_log.level_procedure,'find_party_details(+)');
11156 ds(fnd_log.level_statement);
11157 dc(fnd_log.level_statement,'Input Parameters:');
11158 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11159 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11160 dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
11161 de;
11162
11163 l(' find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,');
11164 l(' p_restrict_sql,p_match_type,p_search_merged,null,null, null,''Y'',');
11165 l(' x_search_ctx_id,x_num_matches);');
11166 l(' DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
11167 l(' AND NOT EXISTS ');
11168 l(' (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);');
11169 l(' DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
11170 l(' AND NOT EXISTS ');
11171 l(' (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);');
11172 l(' DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
11173 l(' AND NOT EXISTS ');
11174 l(' (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);');
11175
11176 d(fnd_log.level_procedure,'find_party_details(-)');
11177
11178
11179 l('EXCEPTION');
11180 l(' WHEN FND_API.G_EXC_ERROR THEN');
11181 l(' RAISE FND_API.G_EXC_ERROR;');
11182 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11183 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11184 l(' WHEN OTHERS THEN');
11185 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11186 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_party_details'');');
11187 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11188 l(' FND_MSG_PUB.ADD;');
11189 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11190 l('END find_party_details;');
11191 l('');
11192 l('-------------------------------------------------------------------------------------');
11193 l('-------------------- BULK MATCH RULE ::: find_duplicate_parties -------------------');
11194 l('-------------------------------------------------------------------------------------');
11195 l('PROCEDURE find_duplicate_parties (');
11196 l(' p_rule_id IN NUMBER,');
11197 l(' p_party_id IN NUMBER,');
11198 l(' p_restrict_sql IN VARCHAR2,');
11199 l(' p_match_type IN VARCHAR2,');
11200 l(' p_dup_batch_id IN NUMBER,');
11201 l(' p_search_merged IN VARCHAR2,');
11202 l(' x_dup_set_id OUT NUMBER,');
11203 l(' x_search_ctx_id OUT NUMBER,');
11204 l(' x_num_matches OUT NUMBER');
11205 l(') IS');
11206 l(' l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
11207 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
11208 l(' l_contact_list HZ_PARTY_SEARCH.contact_list;');
11209 l(' l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
11210 l(' l_match_idx NUMBER;');
11211
11212 l('');
11213 l('BEGIN');
11214
11215
11216 d(fnd_log.level_procedure,'find_duplicate_parties(+)');
11217 ds(fnd_log.level_statement);
11218 dc(fnd_log.level_statement,'Input Parameters:');
11219 dc(fnd_log.level_statement,'p_party_id','p_party_id');
11220 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11221 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11222 dc(fnd_log.level_statement,'p_dup_batch_id','p_dup_batch_id');
11223 dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
11224 de;
11225
11226 l('');
11227 l(' get_party_for_search(');
11228 l(' p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);');
11229 l('');
11230 l(' IF NOT check_prim_cond (l_party_rec,');
11231 l(' l_party_site_list,');
11232 l(' l_contact_list,');
11233 l(' l_cpt_list) THEN');
11234 l(' x_dup_set_id:=NULL;');
11235 l(' x_search_ctx_id:=NULL;');
11236 l(' x_num_matches:=0;');
11237 l(' RETURN;');
11238 l(' END IF;');
11239
11240 l(' x_dup_set_id := NULL;');
11241 l(' IF p_dup_batch_id IS NOT NULL THEN');
11242 l(' SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;');
11243 l(' END IF;');
11244 l('');
11245
11246 l(' find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11247 l(' p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,''N'',');
11248 l(' x_search_ctx_id,x_num_matches);');
11249 l(' IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN');
11250 l(' INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,');
11251 l(' STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,');
11252 l(' LAST_UPDATE_DATE, LAST_UPDATED_BY) ');
11253 l(' VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, ''SYSBATCH'',');
11254 l(' ''PARTY_MERGE'', hz_utility_pub.created_by, hz_utility_pub.creation_date,');
11255 l(' hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,');
11256 l(' hz_utility_pub.user_id);');
11257 l('');
11258 l(' INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
11259 l(' MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
11260 l(' LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
11261 l(' VALUES (p_party_id,x_dup_set_id,0,0,');
11262 l(' ''Y'',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,');
11263 l(' hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,');
11264 l(' hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
11265 l(' ELSE');
11266 l(' x_dup_set_id := NULL;');
11267 l(' END IF;');
11268 d(fnd_log.level_procedure,'find_duplicate_parties(-)');
11269
11270
11271 l('EXCEPTION');
11272 l(' WHEN FND_API.G_EXC_ERROR THEN');
11273 l(' RAISE FND_API.G_EXC_ERROR;');
11274 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11275 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11276 l(' WHEN OTHERS THEN');
11277 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11278 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_parties'');');
11279 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11280 l(' FND_MSG_PUB.ADD;');
11281 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11282 l('END find_duplicate_parties;');
11283
11284
11285 l('');
11286 l('-------------------------------------------------------------------------------------');
11287 l('-------------------- BULK MATCH RULE ::: find_duplicate_party_sites-----------------');
11288 l('-------------------------------------------------------------------------------------');
11289 l('PROCEDURE find_duplicate_party_sites (');
11290 l(' p_rule_id IN NUMBER,');
11291 l(' p_party_site_id IN NUMBER,');
11292 l(' p_party_id IN NUMBER,');
11293 l(' p_restrict_sql IN VARCHAR2,');
11294 l(' p_match_type IN VARCHAR2,');
11295 l(' x_search_ctx_id OUT NUMBER,');
11296 l(' x_num_matches OUT NUMBER');
11297 l(') IS');
11298 l('');
11299
11300
11301 l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
11302 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
11303 l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
11304 l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
11305 l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
11306 l(' p_party_site_list HZ_PARTY_SEARCH.IDList; ');
11307 l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
11308 l(' l_match_idx NUMBER;');
11309
11310 l(' cursor get_cpts_for_party_sites is select contact_point_id ');
11311 l(' from hz_contact_points ');
11312 l(' where owner_table_name = ''HZ_PARTY_SITES'' ');
11313 l(' and primary_flag=''Y''');
11314 l(' and owner_table_id = p_party_site_id; ');
11315
11316 l(' BEGIN ');
11317
11318
11319 d(fnd_log.level_procedure,'find_duplicate_party_sites(+)');
11320 ds(fnd_log.level_statement);
11321 dc(fnd_log.level_statement,'Input Parameters:');
11322 dc(fnd_log.level_statement,'p_party_site_id','p_party_site_id');
11323 dc(fnd_log.level_statement,'p_party_id','p_party_id');
11324 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11325 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11326 de;
11327
11328 l(' p_party_site_list(1) := p_party_site_id; ');
11329 l(' OPEN get_cpts_for_party_sites;');
11330 l(' LOOP ');
11331 l(' FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; ');
11332 l(' EXIT WHEN get_cpts_for_party_sites%NOTFOUND; ');
11333 l(' END LOOP; ');
11334 l(' CLOSE get_cpts_for_party_sites; ');
11335 l(' ');
11336 l(' get_search_criteria (');
11337 l(' null,');
11338 l(' p_party_site_list,');
11339 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
11340 l(' contact_point_ids, ');
11341 l(' l_party_search_rec,');
11342 l(' l_party_site_list,');
11343 l(' l_contact_list,');
11344 l(' l_contact_point_list) ;');
11345 l(' IF NOT check_prim_cond (l_party_search_rec,');
11346 l(' l_party_site_list,');
11347 l(' l_contact_list,');
11348 l(' l_contact_point_list) THEN');
11349 l(' x_search_ctx_id:=NULL;');
11350 l(' x_num_matches:=0;');
11351 l(' RETURN;');
11352 l(' END IF;');
11353 l(' ');
11354 l(' get_matching_party_sites (p_rule_id, ');
11355 l(' p_party_id, ');
11356 l(' l_party_site_list, ');
11357 l(' l_contact_point_list,');
11358 l(' p_restrict_sql, ');
11359 l(' p_match_type, ');
11360 l(' p_party_site_id, ');
11361 l(' x_search_ctx_id,');
11362 l(' x_num_matches);');
11363 d(fnd_log.level_procedure,'find_duplicate_party_sites(-)');
11364
11365
11366 l('EXCEPTION');
11367 l(' WHEN FND_API.G_EXC_ERROR THEN');
11368 l(' RAISE FND_API.G_EXC_ERROR;');
11369 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11370 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11371 l(' WHEN OTHERS THEN');
11372 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11373 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_party_sites'');');
11374 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11375 l(' FND_MSG_PUB.ADD;');
11376 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11377 l('END find_duplicate_party_sites; ');
11378 l(' ');
11379
11380 l('-------------------------------------------------------------------------------------');
11381 l('-------------------- BULK MATCH RULE ::: find_duplicate_contacts--------------------');
11382 l('-------------------------------------------------------------------------------------');
11383 l('PROCEDURE find_duplicate_contacts (');
11384 l(' p_rule_id IN NUMBER,');
11385 l(' p_org_contact_id IN NUMBER,');
11386 l(' p_party_id IN NUMBER,');
11387 l(' p_restrict_sql IN VARCHAR2,');
11388 l(' p_match_type IN VARCHAR2,');
11389 l(' x_search_ctx_id OUT NUMBER,');
11390 l(' x_num_matches OUT NUMBER');
11391 l(') IS');
11392 l('');
11393
11394 l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;');
11395 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
11396 l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
11397 l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
11398 l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
11399 l(' p_party_site_list HZ_PARTY_SEARCH.IDList; ');
11400 l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
11401 l(' l_match_idx NUMBER;');
11402
11403 l(' cursor get_cpt_for_contact_id is select contact_point_id ');
11404 l(' from hz_org_contacts a, hz_relationships b, hz_contact_points c ');
11405 l(' where a.party_relationship_id = b.relationship_id ');
11406 l(' and c.owner_table_name = ''HZ_PARTIES'' ');
11407 l(' and c.primary_flag=''Y''');
11408 l(' and c.owner_table_id = b.party_id ');
11409 l(' and b.directional_flag = ''F'' ');
11410 l(' and a.org_contact_id = p_org_contact_id; ');
11411
11412 l('BEGIN ');
11413
11414
11415 d(fnd_log.level_procedure,'find_duplicate_contacts(+)');
11416 ds(fnd_log.level_statement);
11417 dc(fnd_log.level_statement,'Input Parameters:');
11418 dc(fnd_log.level_statement,'p_org_contact_id','p_org_contact_id');
11419 dc(fnd_log.level_statement,'p_party_id','p_party_id');
11420 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11421 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11422 de;
11423
11424
11425 l(' p_contact_ids(1) := p_org_contact_id; ');
11426 l(' OPEN get_cpt_for_contact_id; ');
11427 l(' LOOP ');
11428 l(' FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; ');
11429 l(' EXIT WHEN get_cpt_for_contact_id%NOTFOUND; ');
11430 l(' END LOOP; ');
11431 l(' CLOSE get_cpt_for_contact_id; ');
11432 l(' ');
11433 l(' get_search_criteria (');
11434 l(' null,');
11435 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
11436 l(' p_contact_ids,');
11437 l(' contact_point_ids, ');
11438 l(' l_party_search_rec,');
11439 l(' l_party_site_list, ');
11440 l(' l_contact_list,');
11441 l(' l_contact_point_list) ;');
11442 l(' IF NOT check_prim_cond (l_party_search_rec,');
11443 l(' l_party_site_list,');
11444 l(' l_contact_list,');
11445 l(' l_contact_point_list) THEN');
11446 l(' x_search_ctx_id:=NULL;');
11447 l(' x_num_matches:=0;');
11448 l(' RETURN;');
11449 l(' END IF;');
11450 l(' ');
11451 l(' get_matching_contacts (p_rule_id, ');
11452 l(' p_party_id, ');
11453 l(' l_contact_list, ');
11454 l(' l_contact_point_list, ');
11455 l(' p_restrict_sql, ');
11456 l(' p_match_type, ');
11457 l(' p_org_contact_id, ');
11458 l(' x_search_ctx_id, ');
11459 l(' x_num_matches);');
11460 l(' ');
11461 d(fnd_log.level_procedure,'find_duplicate_contacts(-)');
11462
11463
11464 l('EXCEPTION');
11465 l(' WHEN FND_API.G_EXC_ERROR THEN');
11466 l(' RAISE FND_API.G_EXC_ERROR;');
11467 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11468 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11469 l(' WHEN OTHERS THEN');
11470 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11471 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contacts'');');
11472 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11473 l(' FND_MSG_PUB.ADD;');
11474 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11475 l('END find_duplicate_contacts; ');
11476 l('');
11477 l('-------------------------------------------------------------------------------------');
11478 l('-------------------- BULK MATCH RULE ::: find_duplicate_contact_points -------------');
11479 l('-------------------------------------------------------------------------------------');
11480 l('PROCEDURE find_duplicate_contact_points (');
11481 l(' p_rule_id IN NUMBER,');
11482 l(' p_contact_point_id IN NUMBER,');
11483 l(' p_party_id IN NUMBER,');
11484 l(' p_restrict_sql IN VARCHAR2,');
11485 l(' p_match_type IN VARCHAR2,');
11486 l(' x_search_ctx_id OUT NUMBER,');
11487 l(' x_num_matches OUT NUMBER');
11488 l(') IS');
11489 l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
11490 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
11491 l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
11492 l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
11493 l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
11494 l(' p_party_site_list HZ_PARTY_SEARCH.IDList; ');
11495 l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
11496 l(' l_match_idx NUMBER;');
11497
11498 l('');
11499 l('BEGIN');
11500
11501
11502 d(fnd_log.level_procedure,'find_duplicate_contact_points(+)');
11503 ds(fnd_log.level_statement);
11504 dc(fnd_log.level_statement,'Input Parameters:');
11505 dc(fnd_log.level_statement,'p_contact_point_id','p_contact_point_id');
11506 dc(fnd_log.level_statement,'p_party_id','p_party_id');
11507 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11508 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11509 de;
11510
11511 l(' contact_point_ids(1) := p_contact_point_id; ');
11512 l(' get_search_criteria ( ');
11513 l(' null, ');
11514 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
11515 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
11516 l(' contact_point_ids, ');
11517 l(' l_party_search_rec, ');
11518 l(' l_party_site_list, ');
11519 l(' l_contact_list, ');
11520 l(' l_contact_point_list ); ');
11521 l(' ');
11522 l(' IF NOT check_prim_cond (l_party_search_rec,');
11523 l(' l_party_site_list,');
11524 l(' l_contact_list,');
11525 l(' l_contact_point_list) THEN');
11526 l(' x_search_ctx_id:=NULL;');
11527 l(' x_num_matches:=0;');
11528 l(' RETURN;');
11529 l(' END IF;');
11530 l(' get_matching_contact_points ( ');
11531 l(' p_rule_id, ');
11532 l(' p_party_id, ');
11533 l(' l_contact_point_list, ');
11534 l(' p_restrict_sql, ');
11535 l(' p_match_type, ');
11536 l(' p_contact_point_id, ');
11537 l(' x_search_ctx_id, ');
11538 l(' x_num_matches ); ');
11539 d(fnd_log.level_procedure,'find_duplicate_contact_points(-)');
11540
11541
11542 l('EXCEPTION');
11543 l(' WHEN FND_API.G_EXC_ERROR THEN');
11544 l(' RAISE FND_API.G_EXC_ERROR;');
11545 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11546 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11547 l(' WHEN OTHERS THEN');
11548 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11549 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contact_points'');');
11550 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11551 l(' FND_MSG_PUB.ADD;');
11552 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11553 l('END find_duplicate_contact_points;');
11554 l('');
11555
11556 l('-------------------------------------------------------------------------------------');
11557 l('-------------------- BULK MATCH RULE ::: find_parties_dynamic-----------------------');
11558 l('-------------------------------------------------------------------------------------');
11559 l('PROCEDURE find_parties_dynamic (');
11560 l(' p_rule_id IN NUMBER,');
11561 l(' p_attrib_id1 IN NUMBER,');
11562 l(' p_attrib_id2 IN NUMBER,');
11563 l(' p_attrib_id3 IN NUMBER,');
11564 l(' p_attrib_id4 IN NUMBER,');
11565 l(' p_attrib_id5 IN NUMBER,');
11566 l(' p_attrib_id6 IN NUMBER,');
11567 l(' p_attrib_id7 IN NUMBER,');
11568 l(' p_attrib_id8 IN NUMBER,');
11569 l(' p_attrib_id9 IN NUMBER,');
11570 l(' p_attrib_id10 IN NUMBER,');
11571 l(' p_attrib_id11 IN NUMBER,');
11572 l(' p_attrib_id12 IN NUMBER,');
11573 l(' p_attrib_id13 IN NUMBER,');
11574 l(' p_attrib_id14 IN NUMBER,');
11575 l(' p_attrib_id15 IN NUMBER,');
11576 l(' p_attrib_id16 IN NUMBER,');
11577 l(' p_attrib_id17 IN NUMBER,');
11578 l(' p_attrib_id18 IN NUMBER,');
11579 l(' p_attrib_id19 IN NUMBER,');
11580 l(' p_attrib_id20 IN NUMBER,');
11581 l(' p_attrib_val1 IN VARCHAR2,');
11582 l(' p_attrib_val2 IN VARCHAR2,');
11583 l(' p_attrib_val3 IN VARCHAR2,');
11584 l(' p_attrib_val4 IN VARCHAR2,');
11585 l(' p_attrib_val5 IN VARCHAR2,');
11586 l(' p_attrib_val6 IN VARCHAR2,');
11587 l(' p_attrib_val7 IN VARCHAR2,');
11588 l(' p_attrib_val8 IN VARCHAR2,');
11589 l(' p_attrib_val9 IN VARCHAR2,');
11590 l(' p_attrib_val10 IN VARCHAR2,');
11591 l(' p_attrib_val11 IN VARCHAR2,');
11592 l(' p_attrib_val12 IN VARCHAR2,');
11593 l(' p_attrib_val13 IN VARCHAR2,');
11594 l(' p_attrib_val14 IN VARCHAR2,');
11595 l(' p_attrib_val15 IN VARCHAR2,');
11596 l(' p_attrib_val16 IN VARCHAR2,');
11597 l(' p_attrib_val17 IN VARCHAR2,');
11598 l(' p_attrib_val18 IN VARCHAR2,');
11599 l(' p_attrib_val19 IN VARCHAR2,');
11600 l(' p_attrib_val20 IN VARCHAR2,');
11601 l(' p_restrict_sql IN VARCHAR2,');
11602 l(' p_match_type IN VARCHAR2,');
11603 l(' p_search_merged IN VARCHAR2,');
11604 l(' x_search_ctx_id OUT NUMBER,');
11605 l(' x_num_matches OUT NUMBER');
11606 l(') IS');
11607 l(' BEGIN');
11608 l(' call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
11609 l(' p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
11610 l(' p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
11611 l(' p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
11612 l(' p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
11613 l(' p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
11614 l(' p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
11615 l(' p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
11616 l(' p_restrict_sql,''FIND_PARTIES'',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);');
11617 l(' END;');
11618
11619 l('');
11620 l('-------------------------------------------------------------------------------------');
11621 l('-------------------- BULK MATCH RULE ::: call_api_dynamic---------------------------');
11622 l('-------------------------------------------------------------------------------------');
11623 l('PROCEDURE call_api_dynamic (');
11624 l(' p_rule_id IN NUMBER,');
11625 l(' p_attrib_id1 IN NUMBER,');
11626 l(' p_attrib_id2 IN NUMBER,');
11627 l(' p_attrib_id3 IN NUMBER,');
11628 l(' p_attrib_id4 IN NUMBER,');
11629 l(' p_attrib_id5 IN NUMBER,');
11630 l(' p_attrib_id6 IN NUMBER,');
11631 l(' p_attrib_id7 IN NUMBER,');
11632 l(' p_attrib_id8 IN NUMBER,');
11633 l(' p_attrib_id9 IN NUMBER,');
11634 l(' p_attrib_id10 IN NUMBER,');
11635 l(' p_attrib_id11 IN NUMBER,');
11636 l(' p_attrib_id12 IN NUMBER,');
11637 l(' p_attrib_id13 IN NUMBER,');
11638 l(' p_attrib_id14 IN NUMBER,');
11639 l(' p_attrib_id15 IN NUMBER,');
11640 l(' p_attrib_id16 IN NUMBER,');
11641 l(' p_attrib_id17 IN NUMBER,');
11642 l(' p_attrib_id18 IN NUMBER,');
11643 l(' p_attrib_id19 IN NUMBER,');
11644 l(' p_attrib_id20 IN NUMBER,');
11645 l(' p_attrib_val1 IN VARCHAR2,');
11646 l(' p_attrib_val2 IN VARCHAR2,');
11647 l(' p_attrib_val3 IN VARCHAR2,');
11648 l(' p_attrib_val4 IN VARCHAR2,');
11649 l(' p_attrib_val5 IN VARCHAR2,');
11650 l(' p_attrib_val6 IN VARCHAR2,');
11651 l(' p_attrib_val7 IN VARCHAR2,');
11652 l(' p_attrib_val8 IN VARCHAR2,');
11653 l(' p_attrib_val9 IN VARCHAR2,');
11654 l(' p_attrib_val10 IN VARCHAR2,');
11655 l(' p_attrib_val11 IN VARCHAR2,');
11656 l(' p_attrib_val12 IN VARCHAR2,');
11657 l(' p_attrib_val13 IN VARCHAR2,');
11658 l(' p_attrib_val14 IN VARCHAR2,');
11659 l(' p_attrib_val15 IN VARCHAR2,');
11660 l(' p_attrib_val16 IN VARCHAR2,');
11661 l(' p_attrib_val17 IN VARCHAR2,');
11662 l(' p_attrib_val18 IN VARCHAR2,');
11663 l(' p_attrib_val19 IN VARCHAR2,');
11664 l(' p_attrib_val20 IN VARCHAR2,');
11665 l(' p_restrict_sql IN VARCHAR2,');
11666 l(' p_api_name IN VARCHAR2,');
11667 l(' p_match_type IN VARCHAR2,');
11668 l(' p_party_id IN NUMBER,');
11669 l(' p_search_merged IN VARCHAR2,');
11670 l(' x_search_ctx_id OUT NUMBER,');
11671 l(' x_num_matches OUT NUMBER');
11672 l(') IS');
11673 l(' TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;');
11674 l(' l_match_idx NUMBER;');
11675 l(' AttrVals AttrList;');
11676 l(' l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
11677 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
11678 l(' l_contact_list HZ_PARTY_SEARCH.contact_list;');
11679 l(' l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
11680 l(' l_dup_set_id NUMBER;');
11681 l(' l_idx NUMBER;');
11682 l(' l_cpt_type VARCHAR2(255);');
11683 l(' FIRST BOOLEAN := TRUE; ');
11684 l('');
11685 l('BEGIN');
11686
11687 d(fnd_log.level_procedure,'call_api_dynamic(+)');
11688 l('');
11689 FOR I in 1..20 LOOP
11690 l(' IF p_attrib_id'||I||' IS NOT NULL THEN');
11691 l(' AttrVals(p_attrib_id'||I||'):=p_attrib_val'||I||';');
11692 l(' END IF;');
11693 END LOOP;
11694
11695 FIRST := TRUE;
11696 FOR ATTRS IN (
11697 SELECT a.attribute_id, a.attribute_name, a.entity_name
11698 FROM HZ_TRANS_ATTRIBUTES_VL a,
11699 HZ_MATCH_RULE_PRIMARY p
11700 WHERE p.match_rule_id = p_rule_id
11701 AND p.attribute_id = a.attribute_id
11702
11703 UNION
11704
11705 SELECT a.attribute_id, a.attribute_name, a.entity_name
11706 FROM HZ_TRANS_ATTRIBUTES_VL a,
11707 HZ_MATCH_RULE_SECONDARY s
11708 WHERE s.match_rule_id = p_rule_id
11709 AND s.attribute_id = a.attribute_id) LOOP
11710 l(' IF AttrVals.EXISTS('||ATTRS.attribute_id||') THEN');
11711 IF ATTRS.entity_name='PARTY' THEN
11712 l(' l_party_rec.'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11713 d(fnd_log.level_statement,'l_party_rec.'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11714 ELSIF ATTRS.entity_name='PARTY_SITES' THEN
11715 l(' l_party_site_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11716 d(fnd_log.level_statement,'l_party_site_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11717 ELSIF ATTRS.entity_name='CONTACTS' THEN
11718 l(' l_contact_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11719 d(fnd_log.level_statement,'l_contact_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11720 ELSIF ATTRS.entity_name='CONTACT_POINTS' THEN
11721 BEGIN
11722 SELECT tag INTO l_cpt_type FROM fnd_lookup_values
11723 WHERE lookup_type = 'HZ_DQM_CPT_ATTR_TYPE'
11724 AND lookup_code = ATTRS.attribute_name
11725 AND ROWNUM=1;
11726 EXCEPTION
11727 WHEN NO_DATA_FOUND THEN
11728 l_cpt_type:='PHONE';
11729 END;
11730
11731 l(' l_cpt_type := '''||l_cpt_type||''';');
11732 l(' FIRST := FALSE;');
11733 l(' FOR I in 1..l_cpt_list.COUNT LOOP');
11734 l(' IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN');
11735 l(' l_cpt_list(I).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11736 l(' FIRST := TRUE;');
11737 ds(fnd_log.level_statement);
11738 dc(fnd_log.level_statement,'l_cpt_list(''||I||'').CONTACT_POINT_TYPE','l_cpt_type');
11739 dc(fnd_log.level_statement,'l_cpt_list(''||I||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11740 de;
11741 l(' END IF;');
11742 l(' END LOOP;');
11743 l(' IF not FIRST THEN');
11744 l(' l_idx := l_cpt_list.COUNT+1;');
11745 l(' l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;');
11746 l(' l_cpt_list(l_idx).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11747 ds(fnd_log.level_statement);
11748 dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').CONTACT_POINT_TYPE','l_cpt_type');
11749 dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11750 de;
11751 l(' END IF;');
11752 END IF;
11753 l(' END IF;');
11754 l('');
11755 END LOOP;
11756 l('');
11757 l(' IF upper(p_api_name) = ''FIND_PARTIES'' THEN');
11758 l(' find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11759 l(' p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,''N'',');
11760 l(' x_search_ctx_id,x_num_matches);');
11761 l(' ELSIF upper(p_api_name) = ''FIND_PARTY_DETAILS'' THEN');
11762 l(' find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11763 l(' p_restrict_sql,p_match_type,p_search_merged,');
11764 l(' x_search_ctx_id,x_num_matches);');
11765 l(' ELSIF upper(p_api_name) = ''FIND_PERSONS'' THEN');
11766 l(' find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11767 l(' p_restrict_sql,p_match_type,''N'',');
11768 l(' x_search_ctx_id,x_num_matches);');
11769 l(' ELSIF upper(p_api_name) = ''GET_MATCHING_PARTY_SITES'' THEN');
11770 l(' get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,');
11771 l(' p_restrict_sql,p_match_type,NULL,');
11772 l(' x_search_ctx_id,x_num_matches);');
11773 l(' ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACTS'' THEN');
11774 l(' get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,');
11775 l(' p_restrict_sql,p_match_type,NULL,');
11776 l(' x_search_ctx_id,x_num_matches);');
11777 l(' ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACT_POINTS'' THEN');
11778 l(' get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,');
11779 l(' p_restrict_sql,p_match_type,NULL,');
11780 l(' x_search_ctx_id,x_num_matches);');
11781 l(' END IF;');
11782 d(fnd_log.level_procedure,'call_api_dynamic(-)');
11783
11784
11785 l('EXCEPTION');
11786 l(' WHEN FND_API.G_EXC_ERROR THEN');
11787 l(' RAISE FND_API.G_EXC_ERROR;');
11788 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11789 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11790 l(' WHEN OTHERS THEN');
11791 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11792 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.call_api_dynamic'');');
11793 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11794 l(' FND_MSG_PUB.ADD;');
11795 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11796
11797
11798 l('END call_api_dynamic;');
11799 l('');
11800
11801 l('-------------------------------------------------------------------------------------');
11802 l('-------------------- BULK MATCH RULE ::: get_matching_party_sites ------------------');
11803 l('-------------------------------------------------------------------------------------');
11804
11805 l('');
11806 l('PROCEDURE get_matching_party_sites (');
11807 l(' p_rule_id IN NUMBER,');
11808 l(' p_party_id IN NUMBER,');
11809 l(' p_party_site_list IN HZ_PARTY_SEARCH.PARTY_SITE_LIST,');
11810 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
11811 l(' p_restrict_sql IN VARCHAR2,');
11812 l(' p_match_type IN VARCHAR2,');
11813 l(' p_dup_party_site_id IN NUMBER, ');
11814 l(' x_search_ctx_id OUT NUMBER,');
11815 l(' x_num_matches OUT NUMBER');
11816 l(') IS');
11817 l(' ');
11818 l(' -- Strings to hold the generated Intermedia query strings');
11819 l(' l_party_contains_str VARCHAR2(32000); ');
11820 l(' l_match_idx NUMBER;');
11821 l(' l_party_site_contains_str VARCHAR2(32000);');
11822 l(' l_contact_contains_str VARCHAR2(32000);');
11823 l(' l_contact_pt_contains_str VARCHAR2(32000);');
11824 l(' l_tmp VARCHAR2(32000);');
11825 l('');
11826 l(' -- Other local variables');
11827 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
11828 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
11829 l(' -- For Score calculation');
11830 l(' l_max_score NUMBER;');
11831 l(' l_entered_max_score NUMBER;');
11832 l(' FIRST BOOLEAN;');
11833 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
11834 l('');
11835 FOR TX IN (
11836 SELECT distinct f.staged_attribute_column
11837 FROM hz_trans_functions_vl f, hz_secondary_trans st,
11838 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
11839 WHERE sa.match_rule_id = p_rule_id
11840 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
11841 AND st.function_id = f.function_id
11842 AND (a.ENTITY_NAME='PARTY_SITES' OR a.ENTITY_NAME='CONTACT_POINTS')
11843 AND a.attribute_id = sa.attribute_id) LOOP
11844 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
11845 END LOOP;
11846 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
11847 l('');
11848 l(' l_score NUMBER;');
11849 l(' l_idx NUMBER;');
11850 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
11851 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
11852 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
11853 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
11854 l(' l_party_id NUMBER;');
11855 l(' l_ps_party_id NUMBER;');
11856 l(' l_ct_party_id NUMBER;');
11857 l(' l_cpt_party_id NUMBER;');
11858 l(' l_cpt_ps_id NUMBER;');
11859 l(' l_cpt_contact_id NUMBER;');
11860 l(' l_party_site_id NUMBER;');
11861 l(' l_org_contact_id NUMBER;');
11862 l(' l_contact_pt_id NUMBER;');
11863 l(' l_ps_contact_id NUMBER;');
11864 l(' l_party_max_score NUMBER;');
11865 l(' l_ps_max_score NUMBER;');
11866 l(' l_contact_max_score NUMBER;');
11867 l(' l_cpt_max_score NUMBER;');
11868 l('');
11869 l(' defpt NUMBER :=0;');
11870 l(' defps NUMBER :=0;');
11871 l(' defct NUMBER :=0;');
11872 l(' defcpt NUMBER :=0;');
11873 l(' l_index NUMBER;');
11874 l('');
11875 l(' ');
11876 l(' BEGIN');
11877
11878
11879 d(fnd_log.level_procedure,'get_matching_party_sites(+)');
11880 ds(fnd_log.level_statement);
11881 dc(fnd_log.level_statement,'Input Parameters:');
11882 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11883 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11884 dc(fnd_log.level_statement,'p_dup_party_site_id','p_dup_party_site_id');
11885 de;
11886 l('');
11887 l(' -- ************************************');
11888 l(' -- STEP 1. Initialization and error checks');
11889 l('');
11890 l(' l_match_str := ''' || l_match_str || ''';');
11891 l(' IF p_match_type = ''AND'' THEN');
11892 l(' l_match_str := '' AND '';');
11893 l(' ELSIF p_match_type = ''OR'' THEN');
11894 l(' l_match_str := '' OR '';');
11895 l(' END IF;');
11896 l(' SAVEPOINT get_matching_party_sites ;');
11897 l(' l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, p_party_site_list, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
11898 l(' g_score_until_thresh := false;');
11899 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
11900
11901 l('');
11902 l(' l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
11903 l(' l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
11904 l(' init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,p_party_site_list,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);');
11905 l('');
11906 l(' -- Setup Search Context ID');
11907 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
11908 l(' x_search_ctx_id := l_search_ctx_id;');
11909 l('');
11910
11911 ds(fnd_log.level_statement);
11912 dc(fnd_log.level_statement,'l_match_str','l_match_str');
11913 dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
11914 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
11915 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
11916 de;
11917
11918 l(' IF l_party_site_contains_str IS NULL THEN');
11919 l(' defps := 1;');
11920 l(' END IF;');
11921 l(' IF l_contact_pt_contains_str IS NULL THEN');
11922 l(' defcpt := 1;');
11923 l(' END IF;');
11924 l('');
11925 l(' IF l_party_site_contains_str IS NOT NULL THEN');
11926 l(' open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL,l_party_site_cur);');
11927 l(' LOOP');
11928 l(' FETCH l_party_site_cur INTO ');
11929 l(' l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
11930 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
11931 l(' IF (p_dup_party_site_id IS NULL OR (');
11932 l(' p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND ');
11933 l(' l_party_site_id <> p_dup_party_site_id)) THEN ');
11934 l(' l_index := map_id(l_party_site_id);');
11935 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
11936 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);');
11937 ds(fnd_log.level_statement);
11938 dc(fnd_log.level_statement,'Party Site Level Matches');
11939 dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
11940 dc(fnd_log.level_statement,'l_score','l_score');
11941 de;
11942
11943 l(' END IF; ');
11944 l(' END LOOP;');
11945 l(' CLOSE l_party_site_cur;');
11946 l(' END IF;');
11947 l('');
11948 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
11949 l(' open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
11950 l(' LOOP');
11951 l(' FETCH l_contact_pt_cur INTO ');
11952 l(' l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
11953 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
11954 l(' IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (');
11955 l(' p_dup_party_site_id IS NOT NULL AND l_cpt_contact_id IS NULL AND p_dup_party_site_id <> l_cpt_ps_id))) THEN ');
11956 l(' l_index := map_id(l_cpt_ps_id);');
11957 l(' IF l_match_str = '' OR '' THEN');
11958 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
11959 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
11960 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
11961 l(' ELSE');
11962 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
11963 l(' H_SCORES(l_index).TOTAL_SCORE := ');
11964 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
11965 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
11966 l(' END IF;');
11967 l(' END IF;');
11968 l(' ELSE');
11969 l(' IF H_SCORES.EXISTS(l_index) THEN');
11970 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
11971 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
11972 l(' H_SCORES(l_index).TOTAL_SCORE := ');
11973 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
11974 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
11975 l(' END IF;');
11976 l(' ELSIF defps=1 THEN');
11977 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
11978 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
11979 l(' END IF;');
11980 l(' END IF;');
11981 l(' END IF; ');
11982 ds(fnd_log.level_statement);
11983 dc(fnd_log.level_statement,'Contact_point Level Matches');
11984 dc(fnd_log.level_statement,'l_party_site_id','l_cpt_ps_id');
11985 dc(fnd_log.level_statement,'l_score','l_score');
11986 de;
11987 l(' END LOOP;');
11988 l(' CLOSE l_contact_pt_cur;');
11989 l(' END IF;');
11990 l(' ROLLBACK to get_matching_party_sites ;');
11991 l(' x_num_matches := 0;');
11992 l(' l_party_site_id := H_SCORES.FIRST;');
11993 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
11994 l(' WHILE l_party_site_id IS NOT NULL LOOP');
11995 ds(fnd_log.level_statement);
11996 dc(fnd_log.level_statement,'Match Party Site ID','H_SCORES(l_party_site_id).PARTY_SITE_ID');
11997 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100)');
11998 de;
11999 l(' IF l_match_str = '' OR '' THEN');
12000 l(' IF (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12001 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
12002 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100);');
12003 -- END IF;
12004 l(' x_num_matches := x_num_matches+1;');
12005 l(' END IF;');
12006 l(' ELSE');
12007 -- IF l_purpose = 'S' THEN
12008 l(' IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND');
12009 l(' H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND');
12010 l(' (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12011 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
12012 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100));');
12013 -- ELSE
12014 -- END IF;
12015 l(' x_num_matches := x_num_matches+1;');
12016 l(' END IF;');
12017 l(' END IF;');
12018 l(' l_party_site_id:=H_SCORES.NEXT(l_party_site_id);');
12019 l(' END LOOP;');
12020
12021 d(fnd_log.level_procedure,'get_matching_party_sites(-)');
12022
12023 l('EXCEPTION');
12024 l(' WHEN FND_API.G_EXC_ERROR THEN');
12025 l(' ROLLBACK to get_matching_party_sites ;');
12026 l(' RAISE FND_API.G_EXC_ERROR;');
12027 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12028 l(' ROLLBACK to get_matching_party_sites ;');
12029 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12030 l(' WHEN OTHERS THEN');
12031 l(' ROLLBACK to get_matching_party_sites ;');
12032 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12033 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_party_sites'');');
12034 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12035 l(' FND_MSG_PUB.ADD;');
12036 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12037 l('END get_matching_party_sites;');
12038 l('');
12039
12040 -- l(' NULL;');
12041 -- l('END;');
12042
12043 l('-------------------------------------------------------------------------------------');
12044 l('-------------------- BULK MATCH RULE ::: get_matching_contacts --------------------');
12045 l('-------------------------------------------------------------------------------------');
12046 l('');
12047 l('PROCEDURE get_matching_contacts (');
12048 l(' p_rule_id IN NUMBER,');
12049 l(' p_party_id IN NUMBER,');
12050 l(' p_contact_list IN HZ_PARTY_SEARCH.CONTACT_LIST,');
12051 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
12052 l(' p_restrict_sql IN VARCHAR2,');
12053 l(' p_match_type IN VARCHAR2,');
12054 l(' p_dup_contact_id IN NUMBER, ');
12055 l(' x_search_ctx_id OUT NUMBER,');
12056 l(' x_num_matches OUT NUMBER');
12057 l(') IS');
12058 l(' ');
12059 l(' -- Strings to hold the generated Intermedia query strings');
12060 l(' l_party_contains_str VARCHAR2(32000); ');
12061 l(' l_party_site_contains_str VARCHAR2(32000);');
12062 l(' l_contact_contains_str VARCHAR2(32000);');
12063 l(' l_contact_pt_contains_str VARCHAR2(32000);');
12064 l(' l_tmp VARCHAR2(32000);');
12065 l('');
12066 l(' -- Other local variables');
12067 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
12068 l(' l_match_idx NUMBER;');
12069 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
12070 l(' -- For Score calculation');
12071 l(' l_max_score NUMBER;');
12072 l(' l_entered_max_score NUMBER;');
12073 l(' FIRST BOOLEAN;');
12074 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
12075 l('');
12076 FOR TX IN (
12077 SELECT distinct f.staged_attribute_column
12078 FROM hz_trans_functions_vl f, hz_secondary_trans st,
12079 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12080 WHERE sa.match_rule_id = p_rule_id
12081 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12082 AND st.function_id = f.function_id
12083 AND (a.ENTITY_NAME='CONTACTS' OR a.ENTITY_NAME='CONTACT_POINTS')
12084 AND a.attribute_id = sa.attribute_id) LOOP
12085 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12086 END LOOP;
12087 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
12088 l('');
12089 l(' l_score NUMBER;');
12090 l(' l_idx NUMBER;');
12091 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
12092 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
12093 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
12094 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
12095 l(' l_party_id NUMBER;');
12096 l(' l_ps_party_id NUMBER;');
12097 l(' l_ct_party_id NUMBER;');
12098 l(' l_cpt_party_id NUMBER;');
12099 l(' l_cpt_ps_id NUMBER;');
12100 l(' l_cpt_contact_id NUMBER;');
12101 l(' l_party_site_id NUMBER;');
12102 l(' l_org_contact_id NUMBER;');
12103 l(' l_contact_pt_id NUMBER;');
12104 l('');
12105 l(' defpt NUMBER :=0;');
12106 l(' defps NUMBER :=0;');
12107 l(' defct NUMBER :=0;');
12108 l(' defcpt NUMBER :=0;');
12109 l(' l_index NUMBER;');
12110 l(' l_party_max_score NUMBER;');
12111 l(' l_ps_max_score NUMBER;');
12112 l(' l_contact_max_score NUMBER;');
12113 l(' l_cpt_max_score NUMBER;');
12114 l('');
12115 l(' ');
12116 l(' BEGIN');
12117
12118
12119 d(fnd_log.level_procedure,'get_matching_contacts(+)');
12120 ds(fnd_log.level_statement);
12121 dc(fnd_log.level_statement,'Input Parameters:');
12122 dc(fnd_log.level_statement,'p_match_type','p_match_type');
12123 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
12124 dc(fnd_log.level_statement,'p_dup_contact_id','p_dup_contact_id');
12125 de;
12126
12127 l('');
12128 l(' -- ************************************');
12129 l(' -- STEP 1. Initialization and error checks');
12130 l('');
12131 l(' l_match_str := ''' || l_match_str || ''';');
12132 l(' IF p_match_type = ''AND'' THEN');
12133 l(' l_match_str := '' AND '';');
12134 l(' ELSIF p_match_type = ''OR'' THEN');
12135 l(' l_match_str := '' OR '';');
12136 l(' END IF;');
12137 l(' SAVEPOINT get_matching_contacts ;');
12138 l(' l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, p_contact_list, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
12139 l(' g_score_until_thresh := false;');
12140 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
12141 l('');
12142 l(' l_contact_contains_str := check_contacts_bulk (p_contact_list);');
12143 l(' l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
12144 l(' init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,p_contact_list,p_contact_point_list);');
12145
12146 l('');
12147 l(' -- Setup Search Context ID');
12148 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
12149 l(' x_search_ctx_id := l_search_ctx_id;');
12150 l('');
12151
12152 ds(fnd_log.level_statement);
12153 dc(fnd_log.level_statement,'l_match_str','l_match_str');
12154 dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
12155 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
12156 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
12157 de;
12158
12159 l(' IF l_contact_contains_str IS NULL THEN');
12160 l(' defct := 1;');
12161 l(' END IF;');
12162 l(' IF l_contact_pt_contains_str IS NULL THEN');
12163 l(' defcpt := 1;');
12164 l(' END IF;');
12165 l('');
12166 l(' IF l_contact_contains_str IS NOT NULL THEN');
12167 l(' open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL,l_contact_cur);');
12168 l(' LOOP');
12169 l(' FETCH l_contact_cur INTO ');
12170 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
12171 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
12172 l(' IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN ');
12173 l(' l_index := map_id(l_org_contact_id);');
12174 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
12175 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id, null);');
12176
12177 ds(fnd_log.level_statement);
12178 dc(fnd_log.level_statement,'Contact Level Matches');
12179 dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
12180 dc(fnd_log.level_statement,'l_score','l_score');
12181 de;
12182
12183 l(' END IF; ');
12184 l(' END LOOP;');
12185 l(' CLOSE l_contact_cur;');
12186 l(' END IF;');
12187
12188 l('');
12189 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
12190 l(' open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12191 l(' LOOP');
12192 l(' FETCH l_contact_pt_cur INTO ');
12193 l(' l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12194 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12195 l(' IF (l_cpt_contact_id IS NOT NULL AND (p_dup_contact_id IS NULL OR l_cpt_contact_id <> p_dup_contact_id)) THEN ');
12196 l(' l_index := map_id(l_cpt_contact_id);');
12197 l(' IF l_match_str = '' OR '' THEN');
12198 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12199 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
12200 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
12201 l(' ELSE');
12202 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
12203 l(' H_SCORES(l_index).TOTAL_SCORE := ');
12204 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
12205 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
12206 l(' END IF;');
12207 l(' END IF;');
12208 l(' ELSE');
12209 l(' IF H_SCORES.EXISTS(l_index) THEN');
12210 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12211 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
12212 l(' H_SCORES(l_index).TOTAL_SCORE := ');
12213 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
12214 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
12215 l(' END IF;');
12216 l(' ELSIF defps=1 THEN');
12217 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12218 l(' H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
12219 l(' END IF;');
12220 l(' END IF;');
12221 l(' END IF; ');
12222 l(' END LOOP;');
12223 ds(fnd_log.level_statement);
12224 dc(fnd_log.level_statement,'Contact_point Level Matches');
12225 dc(fnd_log.level_statement,'l_org_contact_id','l_cpt_contact_id');
12226 dc(fnd_log.level_statement,'l_score','l_score');
12227 de;
12228 l(' CLOSE l_contact_pt_cur;');
12229 l(' END IF;');
12230 l(' ROLLBACK to get_matching_contacts ;');
12231 l(' x_num_matches := 0;');
12232 l(' l_org_contact_id := H_SCORES.FIRST;');
12233 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
12234 l(' WHILE l_org_contact_id IS NOT NULL LOOP');
12235 l(' IF l_match_str = '' OR '' THEN');
12236 ds(fnd_log.level_statement);
12237 dc(fnd_log.level_statement,'Match Contact ID','H_SCORES(l_org_contact_id).ORG_CONTACT_ID');
12238 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100)');
12239 de;
12240 -- IF l_purpose = 'S' THEN
12241 l(' IF (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12242 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
12243 l(' VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100);');
12244 -- ELSE
12245 -- END IF;
12246 l(' x_num_matches := x_num_matches+1;');
12247 l(' END IF;');
12248 l(' ELSE');
12249 -- IF l_purpose = 'S' THEN
12250 l(' IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND');
12251 l(' H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND');
12252 l(' (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12253 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
12254 l(' VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100));');
12255 -- ELSE
12256 -- END IF;
12257 l(' x_num_matches := x_num_matches+1;');
12258 l(' END IF;');
12259 l(' END IF;');
12260 l(' l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);');
12261 l(' END LOOP;');
12262
12263 d(fnd_log.level_procedure,'get_matching_contacts(-)');
12264
12265 l('EXCEPTION');
12266 l(' WHEN FND_API.G_EXC_ERROR THEN');
12267 l(' ROLLBACK to get_matching_contacts ;');
12268 l(' RAISE FND_API.G_EXC_ERROR;');
12269 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12270 l(' ROLLBACK to get_matching_contacts ;');
12271 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12272 l(' WHEN OTHERS THEN');
12273 l(' ROLLBACK to get_matching_contacts ;');
12274 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12275 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contacts'');');
12276 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12277 l(' FND_MSG_PUB.ADD;');
12278 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12279 l('END get_matching_contacts;');
12280 l('');
12281 l('-------------------------------------------------------------------------------------');
12282 l('-------------------- BULK MATCH RULE ::: get_matching_contact_points ---------------');
12283 l('-------------------------------------------------------------------------------------');
12284 l('');
12285 l('PROCEDURE get_matching_contact_points (');
12286 l(' p_rule_id IN NUMBER,');
12287 l(' p_party_id IN NUMBER,');
12288 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
12289 l(' p_restrict_sql IN VARCHAR2,');
12290 l(' p_match_type IN VARCHAR2,');
12291 l(' p_dup_contact_point_id IN NUMBER, ');
12292 l(' x_search_ctx_id OUT NUMBER,');
12293 l(' x_num_matches OUT NUMBER');
12294 l(') IS');
12295 l('');
12296 l('');
12297 l(' -- Strings to hold the generated Intermedia query strings');
12298 l(' l_contact_pt_contains_str VARCHAR2(32000);');
12299 l(' l_tmp VARCHAR2(32000);');
12300 l('');
12301 l(' -- Other local variables');
12302 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
12303 l(' l_match_idx NUMBER;');
12304 l(' -- For Score calculation');
12305 l(' l_entered_max_score NUMBER;');
12306 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
12307 l('');
12308 FOR TX IN (
12309 SELECT distinct f.staged_attribute_column
12310 FROM hz_trans_functions_vl f, hz_secondary_trans st,
12311 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12312 WHERE sa.match_rule_id = p_rule_id
12313 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12314 AND st.function_id = f.function_id
12315 AND a.ENTITY_NAME='CONTACT_POINTS'
12316 AND a.attribute_id = sa.attribute_id) LOOP
12317 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12318 END LOOP;
12319 l('');
12320 l(' l_score NUMBER;');
12321 l(' l_idx NUMBER;');
12322 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
12323 l(' l_cpt_party_id NUMBER;');
12324 l(' l_cpt_ps_id NUMBER;');
12325 l(' l_cpt_contact_id NUMBER;');
12326 l(' l_contact_pt_id NUMBER;');
12327 l(' H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
12328 l(' H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;');
12329 l(' H_SCORE HZ_PARTY_SEARCH.IDList;');
12330 l('');
12331 l(' cnt NUMBER :=0;');
12332 l(' l_party_max_score NUMBER;');
12333 l(' l_ps_max_score NUMBER;');
12334 l(' l_contact_max_score NUMBER;');
12335 l(' l_cpt_max_score NUMBER;');
12336 l('');
12337 l(' ');
12338 l(' BEGIN');
12339
12340
12341
12342 d(fnd_log.level_procedure,'get_matching_contact_points(+)');
12343 ds(fnd_log.level_statement);
12344 dc(fnd_log.level_statement,'Input Parameters:');
12345 dc(fnd_log.level_statement,'p_match_type','p_match_type');
12346 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
12347 dc(fnd_log.level_statement,'p_dup_contact_point_id','p_dup_contact_point_id');
12348 de;
12349
12350 l('');
12351 l(' -- ************************************');
12352 l(' -- STEP 1. Initialization and error checks');
12353 l('');
12354
12355 l(' l_match_str := ''' || l_match_str || ''';');
12356 l(' IF p_match_type = ''AND'' THEN');
12357 l(' l_match_str := '' AND '';');
12358 l(' ELSIF p_match_type = ''OR'' THEN');
12359 l(' l_match_str := '' OR '';');
12360 l(' END IF;');
12361 l('SAVEPOINT get_matching_contact_points ;');
12362 l(' l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, ');
12363 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
12364 l(' p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
12365 l(' g_score_until_thresh := false;');
12366 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
12367 l('');
12368 l(' l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
12369 l(' init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);');
12370
12371 l('');
12372 l(' -- Setup Search Context ID');
12373 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
12374 l(' x_search_ctx_id := l_search_ctx_id;');
12375
12376 ds(fnd_log.level_statement);
12377 dc(fnd_log.level_statement,'l_match_str','l_match_str');
12378 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
12379 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
12380 de;
12381
12382 l('');
12383 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
12384 l(' open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12385 l(' cnt := 1;');
12386 l(' LOOP');
12387 l(' FETCH l_contact_pt_cur INTO ');
12388 l(' l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12389 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12390 l(' IF (p_dup_contact_point_id IS NULL OR (');
12391 l(' p_dup_contact_point_id IS NOT NULL AND ');
12392 l(' l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND ');
12393 l(' p_dup_contact_point_id <> l_contact_pt_id)) THEN ');
12394 l(' H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;');
12395 l(' H_PARTY_ID(cnt) := l_cpt_party_id;');
12396 l(' H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12397 l(' cnt := cnt+1;');
12398 ds(fnd_log.level_statement);
12399 dc(fnd_log.level_statement,'Contact Point Matches');
12400 dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
12401 dc(fnd_log.level_statement,'l_score','l_score');
12402 de;
12403
12404 l(' END IF; ');
12405 l(' END LOOP;');
12406 l(' CLOSE l_contact_pt_cur;');
12407
12408 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
12409 l('ROLLBACK to get_matching_contact_points ;');
12410 l(' x_num_matches := 0; ');
12411 l(' FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP');
12412 ds(fnd_log.level_statement);
12413 dc(fnd_log.level_statement,'Match Contact Point ID','H_CONTACT_POINT_ID(I)');
12414 dc(fnd_log.level_statement,'Score','round((H_SCORE(I)/l_entered_max_score)*100)');
12415 de;
12416 l(' IF (H_SCORE(I)/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12417 l(' INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
12418 l(' l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);');
12419 l(' x_num_matches := x_num_matches + 1; ');
12420 l(' END IF;');
12421 l(' END LOOP; ');
12422 l(' END IF;');
12423
12424 d(fnd_log.level_procedure,'get_matching_contact_points(-)');
12425
12426 l('EXCEPTION');
12427 l(' WHEN FND_API.G_EXC_ERROR THEN');
12428 l(' ROLLBACK to get_matching_contact_points ;');
12429 l(' RAISE FND_API.G_EXC_ERROR;');
12430 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12431 l(' ROLLBACK to get_matching_contact_points ;');
12432 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12433 l(' WHEN OTHERS THEN');
12434 l(' ROLLBACK to get_matching_contact_points ;');
12435 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12436 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contact_points'');');
12437 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12438 l(' FND_MSG_PUB.ADD;');
12439 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12440 l('END get_matching_contact_points;');
12441
12442 l('');
12443 l(' /**********************************************************');
12444 l(' This procedure finds the score details for a specific party that ');
12445 l(' matched ');
12446 l('');
12447 l(' **********************************************************/');
12448 l('');
12449 l('PROCEDURE get_score_details (');
12450 l(' p_rule_id IN NUMBER,');
12451 l(' p_party_id IN NUMBER,');
12452 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
12453 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
12454 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
12455 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
12456 l(' x_search_ctx_id IN OUT NUMBER');
12457 l(') IS');
12458 l('');
12459 l(' -- Strings to hold the generated Intermedia query strings');
12460 l(' l_party_contains_str VARCHAR2(32000); ');
12461 l(' l_party_site_contains_str VARCHAR2(32000);');
12462 l(' l_contact_contains_str VARCHAR2(32000);');
12463 l(' l_contact_pt_contains_str VARCHAR2(32000);');
12464 l(' l_tmp VARCHAR2(32000);');
12465 l('');
12466 l(' -- Other local variables');
12467 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
12468 l(' -- For Score calculation');
12469 l(' l_max_score NUMBER;');
12470 l(' l_entered_max_score NUMBER;');
12471 l(' FIRST BOOLEAN;');
12472 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
12473 l('');
12474 FOR TX IN (
12475 SELECT distinct f.staged_attribute_column
12476 FROM hz_trans_functions_vl f, hz_secondary_trans st,
12477 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12478 WHERE sa.match_rule_id = p_rule_id
12479 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12480 AND st.function_id = f.function_id
12481 AND a.attribute_id = sa.attribute_id) LOOP
12482 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12483 l(' l_max_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12484 END LOOP;
12485 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
12486 l('');
12487 l(' l_score NUMBER;');
12488 l(' l_match_idx NUMBER;');
12489 l(' l_idx NUMBER;');
12490 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
12491 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
12492 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
12493 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
12494 l(' l_party_id NUMBER;');
12495 l(' l_ps_party_id NUMBER;');
12496 l(' l_ct_party_id NUMBER;');
12497 l(' l_cpt_party_id NUMBER;');
12498 l(' l_cpt_ps_id NUMBER;');
12499 l(' l_cpt_contact_id NUMBER;');
12500 l(' l_party_site_id NUMBER;');
12501 l(' l_org_contact_id NUMBER;');
12502 l(' l_contact_pt_id NUMBER;');
12503 l(' l_ps_contact_id NUMBER;');
12504 l(' l_max_id NUMBER;');
12505 l(' l_max_idx NUMBER;');
12506 l('');
12507 l(' l_index NUMBER;');
12508 l(' l_party_max_score NUMBER;');
12509 l(' l_ps_max_score NUMBER;');
12510 l(' l_contact_max_score NUMBER;');
12511 l(' l_cpt_max_score NUMBER;');
12512 l('');
12513 l(' ');
12514 l(' BEGIN');
12515 l('');
12516
12517 d(fnd_log.level_statement,'get_score_details(+)');
12518 l(' -- ************************************');
12519 l(' -- STEP 1. Initialization and error checks');
12520 l('');
12521 l(' l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,'' OR '', l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
12522 l(' g_score_until_thresh := false;');
12523 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
12524
12525 l(' l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
12526 l(' l_contact_contains_str := check_contacts_bulk (p_contact_list);');
12527 l(' l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
12528
12529 l(' init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
12530 l('');
12531 l(' -- Setup Search Context ID');
12532 l(' IF x_search_ctx_id IS NULL THEN');
12533 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
12534 l(' x_search_ctx_id := l_search_ctx_id;');
12535 l(' ELSE');
12536 l(' l_search_ctx_id := x_search_ctx_id;');
12537 l(' END IF;');
12538 l('');
12539 l(' open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);');
12540 l(' LOOP ');
12541 l(' FETCH l_party_cur INTO');
12542 l(' l_party_id '||l_p_into_list||';');
12543 l(' EXIT WHEN l_party_cur%NOTFOUND;');
12544 IF l_p_param_list IS NOT NULL THEN
12545 l(' INSERT_PARTY_SCORE(p_party_id, p_party_id, l_search_ctx_id, p_party_search_rec, g_party_stage_rec, '||l_p_param_list||',1);');
12546 END IF;
12547 l(' END LOOP;');
12548 l(' CLOSE l_party_cur;');
12549 l('');
12550 l(' IF l_party_site_contains_str IS NOT NULL THEN');
12551 l(' l_max_score := 0;');
12552 l(' l_max_id := 0;');
12553 l(' l_max_idx := 0;');
12554 l(' open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,l_party_site_cur);');
12555 l(' LOOP');
12556 l(' FETCH l_party_site_cur INTO ');
12557 l(' l_party_site_id, l_ps_party_id,l_ps_contact_id '||l_ps_into_list||';');
12558 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
12559 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
12560 l(' IF l_score > l_max_score THEN');
12561 l(' l_max_score := l_score;');
12562 l(' l_max_id := l_party_site_id;');
12563 l(' l_max_idx := l_match_idx;');
12564 FOR TX IN (
12565 SELECT distinct f.staged_attribute_column
12566 FROM hz_trans_functions_vl f, hz_secondary_trans st,
12567 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12568 WHERE sa.match_rule_id = p_rule_id
12569 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12570 AND st.function_id = f.function_id
12571 AND a.entity_name = 'PARTY_SITES'
12572 AND a.attribute_id = sa.attribute_id) LOOP
12573 l(' l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
12574 END LOOP;
12575 l(' END IF;');
12576 l(' END LOOP;');
12577 l(' CLOSE l_party_site_cur;');
12578 l(' IF l_max_score>0 THEN');
12579 l(' INSERT_PARTY_SITES_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_party_site_list(l_max_idx), g_party_site_stage_list(l_max_idx) '||replace(l_ps_param_list,'l_TX','l_max_TX')||',l_max_idx);');
12580 l(' END IF;');
12581 l(' END IF;');
12582 l('');
12583 l(' IF l_contact_contains_str IS NOT NULL THEN');
12584 l(' l_max_score := 0;');
12585 l(' l_max_id := 0;');
12586 l(' l_max_idx := 0;');
12587 l(' open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL,l_contact_cur);');
12588 l(' LOOP');
12589 l(' FETCH l_contact_cur INTO ');
12590 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
12591 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
12592 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
12593 l(' IF l_score > l_max_score THEN');
12594 l(' l_max_score := l_score;');
12595 l(' l_max_id := l_org_contact_id;');
12596 l(' l_max_idx := l_match_idx;');
12597 FOR TX IN (
12598 SELECT distinct f.staged_attribute_column
12599 FROM hz_trans_functions_vl f, hz_secondary_trans st,
12600 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12601 WHERE sa.match_rule_id = p_rule_id
12602 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12603 AND st.function_id = f.function_id
12604 AND a.entity_name = 'CONTACTS'
12605 AND a.attribute_id = sa.attribute_id) LOOP
12606 l(' l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
12607 END LOOP;
12608 l(' END IF;');
12609 l(' END LOOP;');
12610 l(' CLOSE l_contact_cur;');
12611 l(' IF l_max_score>0 THEN');
12612 l(' INSERT_CONTACTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_list(l_max_idx), g_contact_stage_list(l_max_idx) '||replace(l_c_param_list,'l_TX','l_max_TX')||',l_max_idx);');
12613 l(' END IF;');
12614 l(' END IF;');
12615 l('');
12616 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
12617 l(' l_max_score := 0;');
12618 l(' l_max_id := 0;');
12619 l(' l_max_idx := 0;');
12620 l(' open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12621 l(' LOOP');
12622 l(' FETCH l_contact_pt_cur INTO ');
12623 l(' l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12624 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12625 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12626 l(' IF l_score > l_max_score THEN');
12627 l(' l_max_score := l_score;');
12628 l(' l_max_id := l_contact_pt_id;');
12629 l(' l_max_idx := l_match_idx;');
12630 FOR TX IN (
12631 SELECT distinct f.staged_attribute_column
12632 FROM hz_trans_functions_vl f, hz_secondary_trans st,
12633 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12634 WHERE sa.match_rule_id = p_rule_id
12635 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12636 AND st.function_id = f.function_id
12637 AND a.entity_name = 'CONTACT_POINTS'
12638 AND a.attribute_id = sa.attribute_id) LOOP
12639 l(' l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
12640 END LOOP;
12641 l(' END IF;');
12642 l(' END LOOP;');
12643 l(' IF l_max_score>0 THEN');
12644 l(' INSERT_CONTACT_POINTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_point_list(l_max_idx), g_contact_pt_stage_list(l_max_idx) '||replace(l_cpt_param_list,'l_TX','l_max_TX')||',l_max_idx);');
12645 l(' END IF;');
12646 l(' CLOSE l_contact_pt_cur;');
12647 l(' END IF;');
12648 l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12649 l(' DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12650 l(' DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12651 l(' DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12652 l(' DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12653 d(fnd_log.level_procedure,'get_score_details(-)');
12654
12655
12656 l('EXCEPTION');
12657 l(' WHEN FND_API.G_EXC_ERROR THEN');
12658 l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12659 l(' DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12660 l(' DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12661 l(' DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12662 l(' DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12663 l(' RAISE FND_API.G_EXC_ERROR;');
12664 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12665 l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12666 l(' DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12667 l(' DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12668 l(' DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12669 l(' DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12670 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12671 l(' WHEN OTHERS THEN');
12672 l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12673 l(' DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12674 l(' DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12675 l(' DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12676 l(' DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12677 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12678 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_score_details'');');
12679 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12680 l(' FND_MSG_PUB.ADD;');
12681 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12682 l('END get_score_details;');
12683 l('');
12684
12685 generate_acquire_proc(p_rule_id, 'Q');
12686
12687
12688 generate_party_map_proc_bulk('MAP_PARTY_REC', p_rule_id);
12689 l('');
12690 generate_map_proc_bulk('PARTY_SITES', 'MAP_PARTY_SITE_REC', p_rule_id);
12691 l('');
12692 generate_map_proc_bulk('CONTACTS', 'MAP_CONTACT_REC', p_rule_id);
12693 l('');
12694 generate_map_proc_bulk('CONTACT_POINTS', 'MAP_CONTACT_POINT_REC', p_rule_id);
12695 l('');
12696 generate_check_proc(p_rule_id);
12697
12698
12699 generate_check_staged (p_rule_id);
12700 /*l(' PROCEDURE enable_debug IS');
12701
12702 l(' BEGIN');
12703 l(' g_debug_count := g_debug_count + 1;');
12704
12705 l(' IF g_debug_count = 1 THEN');
12706 l(' IF fnd_profile.value(''HZ_API_FILE_DEBUG_ON'') = ''Y'' OR');
12707 l(' fnd_profile.value(''HZ_API_DBMS_DEBUG_ON'') = ''Y''');
12708 l(' THEN');
12709 l(' hz_utility_v2pub.enable_debug;');
12710 l(' g_debug := TRUE;');
12711 d('PKG: '||p_pkg_name||' (+)');
12712 l(' END IF;');
12713 l(' END IF;');
12714 l(' END enable_debug;');
12715
12716 l(' PROCEDURE disable_debug IS');
12717
12718 l(' BEGIN');
12719
12720 l(' IF g_debug THEN');
12721 l(' g_debug_count := g_debug_count - 1;');
12722
12723 l(' IF g_debug_count = 0 THEN');
12724 d('PKG: '||p_pkg_name||' (-)');
12725 l(' hz_utility_v2pub.disable_debug;');
12726 l(' g_debug := FALSE;');
12727 l(' END IF;');
12728 l(' END IF;');
12729
12730 l(' END disable_debug;');
12731 */
12732
12733 l('END;');
12734 l('');
12735 END gen_pkg_body_bulk ;
12736
12737
12738
12739
12740
12741
12742
12743 FUNCTION has_trx_context(proc VARCHAR2) RETURN BOOLEAN IS
12744
12745 l_sql VARCHAR2(255);
12746 l_entity VARCHAR2(255);
12747 l_procedure VARCHAR2(255);
12748 l_attribute VARCHAR2(255);
12749 c NUMBER;
12750 n NUMBER;
12751 l_custom BOOLEAN;
12752
12753 BEGIN
12754 c := dbms_sql.open_cursor;
12755 l_sql := 'select ' || proc ||
12756 '(:attrval,:lang,:attr,:entity,:ctx) from dual';
12757 dbms_sql.parse(c,l_sql,2);
12758 DBMS_SQL.BIND_VARIABLE(c,':attrval','x');
12759 DBMS_SQL.BIND_VARIABLE(c,':lang','x');
12760 DBMS_SQL.BIND_VARIABLE(c,':attr','x');
12761 DBMS_SQL.BIND_VARIABLE(c,':entity','x');
12762 DBMS_SQL.BIND_VARIABLE(c,':ctx','x');
12763 n:=DBMS_SQL.execute(c);
12764 dbms_sql.close_cursor(c);
12765 RETURN TRUE;
12766 EXCEPTION
12767 WHEN OTHERS THEN
12768 dbms_sql.close_cursor(c);
12769 RETURN FALSE;
12770 END;
12771
12772 --VJN Introduced for Bulk Match Rules
12773 PROCEDURE generate_party_map_proc_bulk (
12774 p_proc_name IN VARCHAR2,
12775 p_rule_id IN NUMBER
12776 ) IS
12777
12778 NONE BOOLEAN := TRUE;
12779 trxctx BOOLEAN := FALSE;
12780 INSERT_TRFNS varchar2(32000);
12781 INSERT_TRFN_VALUES varchar2(32000);
12782
12783 BEGIN
12784
12785 l('');
12786 l('/************************************************');
12787 l(' This procedure maps a search record from the logical');
12788 l(' record structure to the stage schema structure ');
12789 l(' for the PARTY Entity after applying ');
12790 l(' the defined transformations');
12791 l('************************************************/');
12792 l('');
12793 l('PROCEDURE ' || p_proc_name || '( ');
12794 l(' p_search_ctx IN BOOLEAN,');
12795 l(' p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, ');
12796 l(' x_entered_max_score OUT NUMBER,');
12797 l(' x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type');
12798 l(' ) IS ');
12799 l(' tmp VARCHAR2(4000);');
12800 l('BEGIN');
12801 ldbg_s('Inside Calling Procedure - '||p_proc_name);
12802 l(' IF p_search_ctx THEN');
12803 l(' x_entered_max_score:=0;');
12804 for SECATTRS IN (
12805 SELECT a.ATTRIBUTE_NAME, SCORE
12806 FROM HZ_TRANS_ATTRIBUTES_VL a,
12807 HZ_MATCH_RULE_SECONDARY sattr
12808 WHERE sattr.MATCH_RULE_ID = p_rule_id
12809 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12810 AND a.ENTITY_NAME = 'PARTY') LOOP
12811 l(' IF p_search_rec.'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12812 l(' x_entered_max_score := x_entered_max_score+'||SECATTRS.SCORE||';');
12813 l(' END IF;');
12814 END LOOP;
12815 l(' END IF;');
12816
12817 for FUNCS IN (
12818 SELECT a.ATTRIBUTE_NAME,
12819 f.PROCEDURE_NAME,
12820 f.STAGED_ATTRIBUTE_COLUMN
12821 FROM HZ_TRANS_FUNCTIONS_VL f,
12822 HZ_TRANS_ATTRIBUTES_VL a,
12823 HZ_MATCH_RULE_PRIMARY pattr,
12824 HZ_PRIMARY_TRANS pfunc
12825 WHERE pattr.MATCH_RULE_ID = p_rule_id
12826 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12827 AND a.ENTITY_NAME = 'PARTY'
12828 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
12829 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
12830
12831 UNION
12832
12833 SELECT a.ATTRIBUTE_NAME,
12834 f.PROCEDURE_NAME,
12835 f.STAGED_ATTRIBUTE_COLUMN
12836 FROM HZ_TRANS_FUNCTIONS_VL f,
12837 HZ_TRANS_ATTRIBUTES_VL a,
12838 HZ_MATCH_RULE_SECONDARY sattr,
12839 HZ_SECONDARY_TRANS sfunc
12840 WHERE sattr.MATCH_RULE_ID = p_rule_id
12841 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12842 AND a.ENTITY_NAME = 'PARTY'
12843 AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
12844 AND sfunc.FUNCTION_ID = f.FUNCTION_ID
12845
12846 UNION
12847
12848 SELECT a.attribute_name,
12849 f.PROCEDURE_NAME,
12850 f.STAGED_ATTRIBUTE_COLUMN
12851 FROM HZ_TRANS_FUNCTIONS_VL f,
12852 HZ_TRANS_ATTRIBUTES_VL a
12853 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12854 AND a.entity_name = 'PARTY'
12855 AND a.attribute_name='PARTY_TYPE'
12856 AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
12857 AND nvl(f.active_flag,'Y')='Y'
12858 AND ROWNUM=1
12859 )
12860 LOOP
12861 NONE := FALSE;
12862 trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
12863 l(' IF p_search_ctx THEN');
12864 l(' IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12865 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
12866 l(' ' || FUNCS.PROCEDURE_NAME ||'(');
12867 l(' p_search_rec.'||FUNCS.ATTRIBUTE_NAME);
12868 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
12869 IF trxctx THEN
12870 l(' ,''PARTY'','''||g_context||''');');
12871 ELSE
12872 l(' ,''PARTY'');');
12873 END IF;
12874 l(' ELSE');
12875 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
12876 l(' END IF;');
12877 IF NOT trxctx THEN
12878 l(' END IF;');
12879 ELSE
12880 l(' ELSE');
12881 l(' IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12882 l(' tmp :=' || FUNCS.PROCEDURE_NAME ||'(');
12883 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
12884 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
12885 l(' ,''PARTY'',''SCORE'');');
12886 l(' IF tmp IS NOT NULL THEN');
12887 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
12888 l(' END IF;');
12889 l(' END IF;');
12890 l(' END IF;');
12891 END IF;
12892 INSERT_TRFNS := INSERT_TRFNS ||','||FUNCS.STAGED_ATTRIBUTE_COLUMN;
12893 INSERT_TRFN_VALUES := INSERT_TRFN_VALUES ||','||'x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
12894 END LOOP;
12895
12896 IF NOT NONE THEN
12897 l('IF p_search_ctx THEN');
12898 l(' insert into HZ_SRCH_PARTIES(batch_id,party_id, party_osr,party_os' || INSERT_TRFNS
12899 || ')'||' values(-1,-1,-1,-1'|| INSERT_TRFN_VALUES ||');');
12900 l('END IF;');
12901 END IF;
12902
12903 IF NONE THEN
12904 l(' NULL;');
12905 END IF;
12906
12907
12908 l('EXCEPTION');
12909 l(' WHEN OTHERS THEN');
12910 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
12911 l(' FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
12912 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
12913 l(' FND_MSG_PUB.ADD;');
12914 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12915 l('END;');
12916
12917 END generate_party_map_proc_bulk ;
12918
12919 PROCEDURE generate_map_proc (
12920 p_entity IN VARCHAR2,
12921 p_proc_name IN VARCHAR2,
12922 p_rule_id IN NUMBER
12923 ) IS
12924
12925 NONE BOOLEAN := TRUE;
12926 trxctx BOOLEAN := FALSE;
12927 BEGIN
12928
12929 l('');
12930 l('/************************************************');
12931 l(' This procedure maps a search record from the logical');
12932 l(' record structure to the stage schema structure ');
12933 l(' for the '||p_entity || ' Entity after applying ');
12934 l(' the defined transformations');
12935 l('************************************************/');
12936 l('');
12937 l('PROCEDURE ' || p_proc_name || '( ');
12938 l(' p_search_ctx IN BOOLEAN,');
12939 IF p_entity = 'PARTY_SITES' THEN
12940 l(' p_search_list IN HZ_PARTY_SEARCH.party_site_list, ');
12941 l(' x_entered_max_score OUT NUMBER,');
12942 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list');
12943 l(' ) IS ');
12944 ELSIF p_entity = 'CONTACTS' THEN
12945 l(' p_search_list IN HZ_PARTY_SEARCH.contact_list, ');
12946 l(' x_entered_max_score OUT NUMBER,');
12947 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list');
12948 l(' ) IS ');
12949 ELSIF p_entity = 'CONTACT_POINTS' THEN
12950 l(' p_search_list IN HZ_PARTY_SEARCH.contact_point_list, ');
12951 l(' x_entered_max_score OUT NUMBER,');
12952 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list');
12953 l(' ) IS ');
12954 END IF;
12955 l(' l_current_max_score NUMBER;');
12956 l(' tmp VARCHAR2(4000);');
12957 if l_purpose = 'S' AND p_entity = 'CONTACT_POINTS' then
12958 l(' TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);');
12959 l(' l_cnt_pt_type_index INDEX_VARCHAR100_TBL;');
12960
12961 l(' TYPE CONTACT_PT_REC_TYPE IS RECORD (');
12962 l(' contact_pt_type VARCHAR2(100),');
12963 l(' max_score NUMBER) ;');
12964
12965 l(' TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;');
12966 l(' l_cnt_pt_type contact_pt_list;');
12967
12968 l(' N NUMBER := 1;');
12969 l(' x_modify VARCHAR2(1);');
12970 end if;
12971 l('BEGIN');
12972 ldbg_s('Inside Calling Procedure - '||p_proc_name);
12973 ldbg_s('p_entity - '||p_entity);
12974 l(' IF p_search_ctx THEN');
12975 IF p_entity = 'PARTY_SITES' THEN
12976 l(' g_ps_den_only:=TRUE;');
12977 END IF;
12978 l(' x_entered_max_score:=0;');
12979 l(' FOR I IN 1..p_search_list.COUNT LOOP');
12980 l(' l_current_max_score:=0;');
12981 IF p_entity = 'CONTACT_POINTS' THEN
12982 l(' x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;');
12983 END IF;
12984 for SECATTRS IN (
12985 SELECT a.ATTRIBUTE_NAME, SCORE, nvl(a.denorm_flag,'N') DENORM_FLAG
12986 FROM HZ_TRANS_ATTRIBUTES_VL a,
12987 HZ_MATCH_RULE_SECONDARY sattr
12988 WHERE sattr.MATCH_RULE_ID = p_rule_id
12989 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12990 AND a.ENTITY_NAME = p_entity) LOOP
12991 l(' IF p_search_list(I).'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12992 l(' l_current_max_score := l_current_max_score+'||SECATTRS.SCORE||';');
12993 IF p_entity = 'PARTY_SITES' AND SECATTRS.DENORM_FLAG='N' THEN
12994 l(' g_ps_den_only:=FALSE;');
12995 END IF;
12996
12997 l(' END IF;');
12998
12999 END LOOP;
13000 if l_purpose = 'S' AND p_entity = 'CONTACT_POINTS' then
13001 l(' x_modify := ''N'';');
13002 l(' FOR J IN 1..l_cnt_pt_type.count LOOP');
13003 l(' if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then');
13004 l(' x_modify := ''Y'';');
13005 l(' IF l_cnt_pt_type(J).max_score<l_current_max_score THEN');
13006 l(' l_cnt_pt_type(J).max_score :=l_current_max_score;');
13007 l(' EXIT;');
13008 l(' END IF;');
13009 l(' end if;');
13010 l(' END LOOP;');
13011 l(' if x_modify=''N'' then');
13012 l(' l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;');
13013 l(' l_cnt_pt_type(N).max_score := l_current_max_score;');
13014 l(' N:= N+1;');
13015 l(' end if;');
13016
13017 else
13018 l(' IF l_current_max_score>x_entered_max_score THEN');
13019 l(' x_entered_max_score:=l_current_max_score;');
13020 l(' END IF;');
13021 end if;
13022
13023 l(' END LOOP;');
13024 if l_purpose = 'S' AND p_entity = 'CONTACT_POINTS' then
13025 l(' FOR M IN 1..l_cnt_pt_type.count LOOP');
13026 l(' x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;');
13027 l(' END LOOP;');
13028 end if;
13029 l(' END IF;');
13030
13031
13032 for FUNCS IN (
13033 SELECT a.ATTRIBUTE_NAME,
13034 f.PROCEDURE_NAME,
13035 f.STAGED_ATTRIBUTE_COLUMN
13036 FROM HZ_TRANS_FUNCTIONS_VL f,
13037 HZ_TRANS_ATTRIBUTES_VL a,
13038 HZ_MATCH_RULE_PRIMARY pattr,
13039 HZ_PRIMARY_TRANS pfunc
13040 WHERE pattr.MATCH_RULE_ID = p_rule_id
13041 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13042 AND a.ENTITY_NAME = p_entity
13043 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13044 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13045
13046 UNION
13047
13048 SELECT a.ATTRIBUTE_NAME,
13049 f.PROCEDURE_NAME,
13050 f.STAGED_ATTRIBUTE_COLUMN
13051 FROM HZ_TRANS_FUNCTIONS_VL f,
13052 HZ_TRANS_ATTRIBUTES_VL a,
13053 HZ_MATCH_RULE_SECONDARY sattr,
13054 HZ_SECONDARY_TRANS sfunc
13055 WHERE sattr.MATCH_RULE_ID = p_rule_id
13056 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13057 AND a.ENTITY_NAME = p_entity
13058 AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13059 AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13060 )
13061 LOOP
13062 NONE := FALSE;
13063 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13064 l(' IF p_search_ctx THEN');
13065 trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
13066 l(' IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13067 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13068 l(' ' || FUNCS.PROCEDURE_NAME ||'(');
13069 l(' p_search_list(I).'||FUNCS.ATTRIBUTE_NAME);
13070 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13071 IF NOT trxctx THEN
13072 l(' ,''' ||p_entity||''');');
13073 ELSE
13074 l(' ,''' ||p_entity||''','''||g_context||''');');
13075 END IF;
13076 l(' ELSE');
13077 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13078 l(' END IF;');
13079 IF NOT trxctx THEN
13080 l(' END IF;');
13081 ELSE
13082 l(' ELSE');
13083 l(' IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13084 l(' tmp := ' || FUNCS.PROCEDURE_NAME ||'(');
13085 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
13086 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13087 l(' ,''' ||p_entity||''',''SCORE'');');
13088 l(' IF tmp IS NOT NULL THEN');
13089 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
13090 l(' END IF;');
13091 l(' END IF;');
13092 l(' END IF;');
13093 END IF;
13094 l(' END LOOP;');
13095 END LOOP;
13096 IF NONE THEN
13097 l(' NULL;');
13098 END IF;
13099
13100 l('EXCEPTION');
13101 l(' WHEN OTHERS THEN');
13102 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13103 l(' FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13104 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13105 l(' FND_MSG_PUB.ADD;');
13106 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13107 l('END;');
13108
13109 END generate_map_proc;
13110
13111
13112 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
13113 -- OF THE GLOBAL CONDITION RECORD FOR REGULAR MATCH RULES
13114
13115 PROCEDURE generate_ent_cond_pop_rec_proc (
13116 p_entity IN VARCHAR2,
13117 p_rule_id IN NUMBER
13118 ) IS
13119
13120 p_proc_name VARCHAR2(200);
13121 NONE BOOLEAN := TRUE;
13122
13123
13124 BEGIN
13125
13126 p_proc_name := 'POP_'||p_entity||'_COND_REC';
13127 l('');
13128 l('/************************************************');
13129 l(' This procedure populates global cond record');
13130 l(' for the '||p_entity || ' Entity ');
13131 l('************************************************/');
13132 l('');
13133 l('PROCEDURE ' || p_proc_name||'(');
13134 IF p_entity = 'PARTY' THEN
13135 l(' p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type ');
13136 l(' ) IS ');
13137 ELSIF p_entity = 'PARTY_SITES' THEN
13138 l(' p_search_list IN HZ_PARTY_SEARCH.party_site_list ');
13139 l(' ) IS ');
13140 ELSIF p_entity = 'CONTACTS' THEN
13141 l(' p_search_list IN HZ_PARTY_SEARCH.contact_list ');
13142 l(' ) IS ');
13143 ELSIF p_entity = 'CONTACT_POINTS' THEN
13144 l(' p_search_list IN HZ_PARTY_SEARCH.contact_point_list ');
13145 l(' ) IS ');
13146 END IF;
13147
13148 l('BEGIN');
13149
13150 for FUNCS IN (
13151 SELECT a.ATTRIBUTE_ID, a.ATTRIBUTE_NAME
13152 FROM HZ_TRANS_FUNCTIONS_VL f,
13153 HZ_TRANS_ATTRIBUTES_VL a,
13154 HZ_MATCH_RULE_PRIMARY pattr,
13155 HZ_PRIMARY_TRANS pfunc
13156 WHERE pattr.MATCH_RULE_ID = p_rule_id
13157 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13158 AND a.ENTITY_NAME = p_entity
13159 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13160 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13161
13162 UNION
13163
13164 SELECT a.ATTRIBUTE_ID, a.ATTRIBUTE_NAME
13165 FROM HZ_TRANS_FUNCTIONS_VL f,
13166 HZ_TRANS_ATTRIBUTES_VL a,
13167 HZ_MATCH_RULE_SECONDARY sattr,
13168 HZ_SECONDARY_TRANS sfunc
13169 WHERE sattr.MATCH_RULE_ID = p_rule_id
13170 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13171 AND a.ENTITY_NAME = p_entity
13172 AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13173 AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13174 )
13175 LOOP
13176 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( FUNCS.attribute_id)
13177 THEN
13178 NONE := FALSE ;
13179 l('---------POPULATE THE GLOBAL WORD CONDITION REC FOR ' || p_entity || '-------------');
13180 IF p_entity = 'PARTY'
13181 THEN
13182
13183 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||FUNCS.attribute_id||','||'p_search_rec.'||FUNCS.attribute_name||');');
13184
13185 ELSE
13186 l('------ Populate global condition record only if search list is not empty -----------');
13187 l(' IF p_search_list.COUNT > 0');
13188 l(' THEN') ;
13189 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||FUNCS.attribute_id||','||'p_search_list(1).'||FUNCS.attribute_name||');');
13190 l('END IF ;');
13191 END IF;
13192 END IF ;
13193 END LOOP;
13194
13195 IF NONE
13196 THEN
13197 l( 'NULL ;');
13198 END IF ;
13199
13200 l('EXCEPTION');
13201 l(' WHEN OTHERS THEN');
13202 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13203 l(' FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13204 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13205 l(' FND_MSG_PUB.ADD;');
13206 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13207 l('END;');
13208
13209 END ;
13210
13211 PROCEDURE generate_map_proc_bulk (
13212 p_entity IN VARCHAR2,
13213 p_proc_name IN VARCHAR2,
13214 p_rule_id IN NUMBER
13215 ) IS
13216
13217 NONE BOOLEAN := TRUE;
13218 trxctx BOOLEAN := FALSE;
13219 INSERT_TRFNS varchar2(32000);
13220 INSERT_TRFN_VALUES varchar2(32000);
13221 BEGIN
13222
13223 l('');
13224 l('/************************************************');
13225 l(' This procedure maps a search record from the logical');
13226 l(' record structure to the stage schema structure ');
13227 l(' for the '||p_entity || ' Entity after applying ');
13228 l(' the defined transformations');
13229 l('************************************************/');
13230 l('');
13231 l('PROCEDURE ' || p_proc_name || '( ');
13232 l(' p_search_ctx IN BOOLEAN,');
13233 IF p_entity = 'PARTY_SITES' THEN
13234 l(' p_search_list IN HZ_PARTY_SEARCH.party_site_list, ');
13235 l(' x_entered_max_score OUT NUMBER,');
13236 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list');
13237 l(' ) IS ');
13238 ELSIF p_entity = 'CONTACTS' THEN
13239 l(' p_search_list IN HZ_PARTY_SEARCH.contact_list, ');
13240 l(' x_entered_max_score OUT NUMBER,');
13241 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list');
13242 l(' ) IS ');
13243 ELSIF p_entity = 'CONTACT_POINTS' THEN
13244 l(' p_search_list IN HZ_PARTY_SEARCH.contact_point_list, ');
13245 l(' x_entered_max_score OUT NUMBER,');
13246 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list');
13247 l(' ) IS ');
13248 END IF;
13249 l(' l_current_max_score NUMBER;');
13250 l(' tmp VARCHAR2(4000);');
13251 l('BEGIN');
13252 ldbg_s('Inside Calling Procedure - '||p_proc_name);
13253 ldbg_s('p_entity - '||p_entity);
13254 l(' IF p_search_ctx THEN');
13255 l(' x_entered_max_score:=0;');
13256 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13257 l(' l_current_max_score:=0;');
13258 IF p_entity = 'CONTACT_POINTS' THEN
13259 l(' x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;');
13260 END IF;
13261 for SECATTRS IN (
13262 SELECT a.ATTRIBUTE_NAME, SCORE
13263 FROM HZ_TRANS_ATTRIBUTES_VL a,
13264 HZ_MATCH_RULE_SECONDARY sattr
13265 WHERE sattr.MATCH_RULE_ID = p_rule_id
13266 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13267 AND a.ENTITY_NAME = p_entity) LOOP
13268 l(' IF p_search_list(I).'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13269 l(' l_current_max_score := l_current_max_score+'||SECATTRS.SCORE||';');
13270 l(' END IF;');
13271 END LOOP;
13272 l(' IF l_current_max_score>x_entered_max_score THEN');
13273 l(' x_entered_max_score:=l_current_max_score;');
13274 l(' END IF;');
13275 l(' END LOOP;');
13276 l(' END IF;');
13277
13278 for FUNCS IN (
13279 SELECT a.ATTRIBUTE_NAME,
13280 f.PROCEDURE_NAME,
13281 f.STAGED_ATTRIBUTE_COLUMN
13282 FROM HZ_TRANS_FUNCTIONS_VL f,
13283 HZ_TRANS_ATTRIBUTES_VL a,
13284 HZ_MATCH_RULE_PRIMARY pattr,
13285 HZ_PRIMARY_TRANS pfunc
13286 WHERE pattr.MATCH_RULE_ID = p_rule_id
13287 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13288 AND a.ENTITY_NAME = p_entity
13289 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13290 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13291
13292 UNION
13293
13294 SELECT a.ATTRIBUTE_NAME,
13295 f.PROCEDURE_NAME,
13296 f.STAGED_ATTRIBUTE_COLUMN
13297 FROM HZ_TRANS_FUNCTIONS_VL f,
13298 HZ_TRANS_ATTRIBUTES_VL a,
13299 HZ_MATCH_RULE_SECONDARY sattr,
13300 HZ_SECONDARY_TRANS sfunc
13301 WHERE sattr.MATCH_RULE_ID = p_rule_id
13302 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13303 AND a.ENTITY_NAME = p_entity
13304 AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13305 AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13306 )
13307 LOOP
13308 NONE := FALSE;
13309 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13310 l(' IF p_search_ctx THEN');
13311 trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
13312 l(' IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13313 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13314 l(' ' || FUNCS.PROCEDURE_NAME ||'(');
13315 l(' p_search_list(I).'||FUNCS.ATTRIBUTE_NAME);
13316 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13317 IF NOT trxctx THEN
13318 l(' ,''' ||p_entity||''');');
13319 ELSE
13320 l(' ,''' ||p_entity||''','''||g_context||''');');
13321 END IF;
13322 l(' ELSE');
13323 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13324 l(' END IF;');
13325 IF NOT trxctx THEN
13326 l(' END IF;');
13327 ELSE
13328 l(' ELSE');
13329 l(' IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13330 l(' tmp := ' || FUNCS.PROCEDURE_NAME ||'(');
13331 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
13332 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13333 l(' ,''' ||p_entity||''',''SCORE'');');
13334 l(' IF tmp IS NOT NULL THEN');
13335 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
13336 l(' END IF;');
13337 l(' END IF;');
13338 l(' END IF;');
13339 END IF;
13340 l(' END LOOP;');
13341 END LOOP;
13342
13343 -- VJN : For inserting into the Search Tables
13344 IF NOT NONE THEN
13345
13346 for FUNCS IN (
13347 SELECT a.ATTRIBUTE_NAME,
13348 f.PROCEDURE_NAME,
13349 f.STAGED_ATTRIBUTE_COLUMN
13350 FROM HZ_TRANS_FUNCTIONS_VL f,
13351 HZ_TRANS_ATTRIBUTES_VL a,
13352 HZ_MATCH_RULE_PRIMARY pattr,
13353 HZ_PRIMARY_TRANS pfunc
13354 WHERE pattr.MATCH_RULE_ID = p_rule_id
13355 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13356 AND a.ENTITY_NAME = p_entity
13357 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13358 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13359
13360 UNION
13361
13362 SELECT a.ATTRIBUTE_NAME,
13363 f.PROCEDURE_NAME,
13364 f.STAGED_ATTRIBUTE_COLUMN
13365 FROM HZ_TRANS_FUNCTIONS_VL f,
13366 HZ_TRANS_ATTRIBUTES_VL a,
13367 HZ_MATCH_RULE_SECONDARY sattr,
13368 HZ_SECONDARY_TRANS sfunc
13369 WHERE sattr.MATCH_RULE_ID = p_rule_id
13370 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13371 AND a.ENTITY_NAME = p_entity
13372 AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13373 AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13374 )
13375 LOOP
13376
13377 NONE := FALSE;
13378 INSERT_TRFNS := INSERT_TRFNS ||','||FUNCS.STAGED_ATTRIBUTE_COLUMN;
13379 INSERT_TRFN_VALUES := INSERT_TRFN_VALUES ||','||'x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
13380
13381 END LOOP;
13382
13383 IF p_entity = 'PARTY_SITES'
13384 THEN
13385 l('IF p_search_ctx THEN');
13386 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13387 l(' insert into HZ_SRCH_PSITES(batch_id,party_id, party_osr,party_os, party_site_id,party_site_osr, party_site_os,new_party_flag ' || INSERT_TRFNS
13388 || ')'||' values(-1,-1,-1,-1,-1,-1,-1,''Y'''|| INSERT_TRFN_VALUES ||');');
13389 l(' END LOOP;');
13390 l('END IF;');
13391 END IF;
13392
13393 IF p_entity = 'CONTACTS'
13394 THEN
13395 l('IF p_search_ctx THEN');
13396 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13397 l(' insert into HZ_SRCH_CONTACTS(batch_id,party_id, party_osr,party_os, org_contact_id,contact_osr, contact_os,new_party_flag ' || INSERT_TRFNS
13398 || ')'||' values(-1,-1,-1,-1,-1,-1,-1,''Y'''|| INSERT_TRFN_VALUES ||');');
13399 l(' END LOOP;');
13400 l('END IF;');
13401 END IF;
13402
13403 IF p_entity = 'CONTACT_POINTS'
13404 THEN
13405 l('IF p_search_ctx THEN');
13406 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13407 l(' insert into HZ_SRCH_CPTS(batch_id,party_id, party_osr,party_os, contact_point_id,contact_pt_osr, contact_pt_os,contact_point_type,new_party_flag ' || INSERT_TRFNS
13408 || ')'||' values(-1,-1,-1,-1,-1,-1,-1,-1,''Y'''|| INSERT_TRFN_VALUES ||');');
13409 l(' END LOOP;');
13410 l('END IF; ');
13411 END IF;
13412 END IF;
13413
13414 IF NONE THEN
13415 l(' NULL;');
13416 END IF;
13417
13418 l('EXCEPTION');
13419 l(' WHEN OTHERS THEN');
13420 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13421 l(' FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13422 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13423 l(' FND_MSG_PUB.ADD;');
13424 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13425 l('END;');
13426
13427 END generate_map_proc_bulk ;
13428
13429
13430
13431 PROCEDURE generate_party_map_proc (
13432 p_proc_name IN VARCHAR2,
13433 p_rule_id IN NUMBER
13434 ) IS
13435
13436 NONE BOOLEAN := TRUE;
13437 trxctx BOOLEAN := FALSE;
13438 l_filt VARCHAR2(1);
13439 BEGIN
13440
13441 l('');
13442 l('/************************************************');
13443 l(' This procedure maps a search record from the logical');
13444 l(' record structure to the stage schema structure ');
13445 l(' for the PARTY Entity after applying ');
13446 l(' the defined transformations');
13447 l('************************************************/');
13448 l('');
13449 l('PROCEDURE ' || p_proc_name || '( ');
13450 l(' p_search_ctx IN BOOLEAN,');
13451 l(' p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, ');
13452 l(' x_entered_max_score OUT NUMBER,');
13453 l(' x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type');
13454 l(' ) IS ');
13455 l(' tmp VARCHAR2(4000);');
13456 l(' l_party_name VARCHAR2(4000);');
13457 l('BEGIN');
13458 ldbg_s('Inside Calling Procedure - '||p_proc_name);
13459 l(' IF p_search_ctx THEN');
13460 l(' x_stage_rec.TX8 := NULL;');
13461 l(' g_other_party_level_attribs:=FALSE;');
13462 NONE:=TRUE;
13463 for PRIMATTRS IN (
13464 SELECT a.ATTRIBUTE_NAME
13465 FROM HZ_TRANS_ATTRIBUTES_VL a,
13466 HZ_MATCH_RULE_PRIMARY sattr
13467 WHERE sattr.MATCH_RULE_ID = p_rule_id
13468 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13469 AND a.ENTITY_NAME = 'PARTY'
13470 ) LOOP
13471 IF PRIMATTRS.ATTRIBUTE_NAME not in (
13472 'PARTY_NAME','PARTY_TYPE','STATUS','PARTY_ALL_NAMES') THEN
13473 IF NONE THEN
13474 l(' IF p_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL ');
13475 NONE:=FALSE;
13476 ELSE
13477 l(' OR p_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL ');
13478 END IF;
13479 END IF;
13480 END LOOP;
13481 IF NOT NONE THEN
13482 l(' THEN');
13483 l(' g_other_party_level_attribs:=TRUE;');
13484 l(' END IF;');
13485 END IF;
13486
13487 l(' x_entered_max_score:=0;');
13488 for SECATTRS IN (
13489 SELECT a.ATTRIBUTE_NAME, SCORE
13490 FROM HZ_TRANS_ATTRIBUTES_VL a,
13491 HZ_MATCH_RULE_SECONDARY sattr
13492 WHERE sattr.MATCH_RULE_ID = p_rule_id
13493 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13494 AND a.ENTITY_NAME = 'PARTY') LOOP
13495 l(' IF p_search_rec.'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13496 l(' x_entered_max_score := x_entered_max_score+'||SECATTRS.SCORE||';');
13497 l(' END IF;');
13498 END LOOP;
13499 l(' END IF;');
13500
13501 for FUNCS IN (
13502 SELECT a.ATTRIBUTE_NAME,a.attribute_id,
13503 f.PROCEDURE_NAME,
13504 f.STAGED_ATTRIBUTE_COLUMN
13505 FROM HZ_TRANS_FUNCTIONS_VL f,
13506 HZ_TRANS_ATTRIBUTES_VL a,
13507 HZ_MATCH_RULE_PRIMARY pattr,
13508 HZ_PRIMARY_TRANS pfunc
13509 WHERE pattr.MATCH_RULE_ID = p_rule_id
13510 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13511 AND a.ENTITY_NAME = 'PARTY'
13512 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13513 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13514
13515 UNION
13516
13517 SELECT a.ATTRIBUTE_NAME,a.attribute_id,
13518 f.PROCEDURE_NAME,
13519 f.STAGED_ATTRIBUTE_COLUMN
13520 FROM HZ_TRANS_FUNCTIONS_VL f,
13521 HZ_TRANS_ATTRIBUTES_VL a,
13522 HZ_MATCH_RULE_SECONDARY sattr,
13523 HZ_SECONDARY_TRANS sfunc
13524 WHERE sattr.MATCH_RULE_ID = p_rule_id
13525 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13526 AND a.ENTITY_NAME = 'PARTY'
13527 AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13528 AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13529
13530 UNION
13531
13532 SELECT a.attribute_name,a.attribute_id,
13533 f.PROCEDURE_NAME,
13534 f.STAGED_ATTRIBUTE_COLUMN
13535 FROM HZ_TRANS_FUNCTIONS_VL f,
13536 HZ_TRANS_ATTRIBUTES_VL a
13537 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13538 AND a.entity_name = 'PARTY'
13539 AND a.attribute_name='PARTY_TYPE'
13540 AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
13541 AND nvl(f.active_flag,'Y')='Y'
13542 AND ROWNUM=1
13543 )
13544 LOOP
13545 NONE := FALSE;
13546 trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
13547 begin
13548 select nvl(filter_flag, 'N') INTO l_filt
13549 FROM HZ_MATCH_RULE_PRIMARY p
13550 where p.MATCH_RULE_ID = p_rule_id
13551 AND p.attribute_id = FUNCS.attribute_id;
13552 exception
13553 when no_data_found then
13554 l_filt:='N';
13555 end;
13556 IF l_filt = 'N' THEN
13557 l(' IF p_search_ctx THEN');
13558 l(' IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13559 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13560 l(' ' || FUNCS.PROCEDURE_NAME ||'(');
13561 l(' p_search_rec.'||FUNCS.ATTRIBUTE_NAME);
13562 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13563 IF trxctx THEN
13564 l(' ,''PARTY'','''||g_context||''');');
13565 ELSE
13566 l(' ,''PARTY'');');
13567 END IF;
13568 l(' ELSE');
13569 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13570 l(' END IF;');
13571 IF NOT trxctx THEN
13572 l(' END IF;');
13573 ELSE
13574 l(' ELSE');
13575 l(' IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13576 l(' tmp :=' || FUNCS.PROCEDURE_NAME ||'(');
13577 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
13578 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13579 l(' ,''PARTY'',''SCORE'');');
13580 l(' IF tmp IS NOT NULL THEN');
13581 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
13582 l(' END IF;');
13583 l(' END IF;');
13584 l(' END IF;');
13585 END IF;
13586 ELSE
13587 l(' IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13588 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13589 l(' ' || FUNCS.PROCEDURE_NAME ||'(');
13590 l(' p_search_rec.'||FUNCS.ATTRIBUTE_NAME);
13591 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13592 IF trxctx THEN
13593 l(' ,''PARTY'',''STAGE'');');
13594 ELSE
13595 l(' ,''PARTY'');');
13596 END IF;
13597 l(' ELSE');
13598 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13599 l(' END IF;');
13600 END IF;
13601
13602 --- Modified for Bug 4016594
13603 IF FUNCS.ATTRIBUTE_NAME = 'DUNS_NUMBER_C' AND upper(FUNCS.PROCEDURE_NAME) = 'HZ_TRANS_PKG.EXACT' THEN
13604 l(' IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13605 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13606 l(' lpad(x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ',9,''0'');');
13607 l(' END IF;');
13608 END IF;
13609
13610 END LOOP;
13611 l(' l_party_name := p_search_rec.PARTY_NAME;');
13612 l(' IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN');
13613 l(' l_party_name := p_search_rec.PARTY_ALL_NAMES;');
13614 l(' END IF;');
13615 l(' IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN');
13616 l(' x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,''PARTY_NAME'',''PARTY'','''||g_context||''');');
13617 l(' END IF;');
13618
13619 IF NONE THEN
13620 l(' NULL;');
13621 END IF;
13622
13623
13624 l('EXCEPTION');
13625 l(' WHEN OTHERS THEN');
13626 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13627 l(' FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13628 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13629 l(' FND_MSG_PUB.ADD;');
13630 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13631 l('END;');
13632
13633 END generate_party_map_proc;
13634
13635
13636
13637 PROCEDURE generate_check_proc (
13638 p_rule_id NUMBER) IS
13639 FIRST BOOLEAN;
13640 BEGIN
13641 l('');
13642 l('/************************************************');
13643 l(' This procedure checks if the input search criteria ');
13644 l(' is valid. It checks if : ');
13645 l(' 1. At least one primary condition is passed');
13646 l(' 2. Contact Point Type is not null for each condition');
13647 l('************************************************/');
13648 l('');
13649
13650 l('FUNCTION check_prim_cond(');
13651 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
13652 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
13653 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
13654 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list)');
13655 l(' RETURN BOOLEAN IS');
13656 l(' BEGIN');
13657
13658 FIRST := TRUE;
13659 FOR CPTS IN (SELECT ATTRIBUTE_NAME
13660 FROM HZ_TRANS_ATTRIBUTES_VL a,
13661 HZ_MATCH_RULE_PRIMARY p
13662 WHERE p.match_rule_id = p_rule_id
13663 AND a.ENTITY_NAME = 'CONTACT_POINTS'
13664 AND p.attribute_id = a.attribute_id
13665 AND ATTRIBUTE_NAME <> 'CONTACT_POINT_TYPE'
13666 AND nvl(p.FILTER_FLAG,'N') = 'N') LOOP
13667 IF FIRST THEN
13668 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
13669 l(' IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (');
13670 l('p_contact_point_list(I).'||CPTS.ATTRIBUTE_NAME||' IS NOT NULL ');
13671 FIRST := FALSE;
13672 ELSE
13673 l('OR p_contact_point_list(I).'||CPTS.ATTRIBUTE_NAME||' IS NOT NULL ');
13674 END IF;
13675 END LOOP;
13676 IF NOT FIRST THEN
13677 l(' ) THEN');
13678 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_CONTACT_POINT_TYPE'');');
13679 l(' FND_MSG_PUB.ADD;');
13680 l(' RAISE FND_API.G_EXC_ERROR;');
13681 l(' END IF;');
13682 l(' END LOOP;');
13683 l('');
13684 END IF;
13685
13686 FOR PRIMATTRS IN (
13687 SELECT ATTRIBUTE_NAME
13688 FROM HZ_TRANS_ATTRIBUTES_VL a,
13689 HZ_MATCH_RULE_PRIMARY p
13690 WHERE p.match_rule_id = p_rule_id
13691 AND p.attribute_id = a.attribute_id
13692 AND a.ENTITY_NAME = 'PARTY'
13693 AND nvl(p.FILTER_FLAG,'N') = 'N') LOOP
13694 l(' IF p_party_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13695 l(' RETURN TRUE;');
13696 l(' END IF;');
13697 END LOOP;
13698
13699 FOR PRIMATTRS IN (
13700 SELECT ENTITY_NAME, ATTRIBUTE_NAME
13701 FROM HZ_TRANS_ATTRIBUTES_VL a,
13702 HZ_MATCH_RULE_PRIMARY p
13703 WHERE p.match_rule_id = p_rule_id
13704 AND a.ENTITY_NAME <> 'PARTY'
13705 AND p.attribute_id = a.attribute_id
13706 AND ATTRIBUTE_NAME <> 'CONTACT_POINT_TYPE'
13707 AND nvl(p.FILTER_FLAG,'N') = 'N')
13708 LOOP
13709 IF PRIMATTRS.ENTITY_NAME = 'PARTY_SITES' THEN
13710 l(' FOR I IN 1..p_party_site_list.COUNT LOOP');
13711 HZ_GEN_PLSQL.add_line(' IF p_party_site_list(I).',false);
13712 ELSIF PRIMATTRS.ENTITY_NAME = 'CONTACTS' THEN
13713 l(' FOR I IN 1..p_contact_list.COUNT LOOP');
13714 HZ_GEN_PLSQL.add_line(' IF p_contact_list(I).',false);
13715 ELSIF PRIMATTRS.ENTITY_NAME = 'CONTACT_POINTS' THEN
13716 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
13717 HZ_GEN_PLSQL.add_line(' IF p_contact_point_list(I).',false);
13718 END IF;
13719 l(PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL THEN ');
13720 l(' RETURN TRUE;');
13721 l(' END IF;');
13722 l(' END LOOP;');
13723 END LOOP;
13724 l(' RETURN FALSE;');
13725 l('EXCEPTION');
13726 l(' WHEN FND_API.G_EXC_ERROR THEN');
13727 l(' RAISE FND_API.G_EXC_ERROR;');
13728 l(' WHEN OTHERS THEN');
13729 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
13730 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_prim_cond'');');
13731 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
13732 l(' FND_MSG_PUB.ADD;');
13733 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13734 l(' END check_prim_cond;');
13735 l('');
13736
13737 l('/************************************************');
13738 l(' This procedure checks if the input search condition ');
13739 l(' has party site criteria. ');
13740 l('************************************************/');
13741
13742 l('');
13743 l('PROCEDURE check_party_site_cond(');
13744 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
13745 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
13746 l(' x_secondary OUT BOOLEAN,');
13747 l(' x_primary OUT BOOLEAN');
13748 l(') IS');
13749 l(' BEGIN');
13750 l(' x_primary:= FALSE;');
13751 l(' x_secondary:= FALSE;');
13752
13753 l(' FOR I IN 1..p_party_site_list.COUNT LOOP');
13754 FIRST := TRUE;
13755 FOR PRIMATTRS IN (
13756 SELECT ATTRIBUTE_NAME
13757 FROM HZ_TRANS_ATTRIBUTES_VL a,
13758 HZ_MATCH_RULE_PRIMARY p
13759 WHERE p.match_rule_id = p_rule_id
13760 AND a.ENTITY_NAME = 'PARTY_SITES'
13761 AND p.attribute_id = a.attribute_id)
13762 LOOP
13763 IF FIRST THEN
13764 l(' IF p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13765 FIRST := FALSE;
13766 ELSE
13767 l(' OR p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13768 END IF;
13769 END LOOP;
13770 IF NOT FIRST THEN
13771 l(' THEN');
13772 l(' x_primary := TRUE;');
13773 l(' END IF;');
13774 l(' EXIT WHEN x_primary;');
13775 ELSE
13776 l(' NULL;');
13777 END IF;
13778 l(' END LOOP;');
13779
13780 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
13781 FIRST := TRUE;
13782 FOR PRIMATTRS IN (
13783 SELECT ATTRIBUTE_NAME
13784 FROM HZ_TRANS_ATTRIBUTES_VL a,
13785 HZ_MATCH_RULE_PRIMARY p
13786 WHERE p.match_rule_id = p_rule_id
13787 AND a.ENTITY_NAME = 'CONTACT_POINTS'
13788 AND p.attribute_id = a.attribute_id)
13789 LOOP
13790 IF FIRST THEN
13791 l(' IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13792 FIRST := FALSE;
13793 ELSE
13794 l(' OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13795 END IF;
13796 END LOOP;
13797
13798 IF NOT FIRST THEN
13799 l(' THEN');
13800 l(' x_primary := TRUE;');
13801 l(' END IF;');
13802 l(' EXIT WHEN x_primary;');
13803 ELSE
13804 l(' NULL;');
13805 END IF;
13806 l(' END LOOP;');
13807 l('');
13808
13809 l(' FOR I IN 1..p_party_site_list.COUNT LOOP');
13810 FIRST := TRUE;
13811 FOR SECATTRS IN (
13812 SELECT ATTRIBUTE_NAME
13813 FROM HZ_TRANS_ATTRIBUTES_VL a,
13814 HZ_MATCH_RULE_SECONDARY s
13815 WHERE s.match_rule_id = p_rule_id
13816 AND a.ENTITY_NAME = 'PARTY_SITES'
13817 AND s.attribute_id = a.attribute_id)
13818 LOOP
13819 IF FIRST THEN
13820 l(' IF p_party_site_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13821 FIRST := FALSE;
13822 ELSE
13823 l(' OR p_party_site_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13824 END IF;
13825 END LOOP;
13826 IF NOT FIRST THEN
13827 l(' THEN');
13828 l(' x_secondary := TRUE;');
13829 l(' END IF;');
13830 l(' EXIT WHEN x_secondary;');
13831 ELSE
13832 l(' NULL;');
13833 END IF;
13834 l(' END LOOP;');
13835
13836 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
13837 FIRST := TRUE;
13838 FOR SECATTRS IN (
13839 SELECT ATTRIBUTE_NAME
13840 FROM HZ_TRANS_ATTRIBUTES_VL a,
13841 HZ_MATCH_RULE_SECONDARY s
13842 WHERE s.match_rule_id = p_rule_id
13843 AND a.ENTITY_NAME = 'CONTACT_POINTS'
13844 AND s.attribute_id = a.attribute_id)
13845 LOOP
13846 IF FIRST THEN
13847 l(' IF p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13848 FIRST := FALSE;
13849 ELSE
13850 l(' OR p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13851 END IF;
13852 END LOOP;
13853
13854 IF NOT FIRST THEN
13855 l(' THEN');
13856 l(' x_secondary := TRUE;');
13857 l(' END IF;');
13858 l(' EXIT WHEN x_secondary;');
13859 ELSE
13860 l(' NULL;');
13861 END IF;
13862 l(' END LOOP;');
13863 l('EXCEPTION');
13864 l(' WHEN OTHERS THEN');
13865 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
13866 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_party_site_cond'');');
13867 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
13868 l(' FND_MSG_PUB.ADD;');
13869 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13870 l(' END check_party_site_cond;');
13871 l('');
13872
13873 l('/************************************************');
13874 l(' This procedure checks if the input search condition ');
13875 l(' has contact criteria. ');
13876 l('************************************************/');
13877
13878 l('');
13879 l('PROCEDURE check_contact_cond(');
13880 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
13881 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
13882 l(' x_secondary OUT BOOLEAN,');
13883 l(' x_primary OUT BOOLEAN');
13884 l(') IS');
13885
13886 l(' BEGIN');
13887 l(' x_primary:= FALSE;');
13888 l(' x_secondary:= FALSE;');
13889
13890
13891 l(' FOR I IN 1..p_contact_list.COUNT LOOP');
13892 FIRST := TRUE;
13893 FOR PRIMATTRS IN (
13894 SELECT ATTRIBUTE_NAME
13895 FROM HZ_TRANS_ATTRIBUTES_VL a,
13896 HZ_MATCH_RULE_PRIMARY p
13897 WHERE p.match_rule_id = p_rule_id
13898 AND a.ENTITY_NAME = 'CONTACTS'
13899 AND p.attribute_id = a.attribute_id)
13900 LOOP
13901 IF FIRST THEN
13902 l(' IF p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13903 FIRST := FALSE;
13904 ELSE
13905 l(' OR p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13906 END IF;
13907 END LOOP;
13908 IF NOT FIRST THEN
13909 l(' THEN');
13910 l(' x_primary := TRUE;');
13911 l(' END IF;');
13912 l(' EXIT WHEN x_primary;');
13913 ELSE
13914 l(' NULL;');
13915 END IF;
13916 l(' END LOOP;');
13917 l('');
13918 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
13919 FIRST := TRUE;
13920 FOR PRIMATTRS IN (
13921 SELECT ATTRIBUTE_NAME
13922 FROM HZ_TRANS_ATTRIBUTES_VL a,
13923 HZ_MATCH_RULE_PRIMARY p
13924 WHERE p.match_rule_id = p_rule_id
13925 AND a.ENTITY_NAME = 'CONTACT_POINTS'
13926 AND p.attribute_id = a.attribute_id)
13927 LOOP
13928 IF FIRST THEN
13929 l(' IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13930 FIRST := FALSE;
13931 ELSE
13932 l(' OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13933 END IF;
13934 END LOOP;
13935 IF NOT FIRST THEN
13936 l(' THEN');
13937 l(' x_primary := TRUE;');
13938 l(' END IF;');
13939 l(' EXIT WHEN x_primary;');
13940 ELSE
13941 l(' NULL;');
13942 END IF;
13943 l(' END LOOP;');
13944
13945 l('');
13946 l(' FOR I IN 1..p_contact_list.COUNT LOOP');
13947 FIRST := TRUE;
13948 FOR SECATTRS IN (
13949 SELECT ATTRIBUTE_NAME
13950 FROM HZ_TRANS_ATTRIBUTES_VL a,
13951 HZ_MATCH_RULE_SECONDARY s
13952 WHERE s.match_rule_id = p_rule_id
13953 AND a.ENTITY_NAME = 'CONTACTS'
13954 AND s.attribute_id = a.attribute_id)
13955 LOOP
13956 IF FIRST THEN
13957 l(' IF p_contact_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13958 FIRST := FALSE;
13959 ELSE
13960 l(' OR p_contact_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13961 END IF;
13962 END LOOP;
13963 IF NOT FIRST THEN
13964 l(' THEN');
13965 l(' x_secondary := TRUE;');
13966 l(' END IF;');
13967 l(' EXIT WHEN x_secondary;');
13968 ELSE
13969 l(' NULL;');
13970 END IF;
13971 l(' END LOOP;');
13972 l('');
13973
13974 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
13975 FIRST := TRUE;
13976 FOR SECATTRS IN (
13977 SELECT ATTRIBUTE_NAME
13978 FROM HZ_TRANS_ATTRIBUTES_VL a,
13979 HZ_MATCH_RULE_SECONDARY s
13980 WHERE s.match_rule_id = p_rule_id
13981 AND a.ENTITY_NAME = 'CONTACT_POINTS'
13982 AND s.attribute_id = a.attribute_id)
13983 LOOP
13984 IF FIRST THEN
13985 l(' IF p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13986 FIRST := FALSE;
13987 ELSE
13988 l(' OR p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13989 END IF;
13990 END LOOP;
13991 IF NOT FIRST THEN
13992 l(' THEN');
13993 l(' x_secondary := TRUE;');
13994 l(' END IF;');
13995 l(' EXIT WHEN x_secondary;');
13996 ELSE
13997 l(' NULL;');
13998 END IF;
13999 l(' END LOOP;');
14000
14001 l('EXCEPTION');
14002 l(' WHEN OTHERS THEN');
14003 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14004 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_contact_cond'');');
14005 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14006 l(' FND_MSG_PUB.ADD;');
14007 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14008 l(' END check_contact_cond;');
14009 l('');
14010
14011 l('/************************************************');
14012 l(' This procedure checks if the input search condition ');
14013 l(' has valid contact point criteria. ');
14014 l('************************************************/');
14015
14016 l('');
14017 l('PROCEDURE check_contact_point_cond(');
14018 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
14019 l(' x_secondary OUT BOOLEAN,');
14020 l(' x_primary OUT BOOLEAN');
14021 l(') IS');
14022 l(' BEGIN');
14023 l(' x_primary:= FALSE;');
14024 l(' x_secondary:= FALSE;');
14025 l('');
14026 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
14027 l(' IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN ');
14028 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_CONTACT_POINT_TYPE'');');
14029 l(' FND_MSG_PUB.ADD;');
14030 l(' RAISE FND_API.G_EXC_ERROR;');
14031 l(' END IF;');
14032 l(' END LOOP;');
14033 l('');
14034 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
14035 FIRST := TRUE;
14036 FOR PRIMATTRS IN (
14037 SELECT ATTRIBUTE_NAME
14038 FROM HZ_TRANS_ATTRIBUTES_VL a,
14039 HZ_MATCH_RULE_PRIMARY p
14040 WHERE p.match_rule_id = p_rule_id
14041 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14042 AND p.attribute_id = a.attribute_id)
14043 LOOP
14044 IF FIRST THEN
14045 l(' IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14046 FIRST := FALSE;
14047 ELSE
14048 l(' OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14049 END IF;
14050 END LOOP;
14051 IF NOT FIRST THEN
14052 l(' THEN');
14053 l(' x_primary := TRUE;');
14054 l(' END IF;');
14055 l(' EXIT WHEN x_primary;');
14056 ELSE
14057 l(' NULL;');
14058 END IF;
14059 l(' END LOOP;');
14060
14061 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
14062 FIRST := TRUE;
14063 FOR SECATTRS IN (
14064 SELECT ATTRIBUTE_NAME
14065 FROM HZ_TRANS_ATTRIBUTES_VL a,
14066 HZ_MATCH_RULE_SECONDARY s
14067 WHERE s.match_rule_id = p_rule_id
14068 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14069 AND s.attribute_id = a.attribute_id)
14070 LOOP
14071 IF FIRST THEN
14072 l(' IF p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14073 FIRST := FALSE;
14074 ELSE
14075 l(' OR p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14076 END IF;
14077 END LOOP;
14078
14079 IF NOT FIRST THEN
14080 l(' THEN');
14081 l(' x_secondary := TRUE;');
14082 l(' END IF;');
14083 l(' EXIT WHEN x_secondary;');
14084 ELSE
14085 l(' NULL;');
14086 END IF;
14087 l(' END LOOP;');
14088 l('EXCEPTION');
14089 l(' WHEN OTHERS THEN');
14090 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14091 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_contact_point_cond'');');
14092 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14093 l(' FND_MSG_PUB.ADD;');
14094 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14095 l(' END check_contact_point_cond;');
14096 l('');
14097
14098
14099 END;
14100
14101 PROCEDURE generate_custom_code (
14102 p_rule_id NUMBER,
14103 p_record VARCHAR2,
14104 p_entity VARCHAR2,
14105 p_record_id VARCHAR2) IS
14106
14107 BEGIN
14108
14109 ldbg_s('Inside calling procedure - generate_custom_code');
14110
14111 FOR CUSTATTRS IN (
14112 SELECT distinct ATTRIBUTE_NAME, CUSTOM_ATTRIBUTE_PROCEDURE
14113 FROM HZ_TRANS_ATTRIBUTES_VL a,
14114 HZ_MATCH_RULE_PRIMARY p
14115 WHERE p.match_rule_id = p_rule_id
14116 AND p.attribute_id = a.attribute_id
14117 AND a.ENTITY_NAME = p_entity
14118 AND (a.SOURCE_TABLE = 'CUSTOM'
14119 OR a.CUSTOM_ATTRIBUTE_PROCEDURE IS NOT NULL)
14120 UNION
14121 SELECT distinct ATTRIBUTE_NAME, CUSTOM_ATTRIBUTE_PROCEDURE
14122 FROM HZ_TRANS_ATTRIBUTES_VL a,
14123 HZ_MATCH_RULE_SECONDARY s
14124 WHERE s.match_rule_id = p_rule_id
14125 AND s.attribute_id = a.attribute_id
14126 AND a.ENTITY_NAME = p_entity
14127 AND (a.SOURCE_TABLE = 'CUSTOM'
14128 OR a.CUSTOM_ATTRIBUTE_PROCEDURE IS NOT NULL)) LOOP
14129
14130 l(p_record||'.'||CUSTATTRS.ATTRIBUTE_NAME||':=');
14131 l(' '||CUSTATTRS.CUSTOM_ATTRIBUTE_PROCEDURE||'('||
14132 p_record_id||' , '''||p_entity||''','''||CUSTATTRS.ATTRIBUTE_NAME||''');');
14133 END LOOP;
14134 END;
14135
14136 -- Fix for Bug 4734661. Modified to add the p_called_from parameter.
14137 PROCEDURE generate_acquire_proc (
14138 p_rule_id NUMBER
14139 ,p_called_from VARCHAR2) IS
14140
14141 l_num_attrs NUMBER;
14142 FIRST BOOLEAN;
14143 BEGIN
14144 l('');
14145 l('/************************************************');
14146 l(' This procedure retrieves the match rule attributes into ');
14147 l(' the search record structures');
14148 l('************************************************/');
14149 l('');
14150 l('PROCEDURE get_party_for_search (');
14151 l(' p_party_id IN NUMBER,');
14152 l(' x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
14153 l(' x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
14154 l(' x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
14155 l(' x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
14156 l(') IS');
14157 l(' l_party_id NUMBER;');
14158 l(' l_party_site_ids HZ_PARTY_SEARCH.IDList;');
14159 l(' l_contact_ids HZ_PARTY_SEARCH.IDList;');
14160 l(' l_contact_pt_ids HZ_PARTY_SEARCH.IDList;');
14161 l(' ps NUMBER :=1;');
14162 l(' cpt NUMBER :=1;');
14163 l(' ct NUMBER :=1;');
14164 l(' l_use_contact_info varchar2(1);');--bug 5169483
14165 l('BEGIN');
14166 l('');
14167
14168 --bug 5169483
14169 l(' l_use_contact_info := ''Y'';');
14170 l(' IF nvl(FND_PROFILE.VALUE(''HZ_DQM_REL_PARTY_MATCH''),''N'')=''Y'' THEN');
14171 l(' l_use_contact_info := ''N'';');
14172 l(' END IF;');
14173 --bug 5169483
14174
14175 -- Query number of party attributes
14176 SELECT COUNT(*) INTO l_num_attrs
14177 FROM (
14178 SELECT a.attribute_id
14179 FROM HZ_TRANS_ATTRIBUTES_VL a,
14180 HZ_MATCH_RULE_PRIMARY p
14181 WHERE p.match_rule_id = p_rule_id
14182 AND p.attribute_id = a.attribute_id
14183 AND a.ENTITY_NAME = 'PARTY'
14184
14185 UNION
14186
14187 SELECT a.attribute_id
14188 FROM HZ_TRANS_ATTRIBUTES_VL a,
14189 HZ_MATCH_RULE_SECONDARY s
14190 WHERE s.match_rule_id = p_rule_id
14191 AND s.attribute_id = a.attribute_id
14192 AND a.ENTITY_NAME = 'PARTY'
14193 );
14194
14195 IF l_num_attrs > 0 THEN
14196 l(' l_party_id := p_party_id;');
14197 ELSE
14198 l(' l_party_id := null;');
14199 END IF;
14200
14201 SELECT COUNT(*) INTO l_num_attrs
14202 FROM (
14203 SELECT a.attribute_id
14204 FROM HZ_TRANS_ATTRIBUTES_VL a,
14205 HZ_MATCH_RULE_PRIMARY p
14206 WHERE p.match_rule_id = p_rule_id
14207 AND p.attribute_id = a.attribute_id
14208 AND a.ENTITY_NAME = 'PARTY_SITES'
14209
14210 UNION
14211
14212 SELECT a.attribute_id
14213 FROM HZ_TRANS_ATTRIBUTES_VL a,
14214 HZ_MATCH_RULE_SECONDARY s
14215 WHERE s.match_rule_id = p_rule_id
14216 AND s.attribute_id = a.attribute_id
14217 AND a.ENTITY_NAME = 'PARTY_SITES'
14218 );
14219
14220
14221 IF l_num_attrs > 0 THEN
14222
14223 l(' FOR PARTY_SITES IN (');
14224 l(' SELECT party_site_id FROM ('); ---Code Change for Match Rule Set
14225 l(' SELECT party_site_id,identifying_address_flag'); ---Code Change for Match Rule Set
14226 l(' FROM HZ_PARTY_SITES');
14227 l(' WHERE party_id = p_party_id');
14228 l(' AND (status is null OR status = ''A'') ');
14229 l(' AND identifying_address_flag=''Y''');
14230 l(' UNION');
14231 l('');
14232 l(' SELECT party_site_id,NVL(identifying_address_flag,''N'') identifying_address_flag'); ---Code Change for Match Rule Set
14233 l(' FROM HZ_PARTY_SITES');
14234 l(' WHERE party_id = p_party_id');
14235 l(' AND (status is null OR status = ''A'') ');
14236 l(' AND (identifying_address_flag IS NULL OR identifying_address_flag = ''N'')');
14237 -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14238 IF p_called_from IS NULL THEN
14239 l(' AND ROWNUM<6');
14240 END IF;
14241 l(' UNION');
14242 l('');
14243 l(' SELECT party_site_id,NVL(identifying_address_flag,''N'') identifying_address_flag');
14244 l(' FROM HZ_PARTY_SITES');
14245 l(' WHERE (status is null OR status = ''A'') ');
14246 l(' AND party_id in (');
14247 l(' SELECT party_id');
14248 l(' FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS');
14249 l(' WHERE HZ_RELATIONSHIPS.object_id = p_party_id');
14250 l(' AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14251 l(' AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14252 l(' AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14253 l(' and l_use_contact_info = ''Y''');--bug 5169483
14254 l(' ) ');
14255 -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14256 IF p_called_from IS NULL THEN
14257 l(' AND ROWNUM<6');
14258 END IF;
14259 l(') order by identifying_address_flag desc'); ---Code Change for Match Rule Set
14260 l(' ) LOOP');
14261 l(' l_party_site_ids(ps) := PARTY_SITES.party_site_id;');
14262 l(' ps:=ps+1;');
14263 l(' END LOOP;');
14264 END IF;
14265
14266 -- Query number of contact attributes
14267 SELECT COUNT(*) INTO l_num_attrs
14268 FROM (
14269 SELECT a.attribute_id
14270 FROM HZ_TRANS_ATTRIBUTES_VL a,
14271 HZ_MATCH_RULE_PRIMARY p
14272 WHERE p.match_rule_id = p_rule_id
14273 AND p.attribute_id = a.attribute_id
14274 AND a.ENTITY_NAME = 'CONTACTS'
14275
14276 UNION
14277
14278 SELECT a.attribute_id
14279 FROM HZ_TRANS_ATTRIBUTES_VL a,
14280 HZ_MATCH_RULE_SECONDARY s
14281 WHERE s.match_rule_id = p_rule_id
14282 AND s.attribute_id = a.attribute_id
14283 AND a.ENTITY_NAME = 'CONTACTS'
14284 );
14285
14286 IF l_num_attrs > 0 THEN
14287 l(' FOR CONTACTS IN (');
14288 l(' SELECT org_contact_id');
14289 l(' FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS');
14290 l(' WHERE HZ_RELATIONSHIPS.object_id = p_party_id');
14291 l(' AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14292 l(' AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14293 l(' AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = ''F''');
14294 l(' AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14295 -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14296 IF p_called_from IS NULL THEN
14297 l(' AND ROWNUM<6 ');
14298 END IF;
14299 l(' ) LOOP');
14300 l(' l_contact_ids(ct) := CONTACTS.org_contact_id;');
14301 l(' ct := ct+1;');
14302 l(' END LOOP;');
14303 END IF;
14304
14305 -- Query number of contact point attributes
14306 SELECT COUNT(*) INTO l_num_attrs
14307 FROM (
14308 SELECT a.attribute_id
14309 FROM HZ_TRANS_ATTRIBUTES_VL a,
14310 HZ_MATCH_RULE_PRIMARY p
14311 WHERE p.match_rule_id = p_rule_id
14312 AND p.attribute_id = a.attribute_id
14313 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14314
14315 UNION
14316
14317 SELECT a.attribute_id
14318 FROM HZ_TRANS_ATTRIBUTES_VL a,
14319 HZ_MATCH_RULE_SECONDARY s
14320 WHERE s.match_rule_id = p_rule_id
14321 AND s.attribute_id = a.attribute_id
14322 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14323 );
14324
14325 IF l_num_attrs > 0 THEN
14326 l(' FOR CONTACT_POINTS IN (');
14327 l(' SELECT CONTACT_POINT_ID');
14328 l(' FROM HZ_CONTACT_POINTS ');
14329 l(' WHERE PRIMARY_FLAG = ''Y''');
14330 l(' AND owner_table_name = ''HZ_PARTIES''');
14331 l(' AND owner_table_id = p_party_id');
14332 l('');
14333 l(' UNION');
14334 l('');
14335 l(' SELECT CONTACT_POINT_ID');
14336 l(' FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS ');--bug 4873802
14337 l(' WHERE PRIMARY_FLAG = ''Y''');
14338 l(' AND owner_table_name = ''HZ_PARTIES''');
14339 l(' AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id');--bug 4873802
14340 l(' AND HZ_RELATIONSHIPS.object_id = p_party_id');
14341 l(' AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14342 l(' AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14343 l(' AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14344 l(' and l_use_contact_info = ''Y''');--bug 5169483
14345 -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14346 IF p_called_from IS NULL THEN
14347 l(' AND ROWNUM<6');
14348 END IF;
14349 l(' UNION');
14350 l('');
14351 l(' SELECT CONTACT_POINT_ID');
14352 l(' FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES ');--bug 4873802
14353 l(' WHERE PRIMARY_FLAG = ''Y''');
14354 l(' AND owner_table_name = ''HZ_PARTY_SITES''');
14355 l(' AND owner_table_id = party_site_id ');--bug 4873802
14356 l(' AND PARTY_ID = p_party_id ');
14357 l(' AND IDENTIFYING_ADDRESS_FLAG = ''Y'') LOOP');
14358 l(' l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;');
14359 l(' cpt := cpt+1;');
14360 l(' END LOOP;');
14361 END IF;
14362
14363 l(' get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,');
14364 l(' x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);');
14365
14366 l('EXCEPTION');
14367 l(' WHEN FND_API.G_EXC_ERROR THEN');
14368 l(' RAISE FND_API.G_EXC_ERROR;');
14369 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
14370 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14371 l(' WHEN OTHERS THEN');
14372 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14373 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''get_party_for_search'');');
14374 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14375 l(' FND_MSG_PUB.ADD;');
14376 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14377 l('END get_party_for_search;');
14378 l('');
14379
14380 l('PROCEDURE get_search_criteria (');
14381 l(' p_party_id IN NUMBER,');
14382 l(' p_party_site_ids IN HZ_PARTY_SEARCH.IDList,');
14383 l(' p_contact_ids IN HZ_PARTY_SEARCH.IDList,');
14384 l(' p_contact_pt_ids IN HZ_PARTY_SEARCH.IDList,');
14385 l(' x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
14386 l(' x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
14387 l(' x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
14388 l(' x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
14389 l(') IS');
14390 l('BEGIN');
14391 l('');
14392 ldbg_s('Inside Calling Procedure - get_search_criteria');
14393
14394 -- Query number of party attributes
14395 SELECT COUNT(*) INTO l_num_attrs
14396 FROM (
14397 SELECT a.attribute_id
14398 FROM HZ_TRANS_ATTRIBUTES_VL a,
14399 HZ_MATCH_RULE_PRIMARY p
14400 WHERE p.match_rule_id = p_rule_id
14401 AND p.attribute_id = a.attribute_id
14402 AND a.ENTITY_NAME = 'PARTY'
14403
14404 UNION
14405
14406 SELECT a.attribute_id
14407 FROM HZ_TRANS_ATTRIBUTES_VL a,
14408 HZ_MATCH_RULE_SECONDARY s
14409 WHERE s.match_rule_id = p_rule_id
14410 AND s.attribute_id = a.attribute_id
14411 AND a.ENTITY_NAME = 'PARTY'
14412 );
14413
14414 IF l_num_attrs > 0 THEN
14415 l(' IF p_party_id IS NOT NULL THEN');
14416 ldbg_s('Before Calling Procedure - get_party_rec');
14417 l(' get_party_rec(p_party_id, x_party_search_rec);');
14418 l(' END IF;');
14419 END IF;
14420
14421 SELECT COUNT(*) INTO l_num_attrs
14422 FROM (
14423 SELECT a.attribute_id
14424 FROM HZ_TRANS_ATTRIBUTES_VL a,
14425 HZ_MATCH_RULE_PRIMARY p
14426 WHERE p.match_rule_id = p_rule_id
14427 AND p.attribute_id = a.attribute_id
14428 AND a.ENTITY_NAME = 'PARTY_SITES'
14429
14430 UNION
14431
14432 SELECT a.attribute_id
14433 FROM HZ_TRANS_ATTRIBUTES_VL a,
14434 HZ_MATCH_RULE_SECONDARY s
14435 WHERE s.match_rule_id = p_rule_id
14436 AND s.attribute_id = a.attribute_id
14437 AND a.ENTITY_NAME = 'PARTY_SITES'
14438 );
14439
14440
14441 IF l_num_attrs > 0 THEN
14442 l(' IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN');
14443 ldbg_s('Before Calling Procedure - get_party_site_rec');
14444 l(' get_party_site_rec(p_party_site_ids, x_party_site_list);');
14445 l(' END IF;');
14446 END IF;
14447
14448 -- Query number of contact attributes
14449 SELECT COUNT(*) INTO l_num_attrs
14450 FROM (
14451 SELECT a.attribute_id
14452 FROM HZ_TRANS_ATTRIBUTES_VL a,
14453 HZ_MATCH_RULE_PRIMARY p
14454 WHERE p.match_rule_id = p_rule_id
14455 AND p.attribute_id = a.attribute_id
14456 AND a.ENTITY_NAME = 'CONTACTS'
14457
14458 UNION
14459
14460 SELECT a.attribute_id
14461 FROM HZ_TRANS_ATTRIBUTES_VL a,
14462 HZ_MATCH_RULE_SECONDARY s
14463 WHERE s.match_rule_id = p_rule_id
14464 AND s.attribute_id = a.attribute_id
14465 AND a.ENTITY_NAME = 'CONTACTS'
14466 );
14467
14468 IF l_num_attrs > 0 THEN
14469 l(' IF p_contact_ids IS NOT NULL AND p_contact_ids.COUNT>0 THEN');
14470 ldbg_s('Before Calling Procedure - get_contact_rec');
14471 l(' get_contact_rec(p_contact_ids, x_contact_list);');
14472 l(' END IF;');
14473 END IF;
14474
14475 -- Query number of contact point attributes
14476 SELECT COUNT(*) INTO l_num_attrs
14477 FROM (
14478 SELECT a.attribute_id
14479 FROM HZ_TRANS_ATTRIBUTES_VL a,
14480 HZ_MATCH_RULE_PRIMARY p
14481 WHERE p.match_rule_id = p_rule_id
14482 AND p.attribute_id = a.attribute_id
14483 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14484
14485 UNION
14486
14487 SELECT a.attribute_id
14488 FROM HZ_TRANS_ATTRIBUTES_VL a,
14489 HZ_MATCH_RULE_SECONDARY s
14490 WHERE s.match_rule_id = p_rule_id
14491 AND s.attribute_id = a.attribute_id
14492 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14493 );
14494
14495 IF l_num_attrs > 0 THEN
14496 l(' IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN');
14497 ldbg_s('Before Calling Procedure - get_contact_point_rec');
14498 l(' get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);');
14499 l(' END IF;');
14500 END IF;
14501 l('EXCEPTION');
14502 l(' WHEN FND_API.G_EXC_ERROR THEN');
14503 l(' RAISE FND_API.G_EXC_ERROR;');
14504 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
14505 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14506 l(' WHEN OTHERS THEN');
14507 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14508 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''get_search_criteria'');');
14509 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14510 l(' FND_MSG_PUB.ADD;');
14511 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14512 l('END get_search_criteria;');
14513 l('');
14514
14515 l('');
14516 l('/************************************************');
14517 l(' This procedure retrieves the match rule party attributes into ');
14518 l(' the party search record structure ');
14519 l('************************************************/');
14520 l('');
14521 l('PROCEDURE get_party_rec (');
14522 l(' p_party_id IN NUMBER,');
14523 l(' x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type');
14524 l(') IS');
14525 l(' l_party_type VARCHAR2(255);');
14526 l('BEGIN');
14527 l('');
14528 ldbg_s('Inside calling procedure - get_party_rec');
14529 l(' SELECT PARTY_TYPE INTO l_party_type');
14530 l(' FROM HZ_PARTIES');
14531 l(' WHERE PARTY_ID = p_party_id;');
14532 l('');
14533 ldbg_sv('l_party_type is - ','l_party_type' ) ;
14534 l(' IF l_party_type = ''ORGANIZATION'' THEN');
14535
14536 SELECT COUNT(*) INTO l_num_attrs
14537 FROM (
14538 SELECT a.attribute_id
14539 FROM HZ_TRANS_ATTRIBUTES_VL a,
14540 HZ_MATCH_RULE_PRIMARY p
14541 WHERE p.match_rule_id = p_rule_id
14542 AND p.attribute_id = a.attribute_id
14543 AND a.ENTITY_NAME = 'PARTY'
14544 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14545 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14546 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14547 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14548 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14549 UNION
14550 SELECT a.attribute_id
14551 FROM HZ_TRANS_ATTRIBUTES_VL a,
14552 HZ_MATCH_RULE_SECONDARY s
14553 WHERE s.match_rule_id = p_rule_id
14554 AND s.attribute_id = a.attribute_id
14555 AND a.ENTITY_NAME = 'PARTY'
14556 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14557 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14558 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14559 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14560 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14561 );
14562
14563 IF l_num_attrs>0 THEN
14564 l(' SELECT ');
14565 FIRST := TRUE;
14566 FOR ATTRS IN (
14567 SELECT distinct a.ATTRIBUTE_NAME, decode(a.SOURCE_TABLE, 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES', 'HZ_ORGANIZATION_PROFILES', 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES', 'HZ_ORGANIZATION_PROFILES', a.SOURCE_TABLE) SOURCE_TABLE
14568 FROM HZ_TRANS_ATTRIBUTES_VL a,
14569 HZ_MATCH_RULE_PRIMARY p
14570 WHERE p.match_rule_id = p_rule_id
14571 AND p.attribute_id = a.attribute_id
14572 AND a.ENTITY_NAME = 'PARTY'
14573 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14574 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14575 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14576 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14577 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14578 UNION
14579 SELECT distinct a.ATTRIBUTE_NAME, decode(a.SOURCE_TABLE, 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES', 'HZ_ORGANIZATION_PROFILES', 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES', 'HZ_ORGANIZATION_PROFILES', a.SOURCE_TABLE) SOURCE_TABLE
14580 FROM HZ_TRANS_ATTRIBUTES_VL a,
14581 HZ_MATCH_RULE_SECONDARY s
14582 WHERE s.match_rule_id = p_rule_id
14583 AND s.attribute_id = a.attribute_id
14584 AND a.ENTITY_NAME = 'PARTY'
14585 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14586 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14587 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14588 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14589 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14590
14591 IF FIRST THEN
14592 l(' translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14593 FIRST := FALSE;
14594 ELSE
14595 l(' ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14596 END IF;
14597 END LOOP;
14598
14599 l(' INTO ');
14600 FIRST := TRUE;
14601 FOR ATTRS IN (
14602 SELECT distinct a.ATTRIBUTE_NAME
14603 FROM HZ_TRANS_ATTRIBUTES_VL a,
14604 HZ_MATCH_RULE_PRIMARY p
14605 WHERE p.match_rule_id = p_rule_id
14606 AND p.attribute_id = a.attribute_id
14607 AND a.ENTITY_NAME = 'PARTY'
14608 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14609 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14610 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14611 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14612 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14613 UNION
14614 SELECT distinct a.ATTRIBUTE_NAME
14615 FROM HZ_TRANS_ATTRIBUTES_VL a,
14616 HZ_MATCH_RULE_SECONDARY s
14617 WHERE s.match_rule_id = p_rule_id
14618 AND s.attribute_id = a.attribute_id
14619 AND a.ENTITY_NAME = 'PARTY'
14620 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14621 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14622 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14623 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14624 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14625
14626
14627 IF FIRST THEN
14628 l(' x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14629 FIRST := FALSE;
14630 ELSE
14631 l(' ,x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14632 END IF;
14633 END LOOP;
14634
14635 l(' FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES');
14636 l(' WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id');
14637 l(' AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL');
14638 l(' AND HZ_PARTIES.party_id = p_party_id;');
14639 ELSE
14640 l(' NULL;');
14641 END IF;
14642 l(' ELSIF l_party_type = ''PERSON'' THEN');
14643
14644 SELECT COUNT(*) INTO l_num_attrs
14645 FROM (
14646 SELECT a.attribute_id
14647 FROM HZ_TRANS_ATTRIBUTES_VL a,
14648 HZ_MATCH_RULE_PRIMARY p
14649 WHERE p.match_rule_id = p_rule_id
14650 AND p.attribute_id = a.attribute_id
14651 AND a.ENTITY_NAME = 'PARTY'
14652 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14653 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14654 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14655 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14656 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14657 UNION
14658 SELECT a.attribute_id
14659 FROM HZ_TRANS_ATTRIBUTES_VL a,
14660 HZ_MATCH_RULE_SECONDARY s
14661 WHERE s.match_rule_id = p_rule_id
14662 AND s.attribute_id = a.attribute_id
14663 AND a.ENTITY_NAME = 'PARTY'
14664 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14665 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14666 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14667 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14668 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14669 );
14670
14671 IF l_num_attrs>0 THEN
14672 l(' SELECT ');
14673 FIRST := TRUE;
14674 FOR ATTRS IN (
14675 SELECT distinct a.ATTRIBUTE_NAME, decode(a.SOURCE_TABLE, 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES', 'HZ_PERSON_PROFILES','HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES', 'HZ_PERSON_PROFILES', a.SOURCE_TABLE) SOURCE_TABLE
14676 FROM HZ_TRANS_ATTRIBUTES_VL a,
14677 HZ_MATCH_RULE_PRIMARY p
14678 WHERE p.match_rule_id = p_rule_id
14679 AND p.attribute_id = a.attribute_id
14680 AND a.ENTITY_NAME = 'PARTY'
14681 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14682 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14683 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14684 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14685 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14686 UNION
14687 SELECT distinct a.ATTRIBUTE_NAME, decode(a.SOURCE_TABLE, 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES', 'HZ_PERSON_PROFILES', 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES', 'HZ_PERSON_PROFILES', a.SOURCE_TABLE) SOURCE_TABLE
14688 FROM HZ_TRANS_ATTRIBUTES_VL a,
14689 HZ_MATCH_RULE_SECONDARY s
14690 WHERE s.match_rule_id = p_rule_id
14691 AND s.attribute_id = a.attribute_id
14692 AND a.ENTITY_NAME = 'PARTY'
14693 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14694 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14695 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
14696 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES')
14697 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14698
14699 IF FIRST THEN
14700 l(' translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14701 FIRST := FALSE;
14702 ELSE
14703 l(' ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14704 END IF;
14705 END LOOP;
14706
14707 l(' INTO ');
14708 FIRST := TRUE;
14709 FOR ATTRS IN (
14710 SELECT distinct a.ATTRIBUTE_NAME
14711 FROM HZ_TRANS_ATTRIBUTES_VL a,
14712 HZ_MATCH_RULE_PRIMARY p
14713 WHERE p.match_rule_id = p_rule_id
14714 AND p.attribute_id = a.attribute_id
14715 AND a.ENTITY_NAME = 'PARTY'
14716 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14717 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14718 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
14719 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES')
14720 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14721 UNION
14722 SELECT distinct a.ATTRIBUTE_NAME
14723 FROM HZ_TRANS_ATTRIBUTES_VL a,
14724 HZ_MATCH_RULE_SECONDARY s
14725 WHERE s.match_rule_id = p_rule_id
14726 AND s.attribute_id = a.attribute_id
14727 AND a.ENTITY_NAME = 'PARTY'
14728 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14729 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14730 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
14731 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES')
14732 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14733
14734 IF FIRST THEN
14735 l(' x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14736 FIRST := FALSE;
14737 ELSE
14738 l(' ,x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14739 END IF;
14740 END LOOP;
14741
14742 l(' FROM HZ_PARTIES, HZ_PERSON_PROFILES');
14743 l(' WHERE HZ_PARTIES.party_id = HZ_PERSON_PROFILES.party_id');
14744 l(' AND HZ_PERSON_PROFILES.effective_end_date is NULL');
14745 l(' AND HZ_PARTIES.party_id = p_party_id;');
14746 ELSE
14747 l(' NULL;');
14748 END IF;
14749 l(' END IF;');
14750 l(' x_party_search_rec.PARTY_TYPE := l_party_type;');
14751 generate_custom_code(p_rule_id, ' x_party_search_rec','PARTY','p_party_id');
14752 l('');
14753 l('EXCEPTION');
14754 l(' WHEN OTHERS THEN');
14755 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
14756 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''get_party_rec'');');
14757 l(' FND_MESSAGE.SET_TOKEN(''PARTY_ID'',p_party_id);');
14758 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14759 l(' FND_MSG_PUB.ADD;');
14760 l(' RAISE FND_API.G_EXC_ERROR;');
14761 l('END get_party_rec;');
14762 l('');
14763 l('/************************************************');
14764 l(' This procedure retrieves the match rule party site attributes into ');
14765 l(' the party site search record structure ');
14766 l('************************************************/');
14767 l('');
14768 l('PROCEDURE get_party_site_rec (');
14769 l(' p_party_site_ids IN HZ_PARTY_SEARCH.IDList,');
14770 l(' x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list');
14771 l(') IS');
14772 l(' CURSOR c_party_sites(cp_party_site_id NUMBER) IS');
14773 l(' SELECT party_site_id');
14774 FOR ATTRS IN (
14775 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14776 FROM HZ_TRANS_ATTRIBUTES_VL a,
14777 HZ_MATCH_RULE_PRIMARY p
14778 WHERE p.match_rule_id = p_rule_id
14779 AND p.attribute_id = a.attribute_id
14780 AND a.ENTITY_NAME = 'PARTY_SITES'
14781 AND a.SOURCE_TABLE <> 'CUSTOM'
14782 UNION
14783 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14784 FROM HZ_TRANS_ATTRIBUTES_VL a,
14785 HZ_MATCH_RULE_SECONDARY s
14786 WHERE s.match_rule_id = p_rule_id
14787 AND s.attribute_id = a.attribute_id
14788 AND a.ENTITY_NAME = 'PARTY_SITES'
14789 AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14790
14791 l(' ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14792 END LOOP;
14793 l(' FROM HZ_PARTY_SITES, HZ_LOCATIONS');
14794 l(' WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id');
14795 l(' AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;');
14796 l('');
14797 l(' I NUMBER;');
14798 l(' J NUMBER:=1;');
14799 l(' l_party_site_id NUMBER;');
14800 l('');
14801 l('BEGIN');
14802 l('');
14803 ldbg_s('Inside calling procedure - get_party_site_rec');
14804 l(' FOR I IN 1..p_party_site_ids.COUNT LOOP');
14805 l(' l_party_site_id := p_party_site_ids(I);');
14806 l(' OPEN c_party_sites(p_party_site_ids(I));');
14807 l(' LOOP');
14808 l(' FETCH c_party_sites INTO');
14809 l(' l_party_site_id');
14810 FOR ATTRS IN (
14811 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14812 FROM HZ_TRANS_ATTRIBUTES_VL a,
14813 HZ_MATCH_RULE_PRIMARY p
14814 WHERE p.match_rule_id = p_rule_id
14815 AND p.attribute_id = a.attribute_id
14816 AND a.ENTITY_NAME = 'PARTY_SITES'
14817 AND a.SOURCE_TABLE <> 'CUSTOM'
14818
14819 UNION
14820
14821 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14822 FROM HZ_TRANS_ATTRIBUTES_VL a,
14823 HZ_MATCH_RULE_SECONDARY s
14824 WHERE s.match_rule_id = p_rule_id
14825 AND s.attribute_id = a.attribute_id
14826 AND a.ENTITY_NAME = 'PARTY_SITES'
14827 AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14828
14829 l(' ,x_party_site_list(J).'||ATTRS.ATTRIBUTE_NAME);
14830 END LOOP;
14831 l(' ;');
14832 l(' EXIT WHEN c_party_sites%NOTFOUND;');
14833 l('');
14834 generate_custom_code(p_rule_id, ' x_party_site_list(J)','PARTY_SITES','l_party_site_id')
14835 ;
14836 l(' J:=J+1;');
14837 l('');
14838 l(' END LOOP;');
14839 l(' CLOSE c_party_sites;');
14840 l(' END LOOP;');
14841 l('');
14842 l('EXCEPTION');
14843 l(' WHEN OTHERS THEN');
14844 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
14845 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''get_party_site_rec'');');
14846 l(' FND_MESSAGE.SET_TOKEN(''PARTY_ID'',l_party_site_id);');
14847 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14848 l(' FND_MSG_PUB.ADD;');
14849 l(' RAISE FND_API.G_EXC_ERROR;');
14850 l('END get_party_site_rec;');
14851 l('');
14852
14853 l('/************************************************');
14854 l(' This procedure retrieves the match rule contact attributes into ');
14855 l(' the contact search record structure ');
14856 l('************************************************/');
14857 l('');
14858 l('PROCEDURE get_contact_rec (');
14859 l(' p_contact_ids IN HZ_PARTY_SEARCH.IDList,');
14860 l(' x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list');
14861 l(') IS');
14862 l(' CURSOR c_contacts(cp_org_contact_id NUMBER) IS');
14863 l(' SELECT org_contact_id');
14864 FOR ATTRS IN (
14865 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14866 FROM HZ_TRANS_ATTRIBUTES_VL a,
14867 HZ_MATCH_RULE_PRIMARY p
14868 WHERE p.match_rule_id = p_rule_id
14869 AND p.attribute_id = a.attribute_id
14870 AND a.ENTITY_NAME = 'CONTACTS'
14871 AND a.SOURCE_TABLE <> 'CUSTOM'
14872 UNION
14873 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14874 FROM HZ_TRANS_ATTRIBUTES_VL a,
14875 HZ_MATCH_RULE_SECONDARY s
14876 WHERE s.match_rule_id = p_rule_id
14877 AND s.attribute_id = a.attribute_id
14878 AND a.ENTITY_NAME = 'CONTACTS'
14879 AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14880
14881 l(' ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14882 END LOOP;
14883 l(' FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES');
14884 l(' WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id');
14885 l(' AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14886 l(' AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14887 l(' AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = ''F''');
14888 l(' AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14889 l(' AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id');
14890 l(' AND HZ_PERSON_PROFILES.effective_end_date IS NULL;');
14891 l('');
14892 l(' I NUMBER;');
14893 l(' l_org_contact_id NUMBER;');
14894 l(' J NUMBER:=1;');
14895
14896 l(' BEGIN');
14897 l('');
14898 ldbg_s('Inside calling procedure - get_contact_rec');
14899 l(' FOR I IN 1..p_contact_ids.COUNT LOOP');
14900 l(' l_org_contact_id := p_contact_ids(I);');
14901 l(' OPEN c_contacts(p_contact_ids(I));');
14902 l(' LOOP');
14903 l(' FETCH c_contacts INTO');
14904 l(' l_org_contact_id');
14905 FOR ATTRS IN (
14906 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14907 FROM HZ_TRANS_ATTRIBUTES_VL a,
14908 HZ_MATCH_RULE_PRIMARY p
14909 WHERE p.match_rule_id = p_rule_id
14910 AND p.attribute_id = a.attribute_id
14911 AND a.ENTITY_NAME = 'CONTACTS'
14912 AND a.SOURCE_TABLE <> 'CUSTOM'
14913
14914 UNION
14915
14916 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14917 FROM HZ_TRANS_ATTRIBUTES_VL a,
14918 HZ_MATCH_RULE_SECONDARY s
14919 WHERE s.match_rule_id = p_rule_id
14920 AND s.attribute_id = a.attribute_id
14921 AND a.ENTITY_NAME = 'CONTACTS'
14922 AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14923
14924 l(' ,x_contact_list(J).'||ATTRS.ATTRIBUTE_NAME);
14925 END LOOP;
14926 l(' ;');
14927 l(' EXIT WHEN c_contacts%NOTFOUND;');
14928 l('');
14929 generate_custom_code(p_rule_id, ' x_contact_list(J)','CONTACTS','l_org_contact_id');
14930 l('');
14931 l(' J:=J+1;');
14932 l(' END LOOP;');
14933 l(' CLOSE c_contacts;');
14934 l(' END LOOP;');
14935 l('');
14936 l('EXCEPTION');
14937 l(' WHEN OTHERS THEN');
14938 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
14939 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''get_contact_rec'');');
14940 l(' FND_MESSAGE.SET_TOKEN(''PARTY_ID'',l_org_contact_id);');
14941 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14942 l(' FND_MSG_PUB.ADD;');
14943 l(' RAISE FND_API.G_EXC_ERROR;');
14944 l('END get_contact_rec;');
14945 l('');
14946 l('/************************************************');
14947 l(' This procedure retrieves the match rule contact point attributes into ');
14948 l(' the contact point search record structure ');
14949 l('************************************************/');
14950 l('');
14951 l('PROCEDURE get_contact_point_rec (');
14952 l(' p_contact_point_ids IN HZ_PARTY_SEARCH.IDList,');
14953 l(' x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
14954 l(') IS');
14955 l('');
14956 l(' -- Cursor to fetch primary contact points for party');
14957 l(' CURSOR c_cpts(cp_contact_point_id NUMBER) IS');
14958 l(' SELECT contact_point_id, contact_point_type');
14959 FOR ATTRS IN (
14960 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14961 FROM HZ_TRANS_ATTRIBUTES_VL a,
14962 HZ_MATCH_RULE_PRIMARY p
14963 WHERE p.match_rule_id = p_rule_id
14964 AND p.attribute_id = a.attribute_id
14965 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14966 AND a.SOURCE_TABLE <> 'CUSTOM'
14967
14968 UNION
14969
14970 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14971 FROM HZ_TRANS_ATTRIBUTES_VL a,
14972 HZ_MATCH_RULE_SECONDARY s
14973 WHERE s.match_rule_id = p_rule_id
14974 AND s.attribute_id = a.attribute_id
14975 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14976 AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14977
14978 l(' ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5565522
14979 END LOOP;
14980 l(' FROM HZ_CONTACT_POINTS');
14981 l(' WHERE contact_point_id = cp_contact_point_id;');
14982
14983 l('');
14984 l(' I NUMBER;');
14985 l(' l_contact_point_id NUMBER;');
14986 l(' J NUMBER:=1;');
14987
14988 l(' BEGIN');
14989 l('');
14990 ldbg_s('Inside calling procedure - get_contact_point_rec');
14991 l(' FOR I in 1..p_contact_point_ids.COUNT LOOP');
14992 l(' l_contact_point_id := p_contact_point_ids(I);');
14993 l(' OPEN c_cpts(p_contact_point_ids(I));');
14994 l(' LOOP');
14995 l(' FETCH c_cpts INTO');
14996 l(' l_contact_point_id, x_contact_point_list(J).contact_point_type');
14997
14998 FOR ATTRS IN (
14999 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
15000 FROM HZ_TRANS_ATTRIBUTES_VL a,
15001 HZ_MATCH_RULE_PRIMARY p
15002 WHERE p.match_rule_id = p_rule_id
15003 AND p.attribute_id = a.attribute_id
15004 AND a.ENTITY_NAME = 'CONTACT_POINTS'
15005 AND a.SOURCE_TABLE <> 'CUSTOM'
15006
15007 UNION
15008
15009 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
15010 FROM HZ_TRANS_ATTRIBUTES_VL a,
15011 HZ_MATCH_RULE_SECONDARY s
15012 WHERE s.match_rule_id = p_rule_id
15013 AND s.attribute_id = a.attribute_id
15014 AND a.ENTITY_NAME = 'CONTACT_POINTS'
15015 AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
15016
15017
15018 l(' ,x_contact_point_list(J).'||ATTRS.ATTRIBUTE_NAME);
15019 END LOOP;
15020 l(' ;');
15021 l(' EXIT WHEN c_cpts%NOTFOUND;');
15022 l('');
15023 generate_custom_code(p_rule_id, ' x_contact_point_list(J)','CONTACT_POINTS','l_contact_point_id');
15024 l(' J:=J+1;');
15025 l('');
15026 l(' END LOOP;');
15027 l(' CLOSE c_cpts;');
15028 l(' END LOOP;');
15029
15030 l('');
15031 l('EXCEPTION');
15032 l(' WHEN OTHERS THEN');
15033 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
15034 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''get_contact_point_rec'');');
15035 l(' FND_MESSAGE.SET_TOKEN(''PARTY_ID'',l_contact_point_id);');
15036 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
15037 l(' FND_MSG_PUB.ADD;');
15038 l(' RAISE FND_API.G_EXC_ERROR;');
15039 l('END get_contact_point_rec;');
15040
15041 END;
15042
15043 PROCEDURE generate_check_staged (
15044 p_rule_id IN NUMBER
15045 ) IS
15046
15047 CURSOR c_trans_func IS
15048 SELECT f.FUNCTION_ID
15049 FROM hz_primary_trans f, hz_match_rule_primary a
15050 WHERE a.MATCH_RULE_ID = p_rule_id
15051 AND a.PRIMARY_ATTRIBUTE_ID = f.PRIMARY_ATTRIBUTE_ID
15052
15053 UNION
15054
15055 SELECT f.FUNCTION_ID
15056 FROM hz_secondary_trans f, hz_match_rule_secondary a
15057 WHERE a.MATCH_RULE_ID = p_rule_id
15058 AND a.SECONDARY_ATTRIBUTE_ID = f.SECONDARY_ATTRIBUTE_ID;
15059
15060 ---Start of Code Change for Match Rule Set
15061 CURSOR c_ruleset_trans_func IS
15062 SELECT f.FUNCTION_ID
15063 FROM hz_primary_trans f, hz_match_rule_primary a
15064 WHERE a.MATCH_RULE_ID IN (SELECT UNIQUE CONDITION_MATCH_RULE_ID
15065 FROM HZ_MATCH_RULE_CONDITIONS
15066 WHERE MATCH_RULE_SET_ID = p_rule_id
15067 )
15068 AND a.PRIMARY_ATTRIBUTE_ID = f.PRIMARY_ATTRIBUTE_ID
15069
15070 UNION
15071
15072 SELECT f.FUNCTION_ID
15073 FROM hz_secondary_trans f, hz_match_rule_secondary a
15074 WHERE a.MATCH_RULE_ID IN (SELECT UNIQUE CONDITION_MATCH_RULE_ID
15075 FROM HZ_MATCH_RULE_CONDITIONS
15076 WHERE MATCH_RULE_SET_ID = p_rule_id
15077 )
15078 AND a.SECONDARY_ATTRIBUTE_ID = f.SECONDARY_ATTRIBUTE_ID;
15079
15080 ---End of Code Change for Match Rule Set
15081
15082 l_func_id NUMBER;
15083 FIRST BOOLEAN := FALSE;
15084 l_rule_type varchar2(30); ---Code Change for Match Rule Set
15085 BEGIN
15086 ---Start of Code Change for Match Rule Set
15087 SELECT nvl(match_rule_type,'SINGLE') into l_rule_type FROM HZ_MATCH_RULES_VL
15088 WHERE match_rule_id = p_rule_id;
15089 ---End of Code Change for Match Rule Set
15090
15091 l('FUNCTION check_staged RETURN BOOLEAN IS');
15092 l('');
15093 l(' CURSOR c_check_staged IS ');
15094 l(' SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL ');
15095 l(' WHERE nvl(STAGED_FLAG,''N'') = ''N'' ');
15096 l(' AND FUNCTION_ID in (');
15097 FIRST := TRUE;
15098 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
15099 OPEN c_trans_func;
15100 LOOP
15101 FETCH c_trans_func INTO l_func_id;
15102 EXIT WHEN c_trans_func%NOTFOUND;
15103
15104 IF FIRST THEN
15105 l(' ' || l_func_id);
15106 FIRST := FALSE;
15107 ELSE
15108 l(' ,'|| l_func_id);
15109 END IF;
15110 END LOOP;
15111 CLOSE c_trans_func;
15112 ELSE ---Start of Code Change for Match Rule Set
15113 OPEN c_ruleset_trans_func;
15114 LOOP
15115 FETCH c_ruleset_trans_func INTO l_func_id;
15116 EXIT WHEN c_ruleset_trans_func%NOTFOUND;
15117
15118 IF FIRST THEN
15119 l(' ' || l_func_id);
15120 FIRST := FALSE;
15121 ELSE
15122 l(' ,'|| l_func_id);
15123 END IF;
15124 END LOOP;
15125 CLOSE c_ruleset_trans_func;
15126
15127 END IF; ---End of Code Change for Match Rule Set
15128 l(' );');
15129
15130 l(' l_tmp NUMBER;');
15131
15132 l('BEGIN');
15133 l(' IF g_staged = 1 THEN');
15134 l(' RETURN TRUE;');
15135 l(' ELSIF g_staged = 0 THEN');
15136 l(' RETURN FALSE;');
15137 l(' END IF;');
15138 l('');
15139 l(' OPEN c_check_staged;');
15140 l(' FETCH c_check_staged INTO l_tmp;');
15141 l(' IF c_check_staged%FOUND THEN');
15142 l(' CLOSE c_check_staged;');
15143 l(' g_staged := 0;');
15144 l(' RETURN FALSE;');
15145 l(' ELSE');
15146 l(' CLOSE c_check_staged;');
15147 l(' g_staged := 1;');
15148 l(' RETURN TRUE;');
15149 l(' END IF;');
15150 l('END check_staged;');
15151
15152 l('');
15153 l('-- Fix for Bug 4736139');
15154 l('FUNCTION check_staged_var RETURN VARCHAR2 IS');
15155 l(' l_staged VARCHAR2(1);');
15156 l(' l_staged_bool BOOLEAN;');
15157 l('BEGIN');
15158 l(' l_staged_bool := check_staged;');
15159 l(' IF l_staged_bool THEN');
15160 l(' l_staged := ''Y'';');
15161 l(' ELSE');
15162 l(' l_staged := ''N'';');
15163 l(' END IF;');
15164 l(' RETURN l_staged;');
15165 l('END check_staged_var;');
15166 l('-- End fix for Bug 4736139');
15167 l('');
15168
15169 END;
15170
15171 PROCEDURE gen_pkg_spec (
15172 p_pkg_name IN VARCHAR2,
15173 p_rule_id IN NUMBER
15174 ) IS
15175
15176 BEGIN
15177
15178 l('CREATE or REPLACE PACKAGE ' || p_pkg_name || ' AUTHID CURRENT_USER AS');
15179 l('PROCEDURE map_party_rec (');
15180 l(' p_search_ctx IN BOOLEAN,');
15181 l(' p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15182 l(' x_entered_max_score OUT NUMBER,');
15183 l(' x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type');
15184 l(');');
15185 l('PROCEDURE map_party_site_rec (');
15186 l(' p_search_ctx IN BOOLEAN,');
15187 l(' p_search_list IN HZ_PARTY_SEARCH.party_site_list, ');
15188 l(' x_entered_max_score OUT NUMBER,');
15189 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list');
15190 l(');');
15191 l('PROCEDURE map_contact_rec (');
15192 l(' p_search_ctx IN BOOLEAN,');
15193 l(' p_search_list IN HZ_PARTY_SEARCH.contact_list,');
15194 l(' x_entered_max_score OUT NUMBER,');
15195 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list');
15196 l(' );');
15197 l('PROCEDURE map_contact_point_rec (');
15198 l(' p_search_ctx IN BOOLEAN,');
15199 l(' p_search_list IN HZ_PARTY_SEARCH.contact_point_list,');
15200 l(' x_entered_max_score OUT NUMBER,');
15201 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list');
15202 l(' );');
15203 l('PROCEDURE get_party_rec (');
15204 l(' p_party_id IN NUMBER,');
15205 l(' x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type');
15206 l(');');
15207 l('PROCEDURE get_party_site_rec (');
15208 l(' p_party_site_ids IN HZ_PARTY_SEARCH.IDList,');
15209 l(' x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list');
15210 l(');');
15211 l('PROCEDURE get_contact_rec (');
15212 l(' p_contact_ids IN HZ_PARTY_SEARCH.IDList,');
15213 l(' x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list');
15214 l(');');
15215 l('PROCEDURE get_contact_point_rec (');
15216 l(' p_contact_point_ids IN HZ_PARTY_SEARCH.IDList,');
15217 l(' x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15218 l(');');
15219
15220 l('FUNCTION check_prim_cond(');
15221 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15222 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
15223 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
15224 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list)');
15225 l(' RETURN BOOLEAN;');
15226 l('PROCEDURE check_party_site_cond(');
15227 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
15228 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15229 l(' x_secondary OUT BOOLEAN,');
15230 l(' x_primary OUT BOOLEAN');
15231 l(');');
15232 l('PROCEDURE check_contact_cond(');
15233 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
15234 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15235 l(' x_secondary OUT BOOLEAN,');
15236 l(' x_primary OUT BOOLEAN');
15237 l(');');
15238 l('PROCEDURE check_contact_point_cond(');
15239 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15240 l(' x_secondary OUT BOOLEAN,');
15241 l(' x_primary OUT BOOLEAN');
15242 l(');');
15243 l('PROCEDURE find_parties (');
15244 l(' p_rule_id IN NUMBER,');
15245 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15246 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
15247 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
15248 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15249 l(' p_restrict_sql IN VARCHAR2,');
15250 l(' p_match_type IN VARCHAR2,');
15251 l(' p_search_merged IN VARCHAR2,');
15252 l(' p_dup_party_id IN NUMBER,');
15253 l(' p_dup_set_id IN NUMBER,');
15254 l(' p_dup_batch_id IN NUMBER,');
15255 l(' p_ins_details IN VARCHAR2,');
15256 l(' x_search_ctx_id OUT NUMBER,');
15257 l(' x_num_matches OUT NUMBER');
15258 l(');');
15259 l('PROCEDURE find_persons (');
15260 l(' p_rule_id IN NUMBER,');
15261 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15262 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
15263 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
15264 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15265 l(' p_restrict_sql IN VARCHAR2,');
15266 l(' p_match_type IN VARCHAR2,');
15267 l(' p_search_merged IN VARCHAR2,');
15268 l(' p_ins_details IN VARCHAR2,');
15269 l(' x_search_ctx_id OUT NUMBER,');
15270 l(' x_num_matches OUT NUMBER');
15271 l(');');
15272 l('PROCEDURE find_party_details (');
15273 l(' p_rule_id IN NUMBER,');
15274 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15275 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
15276 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
15277 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15278 l(' p_restrict_sql IN VARCHAR2,');
15279 l(' p_match_type IN VARCHAR2,');
15280 l(' p_search_merged IN VARCHAR2,');
15281 l(' x_search_ctx_id OUT NUMBER,');
15282 l(' x_num_matches OUT NUMBER');
15283 l(');');
15284 l('PROCEDURE find_duplicate_party_sites(');
15285 l(' p_rule_id IN NUMBER,');
15286 l(' p_party_site_id IN NUMBER,');
15287 l(' p_party_id IN NUMBER,');
15288 l(' p_restrict_sql IN VARCHAR2,');
15289 l(' p_match_type IN VARCHAR2,');
15290 l(' x_search_ctx_id OUT NUMBER,');
15291 l(' x_num_matches OUT NUMBER');
15292 l(');');
15293 l('PROCEDURE find_duplicate_contacts(');
15294 l(' p_rule_id IN NUMBER,');
15295 l(' p_org_contact_id IN NUMBER,');
15296 l(' p_party_id IN NUMBER,');
15297 l(' p_restrict_sql IN VARCHAR2,');
15298 l(' p_match_type IN VARCHAR2,');
15299 l(' x_search_ctx_id OUT NUMBER,');
15300 l(' x_num_matches OUT NUMBER');
15301 l(');');
15302 l('PROCEDURE find_duplicate_contact_points(');
15303 l(' p_rule_id IN NUMBER,');
15304 l(' p_contact_point_id IN NUMBER,');
15305 l(' p_party_id IN NUMBER,');
15306 l(' p_restrict_sql IN VARCHAR2,');
15307 l(' p_match_type IN VARCHAR2,');
15308 l(' x_search_ctx_id OUT NUMBER,');
15309 l(' x_num_matches OUT NUMBER');
15310 l(');');
15311 l('PROCEDURE find_duplicate_parties (');
15312 l(' p_rule_id IN NUMBER,');
15313 l(' p_party_id IN NUMBER,');
15314 l(' p_restrict_sql IN VARCHAR2,');
15315 l(' p_match_type IN VARCHAR2,');
15316 l(' p_dup_batch_id IN NUMBER,');
15317 l(' p_search_merged IN VARCHAR2,');
15318 l(' x_dup_set_id OUT NUMBER,');
15319 l(' x_search_ctx_id OUT NUMBER,');
15320 l(' x_num_matches OUT NUMBER');
15321 l(');');
15322 l('PROCEDURE get_matching_party_sites (');
15323 l(' p_rule_id IN NUMBER,');
15324 l(' p_party_id IN NUMBER,');
15325 l(' p_party_site_list IN HZ_PARTY_SEARCH.PARTY_SITE_LIST,');
15326 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
15327 l(' p_restrict_sql IN VARCHAR2,');
15328 l(' p_match_type IN VARCHAR2,');
15329 l(' p_dup_party_site_id IN NUMBER, ');
15330 l(' x_search_ctx_id OUT NUMBER,');
15331 l(' x_num_matches OUT NUMBER');
15332 l(');');
15333 l('PROCEDURE get_matching_contacts (');
15334 l(' p_rule_id IN NUMBER,');
15335 l(' p_party_id IN NUMBER,');
15336 l(' p_contact_list IN HZ_PARTY_SEARCH.CONTACT_LIST,');
15337 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
15338 l(' p_restrict_sql IN VARCHAR2,');
15339 l(' p_match_type IN VARCHAR2,');
15340 l(' p_dup_contact_id IN NUMBER, ');
15341 l(' x_search_ctx_id OUT NUMBER,');
15342 l(' x_num_matches OUT NUMBER');
15343 l(');');
15344 l('');
15345 l('PROCEDURE get_matching_contact_points (');
15346 l(' p_rule_id IN NUMBER,');
15347 l(' p_party_id IN NUMBER,');
15348 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
15349 l(' p_restrict_sql IN VARCHAR2,');
15350 l(' p_match_type IN VARCHAR2,');
15351 l(' p_dup_contact_point_id IN NUMBER, ');
15352 l(' x_search_ctx_id OUT NUMBER,');
15353 l(' x_num_matches OUT NUMBER');
15354 l(');');
15355 l('PROCEDURE get_score_details (');
15356 l(' p_rule_id IN NUMBER,');
15357 l(' p_party_id IN NUMBER,');
15358 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15359 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
15360 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
15361 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15362 l(' x_search_ctx_id IN OUT NUMBER');
15363 l(');');
15364 l('PROCEDURE find_parties_dynamic (');
15365 l(' p_rule_id IN NUMBER,');
15366 l(' p_attrib_id1 IN NUMBER,');
15367 l(' p_attrib_id2 IN NUMBER,');
15368 l(' p_attrib_id3 IN NUMBER,');
15369 l(' p_attrib_id4 IN NUMBER,');
15370 l(' p_attrib_id5 IN NUMBER,');
15371 l(' p_attrib_id6 IN NUMBER,');
15372 l(' p_attrib_id7 IN NUMBER,');
15373 l(' p_attrib_id8 IN NUMBER,');
15374 l(' p_attrib_id9 IN NUMBER,');
15375 l(' p_attrib_id10 IN NUMBER,');
15376 l(' p_attrib_id11 IN NUMBER,');
15377 l(' p_attrib_id12 IN NUMBER,');
15378 l(' p_attrib_id13 IN NUMBER,');
15379 l(' p_attrib_id14 IN NUMBER,');
15380 l(' p_attrib_id15 IN NUMBER,');
15381 l(' p_attrib_id16 IN NUMBER,');
15382 l(' p_attrib_id17 IN NUMBER,');
15383 l(' p_attrib_id18 IN NUMBER,');
15384 l(' p_attrib_id19 IN NUMBER,');
15385 l(' p_attrib_id20 IN NUMBER,');
15386 l(' p_attrib_val1 IN VARCHAR2,');
15387 l(' p_attrib_val2 IN VARCHAR2,');
15388 l(' p_attrib_val3 IN VARCHAR2,');
15389 l(' p_attrib_val4 IN VARCHAR2,');
15390 l(' p_attrib_val5 IN VARCHAR2,');
15391 l(' p_attrib_val6 IN VARCHAR2,');
15392 l(' p_attrib_val7 IN VARCHAR2,');
15393 l(' p_attrib_val8 IN VARCHAR2,');
15394 l(' p_attrib_val9 IN VARCHAR2,');
15395 l(' p_attrib_val10 IN VARCHAR2,');
15396 l(' p_attrib_val11 IN VARCHAR2,');
15397 l(' p_attrib_val12 IN VARCHAR2,');
15398 l(' p_attrib_val13 IN VARCHAR2,');
15399 l(' p_attrib_val14 IN VARCHAR2,');
15400 l(' p_attrib_val15 IN VARCHAR2,');
15401 l(' p_attrib_val16 IN VARCHAR2,');
15402 l(' p_attrib_val17 IN VARCHAR2,');
15403 l(' p_attrib_val18 IN VARCHAR2,');
15404 l(' p_attrib_val19 IN VARCHAR2,');
15405 l(' p_attrib_val20 IN VARCHAR2,');
15406 l(' p_restrict_sql IN VARCHAR2,');
15407 l(' p_match_type IN VARCHAR2,');
15408 l(' p_search_merged IN VARCHAR2,');
15409 l(' x_search_ctx_id OUT NUMBER,');
15410 l(' x_num_matches OUT NUMBER');
15411 l(');');
15412 l('PROCEDURE call_api_dynamic (');
15413 l(' p_rule_id IN NUMBER,');
15414 l(' p_attrib_id1 IN NUMBER,');
15415 l(' p_attrib_id2 IN NUMBER,');
15416 l(' p_attrib_id3 IN NUMBER,');
15417 l(' p_attrib_id4 IN NUMBER,');
15418 l(' p_attrib_id5 IN NUMBER,');
15419 l(' p_attrib_id6 IN NUMBER,');
15420 l(' p_attrib_id7 IN NUMBER,');
15421 l(' p_attrib_id8 IN NUMBER,');
15422 l(' p_attrib_id9 IN NUMBER,');
15423 l(' p_attrib_id10 IN NUMBER,');
15424 l(' p_attrib_id11 IN NUMBER,');
15425 l(' p_attrib_id12 IN NUMBER,');
15426 l(' p_attrib_id13 IN NUMBER,');
15427 l(' p_attrib_id14 IN NUMBER,');
15428 l(' p_attrib_id15 IN NUMBER,');
15429 l(' p_attrib_id16 IN NUMBER,');
15430 l(' p_attrib_id17 IN NUMBER,');
15431 l(' p_attrib_id18 IN NUMBER,');
15432 l(' p_attrib_id19 IN NUMBER,');
15433 l(' p_attrib_id20 IN NUMBER,');
15434 l(' p_attrib_val1 IN VARCHAR2,');
15435 l(' p_attrib_val2 IN VARCHAR2,');
15436 l(' p_attrib_val3 IN VARCHAR2,');
15437 l(' p_attrib_val4 IN VARCHAR2,');
15438 l(' p_attrib_val5 IN VARCHAR2,');
15439 l(' p_attrib_val6 IN VARCHAR2,');
15440 l(' p_attrib_val7 IN VARCHAR2,');
15441 l(' p_attrib_val8 IN VARCHAR2,');
15442 l(' p_attrib_val9 IN VARCHAR2,');
15443 l(' p_attrib_val10 IN VARCHAR2,');
15444 l(' p_attrib_val11 IN VARCHAR2,');
15445 l(' p_attrib_val12 IN VARCHAR2,');
15446 l(' p_attrib_val13 IN VARCHAR2,');
15447 l(' p_attrib_val14 IN VARCHAR2,');
15448 l(' p_attrib_val15 IN VARCHAR2,');
15449 l(' p_attrib_val16 IN VARCHAR2,');
15450 l(' p_attrib_val17 IN VARCHAR2,');
15451 l(' p_attrib_val18 IN VARCHAR2,');
15452 l(' p_attrib_val19 IN VARCHAR2,');
15453 l(' p_attrib_val20 IN VARCHAR2,');
15454 l(' p_restrict_sql IN VARCHAR2,');
15455 l(' p_api_name IN VARCHAR2,');
15456 l(' p_match_type IN VARCHAR2,');
15457 l(' p_party_id IN NUMBER,');
15458 l(' p_search_merged IN VARCHAR2,');
15459 l(' x_search_ctx_id OUT NUMBER,');
15460 l(' x_num_matches OUT NUMBER');
15461 l(');');
15462
15463 l('PROCEDURE get_party_for_search (');
15464 l(' p_party_id IN NUMBER,');
15465 l(' x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
15466 l(' x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
15467 l(' x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
15468 l(' x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15469 l(');');
15470 l('PROCEDURE get_search_criteria (');
15471 l(' p_party_id IN NUMBER,');
15472 l(' p_party_site_ids IN HZ_PARTY_SEARCH.IDList,');
15473 l(' p_contact_ids IN HZ_PARTY_SEARCH.IDList,');
15474 l(' p_contact_pt_ids IN HZ_PARTY_SEARCH.IDList,');
15475 l(' x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
15476 l(' x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
15477 l(' x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
15478 l(' x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15479 l(');');
15480
15481 l('FUNCTION check_staged RETURN BOOLEAN;');
15482 l('');
15483 l('-- Fix for Bug 4736139');
15484 l('FUNCTION check_staged_var RETURN VARCHAR2;');
15485 l('');
15486 l(' g_staged NUMBER := -1;');
15487 l('END ' || p_pkg_name || ';');
15488
15489 END;
15490
15491 FUNCTION num_primary(
15492 p_entity VARCHAR2,
15493 p_rule_id NUMBER) RETURN NUMBER IS
15494
15495 l_num_primary NUMBER;
15496 BEGIN
15497 SELECT count(1) INTO l_num_primary
15498 FROM HZ_MATCH_RULE_PRIMARY p,
15499 HZ_TRANS_ATTRIBUTES_VL a
15500 WHERE p.match_rule_id = p_rule_id
15501 AND p.ATTRIBUTE_ID = a.ATTRIBUTE_ID
15502 AND ENTITY_NAME = p_entity;
15503 RETURN l_num_primary;
15504
15505 END;
15506
15507 FUNCTION num_secondary(
15508 p_rule_id NUMBER,
15509 p_entity VARCHAR2) RETURN NUMBER IS
15510
15511 l_num_secondary NUMBER;
15512 BEGIN
15513 SELECT count(1) INTO l_num_secondary
15514 FROM HZ_MATCH_RULE_SECONDARY p,
15515 HZ_TRANS_ATTRIBUTES_VL a
15516 WHERE p.match_rule_id = p_rule_id
15517 AND p.ATTRIBUTE_ID = a.ATTRIBUTE_ID
15518 AND ENTITY_NAME = p_entity;
15519 RETURN l_num_secondary;
15520
15521 END;
15522
15523
15524 PROCEDURE gen_exception_block IS
15525
15526 BEGIN
15527 l(' --Standard call to get message count and if count is 1, get message info');
15528 l(' FND_MSG_PUB.Count_And_Get(');
15529 l(' p_encoded => FND_API.G_FALSE,');
15530 l(' p_count => x_msg_count,');
15531 l(' p_data => x_msg_data);');
15532 l(' EXCEPTION');
15533 l(' WHEN FND_API.G_EXC_ERROR THEN');
15534 l(' x_return_status := FND_API.G_RET_STS_ERROR;');
15535 l(' FND_MSG_PUB.Count_And_Get(');
15536 l(' p_encoded => FND_API.G_FALSE,');
15537 l(' p_count => x_msg_count,');
15538 l(' p_data => x_msg_data);');
15539 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
15540 l(' x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;');
15541 l(' FND_MSG_PUB.Count_And_Get(');
15542 l(' p_encoded => FND_API.G_FALSE,');
15543 l(' p_count => x_msg_count,');
15544 l(' p_data => x_msg_data);');
15545 l('');
15546 l(' WHEN OTHERS THEN');
15547 l(' x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;');
15548 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
15549 l(' FND_MESSAGE.SET_TOKEN(''PROC'' ,''HZ_PARTY_SEARCH'');');
15550 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
15551 l(' FND_MSG_PUB.ADD;');
15552 l('');
15553 l(' FND_MSG_PUB.Count_And_Get(');
15554 l(' p_encoded => FND_API.G_FALSE,');
15555 l(' p_count => x_msg_count,');
15556 l(' p_data => x_msg_data);');
15557 END;
15558
15559
15560 -- VJN put the meat of what this was earlier doing into the overloaded
15561 -- procedure, that would do the actual compiling based on the match rule purpose
15562 PROCEDURE compile_all_rules_nolog IS
15563 BEGIN
15564 compile_all_rules_nolog('D');
15565 compile_all_rules_nolog('S');
15566 END;
15567
15568 -- VJN introduced overloaded procedure
15569 PROCEDURE compile_all_rules_nolog( p_rule_purpose IN varchar2)
15570 IS
15571
15572 l_return_status varchar2(100) := null;
15573 l_msg_count number(15) := 0;
15574 l_msg_data varchar2(4000) := null;
15575
15576 CURSOR c_rules_for_compile IS
15577 SELECT MATCH_RULE_ID,RULE_NAME FROM HZ_MATCH_RULES_VL
15578 where rule_purpose = p_rule_purpose ;
15579
15580 l_cur_date DATE;
15581
15582 l_match_rule_id NUMBER;
15583 l_rule_name HZ_MATCH_RULES_TL.RULE_NAME%TYPE;
15584 err VARCHAR2(2000);
15585
15586 BEGIN
15587
15588 -- Initialize return status and message stack
15589 FND_MSG_PUB.initialize;
15590
15591 l_cur_date := SYSDATE;
15592
15593 UPDATE HZ_MATCH_RULES_B SET compilation_flag = 'U'
15594 where rule_purpose = p_rule_purpose ;
15595
15596 OPEN c_rules_for_compile ;
15597 LOOP
15598 FETCH c_rules_for_compile INTO l_match_rule_id, l_rule_name;
15599 EXIT WHEN c_rules_for_compile%NOTFOUND;
15600
15601 BEGIN
15602 HZ_MATCH_RULE_COMPILE.COMPILE_MATCH_RULE( l_match_rule_id,'Y',
15603 l_return_status,
15604 l_msg_count,
15605 l_msg_data) ;
15606
15607 EXCEPTION
15608 WHEN OTHERS THEN
15609 UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_match_rule_id;
15610 COMMIT;
15611 END;
15612
15613 END LOOP;
15614
15615 -- IF p_rule_purpose <> 'Q'
15616 -- THEN
15617 HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
15618 gen_wrap_pkg_body(-1);
15619 HZ_GEN_PLSQL.compile_code;
15620 -- END IF;
15621
15622 EXCEPTION
15623 WHEN OTHERS THEN
15624 ROLLBACK;
15625 END;
15626
15627
15628
15629
15630 PROCEDURE compile_all_rules (
15631 errbuf OUT NOCOPY VARCHAR2,
15632 retcode OUT NOCOPY VARCHAR2
15633 ) IS
15634
15635 l_return_status varchar2(100) := null;
15636 l_msg_count number(15) := 0;
15637 l_msg_data varchar2(4000) := null;
15638
15639 CURSOR c_rules_for_compile IS
15640 SELECT MATCH_RULE_ID,RULE_NAME FROM HZ_MATCH_RULES_VL ORDER BY match_rule_type DESC nulls first;--bug 5263694
15641
15642 l_cur_date DATE;
15643
15644 l_match_rule_id NUMBER;
15645 l_rule_name HZ_MATCH_RULES_TL.RULE_NAME%TYPE;
15646 err VARCHAR2(2000);
15647
15648 BEGIN
15649
15650 retcode := 0;
15651
15652 outandlog('Starting Concurrent Program ''Compile Match Rules ''');
15653 outandlog('Start Time ' || TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
15654 outandlog('NEWLINE');
15655
15656 -- Initialize return status and message stack
15657 FND_MSG_PUB.initialize;
15658
15659 l_cur_date := SYSDATE;
15660
15661 log('');
15662
15663 UPDATE HZ_MATCH_RULES_B SET compilation_flag = 'U';
15664
15665 OPEN c_rules_for_compile ;
15666 LOOP
15667 FETCH c_rules_for_compile INTO l_match_rule_id, l_rule_name;
15668 EXIT WHEN c_rules_for_compile%NOTFOUND;
15669
15670 BEGIN
15671 log('Compiling Match Rule ' || l_rule_name || ' ... ', FALSE);
15672 HZ_MATCH_RULE_COMPILE.COMPILE_MATCH_RULE( l_match_rule_id,'Y',
15673 l_return_status,
15674 l_msg_count,
15675 l_msg_data) ;
15676
15677 IF l_return_status = 'S' THEN
15678 log('Done');
15679 ELSE
15680 retcode := 1;
15681 log('');
15682 log('Error Compiling Rule : ');
15683 err := logerror;
15684 END IF;
15685 EXCEPTION
15686 WHEN OTHERS THEN
15687 retcode := 1;
15688 log('');
15689 log('Error Compiling Rule : ');
15690 err := logerror(SQLERRM);
15691 UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_match_rule_id;
15692 COMMIT;
15693 END;
15694 END LOOP;
15695 HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
15696 gen_wrap_pkg_body(-1);
15697 HZ_GEN_PLSQL.compile_code;
15698
15699 IF retcode = 1 THEN
15700 outandlog('One or More match rules compilation had errors. Please check the log file for details');
15701 END IF;
15702
15703 outandlog('Concurrent Program Execution completed ');
15704 outandlog('End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
15705 EXCEPTION
15706 WHEN OTHERS THEN
15707 retcode := 2;
15708 ROLLBACK;
15709 log('Errors Encountered');
15710 errbuf := logerror(SQLERRM);
15711 END;
15712
15713 /**
15714 * Procedure to write a message to the out file
15715 **/
15716 PROCEDURE out(
15717 message IN VARCHAR2,
15718 newline IN BOOLEAN DEFAULT TRUE) IS
15719 BEGIN
15720 IF message = 'NEWLINE' THEN
15721 FND_FILE.NEW_LINE(FND_FILE.OUTPUT, 1);
15722 ELSIF (newline) THEN
15723 FND_FILE.put_line(fnd_file.output,message);
15724 ELSE
15725 FND_FILE.put(fnd_file.output,message);
15726 END IF;
15727 END out;
15728
15729 /**
15730 * Procedure to write a message to the log file
15731 **/
15732 PROCEDURE log(
15733 message IN VARCHAR2,
15734 newline IN BOOLEAN DEFAULT TRUE
15735 ) IS
15736 BEGIN
15737 IF message = 'NEWLINE' THEN
15738 FND_FILE.NEW_LINE(FND_FILE.LOG, 1);
15739 ELSIF (newline) THEN
15740 FND_FILE.put_line(fnd_file.log,message);
15741 ELSE
15742 FND_FILE.put(fnd_file.log,message);
15743 END IF;
15744 END log;
15745
15746 /**
15747 * Procedure to write a message to the out and log files
15748 **/
15749 PROCEDURE outandlog(
15750 message IN VARCHAR2,
15751 newline IN BOOLEAN DEFAULT TRUE) IS
15752 BEGIN
15753 out(message, newline);
15754 log(message, newline);
15755 END outandlog;
15756
15757 /**
15758 * Function to fetch messages of the stack and log the error
15759 * Also returns the error
15760 **/
15761 FUNCTION logerror(SQLERRM VARCHAR2 DEFAULT NULL)
15762 RETURN VARCHAR2 IS
15763
15764 l_msg_data VARCHAR2(2000);
15765 BEGIN
15766 FND_MSG_PUB.Reset;
15767
15768 FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
15769 l_msg_data := l_msg_data || FND_MSG_PUB.Get(p_encoded => FND_API.G_FALSE );
15770 END LOOP;
15771 IF (SQLERRM IS NOT NULL) THEN
15772 l_msg_data := l_msg_data || SQLERRM;
15773 END IF;
15774 log(l_msg_data);
15775 RETURN l_msg_data;
15776 END logerror;
15777
15778 PROCEDURE gen_call_api_dynamic_names IS
15779
15780 BEGIN
15781 l(' ');
15782 l(' FUNCTION get_attrib_id(p_str VARCHAR2) ');
15783 l(' RETURN NUMBER IS ');
15784 l(' l_id NUMBER; ');
15785 l(' l_pl NUMBER; ');
15786 l(' l_token VARCHAR2(1); ');
15787 l(' BEGIN ');
15788 l(' l_token := ''.''; ');
15789 l(' l_pl := instrb(p_str, l_token); ');
15790 l(' select attribute_id into l_id ');
15791 l(' from hz_trans_attributes_b ');
15792 l(' where entity_name = substrb(p_str, 0, l_pl - 1) ');
15793 l(' and ATTRIBUTE_NAME = substrb(p_str, l_pl + 1); ');
15794 l(' RETURN l_id; ');
15795 l(' EXCEPTION WHEN NO_DATA_FOUND THEN ');
15796 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_NOATTRIB_ERROR'' ); ');
15797 l(' FND_MESSAGE.SET_TOKEN(''ENTITY_ATTRIBUTE'' ,p_str); ');
15798 l(' FND_MSG_PUB.ADD; ');
15799 l(' RAISE FND_API.G_EXC_ERROR; ');
15800 l(' END get_attrib_id; ');
15801
15802 l(' PROCEDURE call_api_dynamic_names (');
15803 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
15804 l(' p_rule_id IN NUMBER,');
15805 l(' p_attrib_name1 IN VARCHAR2,');
15806 l(' p_attrib_name2 IN VARCHAR2,');
15807 l(' p_attrib_name3 IN VARCHAR2,');
15808 l(' p_attrib_name4 IN VARCHAR2,');
15809 l(' p_attrib_name5 IN VARCHAR2,');
15810 l(' p_attrib_name6 IN VARCHAR2,');
15811 l(' p_attrib_name7 IN VARCHAR2,');
15812 l(' p_attrib_name8 IN VARCHAR2,');
15813 l(' p_attrib_name9 IN VARCHAR2,');
15814 l(' p_attrib_name10 IN VARCHAR2,');
15815 l(' p_attrib_name11 IN VARCHAR2,');
15816 l(' p_attrib_name12 IN VARCHAR2,');
15817 l(' p_attrib_name13 IN VARCHAR2,');
15818 l(' p_attrib_name14 IN VARCHAR2,');
15819 l(' p_attrib_name15 IN VARCHAR2,');
15820 l(' p_attrib_name16 IN VARCHAR2,');
15821 l(' p_attrib_name17 IN VARCHAR2,');
15822 l(' p_attrib_name18 IN VARCHAR2,');
15823 l(' p_attrib_name19 IN VARCHAR2,');
15824 l(' p_attrib_name20 IN VARCHAR2,');
15825 l(' p_attrib_val1 IN VARCHAR2,');
15826 l(' p_attrib_val2 IN VARCHAR2,');
15827 l(' p_attrib_val3 IN VARCHAR2,');
15828 l(' p_attrib_val4 IN VARCHAR2,');
15829 l(' p_attrib_val5 IN VARCHAR2,');
15830 l(' p_attrib_val6 IN VARCHAR2,');
15831 l(' p_attrib_val7 IN VARCHAR2,');
15832 l(' p_attrib_val8 IN VARCHAR2,');
15833 l(' p_attrib_val9 IN VARCHAR2,');
15834 l(' p_attrib_val10 IN VARCHAR2,');
15835 l(' p_attrib_val11 IN VARCHAR2,');
15836 l(' p_attrib_val12 IN VARCHAR2,');
15837 l(' p_attrib_val13 IN VARCHAR2,');
15838 l(' p_attrib_val14 IN VARCHAR2,');
15839 l(' p_attrib_val15 IN VARCHAR2,');
15840 l(' p_attrib_val16 IN VARCHAR2,');
15841 l(' p_attrib_val17 IN VARCHAR2,');
15842 l(' p_attrib_val18 IN VARCHAR2,');
15843 l(' p_attrib_val19 IN VARCHAR2,');
15844 l(' p_attrib_val20 IN VARCHAR2,');
15845 l(' p_restrict_sql IN VARCHAR2,');
15846 l(' p_api_name IN VARCHAR2,');
15847 l(' p_match_type IN VARCHAR2,');
15848 l(' p_party_id IN NUMBER,');
15849 l(' p_search_merged IN VARCHAR2,');
15850 l(' x_search_ctx_id OUT NUMBER,');
15851 l(' x_num_matches OUT NUMBER,');
15852 l(' x_return_status OUT VARCHAR2,');
15853 l(' x_msg_count OUT NUMBER,');
15854 l(' x_msg_data OUT VARCHAR2');
15855 l(' ) IS');
15856 l(' l_attrib_id1 NUMBER; ');
15857 l(' l_attrib_id2 NUMBER; ');
15858 l(' l_attrib_id3 NUMBER; ');
15859 l(' l_attrib_id4 NUMBER; ');
15860 l(' l_attrib_id5 NUMBER; ');
15861 l(' l_attrib_id6 NUMBER; ');
15862 l(' l_attrib_id7 NUMBER; ');
15863 l(' l_attrib_id8 NUMBER; ');
15864 l(' l_attrib_id9 NUMBER; ');
15865 l(' l_attrib_id10 NUMBER; ');
15866 l(' l_attrib_id11 NUMBER; ');
15867 l(' l_attrib_id12 NUMBER; ');
15868 l(' l_attrib_id13 NUMBER; ');
15869 l(' l_attrib_id14 NUMBER; ');
15870 l(' l_attrib_id15 NUMBER; ');
15871 l(' l_attrib_id16 NUMBER; ');
15872 l(' l_attrib_id17 NUMBER; ');
15873 l(' l_attrib_id18 NUMBER; ');
15874 l(' l_attrib_id19 NUMBER; ');
15875 l(' l_attrib_id20 NUMBER; ');
15876 l(' BEGIN');
15877 d(fnd_log.level_procedure,'call_api_dynamic_names(+)');
15878 d(fnd_log.level_statement,'Rule ID','p_rule_id ');
15879 l(' ');
15880 l(' IF (p_attrib_name1 IS NOT NULL) THEN ');
15881 l(' l_attrib_id1 := get_attrib_id(p_attrib_name1); ');
15882 l(' END IF; ');
15883 l(' IF (p_attrib_name2 IS NOT NULL) THEN ');
15884 l(' l_attrib_id2 := get_attrib_id(p_attrib_name2); ');
15885 l(' END IF; ');
15886 l(' IF (p_attrib_name3 IS NOT NULL) THEN ');
15887 l(' l_attrib_id3 := get_attrib_id(p_attrib_name3); ');
15888 l(' END IF; ');
15889 l(' IF (p_attrib_name4 IS NOT NULL) THEN ');
15890 l(' l_attrib_id4 := get_attrib_id(p_attrib_name4); ');
15891 l(' END IF; ');
15892 l(' IF (p_attrib_name5 IS NOT NULL) THEN ');
15893 l(' l_attrib_id5 := get_attrib_id(p_attrib_name5); ');
15894 l(' END IF; ');
15895 l(' IF (p_attrib_name6 IS NOT NULL) THEN ');
15896 l(' l_attrib_id6 := get_attrib_id(p_attrib_name6); ');
15897 l(' END IF; ');
15898 l(' IF (p_attrib_name7 IS NOT NULL) THEN ');
15899 l(' l_attrib_id7 := get_attrib_id(p_attrib_name7); ');
15900 l(' END IF; ');
15901 l(' IF (p_attrib_name8 IS NOT NULL) THEN ');
15902 l(' l_attrib_id8 := get_attrib_id(p_attrib_name8); ');
15903 l(' END IF; ');
15904 l(' IF (p_attrib_name9 IS NOT NULL) THEN ');
15905 l(' l_attrib_id9 := get_attrib_id(p_attrib_name9); ');
15906 l(' END IF; ');
15907 l(' IF (p_attrib_name10 IS NOT NULL) THEN ');
15908 l(' l_attrib_id10 := get_attrib_id(p_attrib_name10); ');
15909 l(' END IF; ');
15910 l(' IF (p_attrib_name11 IS NOT NULL) THEN ');
15911 l(' l_attrib_id11 := get_attrib_id(p_attrib_name11); ');
15912 l(' END IF; ');
15913 l(' IF (p_attrib_name12 IS NOT NULL) THEN ');
15914 l(' l_attrib_id12 := get_attrib_id(p_attrib_name12); ');
15915 l(' END IF; ');
15916 l(' IF (p_attrib_name13 IS NOT NULL) THEN ');
15917 l(' l_attrib_id13 := get_attrib_id(p_attrib_name13); ');
15918 l(' END IF; ');
15919 l(' IF (p_attrib_name14 IS NOT NULL) THEN ');
15920 l(' l_attrib_id14 := get_attrib_id(p_attrib_name14); ');
15921 l(' END IF; ');
15922 l(' IF (p_attrib_name15 IS NOT NULL) THEN ');
15923 l(' l_attrib_id15 := get_attrib_id(p_attrib_name15); ');
15924 l(' END IF; ');
15925 l(' IF (p_attrib_name16 IS NOT NULL) THEN ');
15926 l(' l_attrib_id16 := get_attrib_id(p_attrib_name16); ');
15927 l(' END IF; ');
15928 l(' IF (p_attrib_name17 IS NOT NULL) THEN ');
15929 l(' l_attrib_id17 := get_attrib_id(p_attrib_name17); ');
15930 l(' END IF; ');
15931 l(' IF (p_attrib_name18 IS NOT NULL) THEN ');
15932 l(' l_attrib_id18 := get_attrib_id(p_attrib_name18); ');
15933 l(' END IF; ');
15934 l(' IF (p_attrib_name19 IS NOT NULL) THEN ');
15935 l(' l_attrib_id19 := get_attrib_id(p_attrib_name19); ');
15936 l(' END IF; ');
15937 l(' IF (p_attrib_name20 IS NOT NULL) THEN ');
15938 l(' l_attrib_id20 := get_attrib_id(p_attrib_name20); ');
15939 l(' END IF; ');
15940
15941
15942 l(' hz_party_search.call_api_dynamic( ');
15943 l(' p_init_msg_list, p_rule_id, ');
15944 l(' l_attrib_id1,l_attrib_id2,l_attrib_id3,l_attrib_id4,l_attrib_id5, ');
15945 l(' l_attrib_id6,l_attrib_id7,l_attrib_id8,l_attrib_id9,l_attrib_id10, ');
15946 l(' l_attrib_id11,l_attrib_id12,l_attrib_id13,l_attrib_id14,l_attrib_id15, ');
15947 l(' l_attrib_id16,l_attrib_id17,l_attrib_id18,l_attrib_id19,l_attrib_id20, ');
15948 l(' p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5, ');
15949 l(' p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10, ');
15950 l(' p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15, ');
15951 l(' p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20, ');
15952 l(' p_restrict_sql,p_api_name,p_match_type,p_party_id,p_search_merged, ');
15953 l(' x_search_ctx_id,x_num_matches, x_return_status, x_msg_count, x_msg_data); ');
15954 d(fnd_log.level_procedure,'call_api_dynamic_names(-)');
15955 gen_exception_block;
15956 l(' END call_api_dynamic_names; ');
15957
15958 END gen_call_api_dynamic_names;
15959
15960 ---Start of Code Change for Match Rule Set
15961 FUNCTION has_uncompiled_childern(p_rule_set_id NUMBER)
15962 RETURN BOOLEAN
15963 IS
15964 CURSOR c_uncompiled_children IS
15965 SELECT count(unique compilation_flag) FROM HZ_MATCH_RULES_B
15966 WHERE match_rule_id IN( SELECT unique condition_match_rule_id
15967 FROM HZ_MATCH_RULE_CONDITIONS
15968 WHERE match_rule_set_id = p_rule_set_id)
15969 AND compilation_flag <> 'C';
15970 l_count NUMBER;
15971
15972 BEGIN
15973 OPEN c_uncompiled_children;
15974 FETCH c_uncompiled_children INTO l_count;
15975 CLOSE c_uncompiled_children;
15976 IF (l_count >0 )THEN
15977 RETURN TRUE;
15978 ELSE
15979 RETURN FALSE;
15980 END IF;
15981 END;
15982
15983 PROCEDURE compile_all_rulesets (
15984 p_cond_rule_id IN NUMBER
15985 ) IS
15986
15987 l_return_status varchar2(100) := null;
15988 l_msg_count number(15) := 0;
15989 l_msg_data varchar2(4000) := null;
15990
15991 CURSOR c_rulesets_for_compile IS
15992 SELECT UNIQUE MATCH_RULE_ID,RULE_NAME FROM HZ_MATCH_RULES_VL
15993 WHERE COMPILATION_FLAG <> 'C'
15994 AND MATCH_RULE_ID IN (SELECT UNIQUE MATCH_RULE_SET_ID FROM HZ_MATCH_RULE_CONDITIONS
15995 WHERE CONDITION_MATCH_RULE_ID = p_cond_rule_id)
15996 ;
15997
15998
15999 l_match_rule_set_id NUMBER;
16000 l_rule_name HZ_MATCH_RULES_TL.RULE_NAME%TYPE;
16001 err VARCHAR2(2000);
16002 l_has_errors BOOLEAN := FALSE;
16003 BEGIN
16004
16005 -- Initialize return status and message stack
16006 FND_MSG_PUB.initialize;
16007
16008 log('');
16009
16010 OPEN c_rulesets_for_compile ;
16011 LOOP
16012 FETCH c_rulesets_for_compile INTO l_match_rule_set_id, l_rule_name;
16013 EXIT WHEN c_rulesets_for_compile%NOTFOUND;
16014
16015 BEGIN
16016 log('Compiling Match Rule Set ' || l_rule_name || ' ... ', FALSE);
16017 HZ_MATCH_RULE_COMPILE.COMPILE_MATCH_RULE( l_match_rule_set_id,'Y',
16018 l_return_status,
16019 l_msg_count,
16020 l_msg_data) ;
16021
16022 IF l_return_status = 'S' THEN
16023 log('Done');
16024 ELSE
16025 log('');
16026 l_has_errors :=TRUE;
16027 log('Error Compiling Rule Set: '||l_match_rule_set_id || ' msg_data='||l_msg_data);
16028
16029 END IF;
16030 EXCEPTION
16031 WHEN OTHERS THEN
16032 log('');
16033 l_has_errors :=TRUE;
16034 log('Error Compiling Rule Set : '||l_match_rule_set_id||' ,sqlerrm='||sqlerrm);
16035 UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_match_rule_set_id;
16036 COMMIT;
16037 END;
16038 END LOOP;
16039 close c_rulesets_for_compile;
16040 IF NOT l_has_errors THEN
16041 HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
16042 gen_wrap_pkg_body(-1);
16043 HZ_GEN_PLSQL.compile_code;
16044 END IF;
16045
16046 EXCEPTION
16047 WHEN OTHERS THEN
16048 ROLLBACK;
16049 log('Errors Encountered during match rule set compilation..sqlerrm='||sqlerrm);
16050 END;
16051
16052 PROCEDURE pop_conditions(p_mrule_set_id IN NUMBER,
16053 p_api_name IN VARCHAR2,
16054 p_parameters IN VARCHAR2,
16055 p_eval_level IN VARCHAR2)
16056 IS
16057
16058 TYPE ref_conditions is ref cursor;
16059 c_ref_conditions ref_conditions;
16060
16061
16062 l_cond_string varchar2(32000);
16063 l_add_then BOOLEAN;
16064 l_count NUMBER;
16065 l_value VARCHAR2(2000);
16066 l_tmp_value varchar2(30);
16067 l_index NUMBER;
16068 l_sql varchar2(1000);
16069 l_close_if BOOLEAN;
16070
16071 l_condition_match_rule_id NUMBER(15);
16072 l_entity_name VARCHAR2(255);
16073 l_attribute_name VARCHAR2(255);
16074 l_operation VARCHAR2(30);
16075 l_rank NUMBER;
16076
16077 BEGIN
16078
16079 IF p_eval_level = 'PARTY' THEN
16080 l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16081 ' attr.attribute_name,operation,value,rank '||
16082 ' FROM hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16083 ' WHERE cond.match_rule_set_id = '||P_MRULE_SET_ID||
16084 ' AND cond.attribute_id= attr.attribute_id (+) '||
16085 ' ORDER BY rank ASC';
16086 ELSIF p_eval_level = 'PARTY_SITES' then
16087 l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16088 ' attr.attribute_name,operation,value,rank '||
16089 ' FROM hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16090 ' WHERE cond.match_rule_set_id = '||P_MRULE_SET_ID||
16091 ' AND nvl(attr.entity_name,''XYZ'') NOT IN (''PARTY'',''CONTACTS'') '||
16092 ' AND cond.attribute_id= attr.attribute_id (+) '||
16093 ' ORDER BY rank ASC';
16094 ELSIF p_eval_level = 'CONTACTS' then
16095 l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16096 ' attr.attribute_name,operation,value,rank '||
16097 ' FROM hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16098 ' WHERE cond.match_rule_set_id = '||P_MRULE_SET_ID||
16099 ' AND nvl(attr.entity_name,''XYZ'') NOT IN (''PARTY'',''PARTY_SITES'') '||
16100 ' AND cond.attribute_id= attr.attribute_id (+) '||
16101 ' ORDER BY rank ASC';
16102 ELSIF p_eval_level = 'CONTACT_POINTS' then
16103 l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16104 ' attr.attribute_name,operation,value,rank '||
16105 ' FROM hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16106 ' WHERE cond.match_rule_set_id = '||P_MRULE_SET_ID||
16107 ' AND nvl(attr.entity_name,''XYZ'') NOT IN (''PARTY'',''PARTY_SITES'',''CONTACTS'') '||
16108 ' AND cond.attribute_id= attr.attribute_id (+) '||
16109 ' ORDER BY rank ASC';
16110 ELSE
16111 RETURN;
16112 END IF;
16113
16114 l_add_then := FALSE;
16115 l_count := 0;
16116 l_cond_string := NULL;
16117 l_value := NULL;
16118 l_index := 0;
16119 l_close_if := FALSE;
16120 --Start of Bug No: 4234203
16121 l('DECLARE');
16122 l(' l_condition_match_rule_id NUMBER(15);');
16123 l(' l_cond_rule_name VARCHAR2(255);');
16124 l(' CURSOR c_rule_name(p_rule_id NUMBER) IS SELECT rule_name FROM hz_match_rules_vl ');
16125 l(' where match_rule_id=p_rule_id ;');
16126 l('BEGIN');
16127 --End of Bug No: 4234203
16128 OPEN c_ref_conditions FOR l_sql;
16129 LOOP
16130 FETCH c_ref_conditions INTO l_condition_match_rule_id,l_entity_name,l_attribute_name,l_operation,
16131 l_value,l_rank;
16132 EXIT WHEN c_ref_conditions%NOTFOUND;
16133 l_cond_string := NULL;
16134 l_count := l_count+1;
16135 IF l_count = 1 AND l_attribute_name IS NOT NULL THEN
16136 l('IF ');
16137 l_add_then := TRUE;
16138 l_close_if := TRUE;
16139 ELSIF l_attribute_name IS NOT NULL THEN
16140 l('ELSIF ');
16141 l_add_then := TRUE;
16142 l_close_if := TRUE;
16143 ELSIF l_attribute_name IS NULL AND l_add_then THEN
16144 l('ELSE ');
16145 l_add_then := FALSE;
16146 l_close_if := TRUE;
16147 END IF;
16148 IF l_operation = 'LIKE' then
16149 l_value :=''''||HZ_TRANS_PKG.EXACT(l_value,NULL,l_attribute_name,l_entity_name)||'%''';
16150 ELSIF l_operation = 'IN' then
16151 l_tmp_value := l_value;
16152 l_value := NULL;
16153 LOOP
16154 l_index := instrb(l_tmp_value,',');
16155 IF l_index =0 then
16156 l_value := l_value ||','''||HZ_TRANS_PKG.EXACT(l_tmp_value,NULL,l_attribute_name,l_entity_name)||'''';
16157 l_value := '('||ltrim(l_value,',')||')';
16158 exit;
16159 END IF;
16160 l_value := l_value ||','''||HZ_TRANS_PKG.EXACT(substrb(l_tmp_value,1,l_index-1),NULL,l_attribute_name,l_entity_name)||'''';
16161 l_tmp_value := substrb(l_tmp_value,l_index+1);
16162 END LOOP;
16163
16164 ELSE
16165 l_value :=''''||HZ_TRANS_PKG.EXACT(l_value,NULL,l_attribute_name,l_entity_name)||'''';
16166 END IF;
16167
16168 IF l_entity_name = 'PARTY' THEN
16169 l_cond_string := 'HZ_TRANS_PKG.EXACT(p_party_search_rec.'||l_attribute_name||',NULL,'''||
16170 l_attribute_name||''',''PARTY'') '|| l_operation ||' '|| l_value;
16171 ELSIF l_entity_name = 'PARTY_SITES' THEN
16172 l_cond_string := '(p_party_site_list IS NOT NULL AND p_party_site_list.COUNT >0) AND (HZ_TRANS_PKG.EXACT(p_party_site_list(1).'||
16173 l_attribute_name||',NULL,'''||l_attribute_name||''',''PARTY_SITES'') '|| l_operation ||' '|| l_value ||')';
16174 ELSIF l_entity_name = 'CONTACTS' THEN
16175 l_cond_string := '(p_contact_list IS NOT NULL AND p_contact_list.COUNT >0) AND (HZ_TRANS_PKG.EXACT(p_contact_list(1).'||
16176 l_attribute_name||',NULL,'''||l_attribute_name||''',''CONTACTS'') '|| l_operation ||' '|| l_value ||')';
16177 ELSIF l_entity_name = 'CONTACT_POINTS' THEN
16178 l_cond_string := '(p_contact_point_list IS NOT NULL AND p_contact_point_list.COUNT >0) AND (HZ_TRANS_PKG.EXACT(p_contact_point_list(1).'||
16179 l_attribute_name||',NULL,'''||l_attribute_name||''',''CONTACT_POINTS'') '|| l_operation ||' '|| l_value ||')';
16180 END IF;
16181 IF l_add_then THEN
16182 l_cond_string := l_cond_string || ' THEN ';
16183 END IF;
16184
16185 l(l_cond_string);
16186 l(' l_condition_match_rule_id :='|| l_condition_match_rule_id ||';'); --Bug No: 4234203
16187 ldbg_s('Calling '||p_api_name||' using match rule id :'||l_condition_match_rule_id); --Bug No: 4234203
16188 l(' HZ_MATCH_RULE_'||l_condition_match_rule_id||'.'||p_api_name||'('|| p_parameters ||');');
16189 END LOOP;
16190 CLOSE c_ref_conditions;
16191 IF l_close_if THEN
16192 l('END IF;');
16193 END IF;
16194 --Start of Bug No: 4234203
16195 l('EXCEPTION');
16196 l(' WHEN OTHERS THEN') ;
16197 l(' OPEN c_rule_name(l_condition_match_rule_id);');
16198 l(' FETCH c_rule_name INTO l_cond_rule_name;');
16199 l(' CLOSE c_rule_name; ');
16200 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_SRCH_ERROR''); ');
16201 l(' FND_MESSAGE.SET_TOKEN(''MATCH_RULE'',l_cond_rule_name); ');
16202 l(' FND_MSG_PUB.ADD; ');
16203 l(' RAISE; ');
16204 l('END;');
16205 --End of Bug No: 4234203
16206 END pop_conditions;
16207 ---End of Code Change for Match Rule Set
16208
16209 --Start of Bug No: 4162385
16210 FUNCTION get_entity_level_score(p_match_rule_id NUMBER,p_entity_name VARCHAR2)
16211 RETURN NUMBER
16212 IS
16213 l_score NUMBER;
16214 BEGIN
16215 SELECT nvl(sum(sec.score),0) INTO l_score
16216 FROM HZ_MATCH_RULE_SECONDARY sec,HZ_TRANS_ATTRIBUTES_VL attr
16217 WHERE sec.match_rule_id = p_match_rule_id
16218 AND sec.attribute_id = attr.attribute_id
16219 AND attr.entity_name = p_entity_name;
16220
16221 RETURN l_score;
16222 END get_entity_level_score;
16223 --End of Bug No: 4162385
16224
16225 END;