[Home] [Help]
PACKAGE BODY: APPS.HZ_MATCH_RULE_COMPILE
Source
4 g_party_and_query VARCHAR2(4000);
1 PACKAGE BODY HZ_MATCH_RULE_COMPILE AS
2 /*$Header: ARHDQMCB.pls 120.105 2011/03/10 11:28:56 amstephe ship $ */
3
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
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||');');
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
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 ;');
317 l(' current_pos := current_pos + 255 ;');
314 l(' WHILE remainder_str IS NOT NULL');
315 l(' LOOP');
316 l(' dbms_output.put_line(substr(remainder_str, 1 , 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
443 LOOP
440 where f.function_id = pt.function_id
441 and pt.primary_attribute_id = attrs.primary_attribute_id
442 )
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
579 OPEN check_null_set;
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. */
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
728 l_sql VARCHAR2(4000);
725 ) IS
726
727 FIRST BOOLEAN;
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');
851 l(' END IF;');
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;');
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;
976 l(' END;');
973 l(' END IF;');
974 d(fnd_log.level_procedure,'find_persons(-)');
975 gen_exception_block;
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,');
1100 l(' x_msg_data OUT VARCHAR2');
1097 l(' x_num_matches OUT NUMBER,');
1098 l(' x_return_status OUT VARCHAR2,');
1099 l(' x_msg_count OUT NUMBER,');
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
1236 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
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');
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;');
1373 l(' FETCH c_match_rule INTO l_cmp_flag;');
1370 l(' END IF;');
1371
1372 l(' OPEN c_match_rule;');
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;');
1494 l(' FND_MSG_PUB.ADD;');
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'');');
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('');
1604 l(' FND_MSG_PUB.initialize;');
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');
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;
1644 IF check_proc(RULE.MATCH_RULE_ID) THEN
1641 ELSE
1642 l(' ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1643 END IF;
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
1767 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
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');
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,');
1892 l(' x_msg_count OUT 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,');
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,');
2020 l(' p_contact_point_list IN contact_point_list,');
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,');
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'');');
2151 l(' HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_party_for_search(');
2148 l(' FND_MSG_PUB.ADD;');
2149 l(' RAISE FND_API.G_EXC_ERROR;');
2150 l(' END IF;');
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
2291 AND a.entity_name= p_entity
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
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
2403 l(' ,p_idx IN NUMBER) IS');
2400 ORDER BY sa.attribute_id) LOOP
2401 l(' ,p_table_'||TX.STAGED_ATTRIBUTE_COLUMN||' VARCHAR2');
2402 END LOOP;
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 in('S','W') 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 in('S','W') 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;
2500
2497 entity VARCHAR2(255);
2498
2499 BEGIN
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
2612 l(' FROM HZ_CONTACT_POINTS ');
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 ');
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 in('S','W') 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 in('S','W') 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
2751 ','||tmp||',l_prim_temp);');
2748 l(' HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
2749 l(' '||l_list||'(I).'||
2750 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
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 in('S','W') 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
2892 l_match_str VARCHAR2(255);
2889 FIRST boolean;
2890 FIRST1 boolean;
2891 UPSTMT boolean;
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 in ('S','W') 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 ELSIF l_purpose = 'W'
2994 THEN
2995 l('');
2996 l('-- ==========================================================================================');
2997 l('-- ============MATCH RULE COMPILER GENERATED CODE FOR WEB SERVICE MATCH RULES ========');
2998 l('-- ==========================================================================================');
2999 l('');
3000 END IF;
3001
3002 l(' TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;');
3003 l(' call_order vlisttype;');
3004 l(' call_max_score HZ_PARTY_SEARCH.IDList;');
3005 l(' call_type vlisttype;');
3006 l(' g_party_stage_rec HZ_PARTY_STAGE.party_stage_rec_type;');
3007 l(' g_party_site_stage_list HZ_PARTY_STAGE.party_site_stage_list;');
3008 l(' g_contact_stage_list HZ_PARTY_STAGE.contact_stage_list;');
3009 l(' g_contact_pt_stage_list HZ_PARTY_STAGE.contact_pt_stage_list;');
3010 l(' g_mappings HZ_PARTY_SEARCH.IDList;');
3011 l(' g_max_id NUMBER:=2000000000;');
3012 l(' g_other_party_level_attribs BOOLEAN;');
3013 l('');
3014 l(' g_debug_count NUMBER := 0;');
3015 --l(' g_debug BOOLEAN := FALSE;');
3016 l(' g_score_until_thresh BOOLEAN:=false;');
3017 l(' ');
3018 l(' g_thres_score NUMBER:=1000;');
3019 l(' g_ps_den_only BOOLEAN;');
3020 l(' g_index_owner VARCHAR2(255);');
3021 l(' distinct_search_cpt_types NUMBER ; ');
3025
3022 --l(' PROCEDURE enable_debug;');
3023 --l(' PROCEDURE disable_debug;');
3024
3026 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
3027 ldbg_procedure;
3028 l('FUNCTION check_estimate_hits (');
3029 l(' p_entity VARCHAR2,');
3030 l(' p_contains_str VARCHAR2) RETURN NUMBER IS');
3031 l(' ');
3032 l(' ustatus VARCHAR2(255);');
3033 l(' dstatus VARCHAR2(255);');
3034 l(' l_bool BOOLEAN;');
3035 l(' l_hits NUMBER := 0;'); --Bug No: 6048573
3036 l('BEGIN');
3037 l(' IF g_index_owner IS NULL THEN');
3038 l(' l_bool := fnd_installation.GET_APP_INFO(''AR'',ustatus,dstatus,g_index_owner);');
3039 l(' END IF;');
3040 l(' IF p_entity=''PARTY'' THEN');
3041 l('');
3042 l(' l_hits := CTX_QUERY.count_hits(');
3043 l(' g_index_owner||''.''||''HZ_STAGE_PARTIES_T1'',p_contains_str, false);');
3044 l(' ELSIF p_entity=''PARTY_SITES'' THEN');
3045 l(' l_hits := CTX_QUERY.count_hits(');
3046 l(' g_index_owner||''.''||''HZ_STAGE_PARTY_SITES_T1'',p_contains_str, false);');
3047 l(' ELSIF p_entity=''CONTACTS'' THEN');
3048 l(' l_hits := CTX_QUERY.count_hits(');
3049 l(' g_index_owner||''.''||''HZ_STAGE_CONTACT_T1'',p_contains_str, false);');
3050 l(' ELSIF p_entity=''CONTACT_POINTS'' THEN');
3051 l(' l_hits := CTX_QUERY.count_hits(');
3052 l(' g_index_owner||''.''||''HZ_STAGE_CPT_T1'',p_contains_str, false);');
3053 l(' END IF;');
3054 l(' RETURN floor(l_hits/2) ;'); --Bug No: 6048573
3055 l(' ');
3056 l('');
3057 --bug 4959719 start
3058 l(' exception');
3059 l(' when others then');
3060 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
3061 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
3062 l(' FND_MSG_PUB.ADD;');
3063 l(' RAISE FND_API.G_EXC_ERROR;');
3064 --Start Bug No: 3032742.
3065 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
3066 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
3067 l(' FND_MSG_PUB.ADD;');
3068 l(' RAISE FND_API.G_EXC_ERROR;');
3069 --End Bug No : 3032742.
3070 l(' else ');
3071 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
3072 l(' end if;');
3073 --bug 4959719 end
3074 l('END;');
3075
3076 -- VJN Introduced function for Bug 3979089
3077 l('');
3078 l('');
3079 l('FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)');
3080 l('RETURN VARCHAR2');
3081 l('IS');
3082 l('p_person_restrict_sql VARCHAR2(32767);');
3083 l('p_restrict1_sql VARCHAR2(32767);');
3084 l('p_final_restrict_sql VARCHAR2(32767);');
3085 l('BEGIN');
3086 l(' p_final_restrict_sql := p_restrict_sql ; ');
3087 l(' IF p_restrict_sql IS NOT NULL');
3088 l(' THEN');
3089 l(' IF instrb(p_restrict_sql, ''STAGE.'') > 0');
3090 l(' THEN');
3091 l(' p_restrict1_sql := replace( p_restrict_sql, ''STAGE.'', ''stage1.'');');
3092 l(' ELSIF instrb(p_restrict_sql, ''stage.'') > 0');
3093 l(' THEN');
3094 l(' p_restrict1_sql := replace( p_restrict_sql, ''stage.'', ''stage1.'');');
3095 l(' END IF;');
3096
3097 l(' p_person_restrict_sql := ''exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r'' ');
3098 l(' ||' || ' '' where oc.org_contact_id = stage.org_contact_id and'' ');
3099 l(' ||' || ' '' r.relationship_id = oc.party_relationship_id'' ');
3100 l(' ||' || ' '' and r.subject_type = ''''PERSON'''' AND r.object_type = ''''ORGANIZATION'''' '' ');
3101 l(' ||' || ' '' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id'' ');
3102 l(' ||' || ' '' and '' || p_restrict1_sql || '' ) )'' ; ');
3103
3104 l('p_final_restrict_sql := ''((stage.org_contact_id is null and '' || p_restrict_sql || '') or (stage.org_contact_id is not null and '' ');
3105 l(' || p_person_restrict_sql || '' ))''; ');
3106 l(' END IF;');
3107 l(' return p_final_restrict_sql ;');
3108 l('END;');
3109
3110 /***********************************************************************
3111 * Private procedure to map IDs greater than the max allowed by PLSQL
3112 * Index-by tables.
3113 ************************************************************************/
3114 l(' FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS');
3115 l(' l_newidx NUMBER;');
3116 l(' BEGIN ');
3117 ldbg_s('-----------------','calling the function map_id');
3118 ldbg_sv('argument in_id = ', 'in_id');
3119
3120 l(' IF in_id<g_max_id THEN ');
3121 l(' RETURN in_id;');
3122 l(' ELSE');
3123 l(' FOR I in 1..g_mappings.COUNT LOOP');
3124 l(' IF in_id = g_mappings(I) THEN');
3125 l(' RETURN (g_max_id+I);');
3126 l(' END IF;');
3127 l(' END LOOP;');
3128 l(' l_newidx := g_mappings.COUNT+1;');
3129 l(' g_mappings(l_newidx) := in_id;');
3130 l(' RETURN (g_max_id+l_newidx);');
3131 l(' END IF;');
3132 l(' END;');
3133
3134 l(' FUNCTION GET_PARTY_SCORE ');
3135 FIRST := TRUE;
3136 FOR TX IN (
3137 SELECT f.staged_attribute_column
3138 FROM hz_trans_functions_vl f, hz_secondary_trans st,
3139 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
3140 WHERE sa.match_rule_id = p_rule_id
3141 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
3142 AND st.function_id = f.function_id
3143 AND a.attribute_id = sa.attribute_id
3144 AND a.entity_name= 'PARTY'
3145 ORDER BY sa.attribute_id) LOOP
3146 IF FIRST THEN
3147 l(' (');
3148 l(' p_table_'||TX.staged_attribute_column||' VARCHAR2');
3149 FIRST := FALSE;
3150 ELSE
3151 l(' ,p_table_'||TX.staged_attribute_column||' VARCHAR2');
3152 END IF;
3153 END LOOP;
3154 IF FIRST THEN
3155 l(' RETURN NUMBER IS');
3156 ELSE
3157 l(' ) RETURN NUMBER IS');
3158 END IF;
3159 l(' total NUMBER := 0;');
3160 l(' BEGIN');
3161 ldbg_s('-----------------','calling the function get_party_score');
3162 d(fnd_log.level_procedure,'GET_PARTY_SCORE ');
3163 l(' IF g_score_until_thresh AND (total)>=g_thres_score THEN');
3164 ldbg_sv('get_party_score returned total = ', 'total');
3165 l(' RETURN total;');
3166 l(' END IF;');
3167 FOR SECATTRS IN (
3168 SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id
3169 FROM HZ_TRANS_ATTRIBUTES_VL a,
3170 HZ_MATCH_RULE_SECONDARY s
3171 WHERE s.match_rule_id = p_rule_id
3172 AND s.attribute_id = a.attribute_id
3173 AND a.entity_name = 'PARTY') LOOP
3174 FIRST := TRUE;
3175 FOR SECTRANS IN (
3176 SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
3177 TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
3178 FROM HZ_SECONDARY_TRANS s,
3179 HZ_TRANS_FUNCTIONS_VL f
3180 WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
3181 AND s.FUNCTION_ID = f.FUNCTION_ID
3182 ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
3183 IF FIRST THEN
3184 FIRST := FALSE;
3185 IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
3186 l(' IF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3187 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
3188 ELSE
3189 IF(l_purpose IN ('S','W') and SECATTRS.attribute_id=16) --6334571
3190 THEN
3191 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||
3192 ' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
3193 ' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3194 ' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||SECTRANS.FUNCTION_ID||') THEN');
3195
3196
3197 ELSE
3198 l(' IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3199 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
3200 END IF;
3201 END IF;
3202 ELSE
3203 IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
3204 l(' ELSIF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3205 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
3206 ELSE
3207 IF(l_purpose IN ('S','W') and SECATTRS.attribute_id=16) --6334571
3208 THEN
3209
3210 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||
3211 ' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
3212 ' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3213 ' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||SECTRANS.FUNCTION_ID||') THEN');
3214
3215 ELSE
3216
3217 l(' ELSIF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3218 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
3219 END IF;
3220 END IF;
3221 END IF;
3222 l(' total := total+'||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
3223 l(' IF g_score_until_thresh AND (total)>=g_thres_score THEN ');
3224 ldbg_sv('get_party_score returned total = ', 'total');
3225 l(' RETURN total;');
3226 l(' END IF;');
3227 END LOOP;
3228 l(' END IF;');
3229 END LOOP;
3230 l(' RETURN total;');
3231 l(' END;');
3232
3233 add_score_function('PARTY_SITES',p_rule_id);
3234 add_score_function('CONTACTS',p_rule_id);
3235 add_score_function('CONTACT_POINTS',p_rule_id);
3236 add_get_attrib_func(p_rule_id);
3237 add_insert_function('PARTY',p_rule_id);
3238 add_insert_function('PARTY_SITES',p_rule_id);
3239 add_insert_function('CONTACTS',p_rule_id);
3240 add_insert_function('CONTACT_POINTS',p_rule_id);
3241
3242 --- VJN Introduced for conditional Word Replacements
3243 --- Populate the global condition record before doing the mapping
3244 --- so that mapping takes into account conditional word replacements if any
3245 generate_ent_cond_pop_rec_proc('PARTY', p_rule_id);
3246 l('');
3247 generate_ent_cond_pop_rec_proc('PARTY_SITES', p_rule_id);
3248 l('');
3249 generate_ent_cond_pop_rec_proc('CONTACTS', p_rule_id);
3250 l('');
3251 generate_ent_cond_pop_rec_proc('CONTACT_POINTS', p_rule_id);
3252 l('');
3253
3254
3255 l(' PROCEDURE init_score_context (');
3256 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type:=');
3257 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
3258 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list:=');
3259 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
3260 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list:= ');
3261 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
3262 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list:=');
3263 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST');
3264 l(' ) IS');
3265 l(' l_dummy NUMBER;');
3266 l(' BEGIN');
3267 ldbg_s('-----------------','calling the procedure init_score_context');
3268 ldbg_s('In init_score_context calling the Map procedures');
3269 l(' -- Transform search criteria');
3270 l(' HZ_TRANS_PKG.clear_globals;');
3271 l(' MAP_PARTY_REC(FALSE,p_party_search_rec, l_dummy, g_party_stage_rec);');
3272 l(' MAP_PARTY_SITE_REC(FALSE,p_party_site_list, l_dummy, g_party_site_stage_list);');
3273 l(' MAP_CONTACT_REC(FALSE,p_contact_list, l_dummy, g_contact_stage_list);');
3274 l(' MAP_CONTACT_POINT_REC(FALSE,p_contact_point_list, l_dummy, g_contact_pt_stage_list);');
3275 l('');
3276 l(' END;');
3277
3278
3279 l(' FUNCTION init_search(');
3280 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type:=');
3281 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
3282 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list:=');
3283 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
3284 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list:= ');
3285 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
3286 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list:=');
3287 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,');
3288 l(' p_match_type IN VARCHAR2,');
3289 l(' x_party_max_score OUT NUMBER,');
3290 l(' x_ps_max_score OUT NUMBER,');
3291 l(' x_contact_max_score OUT NUMBER,');
3292 l(' x_cpt_max_score OUT NUMBER');
3293 l(' ) RETURN NUMBER IS ');
3294 l(' l_entered_max_score NUMBER:=0;');
3295 l(' l_ps_entered_max_score NUMBER:=0;');
3296 l(' l_ct_entered_max_score NUMBER:=0;');
3297 l(' l_cpt_entered_max_score NUMBER:=0;');
3298 l(' vlist vlisttype;');
3299 l(' maxscore HZ_PARTY_SEARCH.IDList;');
3300 l(' l_name VARCHAR2(200);');
3301 l(' l_idx NUMBER; ');
3302 l(' l_num NUMBER; ');
3303 l(' total NUMBER; ');
3304 l(' threshold NUMBER; ');
3305 l(' BEGIN');
3306 ldbg_s('-----------------','calling the function init_search');
3307 l(' IF NOT check_prim_cond (p_party_search_rec,');
3308 l(' p_party_site_list,');
3309 l(' p_contact_list,');
3310 l(' p_contact_point_list) THEN');
3311 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_PRIMARY_COND'');');
3312 l(' FND_MSG_PUB.ADD;');
3313 l(' RAISE FND_API.G_EXC_ERROR;');
3314 l(' END IF;');
3315 IF l_max_score=1 THEN
3316 ldbg_s('In init_search calling util package set_no_score');
3317 l(' HZ_DQM_SEARCH_UTIL.set_no_score;');
3318 ELSE
3319 ldbg_s('In init_search calling util package set_score');
3320 l(' HZ_DQM_SEARCH_UTIL.set_score;');
3321 END IF;
3322 l(' g_mappings.DELETE;');
3323 l(' g_party_site_stage_list.DELETE;');
3324 l(' g_contact_stage_list.DELETE;');
3325 l(' g_contact_pt_stage_list.DELETE;');
3326 l(' call_order.DELETE;');
3327 l(' call_max_score.DELETE;');
3328 l(' HZ_DQM_SEARCH_UTIL.new_search;');
3329 l(' HZ_TRANS_PKG.set_party_type(p_party_search_rec.PARTY_TYPE);');
3330 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
3331 l('');
3332 ldbg_s('In init_search calling the Map procedures');
3333 l(' -- Transform search criteria');
3334 -- VJN Introduced for conditional Word Replacements
3335 --- Populate the global condition record before doing the mapping
3336 --- so that mapping takes into account conditional word replacements if any
3337 l('POP_PARTY_COND_REC(p_party_search_rec);');
3338 l('');
3339 l('POP_PARTY_SITES_COND_REC(p_party_site_list);');
3340 l('');
3341 l('POP_CONTACTS_COND_REC(p_contact_list);');
3342 l('');
3343 l('POP_CONTACT_POINTS_COND_REC(p_contact_point_list);');
3344 l('');
3345
3346 l(' MAP_PARTY_REC(TRUE,p_party_search_rec, l_entered_max_score, g_party_stage_rec);');
3347 l(' MAP_PARTY_SITE_REC(TRUE,p_party_site_list, l_ps_entered_max_score, g_party_site_stage_list);');
3348 l(' MAP_CONTACT_REC(TRUE,p_contact_list, l_ct_entered_max_score, g_contact_stage_list);');
3352 ldbg_s('In init_search determining call order of entities');
3349 l(' MAP_CONTACT_POINT_REC(TRUE,p_contact_point_list, l_cpt_entered_max_score, g_contact_pt_stage_list);');
3350 l('');
3351 l(' ');
3353 l(' l_idx := l_entered_max_score+1;');
3354 l(' vlist (l_idx) := ''PARTY'';');
3355 l(' maxscore (l_idx) := l_entered_max_score;');
3356
3357 l(' l_idx := l_ps_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) := ''PARTY_SITE'';');
3362 l(' maxscore (l_idx) := l_ps_entered_max_score;');
3363 l('');
3364 l(' l_idx := l_ct_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'';');
3369 l(' maxscore (l_idx) := l_ct_entered_max_score;');
3370 l('');
3371 l(' l_idx := l_cpt_entered_max_score+1;');
3372 l(' WHILE vlist.EXISTS(l_idx) LOOP');
3373 l(' l_idx := l_idx+1;');
3374 l(' END LOOP;');
3375 l(' vlist (l_idx) := ''CONTACT_POINT'';');
3376 l(' maxscore (l_idx) := l_cpt_entered_max_score;');
3377 l('');
3378 l(' l_num := 1;');
3379 l(' l_idx := vlist.LAST;');
3380 ldbg_s('Call order is the following');
3381 l(' WHILE l_idx IS NOT NULL LOOP');
3382 l(' call_order(l_num) := vlist(l_idx);');
3383 l(' call_max_score(l_num) := maxscore(l_idx);');
3384 ldbg_s('-----------------');
3385 ldbg_sv('l_num = ','l_num','entity = ', 'vlist(l_idx)', 'call_max_score for entity = ', 'maxscore(l_idx)');
3386 l(' l_idx := vlist.PRIOR(l_idx);');
3387 l(' l_num := l_num+1;');
3388 l(' END LOOP; ');
3389 ldbg_s('-----------------');
3390 l(' call_order(5):=''NONE'';');
3391 ldbg_s('In init_search determining call type of entities');
3392 l(' IF p_match_type = '' OR '' THEN');
3393 ldbg_s('This is an OR Match Rule');
3394 IF l_purpose = 'S' THEN
3395 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));');
3396 ldbg_s('This is a search Match Rule');
3397 ldbg_sv('Threshold defined in Match Rule, after rounding off is ', 'threshold');
3398 ELSE
3399 l(' threshold := '||l_match_threshold||';');
3400 ldbg_s('This is a Duplicate Identification Match Rule');
3401 ldbg_sv('Threshold defined in Match Rule is ', 'threshold');
3402 END IF;
3403
3404 l(' l_idx := vlist.FIRST;');
3405 l(' total := 0;');
3406 l(' l_num := 4;');
3407 l(' WHILE l_idx IS NOT NULL LOOP');
3408 l(' total := total+maxscore(l_idx);');
3409 l(' IF total<threshold THEN');
3410 l(' call_type(l_num) := ''AND'';');
3411 l(' ELSE');
3412 l(' call_type(l_num) := ''OR'';');
3413 l(' END IF;');
3414 l(' l_idx := vlist.NEXT(l_idx);');
3415 l(' l_num := l_num-1;');
3416 l(' END LOOP;');
3417 l(' ELSE');
3418 l(' call_type(1) := ''OR'';');
3419 l(' call_type(2) := ''AND'';');
3420 l(' call_type(3) := ''AND'';');
3421 l(' call_type(4) := ''AND'';');
3422 l(' END IF;');
3423 ldbg_s('Call types are the following');
3424 ldbg_s('-----------------');
3425 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)');
3426 ldbg_s('-----------------');
3427 l(' x_party_max_score := l_entered_max_score;');
3428 l(' x_ps_max_score := l_ps_entered_max_score;');
3429 l(' x_contact_max_score := l_ct_entered_max_score;');
3430 l(' x_cpt_max_score := l_cpt_entered_max_score;');
3431 ldbg_s('init_search returned with the following max scores at each level');
3432 ldbg_s('-----------------');
3433 ldbg_sv('entered party max score = ', 'l_entered_max_score',
3434 'entered paty site max score = ', 'l_ps_entered_max_score',
3435 'entered contact max score = ', 'l_ct_entered_max_score',
3436 'entered contact point max score = ', 'l_cpt_entered_max_score');
3437 ldbg_sv('entered total score = ', '(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score)');
3438 ldbg_s('-----------------');
3439 l(' RETURN (l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score);');
3440 l(' END;');
3441
3442
3443 l(' FUNCTION INIT_PARTY_QUERY(p_match_str VARCHAR2, ');
3444 l(' p_denorm_str VARCHAR2,');
3445 l(' p_party_max_score NUMBER,');
3446 l(' p_denorm_max_score NUMBER,');
3447 l(' p_non_denorm_max_score NUMBER,');
3448 l(' p_threshold NUMBER) RETURN VARCHAR2 IS');
3449 l(' l_party_contains_str VARCHAR2(32000); ');
3450 l(' l_party_filter VARCHAR2(1) := null;');
3451 l(' l_prim_temp VARCHAR2(4000);');
3452 l(' l_denorm_str VARCHAR2(4000);');
3453 l(' BEGIN');
3454 ldbg_s('-----------------','calling the function init_party_query');
3455 ldbg_sv('passed in p_match_str is ', 'p_match_str');
3456 ldbg_sv('passed in p_denorm_str is ', 'p_denorm_str');
3457 ldbg_sv('passed in p_denorm_max_score is ', 'p_denorm_max_score');
3458 ldbg_sv('passed in p_non_denorm_max_score is ', 'p_non_denorm_max_score');
3459 ldbg_sv('passed in p_threshold is ', 'p_threshold');
3460
3461 l(' IF p_party_max_score<=p_threshold OR p_match_str='' AND '' THEN');
3462 l(' l_denorm_str := NULL;');
3463 ldbg_sv('calculated denorm string l_denorm_str is ', 'l_denorm_str' );
3464 l(' ELSE');
3465 l(' l_denorm_str := p_denorm_str;');
3466 ldbg_sv('calculated denorm string l_denorm_str is ', 'l_denorm_str');
3467 l(' END IF;');
3468
3469 FIRST := TRUE;
3470 g_party_or_query := null;
3471 g_party_and_query := null;
3475 FROM HZ_TRANS_ATTRIBUTES_VL a,
3472 cnt := cnt+1;
3473 FOR PRIMATTRS IN (
3474 SELECT a.ATTRIBUTE_ID, PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME, nvl(SCORE,0) SCORE
3476 HZ_MATCH_RULE_PRIMARY p,
3477 HZ_MATCH_RULE_SECONDARY s
3478 WHERE p.match_rule_id = p_rule_id
3479 AND s.match_rule_id (+) = p_rule_id
3480 AND s.attribute_id (+) = a.attribute_id
3481 AND p.attribute_id = a.attribute_id
3482 AND a.ENTITY_NAME = 'PARTY'
3483 AND nvl(FILTER_FLAG,'N') <> 'Y'
3484 ORDER BY SCORE) LOOP
3485 FIRST1 := TRUE;
3486 l('');
3487 l(' -- Setup query string for '||PRIMATTRS.ATTRIBUTE_NAME);
3488 l(' l_prim_temp := null;');
3489 FOR PRIMTRANS IN (
3490 SELECT f.STAGED_ATTRIBUTE_COLUMN, f.TRANSFORMATION_NAME, nvl(f.PRIMARY_FLAG,'N') PRIMARY_FLAG, f.PROCEDURE_NAME
3491 FROM HZ_TRANS_FUNCTIONS_VL f,
3492 HZ_PRIMARY_TRANS pt
3493 WHERE pt.PRIMARY_ATTRIBUTE_ID = PRIMATTRS.PRIMARY_ATTRIBUTE_ID
3494 AND pt.FUNCTION_ID = f.FUNCTION_ID)
3495 LOOP
3496 IF FIRST1 THEN
3497 l_trans := '(g_party_stage_rec.'||
3498 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
3499 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
3500 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
3501 FIRST1 := FALSE;
3502 ELSE
3503 l_trans := l_trans||' OR (g_party_stage_rec.'||
3504 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
3505 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
3506 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
3507 END IF;
3508 IF PRIMTRANS.PRIMARY_FLAG = 'Y' THEN
3509 tmp := '''A'||PRIMATTRS.ATTRIBUTE_ID||'''';
3510 ELSE
3511 tmp := 'NULL';
3512 END IF;
3513 --- Modified for Bug 4016594
3514 IF PRIMATTRS.ATTRIBUTE_NAME = 'DUNS_NUMBER_C' AND upper(PRIMTRANS.PROCEDURE_NAME) = 'HZ_TRANS_PKG.EXACT' THEN
3515 l(' IF g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NOT NULL THEN');
3516 l(' IF ltrim(g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||',''0'') IS NOT NULL THEN');
3517 l(' FOR I in lengthb(ltrim(g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||',''0''))..9 LOOP');
3518 l(' HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
3519 l(' lpad(ltrim(g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
3520 ',''0''),I,chr('||ascii('0')||')),'||tmp||',l_prim_temp);');
3521 l(' END LOOP;');
3522 l(' END IF;');
3523 l(' END IF;');
3524 ELSE
3525 l(' HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
3526 l(' g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
3527 ','||tmp||',l_prim_temp);');
3528 END IF;
3529
3530 END LOOP;
3531
3532 IF FIRST THEN
3533 FIRST := FALSE;
3534 g_party_or_query := '('||l_trans||')';
3535 g_party_and_query := '('||l_trans||')';
3536 ELSE
3537 g_party_or_query := g_party_or_query || ' OR (' || l_trans||')';
3538 g_party_and_query := g_party_and_query || ' AND (' || l_trans||')';
3539 END IF;
3540
3541 l('');
3542 IF PRIMATTRS.SCORE = 0 THEN
3543 l(' HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);');
3544 ELSE
3545 l(' IF l_denorm_str IS NOT NULL THEN');
3546 l(' IF (p_non_denorm_max_score+'||PRIMATTRS.SCORE||')>=p_threshold THEN');
3547 l(' l_denorm_str := NULL;');
3548 l(' HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);');
3549 l(' ELSIF (p_non_denorm_max_score+p_denorm_max_score+'||PRIMATTRS.SCORE||')>=p_threshold THEN');
3550 l(' HZ_DQM_SEARCH_UTIL.add_attribute_with_denorm(l_prim_temp, p_match_str, l_denorm_str, l_party_contains_str);');
3551 l(' l_denorm_str := NULL;');
3552 l(' END IF;');
3553 l(' ELSE');
3554 l(' HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);');
3555 l(' END IF;');
3556 END IF;
3557 END LOOP;
3558 l(' IF lengthb(l_party_contains_str) > 4000 THEN');
3559 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_SEARCH_CRIT_LARGE_ERROR'');');
3560 l(' FND_MESSAGE.SET_TOKEN(''ENTITY'',''PARTY'');');
3561 l(' FND_MSG_PUB.ADD;');
3562 l(' RAISE FND_API.G_EXC_ERROR;');
3563 l(' END IF;');
3564 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');
3565 ldbg_s('party contains string returned by init_search is an AND between these strings ');
3566 ldbg_sv('l_party_contains_str = ', 'l_party_contains_str');
3567 ldbg_sv('p_denorm_str = ', 'p_denorm_str');
3568 l(' RETURN ''(''||l_party_contains_str||'') AND (''||p_denorm_str||'')'';');
3569 l(' ELSE');
3570 ldbg_s('party contains string returned by init_search is ', 'l_party_contains_str');
3571 l(' RETURN l_party_contains_str;');
3572 l(' END IF;');
3573 l(' END;');
3574
3575 get_column_list(p_rule_id, 'PARTY',l_p_select_list,l_p_param_list, l_p_into_list);
3576 get_column_list(p_rule_id, 'PARTY_SITES',l_ps_select_list,l_ps_param_list, l_ps_into_list);
3577 get_column_list(p_rule_id, 'CONTACTS',l_c_select_list,l_c_param_list, l_c_into_list);
3578 get_column_list(p_rule_id, 'CONTACT_POINTS',l_cpt_select_list,l_cpt_param_list, l_cpt_into_list);
3579
3580 l_party_filter_str := NULL;
3581 l_dyn_party_filter_str := NULL;
3582 FIRST := TRUE;
3583 cnt := 1;
3584 for PRIMTRANS IN (
3585 SELECT f.STAGED_ATTRIBUTE_COLUMN
3586 FROM HZ_TRANS_FUNCTIONS_VL f,
3590 WHERE pattr.MATCH_RULE_ID = p_rule_id
3587 HZ_TRANS_ATTRIBUTES_VL a,
3588 HZ_MATCH_RULE_PRIMARY pattr,
3589 HZ_PRIMARY_TRANS pfunc
3591 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
3592 AND a.ENTITY_NAME = 'PARTY'
3593 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
3594 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
3595 AND FILTER_FLAG = 'Y'
3596
3597 UNION
3598
3599 SELECT f.STAGED_ATTRIBUTE_COLUMN
3600 FROM HZ_TRANS_FUNCTIONS_VL f,
3601 HZ_TRANS_ATTRIBUTES_VL a
3602 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
3603 AND a.entity_name = 'PARTY'
3604 AND a.attribute_name='PARTY_TYPE'
3605 AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
3606 AND nvl(f.active_flag,'Y')='Y'
3607 AND ROWNUM=1
3608 ) LOOP
3609
3610 IF FIRST THEN
3611 l_party_filter_str := '(g_party_stage_rec.'||
3612 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3613 ' IS NULL OR g_party_stage_rec.'||
3614 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' = p.' ||
3615 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3616 l_dyn_party_filter_str := '(:'||
3617 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3618 ' IS NULL OR :'||
3619 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' = p.' ||
3620 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3621 FIRST := FALSE;
3622 ELSE
3623 l_dyn_party_filter_str := l_dyn_party_filter_str || ' AND ' ||
3624 '(:'||
3625 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3626 ' IS NULL OR :'||
3627 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' = p.' ||
3628 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3629 l_party_filter_str := l_party_filter_str || ' AND ' ||
3630 '(g_party_stage_rec.'||
3631 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3632 ' IS NULL OR g_party_stage_rec.'||
3633 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' = p.' ||
3634 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3635 END IF;
3636 l_party_filt_bind(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3637 cnt:=cnt+1;
3638 END LOOP;
3639
3640 add_query_gen_func('PARTY_SITES',p_rule_id);
3641 add_query_gen_func('CONTACTS',p_rule_id);
3642 add_query_gen_func('CONTACT_POINTS',p_rule_id);
3643
3644 /*********************************************************************************
3645 * Match rule private procedures to open a cursor for performing intermedia queries.
3646 * open_party_cursor - Intermedia query on HZ_STAGED_PARTIES
3647 * open_party_site_cursor - Intermedia query on HZ_STAGED_PARTY_SITES
3648 * open_contact_cursor - Intermedia query on HZ_STAGED_CONTACTS
3649 * open_contact_pt_cursor - Intermedia query on HZ_STAGED_CONTACT_POINTS
3650 *
3651 * Input:
3652 * p_dup_party_id : Called in the duplicate identification case, to filter off
3653 * the party for which we are trying find duplicates.
3654 * p_restrict_sql : restrict_sql criteria passed to match rule
3655 * p_contains_str : Intermedia query string
3656 * p_search_ctx_id : Only to called from find_party_details, for filtering against
3657 * party_ids returned by the party query
3658 * p_party_id : USed in the get_matching_party_sites, get_matching_contacts and
3659 * get_matching_cpts procedures, to only find records belonging to the specified
3660 * party_id
3661 *********************************************************************************/
3662
3663 IF l_purpose IN ('S','W') THEN
3664 l_party_name_score:='decode(TX8,g_party_stage_rec.TX8||'' '',100,90)';
3665 ELSE
3666 BEGIN
3667 SELECT to_char(score) INTO l_party_name_score from HZ_MATCH_RULE_SECONDARY s, HZ_TRANS_ATTRIBUTES_VL a
3668 WHERE a.attribute_id = s.attribute_id
3669 AND s.match_rule_id = p_rule_id
3670 AND attribute_name = 'PARTY_NAME';
3671 EXCEPTION
3672 WHEN NO_DATA_FOUND THEN
3673 l_party_name_score := '0';
3674 END;
3675 END IF;
3676 l(' PROCEDURE open_party_cursor_direct (');
3677 l(' p_dup_party_id NUMBER, ');
3678 l(' p_restrict_sql VARCHAR2, ');
3679 l(' p_match_str VARCHAR2,');
3680 l(' p_search_merged VARCHAR2,');
3681 l(' p_party_contains_str VARCHAR2,');
3682 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
3683 l(' l_sqlstr VARCHAR2(4000);');
3684 l(' l_search_merged VARCHAR2(1);');
3685 l(' BEGIN');
3686 ldbg_s('-----------------','calling procedure open party cursor direct');
3687 l(' IF (p_search_merged is null) then ');
3688 l(' l_search_merged := ''N''; ');
3689 l(' ELSE ');
3690 l(' l_search_merged := p_search_merged; ');
3691 l(' END IF; ');
3692 ldbg_sv('Search Merged Flag - ','l_search_merged');
3693 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');
3694 ldbg_s('Restrict SQL is NULL and other conditions met to OPEN x_cursor');
3695 l(' OPEN x_cursor FOR ');
3696 l(' SELECT PARTY_ID '|| l_p_select_list);
3697 l(' FROM hz_staged_parties ');
3698 l(' WHERE TX8 LIKE g_party_stage_rec.TX8||'' %''');
3699 l(' AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||'' '' = TX36))');
3700 l(' AND( (l_search_merged =''Y'' ) ');
3701 l(' OR (l_search_merged = ''I'' AND nvl(status, ''A'') in (''A'', ''I'')) ');
3702 l(' OR (l_search_merged = ''N'' AND nvl(status, ''A'') in (''A''))) ');
3703 l(' AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id);');
3704 l(' ELSE');
3705 ldbg_s('Restrict SQL is NOT NULL OR other conditions not met, Else Part');
3706 l(' l_sqlstr := ''SELECT PARTY_ID '|| l_p_select_list||' FROM hz_staged_parties stage '';');
3707 l(' l_sqlstr := l_sqlstr || '' WHERE TX8 like :TX8||'''' %'''' '';');
3708 l(' l_sqlstr := l_sqlstr || '' AND (:TX36 IS NULL OR :TX36||'''' '''' = TX36) '';');
3709 l(' IF l_search_merged = ''N'' THEN');
3710 l(' l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''')=''''A'''' '';');
3711 l(' ELSIF l_search_merged = ''I'' THEN');
3712 l(' l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''') in (''''A'''',''''I'''') '';');
3713 l(' END IF;');
3714 l(' l_sqlstr := l_sqlstr || '' AND (:p_dup IS NULL OR party_id <> :p_dup ) '';');
3715 l(' IF g_other_party_level_attribs THEN');
3716 FIRST := TRUE;
3717 cnt := 1;
3718 FOR PATTRS IN (
3719 SELECT PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME
3720 FROM HZ_TRANS_ATTRIBUTES_VL a,
3721 HZ_MATCH_RULE_PRIMARY p
3722 WHERE p.match_rule_id = p_rule_id
3723 AND p.attribute_id = a.attribute_id
3724 AND a.ENTITY_NAME = 'PARTY'
3725 AND a.attribute_name <> 'PARTY_NAME'
3726 AND nvl(FILTER_FLAG,'N') = 'N') LOOP
3727 IF FIRST THEN
3728 l(' l_sqlstr := l_sqlstr || '' AND ((:attr IS NULL OR '';');
3729 FIRST := FALSE;
3730 ELSE
3731 l(' l_sqlstr := l_sqlstr || '' ''||p_match_str||'' (:attr IS NULL OR '';');
3732 END IF;
3733
3734 FIRST1 := TRUE;
3735 FOR PRIMTRANS IN (
3736 SELECT f.STAGED_ATTRIBUTE_COLUMN
3737 FROM HZ_TRANS_FUNCTIONS_VL f,
3738 HZ_PRIMARY_TRANS pt
3739 WHERE pt.PRIMARY_ATTRIBUTE_ID = PATTRS.PRIMARY_ATTRIBUTE_ID
3740 AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
3741 IF FIRST1 THEN
3742 l(' l_sqlstr := l_sqlstr || '' ('||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3743 FIRST1 := FALSE;
3744 party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3745 cnt := cnt+1;
3746 ELSE
3747 l(' l_sqlstr := l_sqlstr || '' OR '||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3748 END IF;
3749 party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3750 cnt := cnt+1;
3751 END LOOP;
3752 l(' l_sqlstr := l_sqlstr || '' )) '';');
3753 END LOOP;
3754 IF NOT FIRST THEN
3755 l(' l_sqlstr := l_sqlstr || '' ) '';');
3756 END IF;
3757
3758 FOR PATTRS IN (
3759 SELECT PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME
3760 FROM HZ_TRANS_ATTRIBUTES_VL a,
3761 HZ_MATCH_RULE_PRIMARY p
3762 WHERE p.match_rule_id = p_rule_id
3763 AND p.attribute_id = a.attribute_id
3764 AND a.ENTITY_NAME = 'PARTY'
3765 AND a.attribute_name <> 'PARTY_NAME'
3766 AND nvl(FILTER_FLAG,'N') = 'Y') LOOP
3767 l(' l_sqlstr := l_sqlstr || '' AND (:attr IS NULL OR '';');
3768
3769 FIRST1 := TRUE;
3770 FOR PRIMTRANS IN (
3771 SELECT f.STAGED_ATTRIBUTE_COLUMN
3772 FROM HZ_TRANS_FUNCTIONS_VL f,
3773 HZ_PRIMARY_TRANS pt
3774 WHERE pt.PRIMARY_ATTRIBUTE_ID = PATTRS.PRIMARY_ATTRIBUTE_ID
3775 AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
3776 IF FIRST1 THEN
3777 l(' l_sqlstr := l_sqlstr || '' ('||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3778 FIRST1 := FALSE;
3779 party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3780 cnt := cnt+1;
3781 ELSE
3782 l(' l_sqlstr := l_sqlstr || '' OR '||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3783 END IF;
3784 party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3785 cnt := cnt+1;
3786 END LOOP;
3787 l(' l_sqlstr := l_sqlstr || '' )) '';');
3788 END LOOP;
3789 IF party_binds.COUNT=0 THEN
3790 l(' NULL;');
3791 END IF;
3792 l(' END IF;');
3793 l_party_level_cnt := cnt;
3794 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');
3795 ldbg_s('p_party_contains_str string is NOT NULL and other conditions met');
3796 FIRST := TRUE;
3797 FOR DENATTR IN (
3798 SELECT PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME
3799 FROM HZ_TRANS_ATTRIBUTES_VL a,
3800 HZ_MATCH_RULE_PRIMARY p
3801 WHERE p.match_rule_id = p_rule_id
3802 AND p.attribute_id = a.attribute_id
3806 FIRST1 := TRUE;
3803 AND a.ENTITY_NAME = 'PARTY_SITES'
3804 AND nvl(a.denorm_flag,'N') = 'Y') LOOP
3805 l(' l_sqlstr := l_sqlstr || '' AND (:attr IS NULL OR '';');
3807 FOR DENTRANS IN (
3808 SELECT f.STAGED_ATTRIBUTE_COLUMN
3809 FROM HZ_TRANS_FUNCTIONS_VL f,
3810 HZ_PRIMARY_TRANS pt
3811 WHERE pt.PRIMARY_ATTRIBUTE_ID = DENATTR.PRIMARY_ATTRIBUTE_ID
3812 AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
3813 IF FIRST1 THEN
3814 l(' l_sqlstr := l_sqlstr || '' (D_PS like ''''% ''''||:'||DENTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3815 FIRST1 := FALSE;
3816 party_binds(cnt) := 'g_party_site_stage_list(1).'||DENTRANS.STAGED_ATTRIBUTE_COLUMN;
3817 cnt := cnt+1;
3818 ELSE
3819 l(' l_sqlstr := l_sqlstr || '' OR D_PS like ''''% ''''||:'||DENTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3820 END IF;
3821 party_binds(cnt) := 'g_party_site_stage_list(1).'||DENTRANS.STAGED_ATTRIBUTE_COLUMN;
3822 cnt := cnt+1;
3823 END LOOP;
3824 l(' l_sqlstr := l_sqlstr || '' )) '';');
3825 END LOOP;
3826 IF l_party_level_cnt=cnt THEN
3827 l(' null;');
3828 END IF;
3829 l(' END IF;');
3830 ldbg_s('l_sqlstr before appending restrict_sql');
3831 ldbg_sv('l_sqlstr is - ','l_sqlstr');
3832
3833 l(' IF p_restrict_sql IS NOT NULL THEN');
3834 l(' l_sqlstr := l_sqlstr || '' AND ''||p_restrict_sql||'' '';');
3835 l(' END IF;');
3836 ldbg_s('l_sqlstr after appending restrict_sql');
3837 ldbg_sv('l_sqlstr is - ','l_sqlstr');
3838 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');
3839 ldbg_s('IF g_other_party_level_attribs AND p_party_contains_str IS NOT NULL AND ...');
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..party_binds.COUNT LOOP
3842 l(' ,'||party_binds(I));
3843 END LOOP;
3844 l(' ;');
3845 l(' ELSIF g_other_party_level_attribs THEN');
3846 ldbg_s('ELSIF g_other_party_level_attribs THEN');
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 1..(l_party_level_cnt-1)LOOP
3849 l(' ,'||party_binds(I));
3850 END LOOP;
3851 l(' ;');
3852 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');
3853 ldbg_s('ELSIF p_party_contains_str IS NOT NULL AND ...');
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 FOR I in l_party_level_cnt..party_binds.COUNT LOOP
3856 l(' ,'||party_binds(I));
3857 END LOOP;
3858 l(' ;');
3859 l(' ELSE');
3860 ldbg_s('ELSE code fork');
3861 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;');
3862 l(' END IF;');
3863 l(' END IF;');
3864 l(' END;');
3865
3866 l(' PROCEDURE open_party_cursor(');
3867 l(' p_dup_party_id NUMBER, ');
3868 l(' p_restrict_sql VARCHAR2, ');
3869 l(' p_contains_str VARCHAR2, ');
3870 l(' p_search_ctx_id NUMBER,');
3871 l(' p_match_str VARCHAR2,');
3872 l(' p_search_merged VARCHAR2,');
3873 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
3874 l(' l_sqlstr VARCHAR2(4000);');
3875 l(' l_hint VARCHAR2(100); ');
3876 l(' l_check NUMBER; ');
3877 l(' l_search_merged VARCHAR2(1); ');
3878 l(' BEGIN');
3879 ldbg_s('-----------------','calling procedure open party cursor');
3880 l(' IF (p_search_merged is null) then ');
3881 l(' l_search_merged := ''N''; ');
3882 l(' ELSE ');
3883 l(' l_search_merged := p_search_merged; ');
3884 l(' END IF; ');
3885 l(' IF p_contains_str IS NULL THEN');
3886 ldbg_s('part contains string is null');
3887 /**** To query based on party_id .. from the get_score_details flow ***/
3888 l(' OPEN x_cursor FOR ');
3889 l(' SELECT PARTY_ID '|| l_p_select_list);
3890 l(' FROM HZ_STAGED_PARTIES stage');
3891 l(' WHERE PARTY_ID = p_dup_party_id;');
3892
3893 /**** Static queries when restrict_sql is null OR if p_search_ctx_id IS NOT NULL *****/
3894 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
3895 ldbg_s('Either restrict sql is null or search context id is not null');
3896 /**** When search context ID is null .. Retrieve rows using intermedia index ****/
3897 l(' IF p_search_ctx_id IS NULL THEN');
3898 ldbg_s('Search context id is null');
3899 l(' OPEN x_cursor FOR ');
3900 l(' SELECT /*+ INDEX(stage HZ_STAGE_PARTIES_T1) */ PARTY_ID '|| l_p_select_list);
3901 l(' FROM HZ_STAGED_PARTIES stage');
3902 IF l_party_filter_str IS NOT NULL THEN
3903 l(' WHERE contains( concat_col, p_contains_str)>0');
3904 l(' AND ('||replace(l_party_filter_str,'p.','stage.')||')');
3905 ELSE
3906 l(' WHERE contains( concat_col, p_contains_str)>0');
3907 END IF;
3908 l(' AND( (l_search_merged =''Y'' ) ');
3909 l(' OR (l_search_merged = ''I'' AND nvl(stage.status, ''A'') in (''A'', ''I'')) ');
3910 l(' OR (l_search_merged = ''N'' AND nvl(stage.status, ''A'') in (''A'')) ) ');
3911 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
3912
3913
3914 /**** When search context ID is not null .. Query using DQM_PARTIES_GT. Filter using
3915 intermedia index ****/
3916 l(' ELSE');
3917 ldbg_s('Search context id is not null');
3918 l(' OPEN x_cursor FOR ');
3922 l(' AND d.SEARCH_CONTEXT_ID=p_search_ctx_id');
3919 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTIES_U1) */ stage.PARTY_ID '|| l_p_select_list);
3920 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTIES stage');
3921 l(' WHERE contains( concat_col, p_contains_str)>0');
3923 l(' AND d.party_id = stage.party_id');
3924 IF l_party_filter_str IS NOT NULL THEN
3925 l(' AND ('||replace(l_party_filter_str,'p.','stage.')||')');
3926 END IF;
3927 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
3928 l(' AND( (l_search_merged =''Y'' ) ');
3929 l(' OR (l_search_merged = ''I'' AND nvl(stage.status, ''A'') in (''A'', ''I'')) ');
3930 l(' OR (l_search_merged = ''N'' AND nvl(stage.status, ''A'') in (''A'')) ); ');
3931 l(' END IF;');
3932
3933 /**** When restrict_sql is not null *****/
3934 l(' ELSE');
3935 ldbg_s('Restrict sql is not null');
3936 l(' l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
3937 l(' IF (l_check > 0 ) THEN ');
3938 ldbg_s('Restrict sql has a Selective Hint');
3939 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_PARTIES_U1) */''; ');
3940 l(' ELSE ');
3941 l(' l_hint := ''/*+ INDEX(stage HZ_STAGE_PARTIES_T1) */''; ');
3942 l(' END IF; ');
3943 /**** When search context ID is null .. Access using intermedia index ***/
3944 l(' IF p_search_ctx_id IS NULL THEN');
3945 l(' l_sqlstr := ''SELECT '' || l_hint || '' PARTY_ID '|| l_p_select_list||'''||');
3946 l(' '' FROM HZ_STAGED_PARTIES stage''||');
3947 l(' '' WHERE contains( concat_col, :cont)>0''||');
3948 IF l_dyn_party_filter_str IS NOT NULL THEN
3949 l(' '' AND ('||replace(l_dyn_party_filter_str,'p.','stage.')||')''||');
3950 END IF;
3951 l(' '' AND (''||p_restrict_sql||'')'' ||');
3952 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
3953 l(' IF l_search_merged = ''Y'' THEN ');
3954 l(' l_sqlstr := l_sqlstr ; ');
3955 l(' ELSIF l_search_merged = ''I'' THEN ');
3956 l(' l_sqlstr := l_sqlstr ||'' AND nvl(stage.status,''''A'''') in (''''A'''', ''''I'''')''; ');
3957 l(' ELSE ');
3958 l(' l_sqlstr := l_sqlstr ||'' AND nvl(stage.status,''''A'''') in (''''A'''')''; ');
3959 l(' END IF; ');
3960 l(' output_long_strings(''----------------------------------------------------------'');');
3961 l(' output_long_strings(''Party Contains String = ''||p_contains_str);');
3962 l(' output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
3963 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
3964 FOR I in 1..l_party_filt_bind.COUNT LOOP
3965 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
3966 END LOOP;
3967 l(' ,p_dup_party_id, p_dup_party_id;');
3968 l(' END IF;');
3969 l(' END IF;');
3970 l(' exception');
3971 l(' when others then');
3972 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
3973 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
3974 l(' FND_MSG_PUB.ADD;');
3975 l(' RAISE FND_API.G_EXC_ERROR;');
3976 --Start Bug No: 3032742.
3977 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
3978 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
3979 l(' FND_MSG_PUB.ADD;');
3980 l(' RAISE FND_API.G_EXC_ERROR;');
3981 --Bug: 3392837
3982 l(' elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
3983 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
3984 l(' FND_MSG_PUB.ADD;');
3985 l(' RAISE FND_API.G_EXC_ERROR;');
3986 --End Bug No : 3032742.
3987 l(' else ');
3988 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
3989 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
3990 l(' FND_MSG_PUB.ADD;');
3991 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
3992 l(' end if;');
3993 l(' END;');
3994 l('');
3995
3996 l(' PROCEDURE open_party_site_cursor(');
3997 l(' p_dup_party_id NUMBER, ');
3998 l(' p_party_id NUMBER, ');
3999 l(' p_restrict_sql VARCHAR2, ');
4000 l(' p_contains_str VARCHAR2, ');
4001 l(' p_search_ctx_id NUMBER, ');
4002 l(' p_search_merged VARCHAR2, ');
4003 l(' p_search_rel_sites VARCHAR2, ');
4004 l(' p_person_api VARCHAR2, ');
4005 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
4006 l(' l_sqlstr VARCHAR2(4000);');
4007 l(' l_hint VARCHAR2(100); ');
4008 l(' l_check NUMBER; ');
4009 l(' l_check_dt NUMBER; ');
4010 l(' l_search_merged VARCHAR2(1); ');
4011 l(' l_status_sql VARCHAR2(100); ');
4012 l(' p_restrict_sql1 VARCHAR2(4000); ');
4013 l(' ');
4014 l(' BEGIN');
4015 ldbg_s('-----------------','calling the procedure open_party_site_cursor');
4016 l(' IF (p_search_merged is null) then ');
4017 l(' l_search_merged := ''N''; ');
4018 l(' ELSE ');
4019 l(' l_search_merged := p_search_merged; ');
4020 l(' END IF; ');
4021 /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
4022 l(' IF p_party_id IS NOT NULL THEN');
4023 ldbg_s('Single Party Scenario');
4024 l(' IF p_search_rel_sites = ''N'' THEN');
4025 l(' OPEN x_cursor FOR ');
4026 l(' SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4027 l(' FROM HZ_STAGED_PARTY_SITES stage');
4028 l(' WHERE contains( concat_col, p_contains_str)>0');
4029 --Start of BugNo: 4299785
4030 l(' AND( (l_search_merged =''Y'' ) ');
4031 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4032 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4033 --End of BugNo: 4299785
4034 l(' AND stage.party_id = p_party_id; ');
4035 l(' ELSE');
4036 l(' OPEN x_cursor FOR ');
4037 l(' SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4038 l(' FROM HZ_STAGED_PARTY_SITES stage');
4039 l(' WHERE contains( concat_col, p_contains_str)>0');
4040 --Start of BugNo: 4299785
4041 l(' AND( (l_search_merged =''Y'' ) ');
4042 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4043 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4044 --End of BugNo: 4299785
4045 l(' AND stage.party_id = p_party_id ');
4046 l(' UNION');
4047 l(' SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'|| l_ps_select_list);
4048 l(' FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc');
4049 l(' WHERE contains( concat_col, p_contains_str)>0');
4050 --Start of BugNo: 4299785
4051 l(' AND( (l_search_merged =''Y'' ) ');
4052 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4053 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4054 --End of BugNo: 4299785
4055 l(' AND r.object_id = p_party_id ');
4056 l(' AND r.subject_id = stage.party_id ');
4057 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
4058 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
4059 l(' AND r.relationship_id = oc.party_relationship_id');
4060 l(' AND oc.org_contact_id = stage.org_contact_id; ');
4061 l(' END IF;');
4062 /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
4063 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
4064 ldbg_s('Either restrict sql is null or search context id is not null');
4065 /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
4066 l(' IF p_search_ctx_id IS NULL THEN');
4067 ldbg_s('Search context id is null');
4068 l(' OPEN x_cursor FOR ');
4069 l(' SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4070 l(' FROM HZ_STAGED_PARTY_SITES stage');
4071 IF l_party_filter_str IS NOT NULL THEN
4072 l(' WHERE contains( concat_col, p_contains_str)>0');
4073 l(' AND EXISTS (');
4074 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
4075 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
4076 l(' AND( (l_search_merged =''Y'' ) ');
4077 l(' OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I'')) ');
4078 l(' OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A'')) ) ');
4079 l(' AND ('||l_party_filter_str||'))');
4080 ELSE
4081 l(' WHERE contains( concat_col, p_contains_str)>0');
4082
4083 END IF;
4084 --Start of BugNo: 4299785
4085 l(' AND( (l_search_merged =''Y'' ) ');
4086 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4087 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4088 --End of BugNo: 4299785
4089 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4090
4091 /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
4092 l(' ELSE');
4093 ldbg_s('Search context id is not null');
4094 l(' IF p_person_api = ''Y'' THEN');
4095 l(' OPEN x_cursor FOR ');
4096 l(' SELECT PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4097 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage');
4101 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4098 l(' WHERE contains( concat_col, p_contains_str)>0');
4099 --Start of BugNo: 4299785
4100 l(' AND( (l_search_merged =''Y'' ) ');
4102 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4103 --End of BugNo: 4299785
4104 l(' AND d.search_context_id = p_search_ctx_id');
4105 l(' AND d.party_id = stage.party_id');
4106 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
4107 l(' UNION ');
4108 l(' SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, r.subject_id, stage.ORG_CONTACT_ID'|| l_ps_select_list);
4109 l(' FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage');
4110 l(' WHERE contains( concat_col, p_contains_str)>0');
4111 --Start of BugNo: 4299785
4112 l(' AND( (l_search_merged =''Y'' ) ');
4113 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4114 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4115 --End of BugNo: 4299785
4116 l(' AND d.search_context_id = p_search_ctx_id');
4117 l(' AND d.party_id = r.subject_id');
4118 l(' AND r.relationship_id = oc.party_relationship_id');
4119 l(' AND oc.org_contact_id = stage.org_contact_id');
4120 l(' AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);');
4121 l(' ELSE');
4122 l(' OPEN x_cursor FOR ');
4123 l(' SELECT PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4124 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage');
4125 l(' WHERE contains( concat_col, p_contains_str)>0');
4126 --Start of BugNo: 4299785
4127 l(' AND( (l_search_merged =''Y'' ) ');
4128 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4129 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4130 --End of BugNo: 4299785
4131 l(' AND d.search_context_id = p_search_ctx_id');
4132 l(' AND d.party_id = stage.party_id');
4133 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4134 l(' END IF;');
4135
4136 l(' END IF;');
4137
4138 /**** Restrict_sql is not null. Retrieve using intermedia ****/
4139 l(' ELSE');
4140 ldbg_s('Restrict sql is not null');
4141 l(' l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
4142 l(' l_check_dt := instrb(p_restrict_sql, ''SELECTIVE_PS''); ');
4143 l(' IF (l_check_dt > 0 ) THEN ');
4144 ldbg_s('Restrict sql has the selective_ps hint');
4145 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */''; ');
4146 l(' ELSIF (l_check > 0 ) THEN ');
4147 ldbg_s('Restrict sql has the selective hint');
4148 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */''; ');
4149 l(' END IF; ');
4150 l(' IF l_search_merged = ''Y'' THEN ');
4151 l(' l_status_sql := '' '' ; ');
4152 l(' ELSIF l_search_merged = ''I'' THEN ');
4153 l(' l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''', ''''I'''')''; ');
4154 l(' ELSE ');
4155 l(' l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''')''; ');
4156 l(' END IF; ');
4157 /* Performance fix for Bug:4643321*/
4158 l(' /*Performance fix for Bug:4589953*/ ');
4159 l(' IF(p_person_api=''Y'') THEN ');
4160 l(' IF (l_check > 0 ) THEN ');
4161 l(' IF instrb(p_restrict_sql, ''STAGE.'') > 0 THEN ');
4162 l(' p_restrict_sql1 := replace( p_restrict_sql, ''STAGE.'', ''stage1.'');');
4163 l(' ELSIF instrb(p_restrict_sql, ''stage.'') > 0 THEN ');
4164 l(' p_restrict_sql1 := replace( p_restrict_sql, ''stage.'', ''stage1.'');');
4165 l(' ELSE');
4166 l(' p_restrict_sql1 := ''stage1.''||p_restrict_sql;');
4167 l(' END IF; ');
4168 l(' l_sqlstr := ''SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4169 l(' '' FROM HZ_STAGED_PARTY_SITES stage''||');
4170 l(' '' WHERE contains( concat_col, :cont)>0''||');
4171 --Start of BugNo: 4299785
4172 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''|| ');
4173 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''|| ');
4174 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''|| ');
4175 --End of BugNo: 4299785
4176 l(' '' AND (ORG_CONTACT_ID IS NULL '' ||');
4177 l(' '' AND (''||p_restrict_sql||''))'' ||');
4178 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '' ||');
4179 l(' '' UNION '' ||');
4180 l(' ''SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4181 l(' '' FROM HZ_STAGED_PARTY_SITES stage''||');
4182 l(' '' WHERE contains( concat_col, :cont)>0''||');
4183 --Start of BugNo: 4299785
4184 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''|| ');
4185 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''|| ');
4186 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''|| ');
4187 --End of BugNo: 4299785
4188
4189 l(' '' AND ORG_CONTACT_ID IN '' ||');
4193 l(' '' and (''||p_restrict_sql1|| '') )'' ||') ;
4190 l(' '' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships '' ||');
4191 l(' '' where subject_type = ''''PERSON'''' AND object_type = ''''ORGANIZATION'''') stage1 '' ||');
4192 l(' '' where stage1.relationship_id = oc.party_relationship_id '' || ');
4194 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4195 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str,');
4196 l(' p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;');
4197
4198 l(' ELSE ');
4199 l(' l_sqlstr := ''SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4200 l(' '' FROM HZ_STAGED_PARTY_SITES stage''||');
4201 l(' '' WHERE contains( concat_col, :cont)>0''||');
4202 --Start of BugNo: 4299785
4203 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''|| ');
4204 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''|| ');
4205 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''|| ');
4206 --End of BugNo: 4299785
4207 IF l_dyn_party_filter_str IS NOT NULL THEN
4208 l(' '' AND EXISTS (''||');
4209 l(' '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4210 l(' '' WHERE p.party_id = stage.party_id '' || ');
4211 l(' '' AND ('||l_dyn_party_filter_str||') ''|| l_status_sql ||'' ) '' || ');
4212 END IF;
4213 l(' '' AND (''||get_adjusted_restrict_sql(p_restrict_sql)||'')'' ||');
4214 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4215 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4216 FOR I in 1..l_party_filt_bind.COUNT LOOP
4217 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4218 END LOOP;
4219 l(' ,p_dup_party_id, p_dup_party_id;');
4220 l(' END IF; ');
4221
4222 l(' ELSE ');
4223 l(' l_sqlstr := ''SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4224 l(' '' FROM HZ_STAGED_PARTY_SITES stage''||');
4225 l(' '' WHERE contains( concat_col, :cont)>0''||');
4226 --Start of BugNo: 4299785
4227 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''|| ');
4228 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''|| ');
4229 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''|| ');
4230 --End of BugNo: 4299785
4231
4232 IF l_dyn_party_filter_str IS NOT NULL THEN
4233 l(' '' AND EXISTS (''||');
4234 l(' '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4235 l(' '' WHERE p.party_id = stage.party_id '' || ');
4236 l(' '' AND ('||l_dyn_party_filter_str||') ''|| l_status_sql ||'' ) '' || ');
4237 END IF;
4238 l(' '' AND (''||p_restrict_sql||'')'' ||');
4239 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4240 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4241 FOR I in 1..l_party_filt_bind.COUNT LOOP
4242 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4243 END LOOP;
4244 l(' ,p_dup_party_id, p_dup_party_id;');
4245 l(' END IF; ');
4246 l(' END IF;');
4247 l(' output_long_strings(''----------------------------------------------------------'');');
4248 l(' output_long_strings(''Party Site Contains String = ''||p_contains_str);');
4249 l(' output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
4250 l(' exception');
4251 l(' when others then');
4252 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
4253 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
4254 l(' FND_MSG_PUB.ADD;');
4255 l(' RAISE FND_API.G_EXC_ERROR;');
4256 --Start Bug No: 3032742.
4257 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
4258 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4259 l(' FND_MSG_PUB.ADD;');
4260 l(' RAISE FND_API.G_EXC_ERROR;');
4261 --Bug: 3392837
4262 l(' elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
4263 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4264 l(' FND_MSG_PUB.ADD;');
4265 l(' RAISE FND_API.G_EXC_ERROR;');
4266 --End Bug No : 3032742.
4267 l(' else ');
4268 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
4269 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4270 l(' FND_MSG_PUB.ADD;');
4271 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4272 l(' end if;');
4273 l(' END;');
4274 l('');
4275 l(' PROCEDURE open_contact_cursor(');
4276 l(' p_dup_party_id NUMBER, ');
4277 l(' p_party_id NUMBER, ');
4278 l(' p_restrict_sql VARCHAR2, ');
4279 l(' p_contains_str VARCHAR2, ');
4280 l(' p_search_ctx_id NUMBER, ');
4281 l(' p_search_merged VARCHAR2, ');
4282 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
4283 l(' l_sqlstr VARCHAR2(4000);');
4284 l(' l_hint VARCHAR2(100); ');
4285 l(' l_check NUMBER; ');
4286 l(' l_check_dt NUMBER; ');
4287 l(' l_search_merged VARCHAR2(1); ');
4288 l(' l_status_sql VARCHAR2(100); ');
4289 l(' ');
4290 l(' BEGIN');
4291 ldbg_s('-----------------','calling the procedure open_contact_cursor');
4292 l(' IF (p_search_merged is null) then ');
4293 l(' l_search_merged := ''N''; ');
4294 l(' ELSE ');
4295 l(' l_search_merged := p_search_merged; ');
4296 l(' END IF; ');
4297 /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
4298 l(' IF p_party_id IS NOT NULL THEN');
4299 ldbg_s('Single party scenario');
4300 l(' OPEN x_cursor FOR ');
4301 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
4302 l(' FROM HZ_STAGED_CONTACTS stage');
4303 IF l_party_filter_str IS NOT NULL THEN
4304 l(' WHERE contains( concat_col, p_contains_str)>0');
4305 l(' AND EXISTS (');
4306 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
4307 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
4308 l(' AND( (l_search_merged =''Y'' ) ');
4309 l(' OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I'')) ');
4310 l(' OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A'')) ) ');
4311 l(' AND ('||l_party_filter_str||'))');
4312 ELSE
4313 l(' WHERE contains( concat_col, p_contains_str)>0');
4314 END IF;
4315 --Start of BugNo: 4299785
4316 l(' AND( (l_search_merged =''Y'' ) ');
4317 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4318 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4319 --End of BugNo: 4299785
4320 l(' AND stage.party_id = p_party_id;');
4321 /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
4322 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
4323 ldbg_s('Either Restrict sql is null or Search Context Id is not null');
4324 /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
4325 l(' IF p_search_ctx_id IS NULL THEN');
4326 ldbg_s('Search Context id is null');
4327 l(' OPEN x_cursor FOR ');
4328 l(' SELECT ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
4329 l(' FROM HZ_STAGED_CONTACTS stage');
4330 IF l_party_filter_str IS NOT NULL THEN
4331 l(' WHERE contains( concat_col, p_contains_str)>0');
4332 l(' AND EXISTS (');
4333 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
4334 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
4335 l(' AND( (l_search_merged =''Y'' ) ');
4336 l(' OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I'')) ');
4337 l(' OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A'')) ) ');
4338 l(' AND ('||l_party_filter_str||'))');
4339 ELSE
4340 l(' WHERE contains( concat_col, p_contains_str)>0');
4341 END IF;
4342 --Start of BugNo: 4299785
4343 l(' AND( (l_search_merged =''Y'' ) ');
4344 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4345 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4346 --End of BugNo: 4299785
4347 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4348
4349 /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
4350 l(' ELSE');
4351 ldbg_s('Search Context id is not null');
4352 l(' OPEN x_cursor FOR ');
4353 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID'|| l_c_select_list);
4354 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage');
4355 l(' WHERE contains( concat_col, p_contains_str)>0');
4356 l(' AND d.search_context_id = p_search_ctx_id');
4357 l(' AND d.party_id = stage.party_id');
4358 /*
4359 IF l_party_filter_str IS NOT NULL THEN
4360 l(' AND EXISTS (');
4361 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
4362 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
4363 l(' AND ('||l_party_filter_str||'))');
4364 END IF;
4365 */
4366 --Start of BugNo: 4299785
4367 l(' AND( (l_search_merged =''Y'' ) ');
4368 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4369 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4370 --End of BugNo: 4299785
4371 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4372 l(' END IF;');
4373
4374 /**** Restrict_sql is not null. Retrieve using intermedia ****/
4375 l(' ELSE');
4376 ldbg_s('Restrict Sql is not null');
4377 l(' l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
4378 l(' l_check_dt := instrb(p_restrict_sql, ''SELECTIVE_CT''); ');
4379 l(' IF (l_check_dt > 0 ) THEN ');
4380 ldbg_s('Restrict sql has the selective_ct hint');
4381 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */''; ');
4382 l(' ELSIF (l_check > 0 ) THEN ');
4383 ldbg_s('Restrict sql has the selective hint');
4384 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */''; ');
4385 l(' END IF; ');
4386 l(' IF l_search_merged = ''Y'' THEN ');
4387 l(' l_status_sql := '' '' ; ');
4388 l(' ELSIF l_search_merged = ''I'' THEN ');
4389 l(' l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''', ''''I'''')''; ');
4390 l(' ELSE ');
4391 l(' l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''')''; ');
4392 l(' END IF; ');
4393 l(' l_sqlstr := ''SELECT '' || l_hint || '' ORG_CONTACT_ID, PARTY_ID '|| l_c_select_list||'''||');
4394 l(' '' FROM HZ_STAGED_CONTACTS stage''||');
4395 l(' '' WHERE contains( concat_col, :cont)>0''||');
4396 IF l_dyn_party_filter_str IS NOT NULL THEN
4397 l(' '' AND EXISTS (''||');
4398 l(' '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4399 l(' '' WHERE p.party_id = stage.party_id '' || ');
4400 l(' '' AND ('||l_dyn_party_filter_str||') ''|| l_status_sql ||'' ) '' || ');
4401 END IF;
4402 --Start of BugNo: 4299785
4403 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''||');
4404 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''||');
4405 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''||');
4406 --End of BugNo: 4299785
4407 l(' '' AND (''||p_restrict_sql||'')'' ||');
4408 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4409 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4410 FOR I in 1..l_party_filt_bind.COUNT LOOP
4411 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4412 END LOOP;
4413 l(' ,p_dup_party_id, p_dup_party_id;');
4414 l(' END IF;');
4415 l(' output_long_strings(''----------------------------------------------------------'');');
4416 l(' output_long_strings(''Contacts Contains String = ''||p_contains_str);');
4417 l(' output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
4418 l(' exception');
4419 l(' when others then');
4420 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
4421 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
4422 l(' FND_MSG_PUB.ADD;');
4423 l(' RAISE FND_API.G_EXC_ERROR;');
4424 --Start Bug No: 3032742.
4425 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
4426 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4427 l(' FND_MSG_PUB.ADD;');
4428 l(' RAISE FND_API.G_EXC_ERROR;');
4429 --Bug: 3392837
4430 l(' elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
4431 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4432 l(' FND_MSG_PUB.ADD;');
4433 l(' RAISE FND_API.G_EXC_ERROR;');
4434 --End Bug No : 3032742.
4435 l(' else ');
4436 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
4437 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4438 l(' FND_MSG_PUB.ADD;');
4439 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4440 l(' end if;');
4441 l(' END;');
4442 l('');
4443 l(' PROCEDURE open_contact_pt_cursor(');
4444 l(' p_dup_party_id NUMBER, ');
4445 l(' p_party_id NUMBER, ');
4446 l(' p_restrict_sql VARCHAR2, ');
4447 l(' p_contains_str VARCHAR2, ');
4448 l(' p_search_ctx_id NUMBER, ');
4449 l(' p_search_merged VARCHAR2, ');
4450 l(' p_search_rel_cpts VARCHAR2, ');
4451 l(' p_person_api VARCHAR2, ');
4452 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,');
4453 l(' p_restrict_entity VARCHAR2 DEFAULT NULL) IS');
4454 l(' l_sqlstr VARCHAR2(4000);');
4455 l(' l_hint VARCHAR2(100); ');
4456 l(' l_check NUMBER; ');
4457 l(' l_check_dt NUMBER; ');
4458 l(' l_search_merged VARCHAR2(1); ');
4459 l(' l_status_sql VARCHAR2(100); ');
4460 l(' p_restrict_sql1 VARCHAR2(4000); ');
4461 l(' ');
4462 l(' BEGIN');
4463 ldbg_s('-----------------','calling the procedure open_contact_pt_cursor');
4464 l(' IF (p_search_merged is null) then ');
4465 l(' l_search_merged := ''N''; ');
4466 l(' ELSE ');
4467 l(' l_search_merged := p_search_merged; ');
4468 l(' END IF; ');
4469 l(' IF p_restrict_entity = ''CONTACTS'' ');
4470 l(' THEN');
4471 l(' OPEN x_cursor FOR ');
4472 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);
4473 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage ');
4474 l(' WHERE contains( concat_col, p_contains_str)>0 ');
4475 l(' AND d.search_context_id = p_search_ctx_id ');
4476 --Start of BugNo: 4299785
4477 l(' AND( (l_search_merged =''Y'' ) ');
4478 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4482 l(' END IF; ');
4479 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4480 --End of BugNo: 4299785
4481 l(' AND d.party_id = stage.org_contact_id ; ');
4483
4484 l(' IF p_restrict_entity = ''PARTY_SITES'' ');
4485 l(' THEN');
4486 l(' OPEN x_cursor FOR ');
4487 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);
4488 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage ');
4489 l(' WHERE contains( concat_col, p_contains_str)>0 ');
4490 l(' AND d.search_context_id = p_search_ctx_id ');
4491 --Start of BugNo: 4299785
4492 l(' AND( (l_search_merged =''Y'' ) ');
4493 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4494 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4495 --End of BugNo: 4299785
4496 l(' AND d.party_id = stage.party_site_id ; ');
4497 l(' END IF; ');
4498
4499 l(' IF p_restrict_entity IS NULL');
4500 l(' THEN');
4501
4502 /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
4503 l(' IF p_party_id IS NOT NULL THEN');
4504 ldbg_s('Single Party Scenario');
4505 l(' IF p_search_rel_cpts = ''N'' THEN');
4506 l(' OPEN x_cursor FOR ');
4507 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);
4508 l(' FROM HZ_STAGED_CONTACT_POINTS stage');
4509 l(' WHERE contains( concat_col, p_contains_str)>0');
4510 --Start of BugNo: 4299785
4511 l(' AND( (l_search_merged =''Y'' ) ');
4512 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4513 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4514 --End of BugNo: 4299785
4515 l(' AND stage.party_id = p_party_id; ');
4516 l(' ELSE');
4517 l(' OPEN x_cursor FOR ');
4518 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);
4519 l(' FROM HZ_STAGED_CONTACT_POINTS stage');
4520 l(' WHERE contains( concat_col, p_contains_str)>0');
4521 --Start of BugNo: 4299785
4522 l(' AND( (l_search_merged =''Y'' ) ');
4523 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4524 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4525 --End of BugNo: 4299785
4526 l(' AND stage.party_id = p_party_id ');
4527 l(' UNION');
4528 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);
4529 l(' FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc');
4530 l(' WHERE contains( concat_col, p_contains_str)>0');
4531 l(' AND r.object_id = p_party_id ');
4532 --Start of BugNo: 4299785
4533 l(' AND( (l_search_merged =''Y'' ) ');
4534 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4535 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4536 --End of BugNo: 4299785
4537 l(' AND r.subject_id = stage.party_id ');
4538 l(' AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ' );
4539 l(' AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
4540 l(' AND r.relationship_id = oc.party_relationship_id');
4541 l(' AND oc.org_contact_id = stage.org_contact_id; ');
4542 l(' END IF;');
4543
4544 /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
4545 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
4546 ldbg_s('Either Restrict sql is null or search_context_id is not null');
4547 /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
4548 l(' IF p_search_ctx_id IS NULL THEN');
4549 ldbg_s('Either Search context id is null');
4550 l(' OPEN x_cursor FOR ');
4551 l(' SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4552 l(' FROM HZ_STAGED_CONTACT_POINTS stage');
4553 IF l_party_filter_str IS NOT NULL THEN
4554 l(' WHERE contains( concat_col, p_contains_str)>0');
4555 l(' AND EXISTS (');
4556 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
4557 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
4558 l(' AND( (l_search_merged =''Y'' ) ');
4559 l(' OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I'')) ');
4560 l(' OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A'')) ) ');
4561 l(' AND ('||l_party_filter_str||'))');
4562 ELSE
4563 l(' WHERE contains( concat_col, p_contains_str)>0');
4564 END IF;
4565 --Start of BugNo: 4299785
4566 l(' AND( (l_search_merged =''Y'' ) ');
4567 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4568 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4569 --End of BugNo: 4299785
4570 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4571
4572 /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
4573 l(' ELSE');
4574 ldbg_s('Search_context_id is not null');
4575 l(' IF p_person_api = ''Y'' THEN');
4576 l(' OPEN x_cursor FOR ');
4577 l(' SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4578 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage');
4579 l(' WHERE contains( concat_col, p_contains_str)>0');
4580 l(' AND d.search_context_id = p_search_ctx_id');
4581 l(' AND d.party_id = stage.party_id');
4582 --Start of BugNo: 4299785
4583 l(' AND( (l_search_merged =''Y'' ) ');
4584 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4585 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4586 --End of BugNo: 4299785
4587 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
4588 l(' UNION ');
4589 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);
4590 l(' FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage');
4591 l(' WHERE contains( concat_col, p_contains_str)>0');
4592 l(' AND d.search_context_id = p_search_ctx_id');
4593 l(' AND d.party_id = r.subject_id');
4594 l(' AND r.relationship_id = oc.party_relationship_id');
4595 l(' AND oc.org_contact_id = stage.org_contact_id');
4596 --Start of BugNo: 4299785
4597 l(' AND( (l_search_merged =''Y'' ) ');
4598 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4599 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4600 --End of BugNo: 4299785
4601 l(' AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);');
4602 l(' ELSE');
4603 l(' OPEN x_cursor FOR ');
4604 l(' SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4605 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage');
4606 l(' WHERE contains( concat_col, p_contains_str)>0');
4607 l(' AND d.search_context_id = p_search_ctx_id');
4608 l(' AND d.party_id = stage.party_id');
4609 --Start of BugNo: 4299785
4610 l(' AND( (l_search_merged =''Y'' ) ');
4611 l(' OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) ');
4612 l(' OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) ');
4613 --End of BugNo: 4299785
4614 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4615 l(' END IF;');
4616
4617 l(' END IF;');
4618
4619 /**** Restrict_sql is not null. Retrieve using intermedia ****/
4620 l(' ELSE');
4621 ldbg_s('Restrict sql is not null');
4622 l(' l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
4623 l(' l_check_dt := instrb(p_restrict_sql, ''SELECTIVE_CPT''); ');
4624 l(' IF (l_check_dt > 0 ) THEN ');
4625 ldbg_s('Restrict Sql has the selective_cpt hint');
4626 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */''; ');
4627 l(' ELSIF (l_check > 0 ) THEN ');
4628 ldbg_s('Restrict Sql has the selective hint');
4629 l(' l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */''; ');
4630 l(' END IF; ');
4631 l(' IF l_search_merged = ''Y'' THEN ');
4632 l(' l_status_sql := '' '' ; ');
4633 l(' ELSIF l_search_merged = ''I'' THEN ');
4634 l(' l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''', ''''I'''')''; ');
4635 l(' ELSE ');
4636 l(' l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''')''; ');
4637 l(' END IF; ');
4638 /* IT Performance Bug:4589953, if person API then check for relationship contact points */
4639 l(' IF p_person_api = ''Y'' THEN');
4640 l(' /*Performance fix for Bug:4589953*/ ');
4641 l(' IF (l_check > 0 ) THEN ');
4642 l(' IF instrb(p_restrict_sql, ''STAGE.'') > 0 THEN ');
4643 l(' p_restrict_sql1 := replace( p_restrict_sql, ''STAGE.'', ''stage1.'');');
4644 l(' ELSIF instrb(p_restrict_sql, ''stage.'') > 0 THEN ');
4645 l(' p_restrict_sql1 := replace( p_restrict_sql, ''stage.'', ''stage1.'');');
4646 l(' ELSE');
4647 l(' p_restrict_sql1 := ''stage1.''||p_restrict_sql;');
4648 l(' END IF; ');
4649 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||'''||');
4650 l(' '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4651 l(' '' WHERE contains( concat_col, :cont)>0 ''||');
4652 l(' '' AND (stage.org_contact_id is null ''||');
4653 --Start of BugNo: 4299785
4654 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''||');
4655 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''||');
4656 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''||');
4657 --End of BugNo: 4299785
4658 l(' '' AND (''||p_restrict_sql||''))'' ||');
4659 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '' ||');
4660 l(' '' UNION '' ||');
4661 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||'''||');
4662 l(' '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4663 l(' '' WHERE contains( concat_col, :cont)>0 ''||');
4664 --Start of BugNo: 4299785
4665 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''||');
4666 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''||');
4667 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''||');
4668 --End of BugNo: 4299785
4669 l(' '' AND (stage.org_contact_id in '' || ');
4670 l(' '' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r '' ||');
4671 l(' '' where subject_type = ''''PERSON'''' AND object_type = ''''ORGANIZATION'''') stage1 '' || ');
4672 l(' '' where stage1.relationship_id = oc.party_relationship_id '' || ');
4673 l(' '' and (''||p_restrict_sql1 || '') ) )'' ||') ;
4674 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4675 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str,');
4676 l(' p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;');
4677
4678 l(' ELSE ');
4679 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||'''||');
4680 l(' '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4681 l(' '' WHERE contains( concat_col, :cont)>0''||');
4682 IF l_dyn_party_filter_str IS NOT NULL THEN
4683 l(' '' AND EXISTS (''||');
4684 l(' '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4685 l(' '' WHERE p.party_id = stage.party_id '' || ');
4686 l(' '' AND ('||l_dyn_party_filter_str||') ''|| l_status_sql ||'' ) '' || ');
4687 END IF;
4688 --Start of BugNo: 4299785
4689 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''||');
4690 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''||');
4691 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''||');
4692 --End of BugNo: 4299785
4693 l(' '' AND (''||get_adjusted_restrict_sql(p_restrict_sql)||'')'' ||');
4694 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4695 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4696 FOR I in 1..l_party_filt_bind.COUNT LOOP
4697 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4698 END LOOP;
4699 l(' ,p_dup_party_id, p_dup_party_id;');
4700 l(' END IF; ');
4701
4702 l(' ELSE ');
4703 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||'''||');
4704 l(' '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4705 l(' '' WHERE contains( concat_col, :cont)>0''||');
4706 IF l_dyn_party_filter_str IS NOT NULL THEN
4707 l(' '' AND EXISTS (''||');
4708 l(' '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4709 l(' '' WHERE p.party_id = stage.party_id '' || ');
4710 l(' '' AND ('||l_dyn_party_filter_str||') ''|| l_status_sql ||'' ) '' || ');
4711 END IF;
4712 --Start of BugNo: 4299785
4713 l(' '' AND( (''''''||l_search_merged||'''''' =''''Y'''' ) ''||');
4714 l(' '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I'''')) ''||');
4715 l(' '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''') ) ''||');
4716 --End of BugNo: 4299785
4717 l(' '' AND (''||p_restrict_sql||'')'' ||');
4718 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4719 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4720 FOR I in 1..l_party_filt_bind.COUNT LOOP
4721 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4722 END LOOP;
4723 l(' ,p_dup_party_id, p_dup_party_id;');
4724 l(' END IF; ');
4725 l(' END IF;');
4726 l(' END IF; ');
4727 l(' output_long_strings(''----------------------------------------------------------'');');
4728 l(' output_long_strings(''Contact Points Contains String = ''||p_contains_str);');
4729 l(' output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
4730 l(' exception');
4731 l(' when others then');
4732 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
4733 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
4734 l(' FND_MSG_PUB.ADD;');
4735 l(' RAISE FND_API.G_EXC_ERROR;');
4736 --Start Bug No: 3032742.
4737 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
4738 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4739 l(' FND_MSG_PUB.ADD;');
4740 l(' RAISE FND_API.G_EXC_ERROR;');
4741 --Bug: 3392837
4742 l(' elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
4743 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4744 l(' FND_MSG_PUB.ADD;');
4745 l(' RAISE FND_API.G_EXC_ERROR;');
4746 --End Bug No : 3032742.
4747 l(' else ');
4748 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
4749 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4750 l(' FND_MSG_PUB.ADD;');
4751 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4752 l(' end if;');
4753 l(' END;');
4754 l('');
4755
4756 l('');
4757 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');
4758
4759 l(' l_sqlstr VARCHAR2(4000);');
4760 l(' l_search_merged VARCHAR2(1);');
4761 l(' BEGIN');
4762 l(' IF (p_search_merged is null) then ');
4763 l(' l_search_merged := ''N''; ');
4764 l(' ELSE ');
4765 l(' l_search_merged := p_search_merged; ');
4766 l(' END IF; ');
4767 l(' IF p_restrict_sql IS NULL THEN');
4768 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
4769 l(' SELECT p_search_ctx_id, PARTY_ID, '||l_party_name_score);
4770 l(' FROM hz_staged_parties ');
4771 l(' WHERE TX8 LIKE g_party_stage_rec.TX8||'' %''');
4772 l(' AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||'' '' = TX36))');
4773 l(' AND( (l_search_merged =''Y'' ) ');
4774 l(' OR (l_search_merged = ''I'' AND nvl(status, ''A'') in (''A'', ''I'')) ');
4775 l(' OR (l_search_merged = ''N'' AND nvl(status, ''A'') in (''A''))) ');
4776 l(' AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)');
4777 l(' AND rownum <= p_thresh;');
4778 l(' ELSE');
4779 l_party_name_score:=replace(replace(l_party_name_score,'g_party_stage_rec.TX8',':TX8'),'''','''''');
4780 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 '';');
4781 l(' l_sqlstr := l_sqlstr || '' WHERE TX8 like :TX8||'''' %'''' '';');
4782 l(' l_sqlstr := l_sqlstr || '' AND (:TX36 IS NULL OR :TX36||'''' '''' = TX36) '';');
4783 l(' IF l_search_merged = ''N'' THEN');
4784 l(' l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''')=''''A'''' '';');
4785 l(' ELSIF l_search_merged = ''Y'' THEN');
4786 l(' l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''') in (''''A'''',''''I'''') '';');
4787 l(' END IF;');
4788 l(' l_sqlstr := l_sqlstr || '' AND (:p_dup IS NULL OR party_id <> :p_dup ) '';');
4789 l(' l_sqlstr := l_sqlstr || '' AND ''||p_restrict_sql||'' '';');
4790 l(' l_sqlstr := l_sqlstr || '' AND ROWNUM <= :thresh '';');
4791
4792 IF l_purpose IN ('S','W') THEN
4793 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;');
4794 ELSE
4795 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;');
4796 END IF;
4797
4798 l(' END IF;');
4799 l(' x_num_matches := SQL%ROWCOUNT;');
4800 l(' END;');
4801 l('');
4802 l(' FUNCTION get_new_score_rec (');
4803 l(' p_init_total_score NUMBER,');
4804 l(' p_init_party_score NUMBER,');
4805 l(' p_init_party_site_score NUMBER,');
4806 l(' p_init_contact_score NUMBER,');
4807 l(' p_init_contact_point_score NUMBER, ');
4808 l(' p_party_id NUMBER, ');
4809 l(' p_party_site_id NUMBER, ');
4810 l(' p_org_contact_id NUMBER, ');
4811 l(' p_contact_point_id NUMBER) ');
4812 l(' RETURN HZ_PARTY_SEARCH.score_rec IS');
4813 l(' l_score_rec HZ_PARTY_SEARCH.score_rec;');
4814 l(' BEGIN');
4815 ldbg_s('-----------------','calling the function get_new_score_rec to set the l_score_rec structure');
4816 l(' l_score_rec.TOTAL_SCORE := p_init_total_score;');
4817 l(' l_score_rec.PARTY_SCORE := p_init_party_score;');
4818 l(' l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;');
4819 l(' l_score_rec.CONTACT_SCORE := p_init_contact_score;');
4820 l(' l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;');
4821 l(' l_score_rec.PARTY_ID := p_party_id;');
4822 l(' l_score_rec.PARTY_SITE_ID := p_party_site_id;');
4823 l(' l_score_rec.ORG_CONTACT_ID := p_org_contact_id;');
4824 l(' l_score_rec.CONTACT_POINT_ID := p_contact_point_id;');
4825 l(' RETURN l_score_rec;');
4826 l(' END;');
4827 END IF; ---Code Change for Match Rule Set
4828 l('');
4829 l(' /**********************************************************');
4830 l(' This procedure finds the set of parties that match the search');
4831 l(' criteria and returns a scored set of parties');
4832 l('');
4833 l(' The steps in executing the search are as follows');
4834 l(' 1. Initialization and error checks');
4835 l(' 2. Setup of intermedia query strings for Acquisition query');
4836 l(' 3. Execution of Acquisition query');
4837 l(' 4. Execution of Secondary queries to score results');
4838 l(' 5. Setup of data temporary table to return search results');
4839 l(' **********************************************************/');
4840 l('');
4841 -- Generated
4842 l('PROCEDURE find_parties (');
4843 l(' p_rule_id IN NUMBER,');
4844 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
4845 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
4846 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
4847 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
4848 l(' p_restrict_sql IN VARCHAR2,');
4849 l(' p_match_type IN VARCHAR2,');
4850 l(' p_search_merged IN VARCHAR2,');
4851 l(' p_dup_party_id IN NUMBER,');
4852 l(' p_dup_set_id IN NUMBER,');
4853 l(' p_dup_batch_id IN NUMBER,');
4854 l(' p_ins_details IN VARCHAR2,');
4855 l(' x_search_ctx_id OUT NUMBER,');
4856 l(' x_num_matches OUT NUMBER');
4857 l(') IS');
4858 l('');
4859 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
4860 l(' -- Strings to hold the generated Intermedia query strings');
4861 l(' l_party_contains_str VARCHAR2(32000); ');
4862 l(' l_party_site_contains_str VARCHAR2(32000);');
4863 l(' l_contact_contains_str VARCHAR2(32000);');
4864 l(' l_contact_pt_contains_str VARCHAR2(32000);');
4865 l(' l_denorm_str VARCHAR2(32000);');
4866 l(' l_ps_denorm_str VARCHAR2(32000);');
4867 l(' l_ct_denorm_str VARCHAR2(32000);');
4868 l(' l_cpt_denorm_str VARCHAR2(32000);');
4869
4870 l('');
4871 l(' -- Other local variables');
4872 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
4873 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
4874 l(' -- For Score calculation');
4875 l(' l_max_score NUMBER;');
4876 l(' l_match_idx NUMBER;');
4877 l(' l_entered_max_score NUMBER;');
4878 l(' FIRST BOOLEAN;');
4879 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
4880 l('');
4881 FOR TX IN (
4882 SELECT distinct f.staged_attribute_column
4883 FROM hz_trans_functions_vl f, hz_secondary_trans st,
4884 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
4885 WHERE sa.match_rule_id = p_rule_id
4886 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
4887 AND st.function_id = f.function_id
4888 AND a.attribute_id = sa.attribute_id) LOOP
4889 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
4890 END LOOP;
4891 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
4892 l(' H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
4893 l(' H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
4894 l('');
4895 l(' l_score NUMBER;');
4896 l(' l_idx NUMBER;');
4897 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
4898 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
4899 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
4900 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
4901 l(' l_party_id NUMBER;');
4902 l(' l_ps_party_id NUMBER;');
4903 l(' l_ct_party_id NUMBER;');
4904 l(' l_cpt_party_id NUMBER;');
4905 l(' l_cpt_ps_id NUMBER;');
4906 l(' l_cpt_contact_id NUMBER;');
4907 l(' l_cpt_type VARCHAR2(100);');
4908 l(' l_party_site_id NUMBER;');
4909 l(' l_org_contact_id NUMBER;');
4910 l(' l_contact_pt_id NUMBER;');
4911 l(' l_ps_contact_id NUMBER;');
4912 l(' l_party_max_score NUMBER;');
4913 l(' l_ps_max_score NUMBER;');
4914 l(' l_contact_max_score NUMBER;');
4915 l(' l_cpt_max_score NUMBER;');
4916 l(' l_denorm_max_score NUMBER;');
4917 l(' l_non_denorm_max_score NUMBER;');
4918 l('');
4919 l(' defpt NUMBER :=0;');
4920 l(' defps NUMBER :=0;');
4921 l(' defct NUMBER :=0;');
4922 l(' defcpt NUMBER :=0;');
4923 l(' l_index NUMBER;');
4924 l(' l_max_thresh NUMBER;');
4925 l(' l_tmp NUMBER;');
4926 l(' l_merge_flag VARCHAR2(1);');
4927 l(' l_num_eval NUMBER:=0;');
4928 l('');
4929 l(' --Fix for bug 4417124 ');
4930 l(' l_use_contact_addr_info BOOLEAN := TRUE;');
4931 l(' l_use_contact_cpt_info BOOLEAN := TRUE;');
4932 l(' l_use_contact_addr_flag VARCHAR2(1) := ''Y'';');
4933 l(' l_use_contact_cpt_flag VARCHAR2(1) := ''Y'';');
4934 l('');
4935 l(' L_RETURN_IMM_EXC EXCEPTION;');
4936 l('');
4937 l(' ');
4938 l(' /********************* Find Parties private procedures *******/');
4939
4940 l(' PROCEDURE push_eval IS');
4941 l(' BEGIN');
4942 ldbg_s('-----------------','calling the procedure push_eval');
4943 ldbg_s('Emptying the lists H_PARTY_ID, H_PARTY_ID_LIST and H_SCORES');
4944 l(' H_PARTY_ID.DELETE;');
4945 l(' H_PARTY_ID_LIST.DELETE;');
4946 l(' H_SCORES.DELETE; ');
4947 l(' g_mappings.DELETE;');
4948 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
4949 l(' call_order(5) := call_order(1);');
4950 l(' call_type(5) := ''AND'';');
4951 l(' call_max_score(5) := call_max_score(1);');
4952 l(' call_type(2) := ''OR'';');
4953 l(' END;');
4954
4955 l('');
4956 l(' /** Private procedure to acquire and score at party level ***/');
4957 l(' PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
4958 l(' l_party_id_idx NUMBER:=1;');
4959 l(' l_ctx_id NUMBER;');
4960 l(' l_precalc_score BOOLEAN := FALSE;');
4961 l(' l_TX35_new varchar2(4000);');--9155543
4962 l(' BEGIN');
4963 ldbg_s('-----------------','calling the procedure eval_party_level');
4964 l(' SAVEPOINT eval_start;');
4965 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
4966 l(' l_ctx_id := l_search_ctx_id;');
4967 ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
4968 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
4969 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
4970 l(' l_search_ctx_id,H_PARTY_ID(I));');
4971 l(' H_PARTY_ID.DELETE;');
4972 l(' H_PARTY_ID_LIST.DELETE;');
4973 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
4974 ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
4975 l(' l_ctx_id := l_search_ctx_id;');
4976 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
4977 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
4978 l(' l_search_ctx_id,H_PARTY_ID(I));');
4979 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
4980 l(' ELSE');
4981 l(' IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
4982 l(' and check_estimate_hits(''PARTY'',p_party_contains_str)>l_max_thresh THEN');
4983 ldbg_s('In eval party level estimated hits exceed threshold');
4984 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');
4985 ldbg_s('In eval party level resolution options is set to SQL search.');
4986 l(' IF (l_party_site_contains_str IS NULL AND');
4987 l(' l_contact_contains_str IS NULL AND');
4988 l(' l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN');
4989 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);');
4990 l(' RAISE L_RETURN_IMM_EXC;');
4991 l(' ELSE');
4992 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);');
4993 l(' END IF;');
4994 l(' ELSE');
4995 l(' IF p_index>1 THEN');
4996 ldbg_s('In eval party level number of matches found exceeded threshold');
4997 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
4998 l(' FND_MSG_PUB.ADD;');
4999 l(' RAISE FND_API.G_EXC_ERROR;');
5000 l(' ELSE');
5001 l(' push_eval;');
5002 l(' RETURN;');
5003 l(' END IF;');
5004 l(' END IF;');
5005 l(' END IF;');
5006 l(' l_ctx_id := NULL;');
5007 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5008 l(' END IF;');
5009 ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_CURSOR ================');
5010 l(' IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN');
5011 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);');
5012 l(' END IF;');
5013 l(' LOOP ');
5014 l(' FETCH l_party_cur INTO');
5015 l(' l_party_id '||l_p_into_list||';');
5016 l(' EXIT WHEN l_party_cur%NOTFOUND;');
5017 l(' l_index := map_id(l_party_id);');
5018 IF(l_p_param_list LIKE '%TX35%') THEN--9155543
5019 l(' l_TX35_new:=RTRIM(LTRIM(l_TX35));');
5020 l(' l_TX35_new:=(CASE l_TX35_new WHEN ''SYNC'' THEN HZ_STAGE_MAP_TRANSFORM.den_acc_number (l_party_id) ELSE l_TX35_new END);');
5021 l_p_param_list:=replace(l_p_param_list,'l_TX35','l_TX35_new');
5022 END IF;
5023 l(' l_score := GET_PARTY_SCORE('||l_p_param_list||');');
5024 l_p_param_list:=replace(l_p_param_list,'l_TX35_new','l_TX35');
5025 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
5026 l(' H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
5027 l(' ELSE');
5028 l(' H_SCORES(l_index).TOTAL_SCORE := ');
5029 l(' H_SCORES(l_index).TOTAL_SCORE+l_score;');
5030 l(' H_SCORES(l_index).PARTY_SCORE := l_score;');
5031 l(' END IF;');
5032 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5033 l(' H_PARTY_ID_LIST(l_index) := 1;');
5034 l(' H_PARTY_ID(l_party_id_idx) := l_party_id;');
5035 l(' l_party_id_idx:= l_party_id_idx+1;');
5036 l(' END IF;');
5037 l(' IF (l_party_id_idx-1)>l_max_thresh THEN');
5038 l(' IF p_index=1 AND call_order(2) = ''PARTY_SITE'' ');
5039 l(' AND call_type(2) = ''AND'' AND l_contact_contains_str IS NULL');
5040 l(' AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' ');
5041 l(' AND l_contact_pt_contains_str IS NULL THEN');
5042 l(' EXIT;');
5043 l(' END IF;');
5044 l(' CLOSE l_party_cur;'); --Bug No: 3872745
5045 l(' IF p_index>1 THEN');
5046 ldbg_s('In eval party level estimated hits exceed threshold');
5047 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5048 l(' FND_MSG_PUB.ADD;');
5049 l(' RAISE FND_API.G_EXC_ERROR;');
5050 l(' ELSE');
5051 l(' push_eval;');
5052 l(' RETURN;');
5053 l(' END IF;');
5054 l(' END IF;');
5055 ds(fnd_log.level_statement);
5056 dc(fnd_log.level_statement,'In eval_party_level l_party_id = ','l_party_id');
5057 dc(fnd_log.level_statement,'In eval_party_level l_score = ','l_score');
5058 de;
5059 l(' END LOOP;');
5060 ldbg_s('===========END of LOOP=====================');
5061 l(' CLOSE l_party_cur;');
5062 l(' ROLLBACK to eval_start;');
5063 l(' END;');
5064 l('');
5065 l(' /** Private procedure to acquire and score at party site level ***/');
5066 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');
5067 l(' l_party_id_idx NUMBER:=1;');
5068 l(' l_ctx_id NUMBER;');
5069 l(' h_ps_id HZ_PARTY_SEARCH.IDList;');
5070 l(' h_ps_party_id HZ_PARTY_SEARCH.IDList;');
5071 l(' h_ps_score HZ_PARTY_SEARCH.IDList;');
5072 l(' detcnt NUMBER := 1;');
5073 l(' BEGIN');
5074 ldbg_s('-----------------','calling the procedure eval_party_site_level');
5075 l(' IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,''D_PS'')>0');
5076 l(' AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and');
5077 l(' l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> ''Y'' THEN');
5078 l(' l_party_id := H_SCORES.FIRST;');
5079 l(' WHILE l_party_id IS NOT NULL LOOP');
5080 l(' H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;');
5081 l(' l_party_id:=H_SCORES.NEXT(l_party_id);');
5082 l(' END LOOP;');
5083 l(' RETURN;');
5084
5085 l(' END IF;');
5086
5087 l(' SAVEPOINT eval_start;');
5088 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
5089 ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5090 l(' l_ctx_id := l_search_ctx_id;');
5091 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5092 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5093 l(' l_search_ctx_id,H_PARTY_ID(I));');
5094 l(' H_PARTY_ID.DELETE;');
5095 l(' H_PARTY_ID_LIST.DELETE;');
5096 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5097 ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5098 l(' l_ctx_id := l_search_ctx_id;');
5099 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5100 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5101 l(' l_search_ctx_id,H_PARTY_ID(I));');
5102 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5103 l(' ELSE');
5104 l(' IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5105 l(' and check_estimate_hits(''PARTY_SITES'',p_party_site_contains_str)>l_max_thresh THEN');
5106 ldbg_s('In eval party site level estimated hits exceed threshold');
5107 l(' IF p_index>1 THEN');
5108 ldbg_s('In eval party site level number of matches found exceeded threshold');
5109 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5110 l(' FND_MSG_PUB.ADD;');
5111 l(' RAISE FND_API.G_EXC_ERROR;');
5112 l(' ELSE');
5113 l(' push_eval;');
5114 l(' RETURN;');
5115 l(' END IF;');
5116 l(' END IF;');
5117
5118 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5119 l(' l_ctx_id := NULL;');
5120 l(' END IF;');
5121 ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_SITE_CURSOR ================');
5122 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);');
5123 l(' LOOP ');
5124 l(' FETCH l_party_site_cur INTO');
5125 l(' l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
5126 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
5127 l(' --Fix for bug 4417124 ');
5128 l(' IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN');
5129 l(' l_index := map_id(l_ps_party_id);');
5130 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
5131
5132 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
5133 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);');
5134 l(' ELSE');
5135 l(' IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
5136 l(' H_SCORES(l_index).TOTAL_SCORE := ');
5137 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
5138 l(' H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
5139 l(' END IF;');
5140 l(' END IF;');
5141 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5142 l(' H_PARTY_ID_LIST(l_index) := 1;');
5143 l(' H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
5144 l(' l_party_id_idx:= l_party_id_idx+1;');
5145 l(' END IF;');
5146 l(' IF p_ins_details = ''Y'' THEN');
5147 l(' h_ps_id(detcnt) := l_party_site_id;');
5148 l(' h_ps_party_id(detcnt) := l_ps_party_id;');
5149 l(' IF (p_emax_score > 0) THEN ');
5150 l(' h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
5151 l(' ELSE ');
5152 l(' h_ps_score(detcnt) := 0; ');
5153 l(' END IF; ');
5154 l(' detcnt := detcnt +1;');
5155 l(' END IF;');
5156 ds(fnd_log.level_statement);
5157 dc(fnd_log.level_statement,'In eval_party_site_level l_party_site_id = ','l_party_site_id');
5158 dc(fnd_log.level_statement,'In eval_paty_site_level l_ps_party_id = ','l_ps_party_id');
5159 dc(fnd_log.level_statement,'In eval_party_site_level l_score = ','l_score');
5160 de;
5161 l(' END IF;');
5162 l(' END LOOP;');
5163 ldbg_s('===========END of LOOP=====================');
5164 l(' CLOSE l_party_site_cur;');
5165 l(' ROLLBACK to eval_start;');
5166 l(' IF p_ins_details = ''Y'' THEN');
5167 ldbg_s('In eval_party_site_level inserting into HZ_MATCHED_PARTY_SITES_GT from the H_PS_ID list');
5168 l(' FORALL I in 1..h_ps_id.COUNT ');
5169 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
5170 l(' l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
5171 l(' END IF;');
5172 l(' END;');
5173 l('');
5174 l(' /** Private procedure to acquire and score at contact point level ***/');
5175 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');
5176 l(' l_party_id_idx NUMBER:=1;');
5180 l(' h_ct_score HZ_PARTY_SEARCH.IDList;');
5177 l(' l_ctx_id NUMBER;');
5178 l(' h_ct_id HZ_PARTY_SEARCH.IDList;');
5179 l(' h_ct_party_id HZ_PARTY_SEARCH.IDList;');
5181 l(' detcnt NUMBER := 1;');
5182 l(' BEGIN');
5183 ldbg_s('-----------------','calling the procedure eval_contact_level');
5184 l(' SAVEPOINT eval_start;');
5185 l(' IF l_match_str = '' AND '' AND p_call_type=''AND'' THEN');
5186 ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5187 l(' l_ctx_id := l_search_ctx_id;');
5188 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5189 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5190 l(' l_search_ctx_id,H_PARTY_ID(I));');
5191 l(' H_PARTY_ID.DELETE;');
5192 l(' H_PARTY_ID_LIST.DELETE;');
5193 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5194 ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5195 l(' l_ctx_id := l_search_ctx_id;');
5196 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5197 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5198 l(' l_search_ctx_id,H_PARTY_ID(I));');
5199 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5200 l(' ELSE');
5201 l(' IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5202 l(' and check_estimate_hits(''CONTACTS'',p_contact_contains_str)>l_max_thresh THEN');
5203 ldbg_s('In eval contact level estimated hits exceed threshold');
5204 l(' IF p_index>1 THEN');
5205 ldbg_s('In eval contact level number of matches found exceeded threshold');
5206 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5207 l(' FND_MSG_PUB.ADD;');
5208 l(' RAISE FND_API.G_EXC_ERROR;');
5209 l(' ELSE');
5210 l(' push_eval;');
5211 l(' RETURN;');
5212 l(' END IF;');
5213 l(' END IF;');
5214 l(' l_ctx_id := NULL;');
5215 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5216 l(' END IF;');
5217 ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_CURSOR ================');
5218 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);');
5219 l(' LOOP ');
5220 l(' FETCH l_contact_cur INTO');
5221 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
5222 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
5223 l(' l_index := map_id(l_ct_party_id);');
5224 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
5225
5226 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
5227 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);');
5228 l(' ELSE');
5229 l(' IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
5230 l(' H_SCORES(l_index).TOTAL_SCORE := ');
5231 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
5232 l(' H_SCORES(l_index).CONTACT_SCORE := l_score;');
5233 l(' END IF;');
5234 l(' END IF;');
5235 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5236 l(' H_PARTY_ID_LIST(l_index) := 1;');
5237 l(' H_PARTY_ID(l_party_id_idx) := l_ct_party_id;');
5238 l(' l_party_id_idx:= l_party_id_idx+1;');
5239 l(' END IF;');
5240 l(' IF p_ins_details = ''Y'' THEN');
5241 l(' h_ct_id(detcnt) := l_org_contact_id;');
5245 l(' ELSE ');
5242 l(' h_ct_party_id(detcnt) := l_ct_party_id;');
5243 l(' IF (p_emax_score > 0) THEN ');
5244 l(' h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
5246 l(' h_ct_score(detcnt) := 0; ');
5247 l(' END IF; ');
5248 l(' detcnt := detcnt +1;');
5249 l(' END IF;');
5250 ds(fnd_log.level_statement);
5251 dc(fnd_log.level_statement,'In eval_contact_level l_org_contact_id = ','l_org_contact_id');
5252 dc(fnd_log.level_statement,'In eval_contact_level l_ct_party_id = ','l_ct_party_id');
5253 dc(fnd_log.level_statement,'In eval_contact_level l_score = ','l_score');
5254 de;
5255 l(' END LOOP;');
5256 ldbg_s('===========END of LOOP=====================');
5257 l(' CLOSE l_contact_cur;');
5258 l(' ROLLBACK to eval_start;');
5259 l(' IF p_ins_details = ''Y'' THEN');
5260 ldbg_s('In eval_contact_level inserting into HZ_MATCHED_CONTACTS_GT from the H_CT_ID list');
5261 l(' FORALL I in 1..h_ct_id.COUNT ');
5262 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
5263 l(' l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
5264 l(' END IF;');
5265 l(' END;');
5266 l('');
5267 l(' /** Private procedure to acquire and score at contact point level ***/');
5268 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');
5269 l(' l_party_id_idx NUMBER:=1;');
5270 l(' l_ctx_id NUMBER;');
5271 l(' h_cpt_id HZ_PARTY_SEARCH.IDList;');
5272 l(' h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
5273 l(' h_cpt_score HZ_PARTY_SEARCH.IDList;');
5274 l(' detcnt NUMBER := 1;');
5275 l(' l_cpt_flag VARCHAR2(1) := ''N'';');
5276
5277 --l(' l_continue VARCHAR2(1) := ''Y'';');
5278 l(' is_a_match VARCHAR2(1) := ''Y'';');
5279 l(' BEGIN');
5280 ldbg_s('-----------------','calling the procedure eval_cpt_level');
5281 l(' SAVEPOINT eval_start;');
5282 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
5283 ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5284 l(' l_ctx_id := l_search_ctx_id;');
5285 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5286 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5287 l(' l_search_ctx_id,H_PARTY_ID(I));');
5288 l(' H_PARTY_ID.DELETE;');
5289 l(' H_PARTY_ID_LIST.DELETE;');
5290 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5291 ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5292 l(' l_ctx_id := l_search_ctx_id;');
5293 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5294 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5295 l(' l_search_ctx_id,H_PARTY_ID(I));');
5296 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5297 l(' ELSE');
5298 l(' IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5299 l(' and check_estimate_hits(''CONTACT_POINTS'',p_contact_pt_contains_str)>l_max_thresh THEN');
5300 ldbg_s('In eval contact point level estimated hits exceed threshold');
5301 l(' IF p_index>1 THEN');
5302 ldbg_s('In eval contact point level number of matches found exceeded threshold');
5303 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5304 l(' FND_MSG_PUB.ADD;');
5305 l(' RAISE FND_API.G_EXC_ERROR;');
5306 l(' ELSE');
5307 l(' push_eval;');
5308 l(' RETURN;');
5309 l(' END IF;');
5310 l(' END IF;');
5311
5312 l(' l_ctx_id := NULL;');
5313 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
5314 l(' END IF;');
5315 ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR ================');
5316 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);');
5317 l(' LOOP ');
5318 l(' FETCH l_contact_pt_cur INTO');
5319 l(' l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
5320 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
5321 ldbg_s('----------------------------------------------------------------------------------');
5322 ldbg_sv('Processing party_id - ','l_cpt_party_id');
5323 ldbg_sv('Contact Point Type - ','l_cpt_type');
5324 l(' --Fix for bug 4417124 ');
5325 l(' IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN');
5326 l(' l_index := map_id(l_cpt_party_id);');
5327 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
5328
5329 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
5330 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);');
5331 if l_purpose IN ('S','W') then
5332 l(' H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
5333 ldbg_s('Processing second Time for this party');
5334 else
5335 ldbg_s('Processing First Time for this party');
5336 end if;
5337 ldbg_sv('l_index is - ','l_index');
5338
5339 l(' ELSE');
5340 if l_purpose IN ('S','W') then
5341 l(' IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then');
5342 l(' IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then');
5343 l(' H_SCORES(l_index).TOTAL_SCORE :=');
5344 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;');
5345 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;');
5346 l(' H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
5347 ldbg_s('Passed in score greater than existing score');
5348 ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ' , 'H_SCORES(l_index).TOTAL_SCORE' );
5349 ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ' , 'H_SCORES(l_index).CONTACT_POINT_SCORE' );
5350 ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ', 'H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
5351 l(' END IF;');
5352 l(' ELSE');
5353 ldbg_s('Passed in score less than or equal to the existing score ');
5354 l(' H_SCORES(l_index).TOTAL_SCORE :=');
5355 l(' H_SCORES(l_index).TOTAL_SCORE+l_score;');
5356 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
5357 l(' H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
5358 ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ','H_SCORES(l_index).TOTAL_SCORE' );
5362 else
5359 ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ','H_SCORES(l_index).CONTACT_POINT_SCORE' );
5360 ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
5361 l(' END IF;');
5363
5364 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
5365 l(' H_SCORES(l_index).TOTAL_SCORE := ');
5369 end if;
5366 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
5367 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
5368 l(' END IF;');
5370 l(' END IF;');
5371 ldbg_sv('call type is - ','p_call_type' );
5372 ldbg_sv('match string is - ','l_match_str' );
5373 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5374 if l_purpose IN ('S','W')then
5375 l(' -- If rule is match all ');
5376 l(' IF l_match_str = '' AND '' THEN');
5377 ldbg_s('Match string is AND ');
5378 l(' IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
5379 l(' is_a_match := ''Y'';');
5380 ldbg_sv('is_a_match is ' , 'is_a_match');
5381 l(' ELSE');
5382 l(' is_a_match := ''N'';');
5383 ldbg_sv('is_a_match is ' , 'is_a_match');
5384 l(' END IF;');
5385 l(' -- Else it is construed to be a match anyway');
5386 l(' ELSE');
5387 l(' is_a_match := ''Y'';');
5388 ldbg_sv('is_a_match is ' , 'is_a_match');
5389 l(' END IF;');
5390 l(' IF (is_a_match=''Y'') then');
5391 end if;
5392
5393 l(' H_PARTY_ID_LIST(l_index) := 1;');
5394 l(' H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;');
5395 l(' l_party_id_idx:= l_party_id_idx+1;');
5396 if l_purpose IN ('S','W') then
5397 l(' end if;');
5398 end if;
5399 l(' END IF;');
5400 l(' IF p_ins_details = ''Y'' THEN');
5401 if l_purpose IN ('S','W') then
5402 l(' IF l_match_str = '' AND '' THEN');
5403 ldbg_s('Match string is AND ');
5404 l(' IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
5405 l(' is_a_match := ''Y'';');
5406 ldbg_sv('is_a_match is ' , 'is_a_match');
5407 l(' ELSE');
5408 l(' is_a_match := ''N'';');
5409 ldbg_sv('is_a_match is ' , 'is_a_match');
5410 l(' END IF;');
5411 l(' ELSE');
5412 l(' is_a_match := ''Y'';');
5413 ldbg_sv('is_a_match is ' , 'is_a_match');
5414 l(' END IF;');
5415 l(' IF (is_a_match=''Y'') THEN');
5416 end if;
5417 l(' FOR I IN 1..h_cpt_id.COUNT LOOP');
5418 l(' IF h_cpt_id(I)=l_contact_pt_id THEN');
5419 l(' l_cpt_flag := ''Y'';');
5420 l(' END IF;');
5421 l(' END LOOP;');
5422 l(' IF l_cpt_flag = ''Y'' THEN');
5423 l(' NULL;');
5424 l(' ELSE');
5425 l(' h_cpt_id(detcnt) := l_contact_pt_id;');
5426 l(' h_cpt_party_id(detcnt) := l_cpt_party_id;');
5427 l(' IF (p_emax_score > 0) THEN ');
5428 l(' h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
5429 l(' ELSE ');
5430 l(' h_cpt_score(detcnt) := 0; ');
5431 l(' END IF; ');
5432 l(' detcnt := detcnt +1;');
5433 l(' END IF;');
5434
5435 if l_purpose IN ('S','W') then
5436 l(' end if;');
5437 end if;
5438
5439 l(' END IF;');
5440 ds(fnd_log.level_statement);
5441 dc(fnd_log.level_statement,'In eval_cpt_level l_contact_pt_id = ','l_contact_pt_id');
5442 dc(fnd_log.level_statement,'In eval_cpt_level l_cpt_party_id = ','l_cpt_party_id');
5443 dc(fnd_log.level_statement,'In eval_cpt_level l_score = ','l_score');
5444 de;
5445 l(' END IF;');
5446 l(' END LOOP;');
5447 ldbg_s('===========END of LOOP=====================');
5448 l(' CLOSE l_contact_pt_cur;');
5449 l(' ROLLBACK to eval_start;');
5450 l(' IF p_ins_details = ''Y'' THEN');
5451 ldbg_s('In eval_contact_point_level inserting into HZ_MATCHED_CPTS_GT from the H_CPT_ID list');
5452 l(' FORALL I in 1..h_cpt_id.COUNT ');
5453 l(' INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
5454 l(' l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
5455 l(' END IF;');
5456 l(' END eval_cpt_level;');
5457 l('');
5458 l(' /** Private procedure to call the eval procedure at each entity in the correct order ***/');
5459 l(' PROCEDURE do_eval (p_index NUMBER) IS');
5460 l(' l_ctx_id NUMBER;');
5461 l(' l_threshold NUMBER;'); --Bug No: 4407425
5462 l(' other_acq_criteria_exists BOOLEAN; '); --Bug No: 4407425
5463 l(' acq_cnt NUMBER; '); --Bug No:5218095
5464 l(' BEGIN');
5465 ldbg_s('-----------------','calling the procedure do_eval');
5466 --Start of Bug No: 4407425
5467 l(' IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
5468 IF(l_purpose ='S') THEN
5469 l(' l_threshold := round(( l_entered_max_score / '|| l_max_score ||') * '|| l_match_threshold ||'); ');
5470 ELSE
5471 l(' l_threshold := '|| l_match_threshold ||'; ');
5472 END IF;
5473 l(' other_acq_criteria_exists := TRUE ;');
5474 --Start of Bug No:5218095
5475 /*l(' IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
5476 l(' other_criteria_exists := FALSE; ');
5477 l(' END IF ; ');*/
5478 l(' --check if acquisition criteria exists for any other entity');
5479 l(' IF l_party_contains_str IS NOT NULL THEN ');
5480 l(' acq_cnt := 1; ');
5481 l(' END IF; ');
5482 l(' IF l_party_site_contains_str IS NOT NULL THEN ');
5483 l(' acq_cnt := acq_cnt+1; ');
5484 l(' END IF; ');
5485 l(' IF l_contact_contains_str IS NOT NULL THEN ');
5486 l(' acq_cnt := acq_cnt+1; ');
5490 l(' END IF; ');
5487 l(' END IF;');
5488 l(' IF l_contact_pt_contains_str IS NOT NULL THEN ');
5489 l(' acq_cnt := acq_cnt+1; ');
5491
5492 l(' IF acq_cnt>1 THEN ');
5493 l(' other_acq_criteria_exists := TRUE; ');
5494 l(' ELSE');
5495 l(' other_acq_criteria_exists := FALSE; ');
5496 l(' END IF; ');
5497 dc(fnd_log.level_statement,'count of entities having acquisition attributes = ','acq_cnt');
5498 dc(fnd_log.level_statement,'call_max_score(p_index) = ','call_max_score(p_index)');
5499 dc(fnd_log.level_statement,'l_threshold = ','l_threshold');
5500 --End of Bug No:5218095
5501 l(' IF(l_match_str = '' AND '' AND other_acq_criteria_exists) THEN');
5502 --start of Bug No:5218095
5506 l(' ELSE ');
5503 l(' IF ( call_max_score(p_index) < l_threshold) THEN ');
5504 ldbg_s('When max score of entity level<l_threshold, do not evaluate ');
5505 l(' RETURN; ');
5507 ldbg_s('In do eval number of matches found exceeded threshold');
5508 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED''); ');
5509 l(' FND_MSG_PUB.ADD; ');
5510 l(' RAISE FND_API.G_EXC_ERROR; ');
5511 l(' END IF; ');
5512 --end of Bug No:5218095
5513 l(' ELSE');
5514 ldbg_s('In do eval number of matches found exceeded threshold');
5515 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5516 l(' FND_MSG_PUB.ADD;');
5517 l(' RAISE FND_API.G_EXC_ERROR;');
5518 l(' END IF; ');
5519 l(' END IF;');
5520 --End of Bug No: 4407425
5521 /*l(' IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
5522 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5523 l(' FND_MSG_PUB.ADD;');
5524 l(' RAISE FND_API.G_EXC_ERROR;');
5525 l(' END IF;');
5526 */
5527 l(' IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
5528 l(' eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
5529 l(' ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
5530 l(' eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
5531 l(' ELSIF call_order(p_index) = ''CONTACT'' AND l_contact_contains_str IS NOT NULL THEN');
5532 l(' eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
5533 l(' ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
5534 l(' eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
5535 l(' END IF;');
5536 l(' END;');
5537 l(' /************ End of find_parties private procedures **********/ ');
5538 l('');
5539 l(' BEGIN');
5540 l('');
5541
5542 ldbg_s('--------------------------------');
5543 ldbg_s('Entering Procedure find_parties');
5544 ds(fnd_log.level_statement);
5545 dc(fnd_log.level_statement,'Input Parameters are :');
5546 dc(fnd_log.level_statement,'p_match_type = ','p_match_type');
5547 dc(fnd_log.level_statement,'p_restrict_sql = ','p_restrict_sql');
5548 dc(fnd_log.level_statement,'p_dup_set_id = ','p_dup_set_id');
5549 dc(fnd_log.level_statement,'p_search_merged = ','p_search_merged');
5550 dc(fnd_log.level_statement,'p_dup_party_id = ','p_dup_party_id');
5551 de;
5552
5553 l(' -- ************************************');
5554 l(' -- STEP 1. Initialization and error checks');
5555 l('');
5556
5557 l(' l_match_str := ''' || l_match_str || ''';');
5558 l(' IF p_match_type = ''AND'' THEN');
5559 l(' l_match_str := '' AND '';');
5560 l(' ELSIF p_match_type = ''OR'' THEN');
5561 l(' l_match_str := '' OR '';');
5562 l(' END IF;');
5563 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);');
5564 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
5565 l('');
5566 IF l_purpose = 'D' THEN
5567 ldbg_s('This is Duplicate Identification match rule');
5568 l(' IF l_entered_max_score < '||l_match_threshold||' THEN');
5569 l(' x_num_matches:=0;');
5570 l(' x_search_ctx_id:=0;');
5571 ldbg_s('Returning since maximum obtainable score of input search criteria < threshold');
5572 l(' RETURN;');
5573 l(' END IF;');
5574 END IF;
5575 l('');
5576 l(' --Fix for bug 4417124 ');
5577 l('');
5578 l(' SELECT use_contact_addr_flag, use_contact_cpt_flag ');
5579 l(' INTO l_use_contact_addr_flag, l_use_contact_cpt_flag ');
5580 l(' FROM hz_match_rules_b ');
5581 l(' WHERE match_rule_id = '||p_rule_id||'; ');
5582 l('');
5586 l('');
5583 l(' IF NVL(l_use_contact_addr_flag, ''Y'') = ''N'' THEN');
5584 l(' l_use_contact_addr_info := FALSE; ');
5585 l(' END IF; ');
5587 l(' IF NVL(l_use_contact_cpt_flag, ''Y'') = ''N'' THEN');
5588 l(' l_use_contact_cpt_info := FALSE; ');
5589 l(' END IF; ');
5590 l('');
5591 l(' --End fix for bug 4417124');
5592 l('');
5593 l(' IF p_dup_batch_id IS NOT NULL THEN');
5594 l(' l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH_BATCH''),10000);');
5595 l(' ELSE');
5596 l(' l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
5597 l(' END IF;');
5598
5599 l(' IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
5600 l(' g_score_until_thresh := true;');
5601 ldbg_s('g_score_until_thresh is true');
5602 l(' ELSE');
5603 l(' g_score_until_thresh := false;');
5604 ldbg_s('g_score_until_thresh is false');
5605 l(' END IF;');
5606 ldbg_sv('Maximum records that will be evaluated is ', 'l_max_thresh');
5607
5608 l(' -- ************************************************************');
5609 l(' -- STEP 2. Setup of intermedia query strings for Acquisition query');
5610
5611 l(' l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);');
5612 l(' l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);');
5613 l(' l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);');
5614 ldbg_s('Commencing the DENORM LOGIC in find_parties');
5615 l(' l_denorm_max_score:=0;');
5616 l(' l_non_denorm_max_score:=0;');
5617 l(' IF l_ps_denorm_str IS NOT NULL THEN');
5618 l(' l_denorm_max_score := l_denorm_max_score+l_ps_max_score;');
5619 l(' l_denorm_str := l_ps_denorm_str;');
5620 l(' ELSE');
5621 l(' l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;');
5622 l(' END IF;');
5623
5624 l(' IF l_ct_denorm_str IS NOT NULL THEN');
5625 l(' l_denorm_max_score := l_denorm_max_score+l_contact_max_score;');
5626 l(' IF l_denorm_str IS NOT NULL THEN');
5627 l(' l_denorm_str := l_denorm_str || '' OR '' ||l_ct_denorm_str;');
5628 l(' ELSE');
5629 l(' l_denorm_str := l_ct_denorm_str;');
5630 l(' END IF;');
5631 l(' ELSE');
5632 l(' l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;');
5633 l(' END IF;');
5634
5635 l(' IF l_cpt_denorm_str IS NOT NULL THEN');
5636 l(' l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;');
5637 l(' IF l_denorm_str IS NOT NULL THEN');
5638 l(' l_denorm_str := l_denorm_str || '' OR '' ||l_cpt_denorm_str;');
5639 l(' ELSE');
5640 l(' l_denorm_str := l_cpt_denorm_str;');
5641 l(' END IF;');
5642 l(' ELSE');
5643 l(' l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;');
5644 l(' END IF;');
5645
5649 l('');
5646 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));');
5647
5648 l(' init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
5650 l(' -- Setup Search Context ID');
5651 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
5652 l(' x_search_ctx_id := l_search_ctx_id;');
5653 l('');
5654 ldbg_sv('Search context id in find_parties is ', 'x_search_ctx_id');
5655 l(' IF l_party_contains_str IS NULL THEN');
5656 l(' defpt := 1;');
5657 l(' END IF;');
5658 l(' IF l_party_site_contains_str IS NULL THEN');
5659 l(' defps := 1;');
5660 l(' END IF;');
5661 l(' IF l_contact_contains_str IS NULL THEN');
5662 l(' defct := 1;');
5663 l(' END IF;');
5664 l(' IF l_contact_pt_contains_str IS NULL THEN');
5665 l(' defcpt := 1;');
5666 l(' END IF;');
5667 l('');
5668
5669 ds(fnd_log.level_statement);
5670 ldbg_s('------------------------');
5671 dc(fnd_log.level_statement,'In find_parties l_match_str = ','l_match_str');
5672 dc(fnd_log.level_statement,'In find_parties l_party_contains_str = ','l_party_contains_str');
5673 dc(fnd_log.level_statement,'In find_parties l_party_site_contains_str = ','l_party_site_contains_str');
5674 dc(fnd_log.level_statement,'In find_parties l_contact_contains_str = ','l_contact_contains_str');
5675 dc(fnd_log.level_statement,'In find_parties l_contact_pt_contains_str = ','l_contact_pt_contains_str');
5676 dc(fnd_log.level_statement,'In find_parties l_search_ctx_id = ','l_search_ctx_id');
5677 de;
5678
5679 IF l_max_score=1 THEN
5680 ldbg_s('In find_parties l_max_score = 1');
5681 l(' FOR I in 1..3 LOOP');
5682 l(' IF (call_order(I) = ''PARTY'' AND l_party_contains_str IS NULL)');
5683 l(' OR (call_order(I) = ''PARTY_SITE'' AND l_party_site_contains_str IS NULL)');
5684 l(' OR (call_order(I) = ''CONTACT'' AND l_contact_contains_str IS NULL)');
5685 l(' OR (call_order(I) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NULL) THEN');
5686 l(' IF call_type(I)=''OR'' THEN');
5687 l(' call_type(I+1):=''OR'';');
5688 l(' END IF;');
5689 l(' END IF;');
5690 l(' END LOOP;');
5691 END IF;
5692
5693 /**** Call all 4 evaluation procedures ***********/
5694 l(' FOR I in 1..5 LOOP');
5695 l(' do_eval(I);');
5696 l(' END LOOP;');
5697
5698 IF l_purpose IN ('S','W') THEN
5699 d(fnd_log.level_statement,'In find_parties. This is a Search Rule. Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
5700 ELSE
5701 d(fnd_log.level_statement,'In find_parties. This is a Duplicate Identification Rule. Evaluating Matches. Threshold : '||l_match_threshold);
5702 END IF;
5703
5704 l(' x_num_matches := 0;');
5705 l(' l_num_eval := 0;');
5706 l(' IF l_match_str = '' OR '' THEN');
5707 l(' l_party_id := H_SCORES.FIRST;');
5708 l(' ELSE');
5709 l(' l_party_id := H_PARTY_ID_LIST.FIRST;');
5710 l(' END IF;');
5711
5712 l(' WHILE l_party_id IS NOT NULL LOOP');
5713 l(' l_num_eval:= l_num_eval+1;');
5714 ds(fnd_log.level_statement);
5715 ldbg_s('----------------------');
5716 dc(fnd_log.level_statement,'In find_parties Match Party ID = ','H_SCORES(l_party_id).PARTY_ID');
5717 IF l_purpose = 'S' THEN
5718 dc(fnd_log.level_statement,'In find_parties Score = ','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
5719 ELSE
5720 dc(fnd_log.level_statement,'In find_parties Score = ','H_SCORES(l_party_id).TOTAL_SCORE');
5721 END IF;
5722 de;
5723 IF l_purpose = ('S') THEN
5724 ldbg_s('In find_parties inserting Search Rule results into HZ_MATCHED_PARTIES_GT');
5725 l(' IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
5726 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
5727 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));');
5728 l(' x_num_matches := x_num_matches+1;');
5729 ldbg_s('----------------------');
5730 ELSIF l_purpose = ('W') THEN
5731
5732 ldbg_s('In find_parties inserting Webservice Rule results into HZ_MATCHED_PARTIES_GT');
5733 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
5734 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
5735 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/'||l_max_score||')*100));');
5736 l(' x_num_matches := x_num_matches+1;');
5737 ldbg_s('----------------------');
5738 ELSE
5739 ldbg_s('In find_parties inserting Duplicate Identification results into HZ_MATCHED_PARTIES_GT');
5740 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
5741 l(' IF p_dup_set_id IS NULL THEN');
5742 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
5743 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);');
5744 l(' x_num_matches := x_num_matches+1;');
5745 l(' ELSE');
5746 ldbg_s('Before Inserting Duplicate Identification results into HZ_DUP_SET_PARTIES, if dup party already exists');
5747 l(' BEGIN');
5748 l(' SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES'); --Bug No: 4244529
5749 l(' WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID');
5750 l(' AND DUP_SET_BATCH_ID = p_dup_batch_id '); --Bug No: 4244529
5751 l(' AND ROWNUM=1;');
5752 l(' EXCEPTION ');
5753 l(' WHEN NO_DATA_FOUND THEN');
5754 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_auto_merge_score||' THEN');
5755 l(' l_merge_flag := ''Y'';');
5756 l(' ELSE');
5757 l(' l_merge_flag := ''N'';');
5758 l(' END IF;');
5759 ldbg_s('In find_parties inserting Duplicate Identification results into HZ_DUP_SET_PARTIES');
5760 ldbg_s('----------------------');
5761 l(' INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
5762 l(' MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
5763 l(' LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
5764 l(' VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,');
5765 l(' H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,');
5766 l(' hz_utility_pub.created_by,hz_utility_pub.creation_date,');
5767 l(' hz_utility_pub.last_update_login,');
5768 l(' hz_utility_pub.last_update_date,');
5769 l(' hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
5770 l(' x_num_matches := x_num_matches+1;');
5771 l(' END;');
5772 l(' END IF;');
5773 END IF;
5774 l(' END IF;');
5775 l(' IF l_match_str = '' OR '' THEN');
5776 l(' l_party_id:=H_SCORES.NEXT(l_party_id);');
5777 l(' ELSE');
5778 l(' l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
5779 l(' END IF;');
5780 l(' END LOOP;');
5781 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
5782 ldbg_s('Exiting Procedure find_parties');
5783 ldbg_s('--------------------------------');
5784 l('EXCEPTION');
5785 l(' WHEN L_RETURN_IMM_EXC THEN');
5786 l(' RETURN;');
5787 ELSE ---Start of Code Change for Match Rule Set
5788 l(' BEGIN');
5789 l('');
5790
5791 d(fnd_log.level_procedure,'find_parties(+)');
5792 ds(fnd_log.level_statement);
5793 dc(fnd_log.level_statement,'Input Parameters:');
5794 dc(fnd_log.level_statement,'p_match_type','p_match_type');
5795 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
5796 dc(fnd_log.level_statement,'p_dup_set_id','p_dup_set_id');
5797 dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
5798 dc(fnd_log.level_statement,'p_dup_party_id','p_dup_party_id');
5799 de;
5800 pop_conditions(p_rule_id,'find_parties','p_rule_id,p_party_search_rec,p_party_site_list,
5801 p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,p_dup_party_id,
5802 p_dup_set_id,p_dup_batch_id,p_ins_details,x_search_ctx_id,x_num_matches','PARTY');
5803
5804 d(fnd_log.level_procedure,'find_parties(-)');
5805 l('EXCEPTION');
5806
5807 END IF; ---End of Code Change for Match Rule Set
5808
5809 l(' WHEN FND_API.G_EXC_ERROR THEN');
5810 l(' RAISE FND_API.G_EXC_ERROR;');
5811 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
5812 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
5813 l(' WHEN OTHERS THEN');
5814 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
5815 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_parties'');');
5816 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
5817 l(' FND_MSG_PUB.ADD;');
5818 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
5819 l('END find_parties;');
5820 l('');
5821
5822 l('PROCEDURE find_persons (');
5823 l(' p_rule_id IN NUMBER,');
5824 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
5825 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
5826 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
5827 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
5828 l(' p_restrict_sql IN VARCHAR2,');
5829 l(' p_match_type IN VARCHAR2,');
5830 l(' p_search_merged IN VARCHAR2,');
5831 l(' p_dup_party_id IN NUMBER,');
5832 l(' p_dup_set_id IN NUMBER,');
5833 l(' p_dup_batch_id IN NUMBER,');
5834 l(' p_ins_details IN VARCHAR2,');
5835 l(' x_search_ctx_id OUT NUMBER,');
5836 l(' x_num_matches OUT NUMBER');
5837 l(') IS');
5838 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
5839 l('');
5840 l(' -- Strings to hold the generated Intermedia query strings');
5841 l(' l_party_contains_str VARCHAR2(32000); ');
5842 l(' l_party_site_contains_str VARCHAR2(32000);');
5843 l(' l_contact_contains_str VARCHAR2(32000);');
5847 l(' l_ct_denorm_str VARCHAR2(32000);');
5844 l(' l_contact_pt_contains_str VARCHAR2(32000);');
5845 l(' l_denorm_str VARCHAR2(32000);');
5846 l(' l_ps_denorm_str VARCHAR2(32000);');
5848 l(' l_cpt_denorm_str VARCHAR2(32000);');
5849
5850 l('');
5851 l(' -- Other local variables');
5852 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
5853 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
5854 l(' -- For Score calculation');
5855 l(' l_max_score NUMBER;');
5856 l(' l_match_idx NUMBER;');
5857 l(' l_entered_max_score NUMBER;');
5858 l(' FIRST BOOLEAN;');
5859 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
5860 l('');
5861 FOR TX IN (
5862 SELECT distinct f.staged_attribute_column
5863 FROM hz_trans_functions_vl f, hz_secondary_trans st,
5864 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
5865 WHERE sa.match_rule_id = p_rule_id
5866 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
5867 AND st.function_id = f.function_id
5868 AND a.attribute_id = sa.attribute_id) LOOP
5869 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
5870 END LOOP;
5871 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
5872 l(' H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
5873 l(' H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
5874 l('');
5875 l(' l_score NUMBER;');
5876 l(' l_idx NUMBER;');
5877 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
5878 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
5879 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
5880 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
5881 l(' l_party_id NUMBER;');
5882 l(' l_ps_party_id NUMBER;');
5883 l(' l_ct_party_id NUMBER;');
5884 l(' l_cpt_party_id NUMBER;');
5885 l(' l_cpt_ps_id NUMBER;');
5886 l(' l_cpt_contact_id NUMBER;');
5887 l(' l_cpt_type VARCHAR2(100);');
5888 l(' l_party_site_id NUMBER;');
5889 l(' l_org_contact_id NUMBER;');
5890 l(' l_contact_pt_id NUMBER;');
5891 l(' l_cpt_level VARCHAR2(100);');
5892 l(' l_ps_contact_id NUMBER;');
5893 l(' l_party_max_score NUMBER;');
5894 l(' l_ps_max_score NUMBER;');
5895 l(' l_contact_max_score NUMBER;');
5896 l(' l_cpt_max_score NUMBER;');
5897 l(' l_denorm_max_score NUMBER;');
5898 l(' l_non_denorm_max_score NUMBER;');
5899 l('');
5900 l(' defpt NUMBER :=0;');
5901 l(' defps NUMBER :=0;');
5902 l(' defct NUMBER :=0;');
5903 l(' defcpt NUMBER :=0;');
5904 l(' l_index NUMBER;');
5905 l(' l_max_thresh NUMBER;');
5906 l(' l_tmp NUMBER;');
5907 l(' l_merge_flag VARCHAR2(1);');
5908 l(' l_num_eval NUMBER:=0;');
5909 l('');
5910 l(' L_RETURN_IMM_EXC Exception;');
5911 l('');
5912 l(' ');
5913 l(' /********************* Find Parties private procedures *******/');
5914 FOR TX IN (
5915 SELECT a.attribute_name,
5916 f.PROCEDURE_NAME,
5917 f.STAGED_ATTRIBUTE_COLUMN
5918 FROM HZ_TRANS_FUNCTIONS_VL f,
5919 HZ_TRANS_ATTRIBUTES_VL a
5920 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
5921 AND a.entity_name = 'PARTY'
5922 AND a.attribute_name='PARTY_TYPE'
5923 AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
5924 AND nvl(f.active_flag,'Y')='Y'
5925 AND ROWNUM=1
5926 ) LOOP
5927 l(' PROCEDURE set_person_party_type IS');
5928 l(' BEGIN');
5929 l(' g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||':= ');
5930 l(' HZ_TRANS_PKG.EXACT(');
5931 l(' ''PERSON''');
5932 l(' ,null,''PARTY_TYPE''');
5933 l(' ,''PARTY'');');
5934 l(' END;');
5935 l(' ');
5936 l(' PROCEDURE unset_person_party_type IS');
5937 l(' BEGIN');
5938 l(' g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||' := '''';');
5939 l(' END;');
5940 END LOOP;
5941 l(' ');
5942 l(' FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) ');
5943 l(' RETURN NUMBER IS');
5944 l(' l_party_type VARCHAR2(255);');
5945 l(' l_person_id NUMBER(15);');
5946 l(' BEGIN');
5947 l(' SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;');
5948 l(' IF l_party_type = ''PERSON'' THEN');
5949 l(' RETURN p_party_id;');
5950 l(' ELSIF p_contact_id IS NULL THEN');
5951 l(' RETURN NULL;');
5952 l(' ELSE');
5953 l(' BEGIN ');
5954 l(' SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p');
5955 l(' WHERE oc.org_contact_id = p_contact_id');
5956 l(' AND r.relationship_id = oc.party_relationship_id ');
5957 l(' AND r.object_id = p_party_id');
5958 l(' AND p.party_id = r.subject_id ');
5959 l(' AND p.party_type = ''PERSON''');
5960 l(' AND ROWNUM=1;');
5961 l(' ');
5962 l(' RETURN l_person_id;');
5963 l(' EXCEPTION');
5964 l(' WHEN NO_DATA_FOUND THEN');
5965 l(' RETURN NULL;');
5966 l(' END; ');
5967 l(' END IF;');
5968 l(' END; ');
5969 l('');
5970 l(' PROCEDURE push_eval IS');
5971 l(' BEGIN');
5972 l(' H_PARTY_ID.DELETE;');
5973 l(' H_PARTY_ID_LIST.DELETE;');
5974 l(' H_SCORES.DELETE; ');
5975 l(' g_mappings.DELETE;');
5976 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
5977 l(' call_order(5) := call_order(1);');
5978 l(' call_type(5) := ''AND'';');
5979 l(' call_max_score(5) := call_max_score(1);');
5980 l(' call_type(2) := ''OR'';');
5981 l(' END;');
5982 l('');
5983 l(' /** Private procedure to acquire and score at party level ***/');
5984 l(' PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
5985 l(' l_party_id_idx NUMBER:=1;');
5986 l(' l_ctx_id NUMBER;');
5987 l(' l_TX35_new varchar2(4000);'); --9155543
5988 l(' BEGIN');
5989 l(' SAVEPOINT eval_start;');
5990 l(' set_person_party_type;');
5991 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
5992 l(' l_ctx_id := l_search_ctx_id;');
5993 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
5994 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5995 l(' l_search_ctx_id,H_PARTY_ID(I));');
5996 l(' H_PARTY_ID.DELETE;');
5997 l(' H_PARTY_ID_LIST.DELETE;');
5998 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5999 l(' l_ctx_id := l_search_ctx_id;');
6000 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
6001 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6002 l(' l_search_ctx_id,H_PARTY_ID(I));');
6003 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6004 l(' ELSE');
6005 l(' IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
6006 l(' and check_estimate_hits(''PARTY'',p_party_contains_str)>l_max_thresh THEN');
6007 ldbg_s('In eval party level estimated hits exceed threshold');
6008 l(' IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' THEN');
6009 ldbg_s('In eval party level resolution option is set to SQL search.');
6010 l(' IF (l_party_site_contains_str IS NULL AND');
6011 l(' l_contact_contains_str IS NULL AND');
6012 l(' l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN');
6013 l(' return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);');
6014 l(' RAISE L_RETURN_IMM_EXC;');
6015 l(' ELSE');
6016 l(' open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);');
6017 l(' END IF;');
6018 l(' ELSE');
6019 l(' IF p_index>1 THEN');
6020 ldbg_s('In eval party level number of matches found exceeded threshold');
6021 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6022 l(' FND_MSG_PUB.ADD;');
6023 l(' RAISE FND_API.G_EXC_ERROR;');
6024 l(' ELSE');
6025 l(' push_eval;');
6026 l(' RETURN;');
6027 l(' END IF;');
6028 l(' END IF;');
6029 l(' END IF;');
6030 l(' l_ctx_id := NULL;');
6031 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6032 l(' END IF;');
6033 l(' IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN');
6034 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);');
6035 l(' END IF;');
6036 l(' LOOP ');
6037 l(' FETCH l_party_cur INTO');
6038 l(' l_party_id '||l_p_into_list||';');
6039 l(' EXIT WHEN l_party_cur%NOTFOUND;');
6040 l(' l_index := map_id(l_party_id);');
6041 IF(l_p_param_list LIKE '%TX35%') THEN --9155543
6042 l(' l_TX35_new:=RTRIM(LTRIM(l_TX35));');
6043 l(' l_TX35_new:=(CASE l_TX35_new WHEN ''SYNC'' THEN HZ_STAGE_MAP_TRANSFORM.den_acc_number (l_party_id) ELSE l_TX35_new END);');
6044 l_p_param_list:=replace(l_p_param_list,'l_TX35','l_TX35_new');
6045 END IF;
6046 l(' l_score := GET_PARTY_SCORE('||l_p_param_list||');');
6047 l_p_param_list:=replace(l_p_param_list,'l_TX35_new','l_TX35');
6048 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
6049 l(' H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
6050 l(' ELSE');
6051 l(' H_SCORES(l_index).TOTAL_SCORE := ');
6052 l(' H_SCORES(l_index).TOTAL_SCORE+l_score;');
6053 l(' H_SCORES(l_index).PARTY_SCORE := l_score;');
6054 l(' END IF;');
6055 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
6056 l(' H_PARTY_ID_LIST(l_index) := 1;');
6057 l(' H_PARTY_ID(l_party_id_idx) := l_party_id;');
6058 l(' l_party_id_idx:= l_party_id_idx+1;');
6059 l(' END IF;');
6060 l(' IF (l_party_id_idx-1)>l_max_thresh THEN');
6061 l(' IF p_index=1 AND call_order(2) = ''PARTY_SITE'' ');
6062 l(' AND call_type(2) = ''AND'' AND l_contact_contains_str IS NULL');
6063 l(' AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' ');
6064 l(' AND l_contact_pt_contains_str IS NULL THEN');
6068 l(' EXIT;');
6065 l(' H_PARTY_ID.DELETE(l_party_id_idx-1);');
6066 l(' H_PARTY_ID_LIST.DELETE(l_index);');
6067 l(' H_SCORES.DELETE(l_index);');
6069 l(' END IF;');
6070
6071 l(' CLOSE l_party_cur;'); --Bug No: 3872745
6072 l(' IF p_index>1 THEN');
6073 ldbg_s('In eval party level number of matches found exceeded threshold');
6074 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6075 l(' FND_MSG_PUB.ADD;');
6076 l(' RAISE FND_API.G_EXC_ERROR;');
6077 l(' ELSE');
6078 l(' push_eval;');
6079 l(' RETURN;');
6080 l(' END IF;');
6081 l(' END IF;');
6082 ds(fnd_log.level_statement);
6083 dc(fnd_log.level_statement,'Party Level Matches');
6084 dc(fnd_log.level_statement,'l_party_id','l_party_id');
6085 dc(fnd_log.level_statement,'l_score','l_score');
6086 de;
6087 l(' END LOOP;');
6088 l(' CLOSE l_party_cur;');
6089 l(' ROLLBACK to eval_start;');
6090 l(' END;');
6091 l(' PROCEDURE open_person_contact_cursor(');
6092 l(' p_contains_str VARCHAR2, ');
6093 l(' p_search_ctx_id NUMBER, ');
6094 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
6095 l(' BEGIN');
6096 l(' OPEN x_cursor FOR ');
6097 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
6098 l(' FROM HZ_STAGED_CONTACTS stage');
6099 l(' WHERE contains( concat_col, p_contains_str)>0');
6100 l(' AND ORG_CONTACT_ID in (');
6101 l(' SELECT /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ ');
6102 l(' org_contact_id');
6103 l(' from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc');
6104 l(' where d.party_id = r.subject_id');
6105 l(' and oc.party_relationship_id = r.relationship_id');
6106 l(' and d.search_context_id = p_search_ctx_id); ');
6107 --bug 4959719 start
6108 l(' exception');
6109 l(' when others then');
6110 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
6111 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
6112 l(' FND_MSG_PUB.ADD;');
6113 l(' RAISE FND_API.G_EXC_ERROR;');
6114 --Start Bug No: 3032742.
6115 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
6116 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
6117 l(' FND_MSG_PUB.ADD;');
6118 l(' RAISE FND_API.G_EXC_ERROR;');
6119 --End Bug No : 3032742.
6120 l(' else ');
6121 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6122 l(' end if;');
6123 --bug 4959719 end
6124 l(' END;');
6125
6126 l('');
6127 l(' /** Private procedure to acquire and score at party site level ***/');
6128 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');
6129 l(' l_party_id_idx NUMBER:=1;');
6130 l(' l_ctx_id NUMBER;');
6131 l(' h_ps_id HZ_PARTY_SEARCH.IDList;');
6132 l(' h_ps_party_id HZ_PARTY_SEARCH.IDList;');
6133 l(' h_ps_score HZ_PARTY_SEARCH.IDList;');
6134 l(' detcnt NUMBER := 1;');
6135 l(' l_person_id NUMBER;');
6136 l(' BEGIN');
6137 l(' SAVEPOINT eval_start;');
6138 l(' unset_person_party_type;');
6139 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
6140 l(' l_ctx_id := l_search_ctx_id;');
6141 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
6142 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6143 l(' l_search_ctx_id,H_PARTY_ID(I));');
6144 l(' H_PARTY_ID.DELETE;');
6145 l(' H_PARTY_ID_LIST.DELETE;');
6146 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
6147 l(' l_ctx_id := l_search_ctx_id;');
6148 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
6149 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6150 l(' l_search_ctx_id,H_PARTY_ID(I));');
6151 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6152 l(' ELSE');
6153 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6154 l(' l_ctx_id := NULL;');
6155 l(' END IF;');
6156 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);');
6157 l(' LOOP ');
6158 l(' FETCH l_party_site_cur INTO');
6159 l(' l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
6160 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
6161 l(' IF l_ctx_id IS NULL THEN');
6162 l(' l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);');
6163 l(' ELSE');
6164 l(' l_person_id := l_ps_party_id;');
6165 l(' END IF;');
6166
6167 l(' IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN');
6168 l(' l_index := map_id(l_person_id);');
6169 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
6170
6171 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
6172 l(' IF l_ctx_id IS NULL THEN');
6173 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);');
6174 l(' END IF;');
6175 l(' ELSE');
6176 l(' IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
6177 l(' H_SCORES(l_index).TOTAL_SCORE := ');
6178 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
6179 l(' H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
6180 l(' END IF;');
6181 l(' END IF;');
6182 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
6183 l(' H_PARTY_ID_LIST(l_index) := 1;');
6184 --l(' H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
6185 --Bug:4995382: SDIB BATCH W/ RULE DL ORG/PERSON DUPLICATES' ERRORS OUT
6186 l(' H_PARTY_ID(l_party_id_idx) := l_person_id;');
6187 l(' l_party_id_idx:= l_party_id_idx+1;');
6188 l(' END IF;');
6189 l(' IF (l_party_id_idx-1)>l_max_thresh THEN');
6190 l(' CLOSE l_party_site_cur;'); --Bug No: 3872745
6191 l(' IF p_index>1 THEN');
6192 ldbg_s('In eval party site level number of matches found exceeded threshold');
6193 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6194 l(' FND_MSG_PUB.ADD;');
6195 l(' RAISE FND_API.G_EXC_ERROR;');
6196 l(' ELSE');
6197 l(' push_eval;');
6198 l(' RETURN;');
6199 l(' END IF;');
6200 l(' END IF;');
6201 l(' IF p_ins_details = ''Y'' THEN');
6202 l(' h_ps_id(detcnt) := l_party_site_id;');
6203 l(' h_ps_party_id(detcnt) := l_person_id;');
6204 l(' IF (p_emax_score > 0) THEN ');
6205 l(' h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
6206 l(' ELSE ');
6207 l(' h_ps_score(detcnt) := 0; ');
6208 l(' END IF; ');
6209 l(' detcnt := detcnt +1;');
6210 l(' END IF;');
6211 ds(fnd_log.level_statement);
6212 dc(fnd_log.level_statement,'Party Site Level Matches');
6213 dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
6214 dc(fnd_log.level_statement,'l_ps_party_id','l_person_id');
6215 dc(fnd_log.level_statement,'l_score','l_score');
6216 de;
6217 l(' END IF;');
6218 l(' END LOOP;');
6219 l(' CLOSE l_party_site_cur;');
6220 l(' ROLLBACK to eval_start;');
6221 l(' IF p_ins_details = ''Y'' THEN');
6222 l(' FORALL I in 1..h_ps_id.COUNT ');
6223 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
6224 l(' l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
6225 l(' END IF;');
6226 l(' END;');
6227 l('');
6228 l(' /** Private procedure to acquire and score at party site level ***/');
6229 l(' PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
6230 l(' l_party_id_idx NUMBER:=1;');
6231 l(' l_ctx_id NUMBER;');
6232 l(' h_ct_id HZ_PARTY_SEARCH.IDList;');
6233 l(' h_ct_party_id HZ_PARTY_SEARCH.IDList;');
6234 l(' h_ct_score HZ_PARTY_SEARCH.IDList;');
6235 l(' detcnt NUMBER := 1;');
6236 l(' l_person_id NUMBER;');
6237 l(' BEGIN');
6238 l(' SAVEPOINT eval_start;');
6239 l(' l_ctx_id := l_search_ctx_id;');
6240 l(' unset_person_party_type;');
6241 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
6242 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6243 l(' l_search_ctx_id,H_PARTY_ID(I));');
6244 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6245 l(' open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);');
6246 l(' LOOP ');
6247 l(' FETCH l_contact_cur INTO');
6248 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
6249 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
6250 l(' l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);');
6251 l(' l_index := map_id(l_person_id);');
6252 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');
6253 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
6254 l(' IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
6255 l(' H_SCORES(l_index).TOTAL_SCORE := ');
6256 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
6257 l(' H_SCORES(l_index).CONTACT_SCORE := l_score;');
6258 l(' END IF;');
6259 l(' END IF;');
6260 l(' IF p_ins_details = ''Y'' THEN');
6261 l(' h_ct_id(detcnt) := l_org_contact_id;');
6262 l(' h_ct_party_id(detcnt) := l_person_id;');
6263 l(' IF (p_emax_score > 0) THEN ');
6264 l(' h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
6265 l(' ELSE ');
6266 l(' h_ct_score(detcnt) := 0; ');
6267 l(' END IF; ');
6268 l(' detcnt := detcnt +1;');
6269 l(' END IF;');
6270 ds(fnd_log.level_statement);
6271 dc(fnd_log.level_statement,'Contact Level Matches');
6272 dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
6273 dc(fnd_log.level_statement,'l_ct_party_id','l_person_id');
6274 dc(fnd_log.level_statement,'l_score','l_score');
6275 de;
6276 l(' END LOOP;');
6277 l(' CLOSE l_contact_cur;');
6278 l(' ROLLBACK to eval_start;');
6279 l(' IF p_ins_details = ''Y'' THEN');
6280 l(' FORALL I in 1..h_ct_id.COUNT ');
6281 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
6282 l(' l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
6283 l(' END IF;');
6284 l(' END;');
6285 l('');
6286 l(' /** Private procedure to acquire and score at contact point level ***/');
6287 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');
6288 l(' l_party_id_idx NUMBER:=1;');
6289 l(' l_ctx_id NUMBER;');
6290 l(' h_cpt_id HZ_PARTY_SEARCH.IDList;');
6291 l(' h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
6292 l(' h_cpt_score HZ_PARTY_SEARCH.IDList;');
6293 l(' detcnt NUMBER := 1;');
6294 l(' l_person_id NUMBER;');
6295 --l(' l_continue VARCHAR2(1) := ''Y'';');
6296 l(' is_a_match VARCHAR2(1) := ''Y'';');
6297 l(' l_cpt_flag VARCHAR2(1) := ''N'';');
6298 l(' BEGIN');
6299 ldbg_s('-----------------');
6300 ldbg_s('calling the procedure eval_cpt_level - from find_persons');
6301 l(' SAVEPOINT eval_start;');
6302 l(' unset_person_party_type;');
6303 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
6304 l(' l_ctx_id := l_search_ctx_id;');
6305 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
6306 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6307 l(' l_search_ctx_id,H_PARTY_ID(I));');
6308 l(' H_PARTY_ID.DELETE;');
6309 l(' H_PARTY_ID_LIST.DELETE;');
6310 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
6311 ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
6312 l(' l_ctx_id := l_search_ctx_id;');
6313 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
6314 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6315 l(' l_search_ctx_id,H_PARTY_ID(I));');
6316 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6317 l(' ELSE');
6318 ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
6319 l(' l_ctx_id := NULL;');
6320 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
6321 l(' END IF;');
6322 ldbg_s('====== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR =======');
6323 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);');
6324 l(' LOOP ');
6325 l(' FETCH l_contact_pt_cur INTO');
6326 l(' l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
6327 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
6328 ldbg_s(' ------------------------------------' );
6329 ldbg_sv('Processing party_id - ','l_cpt_party_id' );
6330 ldbg_sv('contact point type - ','l_cpt_type' );
6331 l(' IF l_ctx_id IS NULL THEN');
6332 l(' l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);');
6333 l(' ELSE');
6334 l(' l_person_id := l_cpt_party_id;');
6338 l(' l_index := map_id(l_person_id);');
6335 l(' END IF;');
6336
6337 l(' IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN');
6339 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
6340
6341 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
6342 l(' IF l_ctx_id IS NULL THEN');
6343 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);');
6344 if l_purpose IN ('S','W') then
6345 l(' H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
6346 ldbg_s('Processing first time for this party');
6347 ldbg_sv('l_index is - ','l_index' );
6348 ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
6349 end if;
6350 l(' END IF;');
6351 l(' ELSE');
6352 if l_purpose IN ('S','W') then
6353 ldbg_s('Processing Second time for this party');
6354 l(' IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then');
6355 l(' IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then');
6356 l(' H_SCORES(l_index).TOTAL_SCORE :=');
6357 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;');
6358 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;');
6359 l(' H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
6360 ldbg_s('Passed in score greater than existing score');
6361 ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ','H_SCORES(l_index).TOTAL_SCORE' );
6362 ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ','H_SCORES(l_index).CONTACT_POINT_SCORE' );
6363 ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
6364 l(' END IF;');
6365 l(' ELSE');
6366 ldbg_s('Passed in score less than or equal to the existing score ');
6367 l(' H_SCORES(l_index).TOTAL_SCORE :=');
6368 l(' H_SCORES(l_index).TOTAL_SCORE+l_score;');
6369 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
6370 l(' H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
6371 ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ','H_SCORES(l_index).TOTAL_SCORE' );
6372 ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ','H_SCORES(l_index).CONTACT_POINT_SCORE' );
6373 ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
6374 l(' END IF;');
6375 else
6376 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
6377 l(' H_SCORES(l_index).TOTAL_SCORE := ');
6378 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
6379 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
6380 l(' END IF;');
6381 end if;
6382 l(' END IF;');
6383 ldbg_sv('call type is - ','p_call_type' );
6384 ldbg_sv('match string is - ','l_match_str' );
6385 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
6386 if l_purpose IN ('S','W') then
6387 l(' -- If rule is match all ');
6388 l(' IF l_match_str = '' AND '' THEN');
6389 ldbg_s('Match String is - AND ');
6390 l(' IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
6391 l(' is_a_match := ''Y'';');
6392 ldbg_sv('is_a_match is ', 'is_a_match');
6393 l(' ELSE');
6394 l(' is_a_match := ''N'';');
6395 ldbg_sv('is_a_match is ', 'is_a_match');
6396 l(' END IF;');
6397 l(' -- Else it is construed as a match anyway ');
6398 l(' ELSE');
6399 l(' is_a_match := ''Y'';');
6400 ldbg_sv('is_a_match is ', 'is_a_match');
6401 l(' END IF;');
6402 l(' IF (is_a_match=''Y'') THEN');
6403 end if;
6404 l(' H_PARTY_ID_LIST(l_index) := 1;');
6405 l(' H_PARTY_ID(l_party_id_idx) := l_person_id;');
6406 l(' l_party_id_idx:= l_party_id_idx+1;');
6407 if l_purpose IN ('S','W') then
6408 l(' end if;');
6409 end if;
6410 l(' END IF;');
6411 l(' IF (l_party_id_idx-1)>l_max_thresh THEN');
6412 l(' CLOSE l_contact_pt_cur;'); --Bug No: 3872745
6413 l(' IF p_index>1 THEN');
6414 ldbg_s('In eval contact point level number of matches found exceeded threshold');
6415 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6416 l(' FND_MSG_PUB.ADD;');
6417 l(' RAISE FND_API.G_EXC_ERROR;');
6418 l(' ELSE');
6419 l(' push_eval;');
6420 l(' RETURN;');
6421 l(' END IF;');
6422 l(' END IF;');
6423 l(' IF p_ins_details = ''Y'' THEN');
6424 if l_purpose IN ('S','W') then
6425 l(' -- If rule is match all ');
6426 l(' IF l_match_str = '' AND '' THEN');
6427 ldbg_s('Match String is - AND ');
6428 l(' IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
6429 l(' is_a_match := ''Y'';');
6430 ldbg_sv('is_a_match is ', 'is_a_match');
6431 l(' ELSE');
6432 l(' is_a_match := ''N'';');
6433 ldbg_sv('is_a_match is ', 'is_a_match');
6434 l(' END IF;');
6435 l(' -- Else it is construed as a match anyway ');
6436 l(' ELSE');
6437 l(' is_a_match := ''Y'';');
6438 ldbg_sv('is_a_match is ', 'is_a_match');
6439 l(' END IF;');
6440 l(' IF (is_a_match=''Y'') THEN');
6441 end if;
6442 ldbg_sv('Inserting into the final array, the person_id - ','l_person_id');
6443 l(' FOR I IN 1..h_cpt_id.COUNT LOOP');
6444 l(' IF h_cpt_id(I)=l_contact_pt_id THEN');
6445 l(' l_cpt_flag := ''Y'';');
6446 l(' END IF;');
6447 l(' END LOOP;');
6448 l(' IF l_cpt_flag = ''Y'' THEN');
6449 l(' NULL;');
6450 l(' ELSE ');
6451 l(' h_cpt_id(detcnt) := l_contact_pt_id;');
6452 l(' h_cpt_party_id(detcnt) := l_person_id;');
6453 l(' IF (p_emax_score > 0) THEN ');
6454 l(' h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
6455 l(' ELSE ');
6456 l(' h_cpt_score(detcnt) := 0; ');
6457 l(' END IF; ');
6458 l(' detcnt := detcnt +1;');
6459 l(' END IF;');
6460 if l_purpose IN ('S','W') then
6461 l(' end if;');
6462 end if;
6463
6464 l(' END IF;');
6465 ds(fnd_log.level_statement);
6466 dc(fnd_log.level_statement,'Contact pt Level Matches');
6467 dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
6468 dc(fnd_log.level_statement,'l_cpt_party_id','l_person_id');
6469 dc(fnd_log.level_statement,'l_score','l_score');
6470 de;
6471 l(' END IF;');
6472 l(' END LOOP;');
6473 l(' CLOSE l_contact_pt_cur;');
6474 l(' ROLLBACK to eval_start;');
6475 l(' IF p_ins_details = ''Y'' THEN');
6476 l(' FORALL I in 1..h_cpt_id.COUNT ');
6477 l(' INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
6478 l(' l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
6479 l(' END IF;');
6480 l(' END;');
6481 l('');
6482 l(' /** Private procedure to call the eval procedure at each entity in the correct order ***/');
6483 l(' PROCEDURE do_eval (p_index NUMBER) IS');
6484 l(' l_ctx_id NUMBER;');
6485 l(' l_threshold NUMBER;'); --Bug No: 4407425
6486 l(' other_acq_criteria_exists BOOLEAN; '); --Bug No: 4407425
6487 l(' acq_cnt NUMBER; '); --Bug No:5218095
6488 l(' BEGIN');
6489 --Start of Bug No: 4407425
6490 l(' IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
6491 IF(l_purpose ='S') THEN
6492 l(' l_threshold := round(( l_entered_max_score / '|| l_max_score ||') * '|| l_match_threshold ||'); ');
6493 ELSE
6494 l(' l_threshold := '|| l_match_threshold ||'; ');
6495 END IF;
6496 l(' other_acq_criteria_exists := TRUE ;');
6497 --Start of Bug No:5218095
6498 /*l(' IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
6499 l(' other_criteria_exists := FALSE; ');
6500 l(' END IF ; ');*/
6501 l(' --check if acquisition criteria exists for any other entity');
6502 l(' IF l_party_contains_str IS NOT NULL THEN ');
6503 l(' acq_cnt := 1; ');
6504 l(' END IF; ');
6505 l(' IF l_party_site_contains_str IS NOT NULL THEN ');
6506 l(' acq_cnt := acq_cnt+1; ');
6507 l(' END IF; ');
6508 l(' IF l_contact_contains_str IS NOT NULL THEN ');
6509 l(' acq_cnt := acq_cnt+1; ');
6510 l(' END IF;');
6511 l(' IF l_contact_pt_contains_str IS NOT NULL THEN ');
6512 l(' acq_cnt := acq_cnt+1; ');
6513 l(' END IF; ');
6514
6515 l(' IF acq_cnt>1 THEN ');
6516 l(' other_acq_criteria_exists := TRUE; ');
6517 l(' ELSE');
6518 l(' other_acq_criteria_exists := FALSE; ');
6519 l(' END IF; ');
6523 --End of Bug No:5218095
6520 dc(fnd_log.level_statement,'count of entities having acquisition attributes = ','acq_cnt');
6521 dc(fnd_log.level_statement,'call_max_score(p_index) = ','call_max_score(p_index)');
6522 dc(fnd_log.level_statement,'l_threshold = ','l_threshold');
6524 l(' IF(l_match_str = '' AND '' AND other_acq_criteria_exists) THEN');
6525 --start of Bug No:5218095
6526 l(' IF ( call_max_score(p_index) < l_threshold) THEN ');
6527 ldbg_s('When max score of entity level<l_threshold, do not evaluate ');
6528 l(' RETURN; ');
6529 l(' ELSE ');
6530 ldbg_s('In do eval number of matches found exceeded threshold');
6531 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED''); ');
6532 l(' FND_MSG_PUB.ADD; ');
6533 l(' RAISE FND_API.G_EXC_ERROR; ');
6534 l(' END IF; ');
6535 --end of Bug No:5218095
6536 l(' ELSE');
6537 ldbg_s('In do eval number of matches found exceeded threshold');
6538 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6539 l(' FND_MSG_PUB.ADD;');
6540 l(' RAISE FND_API.G_EXC_ERROR;');
6541 l(' END IF; ');
6542 l(' END IF;');
6543 --End of Bug No: 4407425
6544 /*l(' IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
6545 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6546 l(' FND_MSG_PUB.ADD;');
6547 l(' RAISE FND_API.G_EXC_ERROR;');
6548 l(' END IF;');
6549 */
6550 l(' IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
6551 l(' eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
6552 l(' ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
6553 l(' eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
6554 l(' ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
6555 l(' eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
6556 l(' END IF;');
6557 l(' END;');
6558 l(' /************ End of find_persons private procedures **********/ ');
6559 l('');
6560 l(' BEGIN');
6561 l('');
6562
6563
6564 d(fnd_log.level_procedure,'find_persons(+)');
6565 ds(fnd_log.level_statement);
6566 dc(fnd_log.level_statement,'Input Parameters:');
6567 dc(fnd_log.level_statement,'p_match_type','p_match_type');
6568 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6569 de;
6570
6571 l(' -- ************************************');
6572 l(' -- STEP 1. Initialization and error checks');
6573 l('');
6574
6575 l(' l_match_str := ''' || l_match_str || ''';');
6576 l(' IF p_match_type = ''AND'' THEN');
6577 l(' l_match_str := '' AND '';');
6578 l(' ELSIF p_match_type = ''OR'' THEN');
6579 l(' l_match_str := '' OR '';');
6580 l(' END IF;');
6581 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);');
6582 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
6583 l('');
6584 l(' l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
6585 l(' IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
6586 l(' g_score_until_thresh := true;');
6587 l(' ELSE');
6588 l(' g_score_until_thresh := false;');
6589 l(' END IF;');
6590
6591
6592 l(' -- ************************************************************');
6593 l(' -- STEP 2. Setup of intermedia query strings for Acquisition query');
6594
6595 l(' l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);');
6596 l(' l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);');
6597 l(' l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);');
6598 l(' l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);');
6599 l(' init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
6600 l('');
6601 l(' -- Setup Search Context ID');
6602 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
6603 l(' x_search_ctx_id := l_search_ctx_id;');
6604 l('');
6605
6606 l(' IF l_party_contains_str IS NULL THEN');
6607 l(' defpt := 1;');
6608 l(' END IF;');
6609 l(' IF l_party_site_contains_str IS NULL THEN');
6610 l(' defps := 1;');
6611 l(' END IF;');
6612 l(' IF l_contact_contains_str IS NULL THEN');
6613 l(' defct := 1;');
6614 l(' END IF;');
6615 l(' IF l_contact_pt_contains_str IS NULL THEN');
6616 l(' defcpt := 1;');
6617 l(' END IF;');
6618 l('');
6619
6620 ds(fnd_log.level_statement);
6621 dc(fnd_log.level_statement,'l_match_str','l_match_str');
6622 dc(fnd_log.level_statement,'l_party_contains_str','l_party_contains_str');
6623 dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
6624 dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
6625 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
6626 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
6627 de;
6628
6629 /**** Call all 4 evaluation procedures ***********/
6630 l(' FOR I in 1..5 LOOP');
6631 l(' do_eval(I);');
6632 l(' END LOOP;');
6633 l(' IF l_contact_contains_str IS NOT NULL THEN');
6634 l(' eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);');
6638 l(' x_num_matches := 0;');
6635 l(' END IF;');
6636 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
6637
6639 l(' l_num_eval := 0;');
6640 l(' IF l_match_str = '' OR '' THEN');
6641 l(' l_party_id := H_SCORES.FIRST;');
6642 l(' ELSE');
6643 l(' l_party_id := H_PARTY_ID_LIST.FIRST;');
6644 l(' END IF;');
6645
6646
6647 l(' WHILE l_party_id IS NOT NULL LOOP');
6648 l(' l_num_eval:= l_num_eval+1;');
6649 ds(fnd_log.level_statement);
6650 dc(fnd_log.level_statement,'Match Party ID','H_SCORES(l_party_id).PARTY_ID');
6651 IF l_purpose = 'S' THEN
6652 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
6653 ELSE
6654 dc(fnd_log.level_statement,'Score','H_SCORES(l_party_id).TOTAL_SCORE');
6655 END IF;
6656 de;
6657 IF l_purpose = ('S') THEN
6658 l(' IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
6659 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
6660 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));');
6661 l(' x_num_matches := x_num_matches+1;');
6662
6663 ELSIF l_purpose = ('W') THEN
6664
6665
6666 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
6667 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
6668 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/'||l_max_score||')*100));');
6669 l(' x_num_matches := x_num_matches+1;');
6670
6671
6672 ELSE
6673 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
6674 l(' IF p_dup_set_id IS NULL THEN');
6675 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
6676 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);');
6677 l(' x_num_matches := x_num_matches+1;');
6678 l(' ELSE');
6679 l(' BEGIN');
6680 l(' SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES'); --Bug No: 4244529
6681 l(' WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID');
6682 l(' AND DUP_SET_BATCH_ID = p_dup_batch_id '); --Bug No: 4244529
6683 l(' AND ROWNUM=1;');
6684 l(' EXCEPTION ');
6685 l(' WHEN NO_DATA_FOUND THEN');
6686 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_auto_merge_score||' THEN');
6687 l(' l_merge_flag := ''Y'';');
6688 l(' ELSE');
6689 l(' l_merge_flag := ''N'';');
6690 l(' END IF;');
6691 l(' INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
6692 l(' MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
6693 l(' LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
6694 l(' VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,');
6695 l(' H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,');
6696 l(' hz_utility_pub.created_by,hz_utility_pub.creation_date,');
6697 l(' hz_utility_pub.last_update_login,');
6698 l(' hz_utility_pub.last_update_date,');
6699 l(' hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
6700 l(' x_num_matches := x_num_matches+1;');
6701 l(' END;');
6702 l(' END IF;');
6703 END IF;
6704 l(' END IF;');
6705 l(' IF l_match_str = '' OR '' THEN');
6706 l(' l_party_id:=H_SCORES.NEXT(l_party_id);');
6707 l(' ELSE');
6708 l(' l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
6709 l(' END IF;');
6710 l(' END LOOP;');
6711
6712 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
6713 d(fnd_log.level_procedure,'find_persons(-)');
6714
6715
6716 l('EXCEPTION');
6717 l(' WHEN L_RETURN_IMM_EXC THEN');
6718 l(' RETURN;');
6719 l(' WHEN FND_API.G_EXC_ERROR THEN');
6720 l(' RAISE FND_API.G_EXC_ERROR;');
6721 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6722 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6723 l(' WHEN OTHERS THEN');
6724 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6725 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_persons'');');
6726 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6727 l(' FND_MSG_PUB.ADD;');
6728 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6729 l('END find_persons;');
6730 l('');
6731 ELSE ---Start of Code Change for Match Rule Set
6732 l('BEGIN');
6733 d(fnd_log.level_procedure,'find_persons(+)');
6734 ds(fnd_log.level_statement);
6735 dc(fnd_log.level_statement,'Input Parameters:');
6736 dc(fnd_log.level_statement,'p_match_type','p_match_type');
6737 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6738 de;
6739 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');
6740 d(fnd_log.level_procedure,'find_persons(-)');
6741 l('EXCEPTION');
6742 l(' WHEN FND_API.G_EXC_ERROR THEN');
6743 l(' RAISE FND_API.G_EXC_ERROR;');
6744 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6745 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6749 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6746 l(' WHEN OTHERS THEN');
6747 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6748 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_persons'');');
6750 l(' FND_MSG_PUB.ADD;');
6751 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6752 l('END find_persons;');
6753 END IF; ---End of Code Change for Match Rule Set
6754
6755 l('PROCEDURE find_persons (');
6756 l(' p_rule_id IN NUMBER,');
6757 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
6758 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
6759 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
6760 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
6761 l(' p_restrict_sql IN VARCHAR2,');
6762 l(' p_match_type IN VARCHAR2,');
6763 l(' p_search_merged IN VARCHAR2,');
6764 l(' p_ins_details IN VARCHAR2,');
6765 l(' x_search_ctx_id OUT NUMBER,');
6766 l(' x_num_matches OUT NUMBER');
6767 l(') IS');
6768 l('');
6769 l(' BEGIN');
6770 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);');
6771 l(' END;');
6772
6773
6774 /************** find_party_details API ***************/
6775 l('PROCEDURE find_party_details (');
6776 l(' p_rule_id IN NUMBER,');
6777 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
6778 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
6779 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
6780 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
6781 l(' p_restrict_sql IN VARCHAR2,');
6782 l(' p_match_type IN VARCHAR2,');
6783 l(' p_search_merged IN VARCHAR2,');
6784 l(' x_search_ctx_id OUT NUMBER,');
6785 l(' x_num_matches OUT NUMBER');
6786 l(') IS');
6787 l('');
6788 l(' BEGIN');
6789
6790
6791 d(fnd_log.level_procedure,'find_party_details(+)');
6792 ds(fnd_log.level_statement);
6793 dc(fnd_log.level_statement,'Input Parameters:');
6794 dc(fnd_log.level_statement,'p_match_type','p_match_type');
6795 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6796 dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
6797 de;
6798
6799 l(' find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,');
6800 l(' p_restrict_sql,p_match_type,p_search_merged,null,null, null,''Y'',');
6801 l(' x_search_ctx_id,x_num_matches);');
6802 l(' DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
6803 l(' AND NOT EXISTS ');
6804 l(' (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);');
6805 l(' DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
6806 l(' AND NOT EXISTS ');
6807 l(' (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);');
6808 l(' DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
6809 l(' AND NOT EXISTS ');
6810 l(' (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);');
6811
6812 d(fnd_log.level_procedure,'find_party_details(-)');
6813
6814
6815 l('EXCEPTION');
6816 l(' WHEN FND_API.G_EXC_ERROR THEN');
6817 l(' RAISE FND_API.G_EXC_ERROR;');
6818 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6819 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6820 l(' WHEN OTHERS THEN');
6821 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6822 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_party_details'');');
6823 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6824 l(' FND_MSG_PUB.ADD;');
6825 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6826 l('END find_party_details;');
6827 l('');
6828 /************** find_duplicate_parties API ***************/
6829 l('PROCEDURE find_duplicate_parties (');
6830 l(' p_rule_id IN NUMBER,');
6831 l(' p_party_id IN NUMBER,');
6832 l(' p_restrict_sql IN VARCHAR2,');
6833 l(' p_match_type IN VARCHAR2,');
6834 l(' p_dup_batch_id IN NUMBER,');
6835 l(' p_search_merged IN VARCHAR2,');
6836 l(' x_dup_set_id OUT NUMBER,');
6837 l(' x_search_ctx_id OUT NUMBER,');
6838 l(' x_num_matches OUT NUMBER');
6839 l(') IS');
6840 l(' l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
6841 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
6842 l(' l_contact_list HZ_PARTY_SEARCH.contact_list;');
6843 l(' l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
6844 l(' l_match_idx NUMBER;');
6845 l('');
6846 l(' --Fix for bug 4417124');
6847 l(' l_use_contact_addr_info BOOLEAN := TRUE;');
6848 l(' l_use_contact_cpt_info BOOLEAN := TRUE;');
6849 l(' l_use_contact_addr_flag VARCHAR2(1) := ''Y'';');
6850 l(' l_use_contact_cpt_flag VARCHAR2(1) := ''Y'';');
6851 l('');
6852 l('BEGIN');
6853 l('');
6854 d(fnd_log.level_procedure,'find_duplicate_parties(+)');
6855 ds(fnd_log.level_statement);
6859 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6856 dc(fnd_log.level_statement,'Input Parameters:');
6857 dc(fnd_log.level_statement,'p_party_id','p_party_id');
6858 dc(fnd_log.level_statement,'p_match_type','p_match_type');
6860 dc(fnd_log.level_statement,'p_dup_batch_id','p_dup_batch_id');
6861 dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
6862 de;
6863 l('');
6864 l(' --Fix for bug 4417124 ');
6865 l('');
6866 l(' SELECT use_contact_addr_flag, use_contact_cpt_flag ');
6867 l(' INTO l_use_contact_addr_flag, l_use_contact_cpt_flag ');
6868 l(' FROM hz_match_rules_b ');
6869 l(' WHERE match_rule_id = '||p_rule_id||'; ');
6870 l('');
6871 l(' IF NVL(l_use_contact_addr_flag, ''Y'') = ''N'' THEN');
6872 l(' l_use_contact_addr_info := FALSE; ');
6873 l(' END IF; ');
6874 l('');
6875 l(' IF NVL(l_use_contact_cpt_flag, ''Y'') = ''N'' THEN');
6876 l(' l_use_contact_cpt_info := FALSE; ');
6877 l(' END IF; ');
6878 l('');
6879 l(' --End fix for bug 4417124');
6880 l('');
6881
6882 l(' get_party_for_search(');
6883 l(' p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);');
6884 l('');
6885 l(' IF NOT check_prim_cond (l_party_rec,');
6886 l(' l_party_site_list,');
6887 l(' l_contact_list,');
6888 l(' l_cpt_list) THEN');
6889 l(' x_dup_set_id:=NULL;');
6890 l(' x_search_ctx_id:=NULL;');
6891 l(' x_num_matches:=0;');
6892 l(' RETURN;');
6893 l(' END IF;');
6894
6895 l(' x_dup_set_id := NULL;');
6896 l(' IF p_dup_batch_id IS NOT NULL THEN');
6897 l(' SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;');
6898 l(' END IF;');
6899 l('');
6900 l(' --Fix for bug 4417124 ');
6901 l(' IF l_party_rec.PARTY_TYPE = ''PERSON'' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN');
6902 l(' find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
6903 l(' p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,''N'',');
6904 l(' x_search_ctx_id,x_num_matches);');
6905 l(' ELSE');
6906 l(' find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
6907 l(' p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,''N'',');
6908 l(' x_search_ctx_id,x_num_matches);');
6909 l(' END IF;');
6910 l('');
6911 l(' IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN');
6912 l(' INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,');
6913 l(' STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,');
6914 l(' LAST_UPDATE_DATE, LAST_UPDATED_BY) ');
6915 l(' VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, ''SYSBATCH'',');
6916 l(' ''PARTY_MERGE'', hz_utility_pub.created_by, hz_utility_pub.creation_date,');
6917 l(' hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,');
6918 l(' hz_utility_pub.user_id);');
6919 l('');
6920 l(' INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
6921 l(' MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
6922 l(' LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
6923 l(' VALUES (p_party_id,x_dup_set_id,0,0,');
6924 l(' ''Y'',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,');
6925 l(' hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,');
6926 l(' hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
6927 l(' ELSE');
6928 l(' x_dup_set_id := NULL;');
6929 l(' END IF;');
6930 d(fnd_log.level_procedure,'find_duplicate_parties(-)');
6931
6932
6933 l('EXCEPTION');
6934 l(' WHEN FND_API.G_EXC_ERROR THEN');
6935 l(' RAISE FND_API.G_EXC_ERROR;');
6936 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6937 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6938 l(' WHEN OTHERS THEN');
6939 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6940 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_parties'');');
6941 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6942 l(' FND_MSG_PUB.ADD;');
6943 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6944 l('END find_duplicate_parties;');
6945
6946
6947 l('');
6948 /************** find_duplicate_party_sites API ***************/
6949 l('PROCEDURE find_duplicate_party_sites (');
6950 l(' p_rule_id IN NUMBER,');
6951 l(' p_party_site_id IN NUMBER,');
6952 l(' p_party_id IN NUMBER,');
6953 l(' p_restrict_sql IN VARCHAR2,');
6954 l(' p_match_type IN VARCHAR2,');
6955 l(' x_search_ctx_id OUT NUMBER,');
6956 l(' x_num_matches OUT NUMBER');
6957 l(') IS');
6958 l('');
6959
6960
6961 l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
6962 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
6963 l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
6964 l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
6965 l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
6966 l(' p_party_site_list HZ_PARTY_SEARCH.IDList; ');
6967 l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
6968 l(' l_match_idx NUMBER;');
6969
6970 l(' cursor get_cpts_for_party_sites is select contact_point_id ');
6971 l(' from hz_contact_points ');
6972 l(' where owner_table_name = ''HZ_PARTY_SITES'' ');
6973 l(' and primary_flag=''Y''');
6974 l(' and owner_table_id = p_party_site_id; ');
6975
6976 l(' BEGIN ');
6977
6978
6979 d(fnd_log.level_procedure,'find_duplicate_party_sites(+)');
6980 ds(fnd_log.level_statement);
6981 dc(fnd_log.level_statement,'Input Parameters:');
6982 dc(fnd_log.level_statement,'p_party_site_id','p_party_site_id');
6983 dc(fnd_log.level_statement,'p_party_id','p_party_id');
6984 dc(fnd_log.level_statement,'p_match_type','p_match_type');
6985 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6986 de;
6987
6988 l(' p_party_site_list(1) := p_party_site_id; ');
6989 l(' OPEN get_cpts_for_party_sites;');
6990 l(' LOOP ');
6991 l(' FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; ');
6992 l(' EXIT WHEN get_cpts_for_party_sites%NOTFOUND; ');
6993 l(' END LOOP; ');
6994 l(' CLOSE get_cpts_for_party_sites; ');
6995 l(' ');
6996 l(' get_search_criteria (');
6997 l(' null,');
6998 l(' p_party_site_list,');
6999 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
7000 l(' contact_point_ids, ');
7001 l(' l_party_search_rec,');
7002 l(' l_party_site_list,');
7003 l(' l_contact_list,');
7004 l(' l_contact_point_list) ;');
7005 l(' IF NOT check_prim_cond (l_party_search_rec,');
7006 l(' l_party_site_list,');
7007 l(' l_contact_list,');
7008 l(' l_contact_point_list) THEN');
7009 l(' x_search_ctx_id:=NULL;');
7010 l(' x_num_matches:=0;');
7011 l(' RETURN;');
7012 l(' END IF;');
7013 l(' ');
7014 l(' get_matching_party_sites (p_rule_id, ');
7015 l(' p_party_id, ');
7016 l(' l_party_site_list, ');
7017 l(' l_contact_point_list,');
7018 l(' p_restrict_sql, ');
7019 l(' p_match_type, ');
7020 l(' p_party_site_id, ');
7021 l(' x_search_ctx_id,');
7022 l(' x_num_matches);');
7023 d(fnd_log.level_procedure,'find_duplicate_party_sites(-)');
7024
7025
7026 l('EXCEPTION');
7027 l(' WHEN FND_API.G_EXC_ERROR THEN');
7028 l(' RAISE FND_API.G_EXC_ERROR;');
7029 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7030 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7031 l(' WHEN OTHERS THEN');
7032 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7033 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_party_sites'');');
7034 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7035 l(' FND_MSG_PUB.ADD;');
7036 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7037 l('END find_duplicate_party_sites; ');
7038 l(' ');
7039
7040 /************** find_duplicate_contacts API ***************/
7041 l('PROCEDURE find_duplicate_contacts (');
7042 l(' p_rule_id IN NUMBER,');
7043 l(' p_org_contact_id IN NUMBER,');
7044 l(' p_party_id IN NUMBER,');
7045 l(' p_restrict_sql IN VARCHAR2,');
7046 l(' p_match_type IN VARCHAR2,');
7047 l(' x_search_ctx_id OUT NUMBER,');
7048 l(' x_num_matches OUT NUMBER');
7049 l(') IS');
7050 l('');
7051
7052 l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;');
7053 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
7054 l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
7055 l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
7056 l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
7057 l(' p_party_site_list HZ_PARTY_SEARCH.IDList; ');
7058 l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
7059 l(' l_match_idx NUMBER;');
7060
7061 l(' cursor get_cpt_for_contact_id is select contact_point_id ');
7062 l(' from hz_org_contacts a, hz_relationships b, hz_contact_points c ');
7063 l(' where a.party_relationship_id = b.relationship_id ');
7064 l(' and c.owner_table_name = ''HZ_PARTIES'' ');
7065 l(' and c.primary_flag=''Y''');
7066 l(' and c.owner_table_id = b.party_id ');
7067 l(' and b.directional_flag = ''F'' ');
7068 l(' and a.org_contact_id = p_org_contact_id; ');
7069
7070 l('BEGIN ');
7071
7072
7073 d(fnd_log.level_procedure,'find_duplicate_contacts(+)');
7074 ds(fnd_log.level_statement);
7075 dc(fnd_log.level_statement,'Input Parameters:');
7076 dc(fnd_log.level_statement,'p_org_contact_id','p_org_contact_id');
7077 dc(fnd_log.level_statement,'p_party_id','p_party_id');
7078 dc(fnd_log.level_statement,'p_match_type','p_match_type');
7079 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7080 de;
7081
7082
7083 l(' p_contact_ids(1) := p_org_contact_id; ');
7084 l(' OPEN get_cpt_for_contact_id; ');
7085 l(' LOOP ');
7086 l(' FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; ');
7087 l(' EXIT WHEN get_cpt_for_contact_id%NOTFOUND; ');
7088 l(' END LOOP; ');
7089 l(' CLOSE get_cpt_for_contact_id; ');
7090 l(' ');
7091 l(' get_search_criteria (');
7092 l(' null,');
7093 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
7094 l(' p_contact_ids,');
7095 l(' contact_point_ids, ');
7096 l(' l_party_search_rec,');
7097 l(' l_party_site_list, ');
7098 l(' l_contact_list,');
7099 l(' l_contact_point_list) ;');
7100 l(' IF NOT check_prim_cond (l_party_search_rec,');
7101 l(' l_party_site_list,');
7102 l(' l_contact_list,');
7103 l(' l_contact_point_list) THEN');
7104 l(' x_search_ctx_id:=NULL;');
7105 l(' x_num_matches:=0;');
7106 l(' RETURN;');
7107 l(' END IF;');
7108 l(' ');
7109 l(' get_matching_contacts (p_rule_id, ');
7110 l(' p_party_id, ');
7111 l(' l_contact_list, ');
7112 l(' l_contact_point_list, ');
7113 l(' p_restrict_sql, ');
7114 l(' p_match_type, ');
7115 l(' p_org_contact_id, ');
7116 l(' x_search_ctx_id, ');
7117 l(' x_num_matches);');
7118 l(' ');
7119 d(fnd_log.level_procedure,'find_duplicate_contacts(-)');
7120
7121
7122 l('EXCEPTION');
7123 l(' WHEN FND_API.G_EXC_ERROR THEN');
7124 l(' RAISE FND_API.G_EXC_ERROR;');
7125 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7126 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7127 l(' WHEN OTHERS THEN');
7128 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7129 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contacts'');');
7130 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7131 l(' FND_MSG_PUB.ADD;');
7132 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7133 l('END find_duplicate_contacts; ');
7134 l('');
7135 /************** find_duplicate_contact_points API ***************/
7136 l('PROCEDURE find_duplicate_contact_points (');
7137 l(' p_rule_id IN NUMBER,');
7138 l(' p_contact_point_id IN NUMBER,');
7139 l(' p_party_id IN NUMBER,');
7140 l(' p_restrict_sql IN VARCHAR2,');
7141 l(' p_match_type IN VARCHAR2,');
7142 l(' x_search_ctx_id OUT NUMBER,');
7143 l(' x_num_matches OUT NUMBER');
7144 l(') IS');
7145 l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
7146 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
7147 l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
7148 l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
7149 l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
7150 l(' p_party_site_list HZ_PARTY_SEARCH.IDList; ');
7151 l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
7152 l(' l_match_idx NUMBER;');
7153
7154 l('');
7155 l('BEGIN');
7156
7157
7158 d(fnd_log.level_procedure,'find_duplicate_contact_points(+)');
7159 ds(fnd_log.level_statement);
7160 dc(fnd_log.level_statement,'Input Parameters:');
7161 dc(fnd_log.level_statement,'p_contact_point_id','p_contact_point_id');
7162 dc(fnd_log.level_statement,'p_party_id','p_party_id');
7163 dc(fnd_log.level_statement,'p_match_type','p_match_type');
7164 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7165 de;
7166
7167 l(' contact_point_ids(1) := p_contact_point_id; ');
7168 l(' get_search_criteria ( ');
7169 l(' null, ');
7170 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
7171 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
7172 l(' contact_point_ids, ');
7173 l(' l_party_search_rec, ');
7174 l(' l_party_site_list, ');
7175 l(' l_contact_list, ');
7176 l(' l_contact_point_list ); ');
7177 l(' ');
7178 l(' IF NOT check_prim_cond (l_party_search_rec,');
7179 l(' l_party_site_list,');
7180 l(' l_contact_list,');
7181 l(' l_contact_point_list) THEN');
7182 l(' x_search_ctx_id:=NULL;');
7183 l(' x_num_matches:=0;');
7184 l(' RETURN;');
7185 l(' END IF;');
7186 l(' get_matching_contact_points ( ');
7187 l(' p_rule_id, ');
7188 l(' p_party_id, ');
7189 l(' l_contact_point_list, ');
7190 l(' p_restrict_sql, ');
7191 l(' p_match_type, ');
7192 l(' p_contact_point_id, ');
7193 l(' x_search_ctx_id, ');
7194 l(' x_num_matches ); ');
7195 d(fnd_log.level_procedure,'find_duplicate_contact_points(-)');
7196
7197
7198 l('EXCEPTION');
7199 l(' WHEN FND_API.G_EXC_ERROR THEN');
7200 l(' RAISE FND_API.G_EXC_ERROR;');
7201 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7202 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7203 l(' WHEN OTHERS THEN');
7204 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7205 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contact_points'');');
7206 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7207 l(' FND_MSG_PUB.ADD;');
7208 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7209 l('END find_duplicate_contact_points;');
7210 l('');
7211 l('PROCEDURE find_parties_dynamic (');
7212 l(' p_rule_id IN NUMBER,');
7213 l(' p_attrib_id1 IN NUMBER,');
7214 l(' p_attrib_id2 IN NUMBER,');
7215 l(' p_attrib_id3 IN NUMBER,');
7216 l(' p_attrib_id4 IN NUMBER,');
7217 l(' p_attrib_id5 IN NUMBER,');
7218 l(' p_attrib_id6 IN NUMBER,');
7219 l(' p_attrib_id7 IN NUMBER,');
7220 l(' p_attrib_id8 IN NUMBER,');
7221 l(' p_attrib_id9 IN NUMBER,');
7222 l(' p_attrib_id10 IN NUMBER,');
7223 l(' p_attrib_id11 IN NUMBER,');
7224 l(' p_attrib_id12 IN NUMBER,');
7225 l(' p_attrib_id13 IN NUMBER,');
7226 l(' p_attrib_id14 IN NUMBER,');
7227 l(' p_attrib_id15 IN NUMBER,');
7228 l(' p_attrib_id16 IN NUMBER,');
7229 l(' p_attrib_id17 IN NUMBER,');
7230 l(' p_attrib_id18 IN NUMBER,');
7231 l(' p_attrib_id19 IN NUMBER,');
7232 l(' p_attrib_id20 IN NUMBER,');
7233 l(' p_attrib_val1 IN VARCHAR2,');
7234 l(' p_attrib_val2 IN VARCHAR2,');
7235 l(' p_attrib_val3 IN VARCHAR2,');
7236 l(' p_attrib_val4 IN VARCHAR2,');
7237 l(' p_attrib_val5 IN VARCHAR2,');
7238 l(' p_attrib_val6 IN VARCHAR2,');
7239 l(' p_attrib_val7 IN VARCHAR2,');
7240 l(' p_attrib_val8 IN VARCHAR2,');
7241 l(' p_attrib_val9 IN VARCHAR2,');
7242 l(' p_attrib_val10 IN VARCHAR2,');
7243 l(' p_attrib_val11 IN VARCHAR2,');
7244 l(' p_attrib_val12 IN VARCHAR2,');
7245 l(' p_attrib_val13 IN VARCHAR2,');
7246 l(' p_attrib_val14 IN VARCHAR2,');
7247 l(' p_attrib_val15 IN VARCHAR2,');
7248 l(' p_attrib_val16 IN VARCHAR2,');
7249 l(' p_attrib_val17 IN VARCHAR2,');
7250 l(' p_attrib_val18 IN VARCHAR2,');
7251 l(' p_attrib_val19 IN VARCHAR2,');
7252 l(' p_attrib_val20 IN VARCHAR2,');
7253 l(' p_restrict_sql IN VARCHAR2,');
7254 l(' p_match_type IN VARCHAR2,');
7255 l(' p_search_merged IN VARCHAR2,');
7256 l(' x_search_ctx_id OUT NUMBER,');
7257 l(' x_num_matches OUT NUMBER');
7258 l(') IS');
7259 l(' BEGIN');
7260 l(' call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
7261 l(' p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
7262 l(' p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
7263 l(' p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
7264 l(' p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
7265 l(' p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
7266 l(' p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
7267 l(' p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
7268 l(' p_restrict_sql,''FIND_PARTIES'',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);');
7269 l(' END;');
7270
7271 l('');
7272 /************** call_api_dynamic API ***************/
7273 l('PROCEDURE call_api_dynamic (');
7274 l(' p_rule_id IN NUMBER,');
7275 l(' p_attrib_id1 IN NUMBER,');
7276 l(' p_attrib_id2 IN NUMBER,');
7277 l(' p_attrib_id3 IN NUMBER,');
7278 l(' p_attrib_id4 IN NUMBER,');
7279 l(' p_attrib_id5 IN NUMBER,');
7280 l(' p_attrib_id6 IN NUMBER,');
7281 l(' p_attrib_id7 IN NUMBER,');
7282 l(' p_attrib_id8 IN NUMBER,');
7283 l(' p_attrib_id9 IN NUMBER,');
7284 l(' p_attrib_id10 IN NUMBER,');
7285 l(' p_attrib_id11 IN NUMBER,');
7286 l(' p_attrib_id12 IN NUMBER,');
7287 l(' p_attrib_id13 IN NUMBER,');
7288 l(' p_attrib_id14 IN NUMBER,');
7289 l(' p_attrib_id15 IN NUMBER,');
7290 l(' p_attrib_id16 IN NUMBER,');
7291 l(' p_attrib_id17 IN NUMBER,');
7292 l(' p_attrib_id18 IN NUMBER,');
7293 l(' p_attrib_id19 IN NUMBER,');
7294 l(' p_attrib_id20 IN NUMBER,');
7295 l(' p_attrib_val1 IN VARCHAR2,');
7296 l(' p_attrib_val2 IN VARCHAR2,');
7297 l(' p_attrib_val3 IN VARCHAR2,');
7298 l(' p_attrib_val4 IN VARCHAR2,');
7299 l(' p_attrib_val5 IN VARCHAR2,');
7300 l(' p_attrib_val6 IN VARCHAR2,');
7301 l(' p_attrib_val7 IN VARCHAR2,');
7302 l(' p_attrib_val8 IN VARCHAR2,');
7303 l(' p_attrib_val9 IN VARCHAR2,');
7304 l(' p_attrib_val10 IN VARCHAR2,');
7305 l(' p_attrib_val11 IN VARCHAR2,');
7306 l(' p_attrib_val12 IN VARCHAR2,');
7307 l(' p_attrib_val13 IN VARCHAR2,');
7308 l(' p_attrib_val14 IN VARCHAR2,');
7309 l(' p_attrib_val15 IN VARCHAR2,');
7310 l(' p_attrib_val16 IN VARCHAR2,');
7311 l(' p_attrib_val17 IN VARCHAR2,');
7312 l(' p_attrib_val18 IN VARCHAR2,');
7313 l(' p_attrib_val19 IN VARCHAR2,');
7314 l(' p_attrib_val20 IN VARCHAR2,');
7315 l(' p_restrict_sql IN VARCHAR2,');
7316 l(' p_api_name IN VARCHAR2,');
7317 l(' p_match_type IN VARCHAR2,');
7318 l(' p_party_id IN NUMBER,');
7319 l(' p_search_merged IN VARCHAR2,');
7320 l(' x_search_ctx_id OUT NUMBER,');
7321 l(' x_num_matches OUT NUMBER');
7322 l(') IS');
7323 l(' TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;');
7324 l(' l_match_idx NUMBER;');
7325 l(' AttrVals AttrList;');
7326 l(' l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
7327 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
7328 l(' l_contact_list HZ_PARTY_SEARCH.contact_list;');
7329 l(' l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
7330 l(' l_dup_set_id NUMBER;');
7331 l(' l_idx NUMBER;');
7332 l(' l_cpt_type VARCHAR2(255);');
7333 l(' FIRST BOOLEAN := TRUE; ');
7334 l('');
7335 l('BEGIN');
7336
7337 d(fnd_log.level_procedure,'call_api_dynamic(+)');
7338 l('');
7339 FOR I in 1..20 LOOP
7340 l(' IF p_attrib_id'||I||' IS NOT NULL THEN');
7341 l(' AttrVals(p_attrib_id'||I||'):=p_attrib_val'||I||';');
7342 l(' END IF;');
7343 END LOOP;
7344
7345 FIRST := TRUE;
7346 FOR ATTRS IN (
7347 SELECT a.attribute_id, a.attribute_name, a.entity_name
7348 FROM HZ_TRANS_ATTRIBUTES_VL a,
7349 HZ_MATCH_RULE_PRIMARY p
7350 WHERE p.match_rule_id = p_rule_id
7351 AND p.attribute_id = a.attribute_id
7352
7353 UNION
7354
7355 SELECT a.attribute_id, a.attribute_name, a.entity_name
7356 FROM HZ_TRANS_ATTRIBUTES_VL a,
7357 HZ_MATCH_RULE_SECONDARY s
7358 WHERE s.match_rule_id = p_rule_id
7359 AND s.attribute_id = a.attribute_id) LOOP
7360 l(' IF AttrVals.EXISTS('||ATTRS.attribute_id||') THEN');
7361 IF ATTRS.entity_name='PARTY' THEN
7362 l(' l_party_rec.'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7363 d(fnd_log.level_statement,'l_party_rec.'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7364 ELSIF ATTRS.entity_name='PARTY_SITES' THEN
7365 l(' l_party_site_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7366 d(fnd_log.level_statement,'l_party_site_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7367 ELSIF ATTRS.entity_name='CONTACTS' THEN
7368 l(' l_contact_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7369 d(fnd_log.level_statement,'l_contact_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7370 ELSIF ATTRS.entity_name='CONTACT_POINTS' THEN
7371 BEGIN
7372 SELECT tag INTO l_cpt_type FROM fnd_lookup_values
7373 WHERE lookup_type = 'HZ_DQM_CPT_ATTR_TYPE'
7374 AND lookup_code = ATTRS.attribute_name
7375 AND ROWNUM=1;
7376 EXCEPTION
7377 WHEN NO_DATA_FOUND THEN
7378 l_cpt_type:='PHONE';
7379 END;
7380
7381 l(' l_cpt_type := '''||l_cpt_type||''';');
7382 l(' FIRST := FALSE;');
7383 l(' FOR I in 1..l_cpt_list.COUNT LOOP');
7384 l(' IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN');
7385 l(' l_cpt_list(I).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7386 l(' FIRST := TRUE;');
7387 ds(fnd_log.level_statement);
7388 dc(fnd_log.level_statement,'l_cpt_list(''||I||'').CONTACT_POINT_TYPE','l_cpt_type');
7389 dc(fnd_log.level_statement,'l_cpt_list(''||I||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7390 de;
7391 l(' END IF;');
7392 l(' END LOOP;');
7393 l(' IF not FIRST THEN');
7394 l(' l_idx := l_cpt_list.COUNT+1;');
7395 l(' l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;');
7396 l(' l_cpt_list(l_idx).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7397 ds(fnd_log.level_statement);
7398 dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').CONTACT_POINT_TYPE','l_cpt_type');
7399 dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7400 de;
7401 l(' END IF;');
7402 END IF;
7403 l(' END IF;');
7404 l('');
7405 END LOOP;
7406 l('');
7407
7408 l(' IF AttrVals.EXISTS(14) THEN');
7409 l(' l_party_rec.PARTY_TYPE:= AttrVals(14); ');
7410 l(' END IF; ');
7411
7412 l(' IF upper(p_api_name) = ''FIND_PARTIES'' THEN');
7413 l(' find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
7414 l(' p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,''N'',');
7415 l(' x_search_ctx_id,x_num_matches);');
7416 l(' ELSIF upper(p_api_name) = ''FIND_PARTY_DETAILS'' THEN');
7417 l(' find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
7418 l(' p_restrict_sql,p_match_type,p_search_merged,');
7419 l(' x_search_ctx_id,x_num_matches);');
7420 l(' ELSIF upper(p_api_name) = ''FIND_PERSONS'' THEN');
7421 l(' find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
7422 l(' p_restrict_sql,p_match_type,p_search_merged,''N'',');
7423 l(' x_search_ctx_id,x_num_matches);');
7424 l(' ELSIF upper(p_api_name) = ''GET_MATCHING_PARTY_SITES'' THEN');
7425 l(' get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,');
7426 l(' p_restrict_sql,p_match_type,NULL,');
7427 l(' x_search_ctx_id,x_num_matches);');
7428 l(' ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACTS'' THEN');
7429 l(' get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,');
7430 l(' p_restrict_sql,p_match_type,NULL,');
7431 l(' x_search_ctx_id,x_num_matches);');
7432 l(' ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACT_POINTS'' THEN');
7433 l(' get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,');
7434 l(' p_restrict_sql,p_match_type,NULL,');
7435 l(' x_search_ctx_id,x_num_matches);');
7436 l(' END IF;');
7437 d(fnd_log.level_procedure,'call_api_dynamic(-)');
7438
7439
7440 l('EXCEPTION');
7441 l(' WHEN FND_API.G_EXC_ERROR THEN');
7442 l(' RAISE FND_API.G_EXC_ERROR;');
7443 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7444 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7445 l(' WHEN OTHERS THEN');
7446 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7447 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.call_api_dynamic'');');
7448 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7449 l(' FND_MSG_PUB.ADD;');
7450 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7451
7452
7453 l('END call_api_dynamic; ');
7454 l('');
7455
7456 /************** get_matching_party_sites API ***************/
7457 l('');
7458 l('PROCEDURE get_matching_party_sites (');
7459 l(' p_rule_id IN NUMBER,');
7460 l(' p_party_id IN NUMBER,');
7461 l(' p_party_site_list IN HZ_PARTY_SEARCH.PARTY_SITE_LIST,');
7462 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
7463 l(' p_restrict_sql IN VARCHAR2,');
7464 l(' p_match_type IN VARCHAR2,');
7465 l(' p_dup_party_site_id IN NUMBER, ');
7466 l(' x_search_ctx_id OUT NUMBER,');
7467 l(' x_num_matches OUT NUMBER');
7468 l(') IS');
7469 l(' ');
7470 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
7471 l(' -- Strings to hold the generated Intermedia query strings');
7472 l(' l_party_contains_str VARCHAR2(32000); ');
7473 l(' l_match_idx NUMBER;');
7474 l(' l_party_site_contains_str VARCHAR2(32000);');
7475 l(' l_contact_contains_str VARCHAR2(32000);');
7476 l(' l_contact_pt_contains_str VARCHAR2(32000);');
7477 l(' l_tmp VARCHAR2(32000);');
7478 l('');
7479 l(' -- Other local variables');
7480 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
7481 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
7482 l(' -- For Score calculation');
7483 l(' l_max_score NUMBER;');
7484 l(' l_entered_max_score NUMBER;');
7485 l(' FIRST BOOLEAN;');
7486 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
7487 l('');
7488 FOR TX IN (
7489 SELECT distinct f.staged_attribute_column
7490 FROM hz_trans_functions_vl f, hz_secondary_trans st,
7491 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
7492 WHERE sa.match_rule_id = p_rule_id
7493 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
7494 AND st.function_id = f.function_id
7495 AND (a.ENTITY_NAME='PARTY_SITES' OR a.ENTITY_NAME='CONTACT_POINTS')
7496 AND a.attribute_id = sa.attribute_id) LOOP
7497 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
7498 END LOOP;
7499 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
7500 l('');
7501 l(' l_score NUMBER;');
7502 l(' l_idx NUMBER;');
7503 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
7504 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
7505 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
7506 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
7507 l(' l_party_id NUMBER;');
7508 l(' l_ps_party_id NUMBER;');
7509 l(' l_ct_party_id NUMBER;');
7510 l(' l_cpt_party_id NUMBER;');
7511 l(' l_cpt_ps_id NUMBER;');
7512 l(' l_cpt_contact_id NUMBER;');
7513 l(' l_cpt_type VARCHAR2(100);');
7514 l(' l_cpt_level VARCHAR2(100);');
7515 l(' l_party_site_id NUMBER;');
7516 l(' l_org_contact_id NUMBER;');
7517 l(' l_contact_pt_id NUMBER;');
7518 l(' l_cpt_level VARCHAR2(100);');
7519 l(' l_ps_contact_id NUMBER;');
7520 l(' l_party_max_score NUMBER;');
7521 l(' l_ps_max_score NUMBER;');
7522 l(' l_contact_max_score NUMBER;');
7523 l(' l_cpt_max_score NUMBER;');
7524 l('');
7525 l(' defpt NUMBER :=0;');
7526 l(' defps NUMBER :=0;');
7527 l(' defct NUMBER :=0;');
7528 l(' defcpt NUMBER :=0;');
7529 l(' l_index NUMBER;');
7530 l(' l_match_ps_list HZ_PARTY_SEARCH.IDList;');
7531 l(' l_cnt NUMBER:=1;');
7532 l('');
7533 l(' ');
7534 l(' BEGIN');
7535
7536
7537 d(fnd_log.level_procedure,'get_matching_party_sites(+)');
7538 ds(fnd_log.level_statement);
7539 dc(fnd_log.level_statement,'Input Parameters:');
7540 dc(fnd_log.level_statement,'p_match_type','p_match_type');
7541 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7542 dc(fnd_log.level_statement,'p_dup_party_site_id','p_dup_party_site_id');
7543 de;
7544 l('');
7545 l(' -- ************************************');
7546 l(' -- STEP 1. Initialization and error checks');
7547 l('');
7548 l(' l_match_str := ''' || l_match_str || ''';');
7549 l(' IF p_match_type = ''AND'' THEN');
7550 l(' l_match_str := '' AND '';');
7551 l(' ELSIF p_match_type = ''OR'' THEN');
7552 l(' l_match_str := '' OR '';');
7553 l(' END IF;');
7554 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);');
7555 l(' g_score_until_thresh := false;');
7556 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
7557
7558 l('');
7559
7560 l(' -- ************************************************************');
7561 l(' -- STEP 2. Setup of intermedia query strings for Acquisition query');
7562 l(' l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);');
7563 l(' l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
7564 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);');
7565 l('');
7566 l(' -- Setup Search Context ID');
7567 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
7568 l(' x_search_ctx_id := l_search_ctx_id;');
7569 l('');
7570
7571 ds(fnd_log.level_statement);
7572 dc(fnd_log.level_statement,'l_match_str','l_match_str');
7576 de;
7573 dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
7574 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
7575 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
7577
7578 l(' IF l_party_site_contains_str IS NULL THEN');
7579 l(' defps := 1;');
7580 l(' END IF;');
7581 l(' IF l_contact_pt_contains_str IS NULL THEN');
7582 l(' defcpt := 1;');
7583 l(' END IF;');
7584 l('');
7585 l(' IF l_party_site_contains_str IS NOT NULL THEN');
7586 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);');
7587 l(' LOOP');
7588 l(' FETCH l_party_site_cur INTO ');
7589 l(' l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
7590 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
7591 l(' IF (p_dup_party_site_id IS NULL OR (');
7592 l(' p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND ');
7593 l(' l_party_site_id <> p_dup_party_site_id)) THEN ');
7594 l(' l_index := map_id(l_party_site_id);');
7595 l(' l_match_ps_list(l_cnt):= l_party_site_id ;');
7596 l(' l_cnt:=l_cnt+1;');
7597 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
7598 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);');
7599 ds(fnd_log.level_statement);
7600 dc(fnd_log.level_statement,'Party Site Level Matches');
7601 dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
7602 dc(fnd_log.level_statement,'l_score','l_score');
7603 de;
7604
7605 l(' END IF; ');
7606 l(' END LOOP;');
7607 l(' CLOSE l_party_site_cur;');
7608 l(' END IF;');
7609 l('');
7610 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
7611 l(' SAVEPOINT eval_start;');
7612 l(' IF l_match_str = '' AND '' OR (');
7613 l(' ((l_cpt_max_score/l_entered_max_score)<' ||'('||l_match_threshold||'/'||l_max_score || '))' );
7614 l(' ) THEN');
7615 l(' FORALL I in 1..l_match_ps_list.COUNT');
7616 l(' INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)');
7617 l(' values (l_search_ctx_id,l_match_ps_list(I));');
7618 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'');');
7619 l(' ELSE');
7620 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);');
7621 l(' END IF;');
7622 l(' LOOP');
7623 l(' FETCH l_contact_pt_cur INTO ');
7624 l(' l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
7625 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
7626 l(' IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (');
7627 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 ');
7628 l(' l_index := map_id(l_cpt_ps_id);');
7629 l(' IF l_match_str = '' OR '' THEN');
7630 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7631 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
7632 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);');
7633 l(' ELSE');
7634 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7635 l(' H_SCORES(l_index).TOTAL_SCORE := ');
7636 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7637 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7638 l(' END IF;');
7639 l(' END IF;');
7640 l(' ELSE');
7641 l(' IF H_SCORES.EXISTS(l_index) THEN');
7642 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7643 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7644 l(' H_SCORES(l_index).TOTAL_SCORE := ');
7645 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7646 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7647 l(' END IF;');
7648 l(' ELSIF defps=1 THEN');
7649 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7650 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);');
7651 l(' END IF;');
7652 l(' END IF;');
7653 l(' END IF; ');
7654 ds(fnd_log.level_statement);
7655 dc(fnd_log.level_statement,'Contact_point Level Matches');
7656 dc(fnd_log.level_statement,'l_party_site_id','l_cpt_ps_id');
7657 dc(fnd_log.level_statement,'l_score','l_score');
7658 de;
7659 l(' END LOOP;');
7660 l(' CLOSE l_contact_pt_cur;');
7661 l(' ROLLBACK TO eval_start;');
7662 l(' END IF;');
7663 l(' x_num_matches := 0;');
7664 l(' l_party_site_id := H_SCORES.FIRST;');
7665 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
7666 l(' WHILE l_party_site_id IS NOT NULL LOOP');
7667 ds(fnd_log.level_statement);
7668 dc(fnd_log.level_statement,'Match Party Site ID','H_SCORES(l_party_site_id).PARTY_SITE_ID');
7669 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100)');
7670 de;
7671 l(' IF l_match_str = '' OR '' THEN');
7672 --Start of Bug No: 4162385
7673 IF l_purpose = 'D' THEN
7674 l_entity_score_lh := 'H_SCORES(l_party_site_id).TOTAL_SCORE';
7675 l_entity_score_rh := 'ROUND(('||get_entity_level_score(p_rule_id,'PARTY_SITES')||'/'||l_max_score||') * '|| l_match_threshold || ')';
7676 ELSE
7677 l_entity_score_lh := 'H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score';
7678 l_entity_score_rh := l_match_threshold||'/'||l_max_score;
7679 END IF;
7680 --End of Bug No: 4162385
7681 l('IF ('||l_entity_score_lh||')>=( '||l_entity_score_rh||' ) THEN'); --Bug No: 4162385
7682 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
7683 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);');
7684 l(' x_num_matches := x_num_matches+1;');
7685 l(' END IF;');
7686 l(' ELSE');
7687 l(' IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND');
7688 l(' H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND');
7689 l(' ('||l_entity_score_lh||')>=('||l_entity_score_rh||') THEN'); --Bug No: 4162385
7690 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
7691 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));');
7692 l(' x_num_matches := x_num_matches+1;');
7693 l(' END IF;');
7694 l(' END IF;');
7695 l(' l_party_site_id:=H_SCORES.NEXT(l_party_site_id);');
7696 l(' END LOOP;');
7697 ELSE ---Start of Code Change for Match Rule Set
7698 l(' ');
7699 l(' BEGIN');
7700 d(fnd_log.level_procedure,'get_matching_party_sites(+)');
7701 ds(fnd_log.level_statement);
7702 dc(fnd_log.level_statement,'Input Parameters:');
7703 dc(fnd_log.level_statement,'p_match_type','p_match_type');
7704 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7705 dc(fnd_log.level_statement,'p_dup_party_site_id','p_dup_party_site_id');
7706 de;
7707 l('');
7708 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');
7709
7710 END IF; ---End of Code Change for Match Rule Set
7711 d(fnd_log.level_procedure,'get_matching_party_sites(-)');
7712
7713 l('EXCEPTION');
7714 l(' WHEN FND_API.G_EXC_ERROR THEN');
7715 l(' RAISE FND_API.G_EXC_ERROR;');
7716 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7717 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7718 l(' WHEN OTHERS THEN');
7719 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7720 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_party_sites'');');
7721 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7722 l(' FND_MSG_PUB.ADD;');
7723 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7724 l('END get_matching_party_sites;');
7725 l('');
7726
7727 -- l(' NULL;');
7728 -- l('END;');
7729
7730 /************** get_matching_contacts API ***************/
7731 l('');
7732 l('PROCEDURE get_matching_contacts (');
7733 l(' p_rule_id IN NUMBER,');
7734 l(' p_party_id IN NUMBER,');
7735 l(' p_contact_list IN HZ_PARTY_SEARCH.CONTACT_LIST,');
7736 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
7737 l(' p_restrict_sql IN VARCHAR2,');
7738 l(' p_match_type IN VARCHAR2,');
7739 l(' p_dup_contact_id IN NUMBER, ');
7740 l(' x_search_ctx_id OUT NUMBER,');
7741 l(' x_num_matches OUT NUMBER');
7742 l(') IS');
7743 l(' ');
7744 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
7745 l(' -- Strings to hold the generated Intermedia query strings');
7746 l(' l_party_contains_str VARCHAR2(32000); ');
7747 l(' l_party_site_contains_str VARCHAR2(32000);');
7748 l(' l_contact_contains_str VARCHAR2(32000);');
7749 l(' l_contact_pt_contains_str VARCHAR2(32000);');
7750 l(' l_tmp VARCHAR2(32000);');
7751 l('');
7752 l(' -- Other local variables');
7753 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
7754 l(' l_match_idx NUMBER;');
7755 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
7756 l(' -- For Score calculation');
7757 l(' l_max_score NUMBER;');
7758 l(' l_entered_max_score NUMBER;');
7759 l(' FIRST BOOLEAN;');
7760 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
7761 l('');
7762 FOR TX IN (
7763 SELECT distinct f.staged_attribute_column
7764 FROM hz_trans_functions_vl f, hz_secondary_trans st,
7765 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
7766 WHERE sa.match_rule_id = p_rule_id
7767 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
7771 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
7768 AND st.function_id = f.function_id
7769 AND (a.ENTITY_NAME='CONTACTS' OR a.ENTITY_NAME='CONTACT_POINTS')
7770 AND a.attribute_id = sa.attribute_id) LOOP
7772 END LOOP;
7773 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
7774 l('');
7775 l(' l_score NUMBER;');
7776 l(' l_idx NUMBER;');
7777 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
7778 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
7779 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
7780 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
7781 l(' l_party_id NUMBER;');
7782 l(' l_ps_party_id NUMBER;');
7783 l(' l_ct_party_id NUMBER;');
7784 l(' l_cpt_party_id NUMBER;');
7785 l(' l_cpt_ps_id NUMBER;');
7786 l(' l_cpt_contact_id NUMBER;');
7787 l(' l_cpt_type VARCHAR2(100);');
7788 l(' l_party_site_id NUMBER;');
7789 l(' l_org_contact_id NUMBER;');
7790 l(' l_contact_pt_id NUMBER;');
7791 l('');
7792 l(' defpt NUMBER :=0;');
7793 l(' defps NUMBER :=0;');
7794 l(' defct NUMBER :=0;');
7795 l(' defcpt NUMBER :=0;');
7796 l(' l_index NUMBER;');
7797 l(' l_party_max_score NUMBER;');
7798 l(' l_ps_max_score NUMBER;');
7799 l(' l_contact_max_score NUMBER;');
7800 l(' l_cpt_max_score NUMBER;');
7801 l(' l_match_contact_list HZ_PARTY_SEARCH.IDList;');
7802 l(' l_cnt NUMBER:=1;');
7803 l('');
7804 l(' ');
7805 l(' BEGIN');
7806
7807
7808 d(fnd_log.level_procedure,'get_matching_contacts(+)');
7809 ds(fnd_log.level_statement);
7810 dc(fnd_log.level_statement,'Input Parameters:');
7811 dc(fnd_log.level_statement,'p_match_type','p_match_type');
7812 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7813 dc(fnd_log.level_statement,'p_dup_contact_id','p_dup_contact_id');
7814 de;
7815
7816 l('');
7817 l(' -- ************************************');
7818 l(' -- STEP 1. Initialization and error checks');
7819 l('');
7820 l(' l_match_str := ''' || l_match_str || ''';');
7821 l(' IF p_match_type = ''AND'' THEN');
7822 l(' l_match_str := '' AND '';');
7823 l(' ELSIF p_match_type = ''OR'' THEN');
7824 l(' l_match_str := '' OR '';');
7825 l(' END IF;');
7826 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);');
7827 l(' g_score_until_thresh := false;');
7828 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
7829 l('');
7830
7831 l(' -- ************************************************************');
7832 l(' -- STEP 2. Setup of intermedia query strings for Acquisition query');
7833 l(' l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);');
7834 l(' l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
7835 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);');
7836
7837 l('');
7838 l(' -- Setup Search Context ID');
7839 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
7840 l(' x_search_ctx_id := l_search_ctx_id;');
7841 l('');
7842
7843 ds(fnd_log.level_statement);
7844 dc(fnd_log.level_statement,'l_match_str','l_match_str');
7845 dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
7846 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
7847 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
7848 de;
7849
7853 l(' IF l_contact_pt_contains_str IS NULL THEN');
7850 l(' IF l_contact_contains_str IS NULL THEN');
7851 l(' defct := 1;');
7852 l(' END IF;');
7854 l(' defcpt := 1;');
7855 l(' END IF;');
7856 l('');
7857 l(' IF l_contact_contains_str IS NOT NULL THEN');
7858 l(' open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);');
7859 l(' LOOP');
7860 l(' FETCH l_contact_cur INTO ');
7861 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
7862 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
7863 l(' IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN ');
7864 l(' l_index := map_id(l_org_contact_id);');
7865 l(' l_match_contact_list(l_cnt):=l_org_contact_id;');
7866 l(' l_cnt:=l_cnt+1;');
7867
7868 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
7869 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);');
7870
7871 ds(fnd_log.level_statement);
7872 dc(fnd_log.level_statement,'Contact Level Matches');
7873 dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
7874 dc(fnd_log.level_statement,'l_score','l_score');
7875 de;
7876
7877 l(' END IF; ');
7878 l(' END LOOP;');
7879 l(' CLOSE l_contact_cur;');
7880 l(' END IF;');
7881
7882 l('');
7883 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
7884 l(' SAVEPOINT eval_start;');
7885 l(' IF l_match_str = '' AND '' OR (');
7886 l(' ((l_cpt_max_score/l_entered_max_score)<' ||'('||l_match_threshold||'/'||l_max_score || '))' );
7887 l(' ) THEN');
7888 l(' FORALL I in 1..l_match_contact_list.COUNT');
7889 l(' INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)');
7890 l(' values (l_search_ctx_id,l_match_contact_list(I));');
7891 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'');');
7892 l(' ELSE');
7893 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);');
7894 l(' END IF;');
7895 l(' LOOP');
7896 l(' FETCH l_contact_pt_cur INTO ');
7897 l(' l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
7898 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
7899 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 ');
7900 l(' l_index := map_id(l_cpt_contact_id);');
7901 l(' IF l_match_str = '' OR '' THEN');
7902 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7903 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
7904 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);');
7905 l(' ELSE');
7906 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7907 l(' H_SCORES(l_index).TOTAL_SCORE := ');
7908 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7909 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7910 l(' END IF;');
7911 l(' END IF;');
7912 l(' ELSE');
7913 l(' IF H_SCORES.EXISTS(l_index) THEN');
7914 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7915 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7916 l(' H_SCORES(l_index).TOTAL_SCORE := ');
7917 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7918 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7919 l(' END IF;');
7920 l(' ELSIF defps=1 THEN');
7921 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7922 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);');
7923 l(' END IF;');
7924 l(' END IF;');
7925 l(' END IF; ');
7926 l(' END LOOP;');
7927 ds(fnd_log.level_statement);
7928 dc(fnd_log.level_statement,'Contact_point Level Matches');
7929 dc(fnd_log.level_statement,'l_org_contact_id','l_cpt_contact_id');
7930 dc(fnd_log.level_statement,'l_score','l_score');
7931 de;
7932 l(' CLOSE l_contact_pt_cur;');
7933 l(' END IF;');
7934 l(' x_num_matches := 0;');
7935 l(' l_org_contact_id := H_SCORES.FIRST;');
7936 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
7937 l(' WHILE l_org_contact_id IS NOT NULL LOOP');
7938 l(' IF l_match_str = '' OR '' THEN');
7939 ds(fnd_log.level_statement);
7940 dc(fnd_log.level_statement,'Match Contact ID','H_SCORES(l_org_contact_id).ORG_CONTACT_ID');
7944 IF l_purpose = 'D' THEN
7941 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100)');
7942 de;
7943 --Start of Bug No: 4162385
7945 l_entity_score_lh := 'H_SCORES(l_org_contact_id).TOTAL_SCORE';
7946 l_entity_score_rh := 'ROUND(('||get_entity_level_score(p_rule_id,'CONTACTS')||'/'||l_max_score||') * '|| l_match_threshold || ')';
7947 ELSE
7948 l_entity_score_lh := 'H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score';
7949 l_entity_score_rh := l_match_threshold||'/'||l_max_score;
7950 END IF;
7951 --End of Bug No: 4162385
7952 -- IF l_purpose = 'S' THEN
7953 l(' IF (' || l_entity_score_lh ||')>=('|| l_entity_score_rh ||') THEN'); --Bug No: 4162385
7954 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
7955 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);');
7956 -- ELSE
7957 -- END IF;
7958 l(' x_num_matches := x_num_matches+1;');
7959 l(' END IF;');
7960 l(' ELSE');
7961 -- IF l_purpose = 'S' THEN
7962 l(' IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND');
7963 l(' H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND');
7964 l(' (' || l_entity_score_lh ||')>=('|| l_entity_score_rh ||') THEN'); --Bug No: 4162385
7965 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
7966 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));');
7967 -- ELSE
7968 -- END IF;
7969 l(' x_num_matches := x_num_matches+1;');
7970 l(' END IF;');
7971 l(' END IF;');
7972 l(' l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);');
7973 l(' END LOOP;');
7974 ELSE ---Start of Code Change for Match Rule Set
7975 l(' ');
7976 l(' BEGIN');
7977 d(fnd_log.level_procedure,'get_matching_contacts(+)');
7978 ds(fnd_log.level_statement);
7979 dc(fnd_log.level_statement,'Input Parameters:');
7980 dc(fnd_log.level_statement,'p_match_type','p_match_type');
7981 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7982 dc(fnd_log.level_statement,'p_dup_contact_id','p_dup_contact_id');
7983 de;
7984 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');
7985 END IF; ---End of Code Change for Match Rule Set
7986
7987 d(fnd_log.level_procedure,'get_matching_contacts(-)');
7988
7989 l('EXCEPTION');
7990 l(' WHEN FND_API.G_EXC_ERROR THEN');
7991 l(' RAISE FND_API.G_EXC_ERROR;');
7992 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7993 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7994 l(' WHEN OTHERS THEN');
7995 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7996 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contacts'');');
7997 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7998 l(' FND_MSG_PUB.ADD;');
7999 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8000 l('END get_matching_contacts;');
8001 l('');
8002
8003
8004 /************** get_matching_contact_points API ***************/
8005 l('');
8006 l('PROCEDURE get_matching_contact_points (');
8007 l(' p_rule_id IN NUMBER,');
8008 l(' p_party_id IN NUMBER,');
8009 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
8010 l(' p_restrict_sql IN VARCHAR2,');
8011 l(' p_match_type IN VARCHAR2,');
8012 l(' p_dup_contact_point_id IN NUMBER, ');
8013 l(' x_search_ctx_id OUT NUMBER,');
8014 l(' x_num_matches OUT NUMBER');
8015 l(') IS');
8016 l('');
8017 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
8018 l('');
8019 l(' -- Strings to hold the generated Intermedia query strings');
8020 l(' l_contact_pt_contains_str VARCHAR2(32000);');
8021 l(' l_tmp VARCHAR2(32000);');
8022 l('');
8023 l(' -- Other local variables');
8024 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
8025 l(' l_match_idx NUMBER;');
8026 l(' -- For Score calculation');
8027 l(' l_entered_max_score NUMBER;');
8028 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
8029 l('');
8030 FOR TX IN (
8031 SELECT distinct f.staged_attribute_column
8032 FROM hz_trans_functions_vl f, hz_secondary_trans st,
8033 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8034 WHERE sa.match_rule_id = p_rule_id
8035 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8036 AND st.function_id = f.function_id
8037 AND a.ENTITY_NAME='CONTACT_POINTS'
8038 AND a.attribute_id = sa.attribute_id) LOOP
8039 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
8040 END LOOP;
8041 l('');
8042 l(' l_score NUMBER;');
8043 l(' l_idx NUMBER;');
8044 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
8045 l(' l_cpt_party_id NUMBER;');
8046 l(' l_cpt_ps_id NUMBER;');
8047 l(' l_cpt_contact_id NUMBER;');
8048 l(' l_contact_pt_id NUMBER;');
8049 l(' l_cpt_type VARCHAR2(100);');
8050 l(' H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
8051 l(' H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;');
8052 l(' H_SCORE HZ_PARTY_SEARCH.IDList;');
8053 l('');
8054 l(' cnt NUMBER :=0;');
8055 l(' l_party_max_score NUMBER;');
8056 l(' l_ps_max_score NUMBER;');
8057 l(' l_contact_max_score NUMBER;');
8058 l(' l_cpt_max_score NUMBER;');
8059 l('');
8060 l(' ');
8061 l(' BEGIN');
8062
8063
8064
8065 d(fnd_log.level_procedure,'get_matching_contact_points(+)');
8066 ds(fnd_log.level_statement);
8067 dc(fnd_log.level_statement,'Input Parameters:');
8068 dc(fnd_log.level_statement,'p_match_type','p_match_type');
8069 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
8070 dc(fnd_log.level_statement,'p_dup_contact_point_id','p_dup_contact_point_id');
8071 de;
8072
8073 l('');
8074 l(' -- ************************************');
8075 l(' -- STEP 1. Initialization and error checks');
8076 l('');
8077
8078 l(' l_match_str := ''' || l_match_str || ''';');
8079 l(' IF p_match_type = ''AND'' THEN');
8080 l(' l_match_str := '' AND '';');
8081 l(' ELSIF p_match_type = ''OR'' THEN');
8082 l(' l_match_str := '' OR '';');
8083 l(' END IF;');
8084 l(' l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, ');
8088 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
8085 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
8086 l(' p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
8087 l(' g_score_until_thresh := false;');
8089 l('');
8090
8091 l(' -- ************************************************************');
8092 l(' -- STEP 2. Setup of intermedia query strings for Acquisition query');
8093 l(' l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
8094 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);');
8095
8096 l('');
8097 l(' -- Setup Search Context ID');
8098 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
8099 l(' x_search_ctx_id := l_search_ctx_id;');
8100
8101 ds(fnd_log.level_statement);
8102 dc(fnd_log.level_statement,'l_match_str','l_match_str');
8103 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
8104 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
8105 de;
8106
8107 l('');
8108 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
8109 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);');
8110 l(' cnt := 1;');
8111 l(' LOOP');
8112 l(' FETCH l_contact_pt_cur INTO ');
8113 l(' l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
8114 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
8115 l(' IF (p_dup_contact_point_id IS NULL OR (');
8116 l(' p_dup_contact_point_id IS NOT NULL AND ');
8117 l(' l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND ');
8118 l(' p_dup_contact_point_id <> l_contact_pt_id)) THEN ');
8119 l(' H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;');
8120 l(' H_PARTY_ID(cnt) := l_cpt_party_id;');
8121 l(' H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
8122 l(' cnt := cnt+1;');
8123 ds(fnd_log.level_statement);
8124 dc(fnd_log.level_statement,'Contact Point Matches');
8125 dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
8126 dc(fnd_log.level_statement,'l_score','l_score');
8127 de;
8128
8129 l(' END IF; ');
8130 l(' END LOOP;');
8131 l(' CLOSE l_contact_pt_cur;');
8132
8133 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
8134 l(' x_num_matches := 0; ');
8135 l(' FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP');
8136 ds(fnd_log.level_statement);
8137 dc(fnd_log.level_statement,'Match Contact Point ID','H_CONTACT_POINT_ID(I)');
8138 dc(fnd_log.level_statement,'Score','round((H_SCORE(I)/l_entered_max_score)*100)');
8139 de;
8140 --Start of Bug No: 4162385
8141 IF l_purpose = 'D' THEN
8142 l_entity_score_lh := 'H_SCORE(I)';
8143 l_entity_score_rh := 'ROUND(('||get_entity_level_score(p_rule_id,'CONTACT_POINTS')||'/'||l_max_score||') * '|| l_match_threshold || ')';
8144 ELSE
8145 l_entity_score_lh := 'H_SCORE(I)/l_entered_max_score';
8146 l_entity_score_rh := l_match_threshold||'/'||l_max_score;
8147 END IF;
8148 --End of Bug No: 4162385
8149
8150 l(' IF ('|| l_entity_score_lh ||') >= ('|| l_entity_score_rh ||') THEN'); --Bug No: 4162385
8151 l(' INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
8152 l(' l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);');
8153 l(' x_num_matches := x_num_matches + 1; ');
8154 l(' END IF;');
8155 l(' END LOOP; ');
8156 l(' END IF;');
8157 ELSE ---Start of Code Change for Match Rule Set
8158 l(' BEGIN');
8159 d(fnd_log.level_procedure,'get_matching_contact_points(+)');
8160 ds(fnd_log.level_statement);
8161 dc(fnd_log.level_statement,'Input Parameters:');
8162 dc(fnd_log.level_statement,'p_match_type','p_match_type');
8163 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
8164 dc(fnd_log.level_statement,'p_dup_contact_point_id','p_dup_contact_point_id');
8165 de;
8166 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');
8167
8168 END IF; ---End of Code Change for Match Rule Set
8169 d(fnd_log.level_procedure,'get_matching_contact_points(-)');
8170
8171 l('EXCEPTION');
8172 l(' WHEN FND_API.G_EXC_ERROR THEN');
8173 l(' RAISE FND_API.G_EXC_ERROR;');
8174 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
8175 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8176 l(' WHEN OTHERS THEN');
8177 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8178 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contact_points'');');
8179 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8180 l(' FND_MSG_PUB.ADD;');
8181 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8182 l('END get_matching_contact_points;');
8183
8184 l('');
8185 l(' /**********************************************************');
8186 l(' This procedure finds the score details for a specific party that ');
8187 l(' matched ');
8188 l('');
8189 l(' **********************************************************/');
8190 l('');
8191 l('PROCEDURE get_score_details (');
8192 l(' p_rule_id IN NUMBER,');
8193 l(' p_party_id IN NUMBER,');
8194 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
8195 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
8196 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
8197 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
8198 l(' x_search_ctx_id IN OUT NUMBER');
8199 l(') IS');
8200 l('');
8201 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
8202 l(' -- Strings to hold the generated Intermedia query strings');
8203 l(' l_party_contains_str VARCHAR2(32000); ');
8204 l(' l_party_site_contains_str VARCHAR2(32000);');
8205 l(' l_contact_contains_str VARCHAR2(32000);');
8206 l(' l_contact_pt_contains_str VARCHAR2(32000);');
8207 l(' l_tmp VARCHAR2(32000);');
8208 l('');
8209 l(' -- Other local variables');
8210 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
8211 l(' -- For Score calculation');
8212 l(' l_max_score NUMBER;');
8213 l(' l_entered_max_score NUMBER;');
8214 l(' FIRST BOOLEAN;');
8215 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
8216 l('');
8217 FOR TX IN (
8218 SELECT distinct f.staged_attribute_column
8219 FROM hz_trans_functions_vl f, hz_secondary_trans st,
8220 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8221 WHERE sa.match_rule_id = p_rule_id
8222 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8223 AND st.function_id = f.function_id
8224 AND a.attribute_id = sa.attribute_id) LOOP
8225 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
8226 l(' l_max_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
8227 END LOOP;
8228 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
8229 l('');
8230 l(' l_score NUMBER;');
8231 l(' l_match_idx NUMBER;');
8232 l(' l_idx NUMBER;');
8236 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
8233 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
8234 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
8235 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
8237 l(' l_party_id NUMBER;');
8238 l(' l_ps_party_id NUMBER;');
8239 l(' l_ct_party_id NUMBER;');
8240 l(' l_cpt_party_id NUMBER;');
8241 l(' l_cpt_ps_id NUMBER;');
8242 l(' l_cpt_contact_id NUMBER;');
8243 l(' l_cpt_type VARCHAR2(100);');
8244 l(' l_party_site_id NUMBER;');
8245 l(' l_org_contact_id NUMBER;');
8246 l(' l_contact_pt_id NUMBER;');
8247 l(' l_ps_contact_id NUMBER;');
8248 l(' l_max_id NUMBER;');
8249 l(' l_max_idx NUMBER;');
8250 l('');
8251 l(' l_index NUMBER;');
8252 l(' l_party_max_score NUMBER;');
8253 l(' l_ps_max_score NUMBER;');
8254 l(' l_contact_max_score NUMBER;');
8255 l(' l_cpt_max_score NUMBER;');
8256 l('');
8257 l(' --Fix for bug 4417124 ');
8258 l(' l_use_contact_addr_info BOOLEAN:=TRUE;');
8259 l(' l_use_contact_cpt_info BOOLEAN:=TRUE;');
8260 l(' l_TX35_new VARCHAR2(4000);'); --9155543
8261 l('');
8262 l(' BEGIN');
8263 l('');
8264 d(fnd_log.level_statement,'get_score_details(+)');
8265 l(' -- ************************************');
8266 l(' -- STEP 1. Initialization and error checks');
8267 l('');
8268 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);');
8269 l(' g_score_until_thresh := false;');
8270 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
8271
8272 l(' -- ************************************************************');
8273 l(' -- STEP 2. Setup of intermedia query strings for Acquisition query');
8274
8275 l(' l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);');
8276 l(' l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);');
8277 l(' l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
8278
8279 l(' init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
8280 l('');
8281 l(' -- Setup Search Context ID');
8282 l(' IF x_search_ctx_id IS NULL THEN');
8283 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
8284 l(' x_search_ctx_id := l_search_ctx_id;');
8285 l(' ELSE');
8286 l(' l_search_ctx_id := x_search_ctx_id;');
8287 l(' END IF;');
8288 l('');
8289 l(' open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);');
8290 l(' LOOP ');
8291 l(' FETCH l_party_cur INTO');
8292 l(' l_party_id '||l_p_into_list||';');
8293 l(' EXIT WHEN l_party_cur%NOTFOUND;');
8294 IF(l_p_param_list LIKE '%TX35%') THEN --9155543
8295 l(' l_TX35_new:=RTRIM(LTRIM(l_TX35));');
8296 l(' l_TX35_new:=(CASE l_TX35_new WHEN ''SYNC'' THEN HZ_STAGE_MAP_TRANSFORM.den_acc_number (l_party_id) ELSE l_TX35_new END);');
8297 l_p_param_list:=replace(l_p_param_list,'l_TX35','l_TX35_new');
8298 END IF;
8299 IF l_p_param_list IS NOT NULL THEN
8300 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);');
8301 END IF;
8302 l_p_param_list:=replace(l_p_param_list,'l_TX35_new','l_TX35'); --9155543
8303 l(' END LOOP;');
8304 l(' CLOSE l_party_cur;');
8305 l('');
8306 l(' IF l_party_site_contains_str IS NOT NULL THEN');
8307 l(' l_max_score := 0;');
8308 l(' l_max_id := 0;');
8309 l(' l_max_idx := 0;');
8310 l(' IF p_party_search_rec.PARTY_TYPE = ''PERSON'' AND l_use_contact_addr_info THEN');
8311 l(' open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, ''Y'',''N'',l_party_site_cur);');
8312 l(' ELSE');
8313 l(' open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, ''N'',''N'',l_party_site_cur);');
8314 l(' END IF;');
8315 l(' LOOP');
8316 l(' FETCH l_party_site_cur INTO ');
8317 l(' l_party_site_id, l_ps_party_id,l_ps_contact_id '||l_ps_into_list||';');
8318 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
8319 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
8320 l(' IF l_score > l_max_score THEN');
8321 l(' l_max_score := l_score;');
8322 l(' l_max_id := l_party_site_id;');
8323 l(' l_max_idx := l_match_idx;');
8324 FOR TX IN (
8325 SELECT distinct f.staged_attribute_column
8326 FROM hz_trans_functions_vl f, hz_secondary_trans st,
8327 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8328 WHERE sa.match_rule_id = p_rule_id
8329 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8330 AND st.function_id = f.function_id
8331 AND a.entity_name = 'PARTY_SITES'
8332 AND a.attribute_id = sa.attribute_id) LOOP
8333 l(' l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
8334 END LOOP;
8335 l(' END IF;');
8336 l(' END LOOP;');
8337 l(' CLOSE l_party_site_cur;');
8338 l(' IF l_max_score>0 THEN');
8339 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);');
8340 l(' END IF;');
8341 l(' END IF;');
8342 l('');
8343 l(' IF l_contact_contains_str IS NOT NULL THEN');
8344 l(' l_max_score := 0;');
8345 l(' l_max_id := 0;');
8346 l(' l_max_idx := 0;');
8347 l(' open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);');
8348 l(' LOOP');
8349 l(' FETCH l_contact_cur INTO ');
8353 l(' IF l_score > l_max_score THEN');
8350 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
8351 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
8352 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
8354 l(' l_max_score := l_score;');
8355 l(' l_max_id := l_org_contact_id;');
8356 l(' l_max_idx := l_match_idx;');
8357 FOR TX IN (
8358 SELECT distinct f.staged_attribute_column
8359 FROM hz_trans_functions_vl f, hz_secondary_trans st,
8360 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8361 WHERE sa.match_rule_id = p_rule_id
8362 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8363 AND st.function_id = f.function_id
8364 AND a.entity_name = 'CONTACTS'
8365 AND a.attribute_id = sa.attribute_id) LOOP
8366 l(' l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
8367 END LOOP;
8368 l(' END IF;');
8369 l(' END LOOP;');
8370 l(' CLOSE l_contact_cur;');
8371 l(' IF l_max_score>0 THEN');
8372 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);');
8373 l(' END IF;');
8374 l(' END IF;');
8375 l('');
8376 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
8377 l(' l_max_score := 0;');
8378 l(' l_max_id := 0;');
8379 l(' l_max_idx := 0;');
8380 l(' IF p_party_search_rec.PARTY_TYPE = ''PERSON'' AND l_use_contact_cpt_info THEN');
8381 l(' open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, ''Y'',''N'',l_contact_pt_cur);');
8382 l(' ELSE');
8383 l(' open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, ''N'',''N'',l_contact_pt_cur);');
8384 l(' END IF;');
8385 l(' LOOP');
8386 l(' FETCH l_contact_pt_cur INTO ');
8387 l(' l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
8388 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
8389 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
8390 l(' IF l_score > l_max_score THEN');
8391 l(' l_max_score := l_score;');
8392 l(' l_max_id := l_contact_pt_id;');
8393 l(' l_max_idx := l_match_idx;');
8394 FOR TX IN (
8395 SELECT distinct f.staged_attribute_column
8396 FROM hz_trans_functions_vl f, hz_secondary_trans st,
8397 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8398 WHERE sa.match_rule_id = p_rule_id
8399 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8400 AND st.function_id = f.function_id
8401 AND a.entity_name = 'CONTACT_POINTS'
8402 AND a.attribute_id = sa.attribute_id) LOOP
8403 l(' l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
8404 END LOOP;
8405 l(' END IF;');
8406 l(' END LOOP;');
8407 l(' IF l_max_score>0 THEN');
8408 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);');
8409 l(' END IF;');
8410 l(' CLOSE l_contact_pt_cur;');
8411 l(' END IF;');
8412 d(fnd_log.level_procedure,'get_score_details(-)');
8413 ELSE ---Start of Code Change for Match Rule Set
8414 l(' BEGIN');
8415 l('');
8416 d(fnd_log.level_statement,'get_score_details(+)');
8417 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');
8418 d(fnd_log.level_procedure,'get_score_details(-)');
8419 END IF; ---End of Code Change for Match Rule Set
8420
8421 l('EXCEPTION');
8422 l(' WHEN FND_API.G_EXC_ERROR THEN');
8423 l(' RAISE FND_API.G_EXC_ERROR;');
8424 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
8425 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8426 l(' WHEN OTHERS THEN');
8427 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8428 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_score_details'');');
8429 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8430 l(' FND_MSG_PUB.ADD;');
8431 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8432 l('END get_score_details;');
8433 l('');
8434
8435 generate_acquire_proc(p_rule_id, NULL);
8436
8437
8438 generate_party_map_proc('MAP_PARTY_REC', p_rule_id);
8439 l('');
8440 generate_map_proc('PARTY_SITES', 'MAP_PARTY_SITE_REC', p_rule_id);
8441 l('');
8442 generate_map_proc('CONTACTS', 'MAP_CONTACT_REC', p_rule_id);
8443 l('');
8444 generate_map_proc('CONTACT_POINTS', 'MAP_CONTACT_POINT_REC', p_rule_id);
8445 l('');
8446 generate_check_proc(p_rule_id);
8447 generate_check_staged (p_rule_id);
8448 /*l(' PROCEDURE enable_debug IS');
8449
8450 l(' BEGIN');
8451 l(' g_debug_count := g_debug_count + 1;');
8452
8453 l(' IF g_debug_count = 1 THEN');
8454 l(' IF fnd_profile.value(''HZ_API_FILE_DEBUG_ON'') = ''Y'' OR');
8455 l(' fnd_profile.value(''HZ_API_DBMS_DEBUG_ON'') = ''Y''');
8456 l(' THEN');
8457 l(' hz_utility_v2pub.enable_debug;');
8458 l(' g_debug := TRUE;');
8459 d('PKG: '||p_pkg_name||' (+)');
8460 l(' END IF;');
8461 l(' END IF;');
8462 l(' END enable_debug;');
8463
8464 l(' PROCEDURE disable_debug IS');
8465
8466 l(' BEGIN');
8467
8468 l(' IF g_debug THEN');
8469 l(' g_debug_count := g_debug_count - 1;');
8470
8471 l(' IF g_debug_count = 0 THEN');
8472 d('PKG: '||p_pkg_name||' (-)');
8473 l(' hz_utility_v2pub.disable_debug;');
8477
8474 l(' g_debug := FALSE;');
8475 l(' END IF;');
8476 l(' END IF;');
8478 l(' END disable_debug;');
8479 */
8480
8481 l('END;');
8482 l('');
8483 END;
8484
8485
8486 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8487 -- which would essentially return a 'Y' or null to signify the corresponding
8488 -- XXX_contains_string contains user passed information or not.
8489
8490 PROCEDURE generate_check_parties_bulk (
8491 p_rule_id NUMBER) IS
8492 FIRST BOOLEAN;
8493 BEGIN
8494 l('');
8495 l('/************************************************');
8496 l(' This procedure checks if the input search criteria ');
8497 l(' is valid. It checks if : ');
8498 l(' 1. At least one primary condition is passed');
8499 l('************************************************/');
8500 l('');
8501
8502 l('FUNCTION check_parties_bulk(');
8503 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type)');
8504 l('RETURN VARCHAR2 IS');
8505 l(' BEGIN');
8506
8507 FIRST := TRUE;
8508 FOR PRIMATTRS IN (
8509 SELECT ATTRIBUTE_NAME
8510 FROM HZ_TRANS_ATTRIBUTES_VL a,
8511 HZ_MATCH_RULE_PRIMARY p
8512 WHERE p.match_rule_id = p_rule_id
8513 AND p.attribute_id = a.attribute_id
8514 AND a.ENTITY_NAME = 'PARTY'
8515 AND nvl(p.FILTER_FLAG,'N') = 'N') LOOP
8516 l(' IF p_party_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
8517 l(' RETURN ''Y'' ;');
8518 l(' END IF;');
8519 END LOOP;
8520
8521 l('RETURN null;');
8522
8523 l('EXCEPTION');
8524 l(' WHEN OTHERS THEN');
8525 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8526 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_parties_bulk'');');
8527 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8528 l(' FND_MSG_PUB.ADD;');
8529 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8530 l(' END check_parties_bulk ;');
8531 l('');
8532 END generate_check_parties_bulk ;
8533
8534
8535 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8536 -- which would essentially return a 'Y' or null to signify the corresponding
8537 -- XXX_contains_string contains user passed information or not.
8538
8539 PROCEDURE generate_check_partysites_bulk (
8540 p_rule_id NUMBER) IS
8541 FIRST BOOLEAN;
8542 BEGIN
8543 l('/************************************************');
8544 l(' This procedure checks if the input search condition ');
8545 l(' has party site criteria. ');
8546 l('************************************************/');
8547
8548 l('');
8549 l('FUNCTION check_party_sites_bulk(');
8550 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list');
8551 l(')');
8552 l('RETURN VARCHAR2 IS');
8553 l(' x_primary boolean := FALSE;');
8554 l(' BEGIN');
8555 l(' FOR I IN 1..p_party_site_list.COUNT LOOP');
8556 FIRST := TRUE;
8557 FOR PRIMATTRS IN (
8558 SELECT ATTRIBUTE_NAME
8559 FROM HZ_TRANS_ATTRIBUTES_VL a,
8560 HZ_MATCH_RULE_PRIMARY p
8561 WHERE p.match_rule_id = p_rule_id
8562 AND a.ENTITY_NAME = 'PARTY_SITES'
8563 AND p.attribute_id = a.attribute_id)
8564 LOOP
8565 IF FIRST THEN
8566 l(' IF p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
8567 FIRST := FALSE;
8568 ELSE
8569 l(' OR p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
8570 END IF;
8571 END LOOP;
8572 IF NOT FIRST THEN
8573 l(' THEN');
8574 l(' x_primary := TRUE;');
8575 l(' END IF;');
8576 l(' EXIT WHEN x_primary;');
8577 ELSE
8578 l(' NULL;');
8579 END IF;
8580 l(' END LOOP;');
8581
8582 l('');
8583
8584 l(' IF x_primary = TRUE THEN RETURN ''Y''; ELSE RETURN null; END IF; ');
8585 l('EXCEPTION');
8586 l(' WHEN OTHERS THEN');
8587 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8588 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_party_sites_bulk'');');
8589 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8590 l(' FND_MSG_PUB.ADD;');
8591 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8592 l(' END check_party_sites_bulk ;');
8593 l('');
8594
8595 END generate_check_partysites_bulk ;
8596
8597
8598
8599 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8600 -- which would essentially return a 'Y' or null to signify the corresponding
8601 -- XXX_contains_string contains user passed information or not.
8602
8603 PROCEDURE generate_check_contacts_bulk (
8604 p_rule_id NUMBER) IS
8605 FIRST BOOLEAN;
8606 BEGIN
8607 l('/************************************************');
8608 l(' This procedure checks if the input search condition ');
8609 l(' has contact criteria. ');
8610 l('************************************************/');
8611
8612 l('');
8613 l('FUNCTION check_contacts_bulk (');
8614 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list');
8615 l(')');
8616 l('RETURN VARCHAR2 IS');
8617 l(' x_primary boolean := FALSE;');
8618 l(' BEGIN');
8619 l(' FOR I IN 1..p_contact_list.COUNT LOOP');
8620 FIRST := TRUE;
8621 FOR PRIMATTRS IN (
8622 SELECT ATTRIBUTE_NAME
8623 FROM HZ_TRANS_ATTRIBUTES_VL a,
8624 HZ_MATCH_RULE_PRIMARY p
8625 WHERE p.match_rule_id = p_rule_id
8626 AND a.ENTITY_NAME = 'CONTACTS'
8627 AND p.attribute_id = a.attribute_id)
8628 LOOP
8629 IF FIRST THEN
8630 l(' IF p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
8631 FIRST := FALSE;
8632 ELSE
8633 l(' OR p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
8634 END IF;
8635 END LOOP;
8636 IF NOT FIRST THEN
8637 l(' THEN');
8638 l(' x_primary := TRUE;');
8639 l(' END IF;');
8640 l(' EXIT WHEN x_primary;');
8641 ELSE
8642 l(' NULL;');
8643 END IF;
8644 l(' END LOOP;');
8645
8646 l('');
8647
8648 l(' IF x_primary = TRUE THEN RETURN ''Y''; ELSE RETURN null; END IF; ');
8649 l('EXCEPTION');
8650 l(' WHEN OTHERS THEN');
8651 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8652 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_contacts_bulk'');');
8653 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8654 l(' FND_MSG_PUB.ADD;');
8655 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8656 l(' END check_contacts_bulk ;');
8657 l('');
8658
8659 END generate_check_contacts_bulk ;
8660
8661 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8662 -- which would essentially return a 'Y' or null to signify the corresponding
8663 -- XXX_contains_string contains user passed information or not.
8664
8665 PROCEDURE generate_check_cpts_bulk (
8666 p_rule_id NUMBER) IS
8667 FIRST BOOLEAN;
8668 BEGIN
8669 l('/************************************************');
8670 l(' This procedure checks if the input search condition ');
8671 l(' has contact criteria. ');
8672 l('************************************************/');
8673
8674 l('');
8675 l('FUNCTION check_cpts_bulk (');
8676 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list');
8677 l(')');
8678 l('RETURN VARCHAR2 IS');
8679 l(' x_primary boolean := FALSE;');
8680 l(' BEGIN');
8681 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
8682 FIRST := TRUE;
8683 FOR PRIMATTRS IN (
8684 SELECT ATTRIBUTE_NAME
8685 FROM HZ_TRANS_ATTRIBUTES_VL a,
8686 HZ_MATCH_RULE_PRIMARY p
8687 WHERE p.match_rule_id = p_rule_id
8688 AND a.ENTITY_NAME = 'CONTACT_POINTS'
8689 AND p.attribute_id = a.attribute_id)
8690 LOOP
8691 IF FIRST THEN
8692 l(' IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
8693 FIRST := FALSE;
8694 ELSE
8695 l(' OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
8696 END IF;
8697 END LOOP;
8698 IF NOT FIRST THEN
8699 l(' THEN');
8700 l(' x_primary := TRUE;');
8701 l(' END IF;');
8702 l(' EXIT WHEN x_primary;');
8703 ELSE
8704 l(' NULL;');
8705 END IF;
8706 l(' END LOOP;');
8707
8708 l('');
8709
8710 l(' IF x_primary = TRUE THEN RETURN ''Y''; ELSE RETURN null; END IF; ');
8711 l('EXCEPTION');
8712 l(' WHEN OTHERS THEN');
8713 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8714 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_cpts_bulk'');');
8715 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8716 l(' FND_MSG_PUB.ADD;');
8717 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8718 l(' END check_cpts_bulk ;');
8719 l('');
8720
8721 END generate_check_cpts_bulk ;
8722
8723
8724
8725 /**
8726 * VJN introduced Private procedure to generate the body of the Public Match Rule API
8727 * for a bulk match rule. This will generate Package Body for the following kind of Match rules:
8728 * HZ_IMP_MATCH_RULE_<p_rule_id>
8729 *
8730 *
8731 **/
8732 PROCEDURE gen_pkg_body_bulk (
8733 p_pkg_name IN VARCHAR2,
8734 p_rule_id IN NUMBER
8735 ) IS
8736
8737 -- Local Variables
8738 FIRST boolean;
8739 FIRST1 boolean;
8740 UPSTMT boolean;
8741 l_match_str VARCHAR2(255);
8742 l_attrib_cnt NUMBER;
8743 l_party_filter VARCHAR2(1) := null;
8744 l_ps_filter VARCHAR2(1) := null;
8745 l_contact_filter VARCHAR2(1) := null;
8746 l_cpt_filter VARCHAR2(1) := null;
8747 l_num_primary NUMBER;
8748 l_num_secondary NUMBER;
8749 l_ent VARCHAR2(30);
8750 l_max_score NUMBER;
8751 l_match_threshold NUMBER;
8752
8753 l_purpose VARCHAR2(30);
8754 TYPE NumberList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
8755 TYPE CharList IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
8756 attribList NumberList;
8757
8758 l_party_filter_str VARCHAR2(2000);
8759 l_dyn_party_filter_str VARCHAR2(2000);
8760 l_p_select_list VARCHAR2(1000);
8761 l_p_param_list VARCHAR2(1000);
8762 l_p_into_list VARCHAR2(1000);
8763 l_ps_select_list VARCHAR2(1000);
8764 l_ps_param_list VARCHAR2(1000);
8765 l_ps_into_list VARCHAR2(1000);
8766 l_c_select_list VARCHAR2(1000);
8767 l_c_param_list VARCHAR2(1000);
8768 l_c_into_list VARCHAR2(1000);
8769 l_cpt_select_list VARCHAR2(1000);
8770 l_cpt_param_list VARCHAR2(1000);
8771 l_cpt_into_list VARCHAR2(1000);
8772 cnt NUMBER;
8773 l_party_filt_bind CharList;
8774 l_cpt_type VARCHAR2(255);
8775 l_trans VARCHAR2(4000);
8776 l_auto_merge_score NUMBER;
8777 tmp VARCHAR2(30);
8778 attrib_count NUMBER;
8779 BEGIN
8780
8781 -- Query match thresholds and search type
8782 SELECT RULE_PURPOSE, MATCH_SCORE, nvl(AUTO_MERGE_SCORE,99999), decode(MATCH_ALL_FLAG,'Y',' AND ',' OR ')
8783 INTO l_purpose, l_match_threshold, l_auto_merge_score, l_match_str
8784 FROM HZ_MATCH_RULES_VL
8785 WHERE match_rule_id = p_rule_id;
8786
8787 SELECT nvl(SUM(SCORE),1) INTO l_max_score
8788 FROM HZ_MATCH_RULE_SECONDARY
8789 WHERE match_rule_id = p_rule_id;
8790
8791 l('CREATE or REPLACE PACKAGE BODY ' || p_pkg_name || ' AS');
8792 l('/*=======================================================================+');
8793 l(' | Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|');
8794 l(' | All rights reserved. |');
8795 l(' +=======================================================================+');
8796 l(' | NAME');
8797 l(' | ' || p_pkg_name);
8798 l(' |');
8799 l(' | DESCRIPTION');
8800 l(' |');
8801 l(' | Compiled by the HZ Match Rule Compiler');
8802 l(' | -- Do Not Modify --');
8803 l(' |');
8804 l(' | PUBLIC PROCEDURES');
8805 l(' | find_parties');
8806 l(' | get_matching_party_sites');
8807 l(' | get_matching_contacts');
8808 l(' | get_matching_contact_points');
8809 l(' | get_score_details');
8810 l(' | ');
8811 l(' | HISTORY');
8812 l(' | '||TO_CHAR(SYSDATE,'DD-MON-YYYY') || ' Generated by HZ Match Rule Compiler');
8813 l(' |');
8814 l(' *=======================================================================*/');
8815 l('');
8816 l('-- ==========================================================================================');
8817 l('-- ============MATCH RULE COMPILER GENERATED CODE FOR BULK MATCH RULES ======================');
8818 l('-- ==========================================================================================');
8819 l('');
8820 l(' TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;');
8821 l(' call_order vlisttype;');
8822 l(' call_max_score HZ_PARTY_SEARCH.IDList;');
8823 l(' call_type vlisttype;');
8824 l(' g_party_stage_rec HZ_PARTY_STAGE.party_stage_rec_type;');
8825 l(' g_party_site_stage_list HZ_PARTY_STAGE.party_site_stage_list;');
8826 l(' g_contact_stage_list HZ_PARTY_STAGE.contact_stage_list;');
8827 l(' g_contact_pt_stage_list HZ_PARTY_STAGE.contact_pt_stage_list;');
8828 l(' g_mappings HZ_PARTY_SEARCH.IDList;');
8829 l(' g_max_id NUMBER:=2000000000;');
8830 l('');
8831 l(' g_debug_count NUMBER := 0;');
8832 --l(' g_debug BOOLEAN := FALSE;');
8833 l(' g_score_until_thresh BOOLEAN:=false;');
8834 l(' ');
8835 l(' g_thres_score NUMBER:=1000;');
8836 --l(' PROCEDURE enable_debug;');
8837 --l(' PROCEDURE disable_debug;');
8838
8839 -- VJN introduced for bulk_match_rule
8840 generate_check_parties_bulk(p_rule_id);
8841 generate_check_partysites_bulk(p_rule_id);
8842 generate_check_contacts_bulk(p_rule_id);
8843 generate_check_cpts_bulk(p_rule_id);
8844
8845 /***********************************************************************
8846 * Private procedure to map IDs greater than the max allowed by PLSQL
8847 * Index-by tables.
8848 ************************************************************************/
8849 l(' FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS');
8850 l(' l_newidx NUMBER;');
8851 l(' BEGIN ');
8852 l(' IF in_id<g_max_id THEN ');
8853 l(' RETURN in_id;');
8854 l(' ELSE');
8855 l(' FOR I in 1..g_mappings.COUNT LOOP');
8856 l(' IF in_id = g_mappings(I) THEN');
8857 l(' RETURN (g_max_id+I);');
8858 l(' END IF;');
8859 l(' END LOOP;');
8860 l(' l_newidx := g_mappings.COUNT+1;');
8861 l(' g_mappings(l_newidx) := in_id;');
8862 l(' RETURN (g_max_id+l_newidx);');
8863 l(' END IF;');
8864 l(' END;');
8865
8866 l(' FUNCTION GET_PARTY_SCORE ');
8867 FIRST := TRUE;
8868 FOR TX IN (
8869 SELECT f.staged_attribute_column
8870 FROM hz_trans_functions_vl f, hz_secondary_trans st,
8871 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8872 WHERE sa.match_rule_id = p_rule_id
8873 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8874 AND st.function_id = f.function_id
8875 AND a.attribute_id = sa.attribute_id
8876 AND a.entity_name= 'PARTY'
8877 ORDER BY sa.attribute_id) LOOP
8878 IF FIRST THEN
8879 l(' (');
8880 l(' p_table_'||TX.staged_attribute_column||' VARCHAR2');
8881 FIRST := FALSE;
8882 ELSE
8883 l(' ,p_table_'||TX.staged_attribute_column||' VARCHAR2');
8884 END IF;
8885 END LOOP;
8886 IF FIRST THEN
8887 l(' RETURN NUMBER IS');
8888 ELSE
8889 l(' ) RETURN NUMBER IS');
8890 END IF;
8891 l(' total NUMBER := 0;');
8892 l(' BEGIN');
8893 d(fnd_log.level_procedure,'GET_PARTY_SCORE ');
8894 l(' IF g_score_until_thresh AND (total)>=g_thres_score THEN');
8895 l(' RETURN total;');
8896 l(' END IF;');
8897 FOR SECATTRS IN (
8898 SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id
8899 FROM HZ_TRANS_ATTRIBUTES_VL a,
8900 HZ_MATCH_RULE_SECONDARY s
8901 WHERE s.match_rule_id = p_rule_id
8902 AND s.attribute_id = a.attribute_id
8903 AND a.entity_name = 'PARTY') LOOP
8904 FIRST := TRUE;
8905 FOR SECTRANS IN (
8906 SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
8907 TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
8908 FROM HZ_SECONDARY_TRANS s,
8909 HZ_TRANS_FUNCTIONS_VL f
8910 WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
8911 AND s.FUNCTION_ID = f.FUNCTION_ID
8912 ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
8913 IF FIRST THEN
8914 FIRST := FALSE;
8915 IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
8916 l(' IF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8917 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
8918 ELSE
8919 l(' IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8920 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
8921 END IF;
8922 ELSE
8923 IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
8924 l(' ELSIF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8925 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
8926 ELSE
8927 l(' ELSIF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8928 ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
8929 END IF;
8930 END IF;
8931 l(' total := total+'||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
8932 l(' IF g_score_until_thresh AND (total)>=g_thres_score THEN ');
8933 l(' RETURN total;');
8934 l(' END IF;');
8935 END LOOP;
8936 l(' END IF;');
8937 END LOOP;
8938 l(' RETURN total;');
8939 l(' END;');
8940
8941 add_score_function('PARTY_SITES',p_rule_id);
8942 add_score_function('CONTACTS',p_rule_id);
8943 add_score_function('CONTACT_POINTS',p_rule_id);
8944 add_get_attrib_func(p_rule_id);
8945 add_insert_function('PARTY',p_rule_id);
8946 add_insert_function('PARTY_SITES',p_rule_id);
8947 add_insert_function('CONTACTS',p_rule_id);
8948 add_insert_function('CONTACT_POINTS',p_rule_id);
8949
8950 --- VJN Introduced for conditional Word Replacements
8951 --- Populate the global condition record before doing the mapping
8952 --- so that mapping takes into account conditional word replacements if any
8953 generate_ent_cond_pop_rec_proc('PARTY', p_rule_id);
8954 l('');
8955 generate_ent_cond_pop_rec_proc('PARTY_SITES', p_rule_id);
8956 l('');
8957 generate_ent_cond_pop_rec_proc('CONTACTS', p_rule_id);
8958 l('');
8959 generate_ent_cond_pop_rec_proc('CONTACT_POINTS', p_rule_id);
8960 l('');
8961
8962
8963 l(' PROCEDURE init_score_context (');
8964 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type:=');
8965 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
8966 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list:=');
8967 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
8968 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list:= ');
8969 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
8970 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list:=');
8971 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST');
8972 l(' ) IS');
8973 l(' l_dummy NUMBER;');
8974 l(' BEGIN');
8975 l(' -- Transform search criteria');
8976 l(' HZ_TRANS_PKG.clear_globals;');
8977 l(' MAP_PARTY_REC(FALSE,p_party_search_rec, l_dummy, g_party_stage_rec);');
8978 l(' MAP_PARTY_SITE_REC(FALSE,p_party_site_list, l_dummy, g_party_site_stage_list);');
8979 l(' MAP_CONTACT_REC(FALSE,p_contact_list, l_dummy, g_contact_stage_list);');
8980 l(' MAP_CONTACT_POINT_REC(FALSE,p_contact_point_list, l_dummy, g_contact_pt_stage_list);');
8981 l('');
8982 l(' END;');
8983
8984
8985 l(' FUNCTION init_search(');
8986 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type:=');
8987 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
8988 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list:=');
8989 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
8990 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list:= ');
8991 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
8992 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list:=');
8993 l(' HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,');
8994 l(' p_match_type IN VARCHAR2,');
8995 l(' x_party_max_score OUT NUMBER,');
8996 l(' x_ps_max_score OUT NUMBER,');
8997 l(' x_contact_max_score OUT NUMBER,');
8998 l(' x_cpt_max_score OUT NUMBER');
8999 l(' ) RETURN NUMBER IS ');
9000 l(' l_entered_max_score NUMBER:=0;');
9001 l(' l_ps_entered_max_score NUMBER:=0;');
9002 l(' l_ct_entered_max_score NUMBER:=0;');
9003 l(' l_cpt_entered_max_score NUMBER:=0;');
9004 l(' vlist vlisttype;');
9005 l(' maxscore HZ_PARTY_SEARCH.IDList;');
9006 l(' l_name VARCHAR2(200);');
9007 l(' l_idx NUMBER; ');
9008 l(' l_num NUMBER; ');
9009 l(' total NUMBER; ');
9010 l(' threshold NUMBER; ');
9011 l(' BEGIN');
9012 l(' IF NOT check_prim_cond (p_party_search_rec,');
9013 l(' p_party_site_list,');
9014 l(' p_contact_list,');
9015 l(' p_contact_point_list) THEN');
9016 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_PRIMARY_COND'');');
9017 l(' FND_MSG_PUB.ADD;');
9018 l(' RAISE FND_API.G_EXC_ERROR;');
9019 l(' END IF;');
9020 IF l_max_score=1 THEN
9021 l(' HZ_DQM_SEARCH_UTIL.set_no_score;');
9022 ELSE
9023 l(' HZ_DQM_SEARCH_UTIL.set_score;');
9024 END IF;
9025 l(' g_mappings.DELETE;');
9026 l(' g_party_site_stage_list.DELETE;');
9027 l(' g_contact_stage_list.DELETE;');
9028 l(' g_contact_pt_stage_list.DELETE;');
9029 l(' call_order.DELETE;');
9030 l(' call_max_score.DELETE;');
9031 l(' HZ_DQM_SEARCH_UTIL.new_search;');
9032 l(' HZ_TRANS_PKG.set_party_type(p_party_search_rec.PARTY_TYPE);');
9033 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
9034 l('');
9035 l(' -- Transform search criteria');
9036 l(' MAP_PARTY_REC(TRUE,p_party_search_rec, l_entered_max_score, g_party_stage_rec);');
9037 l(' MAP_PARTY_SITE_REC(TRUE,p_party_site_list, l_ps_entered_max_score, g_party_site_stage_list);');
9038 l(' MAP_CONTACT_REC(TRUE,p_contact_list, l_ct_entered_max_score, g_contact_stage_list);');
9039 l(' MAP_CONTACT_POINT_REC(TRUE,p_contact_point_list, l_cpt_entered_max_score, g_contact_pt_stage_list);');
9040 l('');
9041 l(' ');
9042 l(' l_idx := l_entered_max_score+1;');
9043 l(' vlist (l_idx) := ''PARTY'';');
9044 l(' maxscore (l_idx) := l_entered_max_score;');
9045
9046 l(' l_idx := l_ps_entered_max_score+1;');
9047 l(' WHILE vlist.EXISTS(l_idx) LOOP');
9048 l(' l_idx := l_idx+1;');
9049 l(' END LOOP;');
9053 l(' l_idx := l_ct_entered_max_score+1;');
9050 l(' vlist (l_idx) := ''PARTY_SITE'';');
9051 l(' maxscore (l_idx) := l_ps_entered_max_score;');
9052 l('');
9054 l(' WHILE vlist.EXISTS(l_idx) LOOP');
9055 l(' l_idx := l_idx+1;');
9056 l(' END LOOP;');
9057 l(' vlist (l_idx) := ''CONTACT'';');
9058 l(' maxscore (l_idx) := l_ct_entered_max_score;');
9059 l('');
9060 l(' l_idx := l_cpt_entered_max_score+1;');
9061 l(' WHILE vlist.EXISTS(l_idx) LOOP');
9062 l(' l_idx := l_idx+1;');
9063 l(' END LOOP;');
9064 l(' vlist (l_idx) := ''CONTACT_POINT'';');
9065 l(' maxscore (l_idx) := l_cpt_entered_max_score;');
9066 l('');
9067 l(' l_num := 1;');
9068 l(' l_idx := vlist.LAST;');
9069 l(' WHILE l_idx IS NOT NULL LOOP');
9070 l(' call_order(l_num) := vlist(l_idx);');
9071 l(' call_max_score(l_num) := maxscore(l_idx);');
9072 l(' l_idx := vlist.PRIOR(l_idx);');
9073 l(' l_num := l_num+1;');
9074 l(' END LOOP; ');
9075 l(' call_order(5):=''NONE'';');
9076 l(' IF p_match_type = '' OR '' THEN');
9077 IF l_purpose = 'S' THEN
9078 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));');
9079 ELSE
9080 l(' threshold := '||l_match_threshold||';');
9081 END IF;
9082
9083 l(' l_idx := vlist.FIRST;');
9084 l(' total := 0;');
9085 l(' l_num := 4;');
9086 l(' WHILE l_idx IS NOT NULL LOOP');
9087 l(' total := total+maxscore(l_idx);');
9088 l(' IF total<threshold THEN');
9089 l(' call_type(l_num) := ''AND'';');
9090 l(' ELSE');
9091 l(' call_type(l_num) := ''OR'';');
9092 l(' END IF;');
9093 l(' l_idx := vlist.NEXT(l_idx);');
9094 l(' l_num := l_num-1;');
9095 l(' END LOOP;');
9096 l(' ELSE');
9097 l(' call_type(1) := ''OR'';');
9098 l(' call_type(2) := ''AND'';');
9099 l(' call_type(3) := ''AND'';');
9100 l(' call_type(4) := ''AND'';');
9101 l(' END IF;');
9102 l(' x_party_max_score := l_entered_max_score;');
9103 l(' x_ps_max_score := l_ps_entered_max_score;');
9104 l(' x_contact_max_score := l_ct_entered_max_score;');
9105 l(' x_cpt_max_score := l_cpt_entered_max_score;');
9106
9107 l(' RETURN (l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score);');
9108 l(' END;');
9109
9110
9111
9112 FIRST := TRUE;
9113 g_party_or_query := null;
9114 g_party_and_query := null;
9115 cnt := cnt+1;
9116 FOR PRIMATTRS IN (
9117 SELECT a.ATTRIBUTE_ID, PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME, nvl(SCORE,0) SCORE
9118 FROM HZ_TRANS_ATTRIBUTES_VL a,
9119 HZ_MATCH_RULE_PRIMARY p,
9120 HZ_MATCH_RULE_SECONDARY s
9121 WHERE p.match_rule_id = p_rule_id
9122 AND s.match_rule_id (+) = p_rule_id
9123 AND s.attribute_id (+) = a.attribute_id
9124 AND p.attribute_id = a.attribute_id
9125 AND a.ENTITY_NAME = 'PARTY'
9126 AND nvl(FILTER_FLAG,'N') <> 'Y'
9127 ORDER BY SCORE) LOOP
9128 FIRST1 := TRUE;
9129 FOR PRIMTRANS IN (
9130 SELECT f.STAGED_ATTRIBUTE_COLUMN, f.TRANSFORMATION_NAME, nvl(f.PRIMARY_FLAG,'N') PRIMARY_FLAG
9131 FROM HZ_TRANS_FUNCTIONS_VL f,
9132 HZ_PRIMARY_TRANS pt
9133 WHERE pt.PRIMARY_ATTRIBUTE_ID = PRIMATTRS.PRIMARY_ATTRIBUTE_ID
9134 AND pt.FUNCTION_ID = f.FUNCTION_ID)
9135 LOOP
9136 IF FIRST1 THEN
9137 l_trans := '(g_party_stage_rec.'||
9138 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
9139 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
9140 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
9141 FIRST1 := FALSE;
9142 ELSE
9143 l_trans := l_trans||' OR (g_party_stage_rec.'||
9144 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
9145 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
9146 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
9147 END IF;
9148 IF PRIMTRANS.PRIMARY_FLAG = 'Y' THEN
9149 tmp := '''A'||PRIMATTRS.ATTRIBUTE_ID||'''';
9150 ELSE
9151 tmp := 'NULL';
9152 END IF;
9153
9154 END LOOP;
9155
9156 l('');
9157
9158
9159
9160 END LOOP;
9161
9162 get_column_list(p_rule_id, 'PARTY',l_p_select_list,l_p_param_list, l_p_into_list);
9163 get_column_list(p_rule_id, 'PARTY_SITES',l_ps_select_list,l_ps_param_list, l_ps_into_list);
9164 get_column_list(p_rule_id, 'CONTACTS',l_c_select_list,l_c_param_list, l_c_into_list);
9165 get_column_list(p_rule_id, 'CONTACT_POINTS',l_cpt_select_list,l_cpt_param_list, l_cpt_into_list);
9166
9167 l_party_filter_str := NULL;
9168 l_dyn_party_filter_str := NULL;
9169 FIRST := TRUE;
9170 cnt := 1;
9171 for PRIMTRANS IN (
9172 SELECT f.STAGED_ATTRIBUTE_COLUMN
9173 FROM HZ_TRANS_FUNCTIONS_VL f,
9174 HZ_TRANS_ATTRIBUTES_VL a,
9175 HZ_MATCH_RULE_PRIMARY pattr,
9176 HZ_PRIMARY_TRANS pfunc
9177 WHERE pattr.MATCH_RULE_ID = p_rule_id
9178 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9179 AND a.ENTITY_NAME = 'PARTY'
9180 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
9181 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
9182 AND nvl(FILTER_FLAG,'N') = 'Y'
9183
9184 UNION
9185
9186 SELECT f.STAGED_ATTRIBUTE_COLUMN
9187 FROM HZ_TRANS_FUNCTIONS_VL f,
9188 HZ_TRANS_ATTRIBUTES_VL a
9189 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9190 AND a.entity_name = 'PARTY'
9191 AND a.attribute_name='PARTY_TYPE'
9192 AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
9193 AND nvl(f.active_flag,'Y')='Y'
9194 AND ROWNUM=1
9195 ) LOOP
9196
9197 IF FIRST THEN
9198 l_party_filter_str := '(g_party_stage_rec.'||
9199 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9200 ' IS NULL OR g_party_stage_rec.'||
9201 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' = p.' ||
9202 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9203 l_dyn_party_filter_str := '(:'||
9204 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9205 ' IS NULL OR :'||
9206 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' = p.' ||
9207 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9208 FIRST := FALSE;
9209 ELSE
9210 l_dyn_party_filter_str := l_dyn_party_filter_str || ' AND ' ||
9211 '(:'||
9212 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9213 ' IS NULL OR :'||
9214 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' = p.' ||
9215 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9216 l_party_filter_str := l_party_filter_str || ' AND ' ||
9217 '(g_party_stage_rec.'||
9218 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9219 ' IS NULL OR g_party_stage_rec.'||
9220 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' = p.' ||
9221 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9222 END IF;
9223 l_party_filt_bind(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
9224 cnt:=cnt+1;
9225 END LOOP;
9226
9227
9228
9229
9230 /*********************************************************************************
9231 * Match rule private procedures to open a cursor for performing B-tree index queries.
9232 * open_party_cursor - B-tree index query on HZ_STAGED_PARTIES
9233 * open_party_site_cursor - B-tree index query on HZ_STAGED_PARTY_SITES
9234 * open_contact_cursor - B-tree index query on HZ_STAGED_CONTACTS
9235 * open_contact_pt_cursor - B-tree index query on HZ_STAGED_CONTACT_POINTS
9236 *
9237 * Input:
9238 * p_dup_party_id : Called in the duplicate identification case, to filter off
9239 * the party for which we are trying find duplicates.
9240 * p_restrict_sql : restrict_sql criteria passed to match rule
9241 * p_contains_str : null or 'Y'
9242 * p_search_ctx_id : Only to called from find_party_details, for filtering against
9243 * party_ids returned by the party query
9244 * p_party_id : USed in the get_matching_party_sites, get_matching_contacts and
9245 * get_matching_cpts procedures, to only find records belonging to the specified
9246 * party_id
9247 *********************************************************************************/
9248
9249 -- VJN: Introduced the code generation of match rules based on rule purpose
9250 -- so that Expanded Duplicate Identification Match rules uses intermedia indexes
9251 -- where as the bulk duplicate identification match rules use the conventional
9252 -- B-tree indexes.
9253 l(' PROCEDURE open_party_cursor(');
9254 l(' p_dup_party_id NUMBER, ');
9255 l(' p_restrict_sql VARCHAR2, ');
9256 l(' p_contains_str VARCHAR2, ');
9257 l(' p_search_ctx_id NUMBER,');
9258 l(' p_match_str VARCHAR2,');
9259 l(' p_search_merged VARCHAR2,');
9260 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9261 l(' l_sqlstr VARCHAR2(4000);');
9262 l(' BEGIN');
9263 IF has_acquisition_attribs (p_rule_id, 'PARTY')
9264 THEN
9265 l(' IF p_contains_str IS NULL THEN');
9266 /**** To query based on party_id .. from the get_score_details flow ***/
9267 l(' OPEN x_cursor FOR ');
9268 l(' SELECT PARTY_ID '|| l_p_select_list);
9269 l(' FROM HZ_STAGED_PARTIES stage');
9270 l(' WHERE PARTY_ID = p_dup_party_id;');
9271
9272 /**** Static queries when restrict_sql is null OR if p_search_ctx_id IS NOT NULL *****/
9273 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9274
9275 /**** When search context ID is null .. Retrieve rows using B-tree indexes ****/
9276 l(' IF p_search_ctx_id IS NULL THEN');
9277 l(' OPEN x_cursor FOR ');
9278 l(' SELECT /*+ ORDERED */ stage.PARTY_ID '|| replace(l_p_select_list,'T','stage.T'));
9279 l(' FROM HZ_SRCH_PARTIES srch, HZ_STAGED_PARTIES stage');
9280 l(' WHERE');
9281
9282 generate_bulk_predicate(p_rule_id,'N',l_match_str,'PARTY');
9283
9284 IF l_party_filter_str IS NOT NULL THEN
9285 l(' AND ('||replace(l_party_filter_str,'p.','stage.')||')');
9286 END IF;
9287 l(' AND (nvl(p_search_merged,''N'')=''Y'' OR nvl(stage.status,''A'') in (''A''))');
9288 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9289
9290
9291 /**** When search context ID is not null .. Query using DQM_PARTIES_GT. Filter using
9292 B-tree index ****/
9293 l(' ELSE');
9294 l(' OPEN x_cursor FOR ');
9295 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTIES_U1) */ stage.PARTY_ID '|| replace(l_p_select_list,'T','stage.T'));
9296 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTIES stage, HZ_SRCH_PARTIES srch');
9297 l(' WHERE');
9298
9299 generate_bulk_predicate(p_rule_id,'N',l_match_str,'PARTY');
9300
9301 l(' AND d.SEARCH_CONTEXT_ID=p_search_ctx_id');
9302 l(' AND d.party_id = stage.party_id');
9303 IF l_party_filter_str IS NOT NULL THEN
9304 l(' AND ('||replace(l_party_filter_str,'p.','stage.')||')');
9305 END IF;
9306 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
9307 l(' AND (nvl(p_search_merged,''N'')=''Y'' OR nvl(stage.status,''A'') in (''A''));');
9308 l(' END IF;');
9309
9310 /**** When restrict_sql is not null *****/
9311 l(' ELSE');
9312
9313 /**** When search context ID is null .. Access using B-tree index ***/
9314 l(' IF p_search_ctx_id IS NULL THEN');
9315 l(' l_sqlstr := ''SELECT /*+ ORDERED */ stage.PARTY_ID '|| replace(l_p_select_list,'T','stage.T')||'''||');
9316 l(' '' FROM HZ_SRCH_PARTIES srch, HZ_STAGED_PARTIES stage''||');
9317 l(' '' WHERE''||');
9318
9319 generate_bulk_predicate(p_rule_id,'Y',l_match_str,'PARTY');
9320
9321 IF l_dyn_party_filter_str IS NOT NULL THEN
9322 l(' '' AND ('||replace(l_dyn_party_filter_str,'p.','stage.')||')''||');
9323 END IF;
9324 l(' '' AND (''||p_restrict_sql||'')'' ||');
9325 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9326 l(' IF p_search_merged IS NULL OR p_search_merged <> ''Y'' THEN');
9327 l(' l_sqlstr := l_sqlstr ||'' AND nvl(stage.status,''''A'''') in (''''A'''')'';');
9328 l(' END IF;');
9329 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9330 FOR I in 1..l_party_filt_bind.COUNT LOOP
9331 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9332 END LOOP;
9333 l(' ,p_dup_party_id, p_dup_party_id;');
9334 l(' END IF;');
9335 l(' END IF;');
9336 l(' exception');
9337 l(' when others then');
9338 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9339 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9340 l(' FND_MSG_PUB.ADD;');
9341 l(' RAISE FND_API.G_EXC_ERROR;');
9342 l(' else ');
9343 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9344 l(' end if;');
9345 ELSE
9346 l('NULL ;');
9347 END IF;
9348 l(' END;');
9349 l('');
9350
9351
9352 l(' PROCEDURE open_party_site_cursor(');
9353 l(' p_dup_party_id NUMBER, ');
9354 l(' p_party_id NUMBER, ');
9355 l(' p_restrict_sql VARCHAR2, ');
9356 l(' p_contains_str VARCHAR2, ');
9357 l(' p_search_ctx_id NUMBER, ');
9358 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9359 l(' l_sqlstr VARCHAR2(4000);');
9360 l(' BEGIN');
9361 IF has_acquisition_attribs (p_rule_id, 'PARTY_SITES')
9362 THEN
9363
9364 /**** For a single party_id scenario. Retrieve using party_id ****/
9365 l(' IF p_party_id IS NOT NULL THEN');
9366 l(' OPEN x_cursor FOR ');
9367 l(' SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'||
9368 replace(l_ps_select_list,'T','stage.T') );
9369 l(' FROM HZ_STAGED_PARTY_SITES stage,HZ_SRCH_PSITES srch');
9370 l('WHERE');
9371 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9372 IF l_party_filter_str IS NOT NULL THEN
9373 l(' AND EXISTS (');
9374 l(' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9375 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9376 l(' AND ('||l_party_filter_str||'))');
9377 END IF;
9378 l(' AND stage.party_id = p_party_id;');
9379 /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
9380 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9381
9382 -- VJN new hints introduced for performance
9383 IF l_party_filter_str IS NOT NULL THEN
9384 /**** When p_search_ctx_id IS NULL, retreive using B-tree index ***/
9385 l(' IF p_search_ctx_id IS NULL THEN');
9386 l(' OPEN x_cursor FOR ');
9387 l(' SELECT /*+ ORDERED USE_NL(srch stage p) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'||
9388 replace(l_ps_select_list,'T','stage.T'));
9389 l(' FROM HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage, HZ_STAGED_PARTIES p');
9390 l('WHERE');
9391 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9392 l(' AND p.PARTY_ID = stage.PARTY_ID');
9393 l(' AND ('||l_party_filter_str||')');
9394 ELSE
9395 /**** When p_search_ctx_id IS NULL, retreive using B-tree index ***/
9396 l(' IF p_search_ctx_id IS NULL THEN');
9397 l(' OPEN x_cursor FOR ');
9398 l(' SELECT /*+ USE_NL(srch stage) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'||
9399 replace(l_ps_select_list,'T','stage.T'));
9400 l(' FROM HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage');
9401 l('WHERE');
9402 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9403 END IF;
9404
9405
9406 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9407
9408 /***** Search_ctx_id is not null. Retreive using HZ_DQM_PARTIES_GT ****/
9409 l(' ELSE');
9410 l(' OPEN x_cursor FOR ');
9411 l(' SELECT stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'
9412 || replace(l_ps_select_list,'T','stage.T'));
9413 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage, HZ_SRCH_PSITES srch');
9414 l('WHERE');
9415 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9416 l(' AND d.search_context_id = p_search_ctx_id');
9417 l(' AND d.party_id = stage.party_id');
9418 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9419 l(' END IF;');
9420
9421 -- VJN new hints introduced for performance
9422 IF l_dyn_party_filter_str IS NOT NULL THEN
9423 /**** Restrict_sql is not null ****/
9424 l(' ELSE');
9425 l(' l_sqlstr := ''SELECT /*+ ORDERED USE_NL(srch stage p) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID ' ||
9426 replace(l_ps_select_list,'T','stage.T')||'''||');
9427 l(' '' FROM HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage, HZ_STAGED_PARTIES p''||');
9428 l(' '' WHERE'' ||');
9429 generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'PARTY_SITES');
9430 l(' '' AND p.party_id = stage.party_id '' || ');
9431 l(' '' AND ('||l_dyn_party_filter_str||')) '' || ');
9432 ELSE
9433 /**** Restrict_sql is not null ****/
9434 l(' ELSE');
9435 l(' l_sqlstr := ''SELECT /*+ USE_NL(srch stage) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID ' ||
9436 replace(l_ps_select_list,'T','stage.T')||'''||');
9437 l(' '' FROM HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage''||');
9438 l(' '' WHERE'' ||');
9439 generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'PARTY_SITES');
9440 END IF;
9441 l(' '' AND (''||p_restrict_sql||'')'' ||');
9442 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9443 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9444 FOR I in 1..l_party_filt_bind.COUNT LOOP
9445 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9446 END LOOP;
9447 l(' ,p_dup_party_id, p_dup_party_id;');
9448 l(' END IF;');
9449 l(' exception');
9450 l(' when others then');
9451 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9452 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9453 l(' FND_MSG_PUB.ADD;');
9454 l(' RAISE FND_API.G_EXC_ERROR;');
9455 l(' else ');
9456 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9457 l(' end if;');
9458 ELSE
9459 l('NULL ;');
9460 END IF;
9461 l(' END;');
9462
9463 l('');
9464 l(' PROCEDURE open_contact_cursor(');
9465 l(' p_dup_party_id NUMBER, ');
9466 l(' p_party_id NUMBER, ');
9467 l(' p_restrict_sql VARCHAR2, ');
9468 l(' p_contains_str VARCHAR2, ');
9469 l(' p_search_ctx_id NUMBER, ');
9470 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9471 l(' l_sqlstr VARCHAR2(4000);');
9472 l(' BEGIN');
9473 IF has_acquisition_attribs (p_rule_id, 'CONTACTS')
9474 THEN
9475 /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
9476 l(' IF p_party_id IS NOT NULL THEN');
9477 l(' OPEN x_cursor FOR ');
9478 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ stage.ORG_CONTACT_ID, stage.PARTY_ID'||
9479 replace(l_c_select_list,'T' , 'stage.T') );
9480 l(' FROM HZ_STAGED_CONTACTS stage, HZ_SRCH_CONTACTS srch');
9481 l(' WHERE');
9482 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACTS');
9483 IF l_party_filter_str IS NOT NULL THEN
9484 l(' AND EXISTS (');
9485 l(' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9486 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9487 l(' AND ('||l_party_filter_str||'))');
9488 END IF;
9489 l(' AND stage.party_id = p_party_id;');
9490 /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
9491 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9492
9493 /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
9494 l(' IF p_search_ctx_id IS NULL THEN');
9495 l(' OPEN x_cursor FOR ');
9496 l(' SELECT /*+ USE_NL(srch stage) */ stage.ORG_CONTACT_ID, stage.PARTY_ID'|| replace(l_c_select_list,'T','stage.T') );
9497 l(' FROM HZ_SRCH_CONTACTS srch, HZ_STAGED_CONTACTS stage');
9498 l(' WHERE');
9499 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACTS');
9500 IF l_party_filter_str IS NOT NULL THEN
9501 l(' AND EXISTS (');
9502 l(' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9503 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9504 l(' AND ('||l_party_filter_str||'))');
9505 END IF;
9506 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9507
9508 /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
9509 l(' ELSE');
9510 l(' OPEN x_cursor FOR ');
9511 l(' SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ stage.ORG_CONTACT_ID, stage.PARTY_ID'
9512 || replace(l_c_select_list,'T' , 'stage.T') );
9513 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage, HZ_SRCH_CONTACTS srch');
9514 l(' WHERE');
9515 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACTS');
9516 l(' AND d.search_context_id = p_search_ctx_id');
9517 l(' AND d.party_id = stage.party_id');
9518 /*
9519 IF l_party_filter_str IS NOT NULL THEN
9520 l(' AND EXISTS (');
9521 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
9522 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9523 l(' AND ('||l_party_filter_str||'))');
9524 END IF;
9525 */
9526 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9527 l(' END IF;');
9528
9529 /**** Restrict_sql is not null. Retrieve using intermedia ****/
9530 l(' ELSE');
9531 l(' l_sqlstr := ''SELECT /*+ USE_NL(srch stage) */ stage.ORG_CONTACT_ID, stage.PARTY_ID '||
9532 replace(l_c_select_list,'T','stage.T')||'''||');
9533 l(' '' FROM HZ_SRCH_CONTACTS srch, HZ_STAGED_CONTACTS stage''||');
9534 l(' '' WHERE ''||');
9535 generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'CONTACTS');
9536 IF l_dyn_party_filter_str IS NOT NULL THEN
9537 l(' '' AND EXISTS (''||');
9538 l(' '' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p '' || ');
9539 l(' '' WHERE p.party_id = stage.party_id '' || ');
9540 l(' '' AND ('||l_dyn_party_filter_str||')) '' || ');
9541 END IF;
9542 l(' '' AND (''||p_restrict_sql||'')'' ||');
9543 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9544 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9545 FOR I in 1..l_party_filt_bind.COUNT LOOP
9546 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9547 END LOOP;
9548 l(' ,p_dup_party_id, p_dup_party_id;');
9549 l(' END IF;');
9550 l(' exception');
9551 l(' when others then');
9552 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9553 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9554 l(' FND_MSG_PUB.ADD;');
9555 l(' RAISE FND_API.G_EXC_ERROR;');
9556 l(' else ');
9557 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9558 l(' end if;');
9559 ELSE
9560 l('NULL ;');
9561 END IF;
9562 l(' END;');
9563 l('');
9564
9565
9566 l(' PROCEDURE open_contact_pt_cursor(');
9567 l(' p_dup_party_id NUMBER, ');
9568 l(' p_party_id NUMBER, ');
9569 l(' p_restrict_sql VARCHAR2, ');
9570 l(' p_contains_str VARCHAR2, ');
9571 l(' p_search_ctx_id NUMBER, ');
9572 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9573 l(' l_sqlstr VARCHAR2(4000);');
9574 l(' BEGIN');
9575
9576 IF has_acquisition_attribs (p_rule_id, 'CONTACT_POINTS')
9577 THEN
9578
9579 /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
9580 l(' IF p_party_id IS NOT NULL THEN');
9581 l(' OPEN x_cursor FOR ');
9582 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ stage.CONTACT_POINT_ID, stage.PARTY_ID,'
9583 || 'stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9584 || replace(l_cpt_select_list,'T','stage.T') );
9585 l(' FROM HZ_STAGED_CONTACT_POINTS stage, HZ_SRCH_CPTS srch');
9586 l(' WHERE');
9587 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACT_POINTS');
9588 IF l_party_filter_str IS NOT NULL THEN
9589
9590 l(' AND EXISTS (');
9591 l(' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9592 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9593 l(' AND ('||l_party_filter_str||'))');
9594 END IF;
9595 l(' AND stage.party_id = p_party_id;');
9596 /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
9597 l(' ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9598
9599 /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
9600 l(' IF p_search_ctx_id IS NULL THEN');
9601 l(' OPEN x_cursor FOR ');
9602 l(' SELECT /*+ USE_NL(srch stage) */ stage.CONTACT_POINT_ID, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9603 || replace(l_cpt_select_list,'T','stage.T') );
9604 l(' FROM HZ_SRCH_CPTS srch, HZ_STAGED_CONTACT_POINTS stage');
9605 l(' WHERE');
9606 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACT_POINTS');
9607 IF l_party_filter_str IS NOT NULL THEN
9608 l(' AND EXISTS (');
9609 l(' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9610 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9611 l(' AND ('||l_party_filter_str||'))');
9612 END IF;
9613 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9614
9615 /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
9616 l(' ELSE');
9617 l(' OPEN x_cursor FOR ');
9618 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 '
9619 || replace(l_cpt_select_list,'T','stage.T') );
9620 l(' FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage, HZ_SRCH_CPTS srch');
9621 l(' WHERE');
9622 generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACT_POINTS');
9623 l(' AND d.search_context_id = p_search_ctx_id');
9624 l(' AND d.party_id = stage.party_id');
9625 /*
9626 IF l_party_filter_str IS NOT NULL THEN
9627 l(' AND EXISTS (');
9628 l(' SELECT 1 FROM HZ_STAGED_PARTIES p');
9629 l(' WHERE p.PARTY_ID = stage.PARTY_ID');
9630 l(' AND ('||l_party_filter_str||'))');
9631 END IF;
9632 */
9633 l(' AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9634 l(' END IF;');
9635
9636 /**** Restrict_sql is not null. Retrieve using intermedia ****/
9637 l(' ELSE');
9638 l(' l_sqlstr := ''SELECT /*+ USE_NL(srch stage) */ stage.CONTACT_POINT_ID, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9639 || replace(l_cpt_select_list,'T','stage.T')||'''||');
9640 l(' '' FROM HZ_SRCH_CPTS srch, HZ_STAGED_CONTACT_POINTS stage''||');
9641 l(' '' WHERE''||');
9642 generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'CONTACT_POINTS');
9643 IF l_dyn_party_filter_str IS NOT NULL THEN
9644 l(' '' AND EXISTS (''||');
9645 l(' '' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p '' || ');
9646 l(' '' WHERE p.party_id = stage.party_id '' || ');
9647 l(' '' AND ('||l_dyn_party_filter_str||')) '' || ');
9648 END IF;
9649 l(' '' AND (''||p_restrict_sql||'')'' ||');
9650 l(' '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9651 l(' OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9652 FOR I in 1..l_party_filt_bind.COUNT LOOP
9653 l(' ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9654 END LOOP;
9655 l(' ,p_dup_party_id, p_dup_party_id;');
9656 l(' END IF;');
9657 l(' exception');
9658 l(' when others then');
9659 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9660 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9661 l(' FND_MSG_PUB.ADD;');
9662 l(' RAISE FND_API.G_EXC_ERROR;');
9663 l(' else ');
9664 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9665 l(' end if;');
9666 ELSE
9667 l('NULL ;');
9668 END IF;
9669 l(' END;');
9670
9671 l('');
9672 l(' FUNCTION get_new_score_rec (');
9673 l(' p_init_total_score NUMBER,');
9674 l(' p_init_party_score NUMBER,');
9675 l(' p_init_party_site_score NUMBER,');
9676 l(' p_init_contact_score NUMBER,');
9677 l(' p_init_contact_point_score NUMBER, ');
9678 l(' p_party_id NUMBER, ');
9679 l(' p_party_site_id NUMBER, ');
9680 l(' p_org_contact_id NUMBER, ');
9681 l(' p_contact_point_id NUMBER) ');
9682 l(' RETURN HZ_PARTY_SEARCH.score_rec IS');
9683 l(' l_score_rec HZ_PARTY_SEARCH.score_rec;');
9684 l(' BEGIN');
9685 l(' l_score_rec.TOTAL_SCORE := p_init_total_score;');
9686 l(' l_score_rec.PARTY_SCORE := p_init_party_score;');
9687 l(' l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;');
9688 l(' l_score_rec.CONTACT_SCORE := p_init_contact_score;');
9689 l(' l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;');
9690 l(' l_score_rec.PARTY_ID := p_party_id;');
9691 l(' l_score_rec.PARTY_SITE_ID := p_party_site_id;');
9692 l(' l_score_rec.ORG_CONTACT_ID := p_org_contact_id;');
9693 l(' l_score_rec.CONTACT_POINT_ID := p_contact_point_id;');
9694 l(' RETURN l_score_rec;');
9695 l(' END;');
9696
9697 l('');
9698 l(' /**********************************************************');
9699 l(' This procedure finds the set of parties that match the search');
9700 l(' criteria and returns a scored set of parties');
9701 l('');
9702 l(' The steps in executing the search are as follows');
9703 l(' 1. Initialization and error checks');
9704 l(' 2. Setup of intermedia query strings for Acquisition query');
9705 l(' 3. Execution of Acquisition query');
9706 l(' 4. Execution of Secondary queries to score results');
9707 l(' 5. Setup of data temporary table to return search results');
9708 l(' **********************************************************/');
9709 l('');
9710 l('-------------------------------------------------------------------------------------');
9711 l('-------------------- BULK MATCH RULE ::: find_parties ------------------------------');
9712 l('-------------------------------------------------------------------------------------');
9713 l('PROCEDURE find_parties (');
9714 l(' p_rule_id IN NUMBER,');
9715 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
9716 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
9717 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
9718 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
9719 l(' p_restrict_sql IN VARCHAR2,');
9720 l(' p_match_type IN VARCHAR2,');
9721 l(' p_search_merged IN VARCHAR2,');
9722 l(' p_dup_party_id IN NUMBER,');
9723 l(' p_dup_set_id IN NUMBER,');
9724 l(' p_dup_batch_id IN NUMBER,');
9725 l(' p_ins_details IN VARCHAR2,');
9726 l(' x_search_ctx_id OUT NUMBER,');
9727 l(' x_num_matches OUT NUMBER');
9728 l(') IS');
9729 l('');
9730 l(' -- Strings to hold the generated Intermedia query strings');
9731 l(' l_party_contains_str VARCHAR2(32000); ');
9732 l(' l_party_site_contains_str VARCHAR2(32000);');
9733 l(' l_contact_contains_str VARCHAR2(32000);');
9734 l(' l_contact_pt_contains_str VARCHAR2(32000);');
9735 l(' l_denorm_str VARCHAR2(32000);');
9736 l(' l_ps_denorm_str VARCHAR2(32000);');
9737 l(' l_ct_denorm_str VARCHAR2(32000);');
9738 l(' l_cpt_denorm_str VARCHAR2(32000);');
9739
9740 l('');
9741 l(' -- Other local variables');
9742 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
9743 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
9744 l(' -- For Score calculation');
9745 l(' l_max_score NUMBER;');
9746 l(' l_match_idx NUMBER;');
9747 l(' l_entered_max_score NUMBER;');
9748 l(' FIRST BOOLEAN;');
9749 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
9750 l('');
9751 FOR TX IN (
9752 SELECT distinct f.staged_attribute_column
9753 FROM hz_trans_functions_vl f, hz_secondary_trans st,
9754 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
9755 WHERE sa.match_rule_id = p_rule_id
9756 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
9757 AND st.function_id = f.function_id
9758 AND a.attribute_id = sa.attribute_id) LOOP
9759 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
9760 END LOOP;
9761 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
9762 l(' H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
9763 l(' H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
9764 l('');
9765 l(' l_score NUMBER;');
9766 l(' l_idx NUMBER;');
9767 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
9768 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
9769 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
9770 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
9771 l(' l_party_id NUMBER;');
9772 l(' l_ps_party_id NUMBER;');
9773 l(' l_ct_party_id NUMBER;');
9774 l(' l_cpt_party_id NUMBER;');
9775 l(' l_cpt_ps_id NUMBER;');
9776 l(' l_cpt_contact_id NUMBER;');
9777 l(' l_party_site_id NUMBER;');
9778 l(' l_org_contact_id NUMBER;');
9779 l(' l_contact_pt_id NUMBER;');
9780 l(' l_ps_contact_id NUMBER;');
9781 l(' l_party_max_score NUMBER;');
9782 l(' l_ps_max_score NUMBER;');
9783 l(' l_contact_max_score NUMBER;');
9784 l(' l_cpt_max_score NUMBER;');
9785 l(' l_denorm_max_score NUMBER;');
9786 l(' l_non_denorm_max_score NUMBER;');
9787 l('');
9788 l(' defpt NUMBER :=0;');
9789 l(' defps NUMBER :=0;');
9790 l(' defct NUMBER :=0;');
9791 l(' defcpt NUMBER :=0;');
9792 l(' l_index NUMBER;');
9793 l(' l_max_thresh NUMBER;');
9794 l(' l_tmp NUMBER;');
9795 l(' l_merge_flag VARCHAR2(1);');
9796 l(' l_num_eval NUMBER:=0;');
9797 l('');
9798 l(' --Fix for bug 4417124 ');
9799 l(' l_use_contact_addr_info BOOLEAN := TRUE;');
9800 l(' l_use_contact_cpt_info BOOLEAN := TRUE;');
9801 l(' l_use_contact_addr_flag VARCHAR2(1) := ''Y'';');
9802 l(' l_use_contact_cpt_flag VARCHAR2(1) := ''Y'';');
9803 l('');
9804 l(' h_ps_id HZ_PARTY_SEARCH.IDList;');
9805 l(' h_ps_party_id HZ_PARTY_SEARCH.IDList;');
9806 l(' h_ps_score HZ_PARTY_SEARCH.IDList;');
9807 l(' h_ct_id HZ_PARTY_SEARCH.IDList;');
9808 l(' h_ct_party_id HZ_PARTY_SEARCH.IDList;');
9809 l(' h_ct_score HZ_PARTY_SEARCH.IDList;');
9810 l(' h_cpt_id HZ_PARTY_SEARCH.IDList;');
9811 l(' h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
9812 l(' h_cpt_score HZ_PARTY_SEARCH.IDList;');
9813 l(' detcnt NUMBER := 1;');
9814 l('');
9815 l(' ');
9816 l(' /********************* Find Parties private procedures *******/');
9817
9818 l(' PROCEDURE push_eval IS');
9819 l(' BEGIN');
9820 l(' H_PARTY_ID.DELETE;');
9821 l(' H_PARTY_ID_LIST.DELETE;');
9822 l(' H_SCORES.DELETE; ');
9823 l(' g_mappings.DELETE;');
9824 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
9825 l(' call_order(5) := call_order(1);');
9826 l(' call_type(5) := ''AND'';');
9827 l(' call_max_score(5) := call_max_score(1);');
9828 l(' call_type(2) := ''OR'';');
9829 l(' END;');
9830
9831 l('');
9832 l(' /** Private procedure to acquire and score at party level ***/');
9833 l(' PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
9834 l(' l_party_id_idx NUMBER:=1;');
9835 l(' l_ctx_id NUMBER;');
9836 l(' BEGIN');
9837 l(' SAVEPOINT eval_start;');
9838 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
9839 l(' l_ctx_id := l_search_ctx_id;');
9840 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
9841 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9842 l(' l_search_ctx_id,H_PARTY_ID(I));');
9843 l(' H_PARTY_ID.DELETE;');
9844 l(' H_PARTY_ID_LIST.DELETE;');
9845 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
9846 l(' l_ctx_id := l_search_ctx_id;');
9847 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
9848 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9849 l(' l_search_ctx_id,H_PARTY_ID(I));');
9850 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
9851 l(' ELSE');
9852 l(' l_ctx_id := NULL;');
9853 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
9854 l(' END IF;');
9855 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);');
9856 l(' LOOP ');
9857 l(' FETCH l_party_cur INTO');
9858 l(' l_party_id '||l_p_into_list||';');
9859 l(' EXIT WHEN l_party_cur%NOTFOUND;');
9860 l(' l_index := map_id(l_party_id);');
9861 l(' l_score := GET_PARTY_SCORE('||l_p_param_list||');');
9862
9863 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
9864 l(' H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
9865 l(' ELSE');
9866 l(' H_SCORES(l_index).TOTAL_SCORE := ');
9867 l(' H_SCORES(l_index).TOTAL_SCORE+l_score;');
9868 l(' H_SCORES(l_index).PARTY_SCORE := l_score;');
9869 l(' END IF;');
9870 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
9871 l(' H_PARTY_ID_LIST(l_index) := 1;');
9872 l(' H_PARTY_ID(l_party_id_idx) := l_party_id;');
9873 l(' l_party_id_idx:= l_party_id_idx+1;');
9874 l(' END IF;');
9875 l(' IF l_party_id_idx>l_max_thresh THEN');
9876 l(' CLOSE l_party_cur;'); --Bug No: 3872745
9877 l(' IF p_index>1 THEN');
9878 ldbg_s('In eval party level number of matches found exceeded threshold');
9879 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
9880 l(' FND_MSG_PUB.ADD;');
9881 l(' RAISE FND_API.G_EXC_ERROR;');
9882 l(' ELSE');
9883 l(' push_eval;');
9884 l(' RETURN;');
9885 l(' END IF;');
9886 l(' END IF;');
9887 ds(fnd_log.level_statement);
9888 dc(fnd_log.level_statement,'Party Level Matches');
9889 dc(fnd_log.level_statement,'l_party_id','l_party_id');
9890 dc(fnd_log.level_statement,'l_score','l_score');
9891 de;
9892 l(' END LOOP;');
9893 l(' CLOSE l_party_cur;');
9894 l(' ROLLBACK to eval_start;');
9895 l(' END;');
9896 l('');
9897 l(' /** Private procedure to acquire and score at party site level ***/');
9898 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');
9899 l(' l_party_id_idx NUMBER:=1;');
9900 l(' l_ctx_id NUMBER;');
9901 --l(' h_ps_id HZ_PARTY_SEARCH.IDList;');
9902 --l(' h_ps_party_id HZ_PARTY_SEARCH.IDList;');
9903 --l(' h_ps_score HZ_PARTY_SEARCH.IDList;');
9904 --l(' detcnt NUMBER := 1;');
9905 l(' BEGIN');
9909 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
9906 l(' SAVEPOINT eval_start;');
9907 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
9908 l(' l_ctx_id := l_search_ctx_id;');
9910 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9911 l(' l_search_ctx_id,H_PARTY_ID(I));');
9912 l(' H_PARTY_ID.DELETE;');
9913 l(' H_PARTY_ID_LIST.DELETE;');
9914 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
9915 l(' l_ctx_id := l_search_ctx_id;');
9916 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
9917 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9918 l(' l_search_ctx_id,H_PARTY_ID(I));');
9919 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
9920 l(' ELSE');
9921 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
9922 l(' l_ctx_id := NULL;');
9923 l(' END IF;');
9924 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);');
9925 l(' LOOP ');
9926 l(' FETCH l_party_site_cur INTO');
9927 l(' l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
9928 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
9929 l(' IF l_use_contact_addr_info OR l_ps_contact_id IS NOT NULL THEN');
9930 l(' l_index := map_id(l_ps_party_id);');
9931 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
9932
9933 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
9934 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);');
9935 l(' ELSE');
9936 l(' IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
9937 l(' H_SCORES(l_index).TOTAL_SCORE := ');
9938 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
9939 l(' H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
9940 l(' END IF;');
9941 l(' END IF;');
9942 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
9943 l(' H_PARTY_ID_LIST(l_index) := 1;');
9944 l(' H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
9945 l(' l_party_id_idx:= l_party_id_idx+1;');
9946 l(' END IF;');
9947 l(' IF l_party_id_idx>l_max_thresh THEN');
9948 l(' CLOSE l_party_site_cur;'); --Bug No: 3872745
9949 l(' IF p_index>1 THEN');
9950 ldbg_s('In eval party site level number of matches found exceeded threshold');
9951 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
9952 l(' FND_MSG_PUB.ADD;');
9953 l(' RAISE FND_API.G_EXC_ERROR;');
9954 l(' ELSE');
9955 l(' push_eval;');
9956 l(' RETURN;');
9957 l(' END IF;');
9958 l(' END IF;');
9959 l(' IF p_ins_details = ''Y'' THEN');
9960 l(' h_ps_id(detcnt) := l_party_site_id;');
9961 l(' h_ps_party_id(detcnt) := l_ps_party_id;');
9962 l(' h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
9963 l(' detcnt := detcnt +1;');
9964 l(' END IF;');
9965 ds(fnd_log.level_statement);
9966 dc(fnd_log.level_statement,'Party Site Level Matches');
9967 dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
9968 dc(fnd_log.level_statement,'l_ps_party_id','l_ps_party_id');
9969 dc(fnd_log.level_statement,'l_score','l_score');
9970 de;
9971 l(' END IF;');
9972 l(' END LOOP;');
9973 l(' CLOSE l_party_site_cur;');
9974 l(' ROLLBACK to eval_start;');
9975 -- l(' IF p_ins_details = ''Y'' THEN');
9976 -- l(' FORALL I in 1..h_ps_id.COUNT ');
9977 -- l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
9978 -- l(' l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
9979 -- l(' END IF;');
9980 l(' END;');
9981 l('');
9982 l(' /** Private procedure to acquire and score at party site level ***/');
9983 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');
9984 l(' l_party_id_idx NUMBER:=1;');
9985 l(' l_ctx_id NUMBER;');
9986 -- l(' h_ct_id HZ_PARTY_SEARCH.IDList;');
9987 -- l(' h_ct_party_id HZ_PARTY_SEARCH.IDList;');
9988 -- l(' h_ct_score HZ_PARTY_SEARCH.IDList;');
9989 -- l(' detcnt NUMBER := 1;');
9990 l(' BEGIN');
9991 l(' SAVEPOINT eval_start;');
9992 l(' IF l_match_str = '' AND '' AND p_call_type=''AND'' THEN');
9993 l(' l_ctx_id := l_search_ctx_id;');
9994 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
9995 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9996 l(' l_search_ctx_id,H_PARTY_ID(I));');
9997 l(' H_PARTY_ID.DELETE;');
9998 l(' H_PARTY_ID_LIST.DELETE;');
9999 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10000 l(' l_ctx_id := l_search_ctx_id;');
10001 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10002 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10003 l(' l_search_ctx_id,H_PARTY_ID(I));');
10004 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10005 l(' ELSE');
10006 l(' l_ctx_id := NULL;');
10007 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10008 l(' END IF;');
10009 l(' open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id, l_contact_cur);');
10010 l(' LOOP ');
10011 l(' FETCH l_contact_cur INTO');
10012 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
10013 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
10014 l(' l_index := map_id(l_ct_party_id);');
10015 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
10016
10017 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
10018 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);');
10019 l(' ELSE');
10020 l(' IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
10021 l(' H_SCORES(l_index).TOTAL_SCORE := ');
10022 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
10023 l(' H_SCORES(l_index).CONTACT_SCORE := l_score;');
10024 l(' END IF;');
10025 l(' END IF;');
10026 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
10027 l(' H_PARTY_ID_LIST(l_index) := 1;');
10028 l(' H_PARTY_ID(l_party_id_idx) := l_ct_party_id;');
10029 l(' l_party_id_idx:= l_party_id_idx+1;');
10030 l(' END IF;');
10031 l(' IF l_party_id_idx>l_max_thresh THEN');
10032 l(' CLOSE l_contact_cur;'); --Bug No: 3872745
10033 l(' IF p_index>1 THEN');
10034 ldbg_s('In eval contact level number of matches found exceeded threshold');
10035 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10036 l(' FND_MSG_PUB.ADD;');
10037 l(' RAISE FND_API.G_EXC_ERROR;');
10038 l(' ELSE');
10039 l(' push_eval;');
10040 l(' RETURN;');
10041 l(' END IF;');
10042 l(' END IF;');
10043 l(' IF p_ins_details = ''Y'' THEN');
10044 l(' h_ct_id(detcnt) := l_org_contact_id;');
10045 l(' h_ct_party_id(detcnt) := l_ct_party_id;');
10046 l(' h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
10047 l(' detcnt := detcnt +1;');
10048 l(' END IF;');
10049 ds(fnd_log.level_statement);
10050 dc(fnd_log.level_statement,'Contact Level Matches');
10051 dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
10052 dc(fnd_log.level_statement,'l_ct_party_id','l_ct_party_id');
10053 dc(fnd_log.level_statement,'l_score','l_score');
10054 de;
10055 l(' END LOOP;');
10056 l(' CLOSE l_contact_cur;');
10057 l(' ROLLBACK to eval_start;');
10058 -- l(' IF p_ins_details = ''Y'' THEN');
10059 -- l(' FORALL I in 1..h_ct_id.COUNT ');
10060 -- l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
10061 -- l(' l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
10062 -- l(' END IF;');
10063 l(' END;');
10064 l('');
10065 l(' /** Private procedure to acquire and score at contact point level ***/');
10066 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');
10067 l(' l_party_id_idx NUMBER:=1;');
10068 l(' l_ctx_id NUMBER;');
10069 -- l(' h_cpt_id HZ_PARTY_SEARCH.IDList;');
10070 -- l(' h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
10071 -- l(' h_cpt_score HZ_PARTY_SEARCH.IDList;');
10072 -- l(' detcnt NUMBER := 1;');
10073 l(' BEGIN');
10074 l(' SAVEPOINT eval_start;');
10075 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10076 l(' l_ctx_id := l_search_ctx_id;');
10077 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10078 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10079 l(' l_search_ctx_id,H_PARTY_ID(I));');
10080 l(' H_PARTY_ID.DELETE;');
10081 l(' H_PARTY_ID_LIST.DELETE;');
10082 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10083 l(' l_ctx_id := l_search_ctx_id;');
10084 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10085 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10086 l(' l_search_ctx_id,H_PARTY_ID(I));');
10087 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10088 l(' ELSE');
10089 l(' l_ctx_id := NULL;');
10090 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10091 l(' END IF;');
10092 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);');
10093 l(' LOOP ');
10094 l(' FETCH l_contact_pt_cur INTO');
10095 l(' l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
10096 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
10097 l(' IF l_use_contact_cpt_info OR l_ps_contact_id IS NOT NULL THEN');
10098 l(' l_index := map_id(l_cpt_party_id);');
10099 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
10100
10101 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
10102 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);');
10103 l(' ELSE');
10104 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
10105 l(' H_SCORES(l_index).TOTAL_SCORE := ');
10106 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
10107 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
10108 l(' END IF;');
10109 l(' END IF;');
10110 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
10111 l(' H_PARTY_ID_LIST(l_index) := 1;');
10112 l(' H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;');
10113 l(' l_party_id_idx:= l_party_id_idx+1;');
10114 l(' END IF;');
10115 l(' IF l_party_id_idx>l_max_thresh THEN');
10116 l(' CLOSE l_contact_pt_cur;'); --Bug No: 3872745
10117 l(' IF p_index>1 THEN');
10118 ldbg_s('In eval contact point level number of matches found exceeded threshold');
10119 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10120 l(' FND_MSG_PUB.ADD;');
10121 l(' RAISE FND_API.G_EXC_ERROR;');
10122 l(' ELSE');
10123 l(' push_eval;');
10124 l(' RETURN;');
10125 l(' END IF;');
10126 l(' END IF;');
10127 l(' IF p_ins_details = ''Y'' THEN');
10128 l(' h_cpt_id(detcnt) := l_contact_pt_id;');
10129 l(' h_cpt_party_id(detcnt) := l_cpt_party_id;');
10130 l(' h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
10131 l(' detcnt := detcnt +1;');
10132 l(' END IF;');
10133 ds(fnd_log.level_statement);
10134 dc(fnd_log.level_statement,'Contact pt Level Matches');
10135 dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
10136 dc(fnd_log.level_statement,'l_cpt_party_id','l_cpt_party_id');
10137 dc(fnd_log.level_statement,'l_score','l_score');
10138 de;
10139 l(' END IF;');
10140 l(' END LOOP;');
10141 l(' CLOSE l_contact_pt_cur;');
10142 l(' ROLLBACK to eval_start;');
10143 -- l(' IF p_ins_details = ''Y'' THEN');
10144 -- l(' FORALL I in 1..h_cpt_id.COUNT ');
10145 -- l(' INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
10146 -- l(' l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
10147 -- l(' END IF;');
10148 l(' END;');
10149 l('');
10150 l(' /** Private procedure to call the eval procedure at each entity in the correct order ***/');
10151 l(' PROCEDURE do_eval (p_index NUMBER) IS');
10152 l(' l_ctx_id NUMBER;');
10153 l(' l_threshold NUMBER;'); --Bug No: 4407425
10154 l(' other_criteria_exists BOOLEAN; '); --Bug No: 4407425
10155 l(' BEGIN');
10156 --Start of Bug No: 4407425
10157 l(' IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
10158 l(' l_threshold := '|| l_match_threshold ||'; ');
10159 l(' other_criteria_exists := TRUE ;');
10160 l(' IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
10161 l(' other_criteria_exists := FALSE; ');
10162 l(' END IF ; ');
10163 l(' IF( (l_match_str = '' AND '' AND other_criteria_exists) OR ( call_max_score(p_index) < l_threshold) )THEN');
10164 l(' RETURN; ');
10165 l(' ELSE');
10166 ldbg_s('In do eval number of matches found exceeded threshold');
10167 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10168 l(' FND_MSG_PUB.ADD;');
10169 l(' RAISE FND_API.G_EXC_ERROR;');
10170 l(' END IF; ');
10171 l(' END IF;');
10172 --End of Bug No: 4407425
10173 /*l(' IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
10174 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10175 l(' FND_MSG_PUB.ADD;');
10176 l(' RAISE FND_API.G_EXC_ERROR;');
10177 l(' END IF;');
10178 */
10179 l(' IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
10180 l(' eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
10181 l(' ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
10182 l(' eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10183 l(' ELSIF call_order(p_index) = ''CONTACT'' AND l_contact_contains_str IS NOT NULL THEN');
10184 l(' eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10185 l(' ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
10186 l(' eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10187 l(' END IF;');
10188 l(' END;');
10189 l(' /************ End of find_parties private procedures **********/ ');
10190 l('');
10191 l(' BEGIN');
10192 l('');
10193
10194
10195 d(fnd_log.level_procedure,'find_parties(+)');
10196 ds(fnd_log.level_statement);
10197 dc(fnd_log.level_statement,'Input Parameters:');
10198 dc(fnd_log.level_statement,'p_match_type','p_match_type');
10199 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
10200 dc(fnd_log.level_statement,'p_dup_set_id','p_dup_set_id');
10201 dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
10202 dc(fnd_log.level_statement,'p_dup_party_id','p_dup_party_id');
10203 de;
10204
10205 l(' -- ************************************');
10206 l(' -- STEP 1. Initialization and error checks');
10207 l('');
10208
10209 l(' l_match_str := ''' || l_match_str || ''';');
10210 l(' IF p_match_type = ''AND'' THEN');
10211 l(' l_match_str := '' AND '';');
10212 l(' ELSIF p_match_type = ''OR'' THEN');
10213 l(' l_match_str := '' OR '';');
10214 l(' END IF;');
10215 l(' SAVEPOINT find_parties;');
10216 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);');
10217 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
10218 l('');
10219 IF l_purpose = 'D' THEN
10220 l('');
10221 l(' IF l_entered_max_score < '||l_match_threshold||' THEN');
10222 l(' x_num_matches:=0;');
10223 l(' x_search_ctx_id:=0;');
10224 l(' RETURN;');
10225 l(' END IF;');
10226 l('');
10227 END IF;
10228 l('');
10229 l(' --Fix for bug 4417124 ');
10230 l('');
10231 l(' SELECT use_contact_addr_flag, use_contact_cpt_flag ');
10232 l(' INTO l_use_contact_addr_flag, l_use_contact_cpt_flag ');
10233 l(' FROM hz_match_rules_b ');
10234 l(' WHERE match_rule_id = '||p_rule_id||'; ');
10235 l('');
10239 l('');
10236 l(' IF p_dup_batch_id IS NOT NULL AND NVL(l_use_contact_addr_flag, ''Y'') = ''N'' THEN');
10237 l(' l_use_contact_addr_info := FALSE; ');
10238 l(' END IF; ');
10240 l(' IF p_dup_batch_id IS NOT NULL AND NVL(l_use_contact_cpt_flag, ''Y'') = ''N'' THEN');
10241 l(' l_use_contact_cpt_info := FALSE; ');
10242 l(' END IF; ');
10243 l('');
10244 l(' --End fix for bug 4417124');
10245 l('');
10246 l(' l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
10247 l(' IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
10248 l(' g_score_until_thresh := true;');
10249 l(' ELSE');
10250 l(' g_score_until_thresh := false;');
10251 l(' END IF;');
10252
10253 l(' l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
10254 l(' l_contact_contains_str := check_contacts_bulk (p_contact_list);');
10255 l(' l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
10256 /*
10257 l(' l_denorm_max_score:=0;');
10258 l(' l_non_denorm_max_score:=0;');
10259 l(' IF l_ps_denorm_str IS NOT NULL THEN');
10260 l(' l_denorm_max_score := l_denorm_max_score+l_ps_max_score;');
10261 l(' l_denorm_str := l_ps_denorm_str;');
10262 l(' ELSE');
10263 l(' l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;');
10264 l(' END IF;');
10265
10266 l(' IF l_ct_denorm_str IS NOT NULL THEN');
10267 l(' l_denorm_max_score := l_denorm_max_score+l_contact_max_score;');
10268 l(' IF l_denorm_str IS NOT NULL THEN');
10269 l(' l_denorm_str := l_denorm_str || '' OR '' ||l_ct_denorm_str;');
10270 l(' ELSE');
10271 l(' l_denorm_str := l_ct_denorm_str;');
10272 l(' END IF;');
10273 l(' ELSE');
10274 l(' l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;');
10275 l(' END IF;');
10276
10277 l(' IF l_cpt_denorm_str IS NOT NULL THEN');
10278 l(' l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;');
10279 l(' IF l_denorm_str IS NOT NULL THEN');
10280 l(' l_denorm_str := l_denorm_str || '' OR '' ||l_cpt_denorm_str;');
10281 l(' ELSE');
10282 l(' l_denorm_str := l_cpt_denorm_str;');
10283 l(' END IF;');
10284 l(' ELSE');
10285 l(' l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;');
10286 l(' END IF;');
10287 */
10288 l(' l_party_contains_str := check_parties_bulk (p_party_search_rec) ;');
10289 l(' init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
10290 l('');
10291 l(' -- Setup Search Context ID');
10292 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
10293 l(' x_search_ctx_id := l_search_ctx_id;');
10294 l('');
10295
10296 l(' IF l_party_contains_str IS NULL THEN');
10297 l(' defpt := 1;');
10298 l(' END IF;');
10299 l(' IF l_party_site_contains_str IS NULL THEN');
10300 l(' defps := 1;');
10301 l(' END IF;');
10302 l(' IF l_contact_contains_str IS NULL THEN');
10303 l(' defct := 1;');
10304 l(' END IF;');
10305 l(' IF l_contact_pt_contains_str IS NULL THEN');
10306 l(' defcpt := 1;');
10307 l(' END IF;');
10308 l('');
10309
10310 ds(fnd_log.level_statement);
10311 dc(fnd_log.level_statement,'l_match_str','l_match_str');
10312 dc(fnd_log.level_statement,'l_party_contains_str','l_party_contains_str');
10313 dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
10314 dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
10315 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
10316 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
10317 de;
10318
10319 IF l_max_score=1 THEN
10320 l(' FOR I in 1..3 LOOP');
10321 l(' IF (call_order(I) = ''PARTY'' AND l_party_contains_str IS NULL)');
10322 l(' OR (call_order(I) = ''PARTY_SITE'' AND l_party_site_contains_str IS NULL)');
10323 l(' OR (call_order(I) = ''CONTACT'' AND l_contact_contains_str IS NULL)');
10324 l(' OR (call_order(I) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NULL) THEN');
10325 l(' IF call_type(I)=''OR'' THEN');
10326 l(' call_type(I+1):=''OR'';');
10327 l(' END IF;');
10328 l(' END IF;');
10329 l(' END LOOP;');
10330 END IF;
10331
10332 /**** Call all 4 evaluation procedures ***********/
10333 l(' FOR I in 1..5 LOOP');
10334 l(' do_eval(I);');
10335 l(' END LOOP;');
10336 l('ROLLBACK to find_parties;');
10337 IF l_purpose = 'S' THEN
10338 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
10339 ELSE
10340 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||l_match_threshold);
10341 END IF;
10342
10343 l(' x_num_matches := 0;');
10344 l(' l_num_eval := 0;');
10345 l(' IF l_match_str = '' OR '' THEN');
10346 l(' l_party_id := H_SCORES.FIRST;');
10347 l(' ELSE');
10348 l(' l_party_id := H_PARTY_ID_LIST.FIRST;');
10349 l(' END IF;');
10350
10351 l(' WHILE l_party_id IS NOT NULL LOOP');
10352 l(' l_num_eval:= l_num_eval+1;');
10353 ds(fnd_log.level_statement);
10354 dc(fnd_log.level_statement,'Match Party ID','H_SCORES(l_party_id).PARTY_ID');
10355 IF l_purpose = 'S' THEN
10356 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
10357 ELSE
10358 dc(fnd_log.level_statement,'Score','H_SCORES(l_party_id).TOTAL_SCORE');
10359 END IF;
10360 de;
10361 IF l_purpose = ('S') THEN
10365 l(' x_num_matches := x_num_matches+1;');
10362 l(' IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
10363 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
10364 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));');
10366
10367 ELSIF l_purpose = ('W') THEN
10368
10369
10370 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
10371 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
10372 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/'||l_max_score||')*100));');
10373 l(' x_num_matches := x_num_matches+1;');
10374
10375
10376 ELSE
10377 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
10378 l(' IF p_dup_set_id IS NULL THEN');
10379 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
10380 l(' VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);');
10381 l(' x_num_matches := x_num_matches+1;');
10382 l(' ELSE');
10383 l(' BEGIN');
10384 l(' SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES'); --Bug No: 4244529
10385 l(' WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID');
10386 l(' AND DUP_SET_BATCH_ID = p_dup_batch_id '); --Bug No: 4244529
10387 l(' AND ROWNUM=1;');
10388 l(' EXCEPTION ');
10389 l(' WHEN NO_DATA_FOUND THEN');
10390 l(' IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_auto_merge_score||' THEN');
10391 l(' l_merge_flag := ''Y'';');
10392 l(' ELSE');
10393 l(' l_merge_flag := ''N'';');
10394 l(' END IF;');
10395 l(' INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
10396 l(' MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
10397 l(' LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
10398 l(' VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,');
10399 l(' H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,');
10400 l(' hz_utility_pub.created_by,hz_utility_pub.creation_date,');
10401 l(' hz_utility_pub.last_update_login,');
10402 l(' hz_utility_pub.last_update_date,');
10403 l(' hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
10404 l(' x_num_matches := x_num_matches+1;');
10405 l(' END;');
10406 l(' END IF;');
10407 END IF;
10408 l(' END IF;');
10409 l(' IF l_match_str = '' OR '' THEN');
10410 l(' l_party_id:=H_SCORES.NEXT(l_party_id);');
10411 l(' ELSE');
10412 l(' l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
10413 l(' END IF;');
10414 l(' END LOOP;');
10415 l('');
10416 l('----------INSERT INTO HZ_MATCHED_PARTY_SITES -----');
10417 l(' IF p_ins_details = ''Y'' THEN');
10418 l(' FORALL I in 1..h_ps_id.COUNT ');
10419 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
10420 l(' l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
10421 l(' END IF;');
10422 l('----------INSERT INTO HZ_MATCHED_CONTACTS-----');
10423 l(' IF p_ins_details = ''Y'' THEN');
10424 l(' FORALL I in 1..h_ct_id.COUNT ');
10425 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
10426 l(' l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
10427 l(' END IF;');
10428 l('----------INSERT INTO HZ_MATCHED_CPTS-----');
10429 l(' IF p_ins_details = ''Y'' THEN');
10430 l(' FORALL I in 1..h_cpt_id.COUNT ');
10431 l(' INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
10432 l(' l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
10433 l(' END IF;');
10434 l('');
10435 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
10436 d(fnd_log.level_procedure,'find_parties(-)');
10437
10438
10439 l('EXCEPTION');
10440 l(' WHEN FND_API.G_EXC_ERROR THEN');
10441 l(' ROLLBACK to find_parties;');
10442 l(' RAISE FND_API.G_EXC_ERROR;');
10443 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
10444 l(' ROLLBACK to find_parties;');
10445 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
10446 l(' WHEN OTHERS THEN');
10447 l(' ROLLBACK to find_parties;');
10448 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
10449 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_parties'');');
10450 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
10451 l(' FND_MSG_PUB.ADD;');
10452 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
10453 l('END find_parties;');
10454 l('');
10455
10456 l('-------------------------------------------------------------------------------------');
10457 l('-------------------- BULK MATCH RULE ::: find_persons ------------------------------');
10458 l('-------------------------------------------------------------------------------------');
10459
10460 l('PROCEDURE find_persons (');
10461 l(' p_rule_id IN NUMBER,');
10462 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
10463 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
10464 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
10468 l(' p_search_merged IN VARCHAR2,');
10465 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
10466 l(' p_restrict_sql IN VARCHAR2,');
10467 l(' p_match_type IN VARCHAR2,');
10469 l(' p_ins_details IN VARCHAR2,');
10470 l(' x_search_ctx_id OUT NUMBER,');
10471 l(' x_num_matches OUT NUMBER');
10472 l(') IS');
10473 l('');
10474 IF l_purpose <> 'D' THEN
10475 l(' -- Strings to hold the generated Intermedia query strings');
10476 l(' l_party_contains_str VARCHAR2(32000); ');
10477 l(' l_party_site_contains_str VARCHAR2(32000);');
10478 l(' l_contact_contains_str VARCHAR2(32000);');
10479 l(' l_contact_pt_contains_str VARCHAR2(32000);');
10480 l(' l_denorm_str VARCHAR2(32000);');
10481 l(' l_ps_denorm_str VARCHAR2(32000);');
10482 l(' l_ct_denorm_str VARCHAR2(32000);');
10483 l(' l_cpt_denorm_str VARCHAR2(32000);');
10484
10485 l('');
10486 l(' -- Other local variables');
10487 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
10488 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
10489 l(' -- For Score calculation');
10490 l(' l_max_score NUMBER;');
10491 l(' l_match_idx NUMBER;');
10492 l(' l_entered_max_score NUMBER;');
10493 l(' FIRST BOOLEAN;');
10494 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
10495 l('');
10496 FOR TX IN (
10497 SELECT distinct f.staged_attribute_column
10498 FROM hz_trans_functions_vl f, hz_secondary_trans st,
10499 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
10500 WHERE sa.match_rule_id = p_rule_id
10501 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
10502 AND st.function_id = f.function_id
10503 AND a.attribute_id = sa.attribute_id) LOOP
10504 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
10505 END LOOP;
10506 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
10507 l(' H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
10508 l(' H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
10509 l('');
10510 l(' l_score NUMBER;');
10511 l(' l_idx NUMBER;');
10512 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
10513 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
10514 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
10515 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
10516 l(' l_party_id NUMBER;');
10517 l(' l_ps_party_id NUMBER;');
10518 l(' l_ct_party_id NUMBER;');
10519 l(' l_cpt_party_id NUMBER;');
10520 l(' l_cpt_ps_id NUMBER;');
10521 l(' l_cpt_contact_id NUMBER;');
10522 l(' l_party_site_id NUMBER;');
10523 l(' l_org_contact_id NUMBER;');
10524 l(' l_contact_pt_id NUMBER;');
10525 l(' l_ps_contact_id NUMBER;');
10526 l(' l_party_max_score NUMBER;');
10527 l(' l_ps_max_score NUMBER;');
10528 l(' l_contact_max_score NUMBER;');
10529 l(' l_cpt_max_score NUMBER;');
10530 l(' l_denorm_max_score NUMBER;');
10531 l(' l_non_denorm_max_score NUMBER;');
10532 l('');
10533 l(' defpt NUMBER :=0;');
10534 l(' defps NUMBER :=0;');
10535 l(' defct NUMBER :=0;');
10536 l(' defcpt NUMBER :=0;');
10537 l(' l_index NUMBER;');
10538 l(' l_max_thresh NUMBER;');
10539 l(' l_tmp NUMBER;');
10540 l(' l_merge_flag VARCHAR2(1);');
10541 l(' l_num_eval NUMBER:=0;');
10542 l('');
10543 l(' h_ps_id HZ_PARTY_SEARCH.IDList;');
10544 l(' h_ps_party_id HZ_PARTY_SEARCH.IDList;');
10545 l(' h_ps_score HZ_PARTY_SEARCH.IDList;');
10546 l(' h_ct_id HZ_PARTY_SEARCH.IDList;');
10547 l(' h_ct_party_id HZ_PARTY_SEARCH.IDList;');
10548 l(' h_ct_score HZ_PARTY_SEARCH.IDList;');
10549 l(' h_cpt_id HZ_PARTY_SEARCH.IDList;');
10550 l(' h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
10551 l(' h_cpt_score HZ_PARTY_SEARCH.IDList;');
10552 l(' detcnt NUMBER := 1;');
10553 l(' l_person_id NUMBER;');
10554
10555 l(' ');
10556 l(' /********************* Find Parties private procedures *******/');
10557 FOR TX IN (
10558 SELECT a.attribute_name,
10559 f.PROCEDURE_NAME,
10560 f.STAGED_ATTRIBUTE_COLUMN
10561 FROM HZ_TRANS_FUNCTIONS_VL f,
10562 HZ_TRANS_ATTRIBUTES_VL a
10563 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10564 AND a.entity_name = 'PARTY'
10565 AND a.attribute_name='PARTY_TYPE'
10566 AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
10567 AND nvl(f.active_flag,'Y')='Y'
10568 AND ROWNUM=1
10569 ) LOOP
10570 l(' PROCEDURE set_person_party_type IS');
10571 l(' BEGIN');
10572 l(' g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||':= ');
10573 l(' HZ_TRANS_PKG.EXACT(');
10574 l(' ''PERSON''');
10575 l(' ,null,''PARTY_TYPE''');
10576 l(' ,''PARTY'');');
10577 l(' END;');
10578 l(' ');
10579 l(' PROCEDURE unset_person_party_type IS');
10580 l(' BEGIN');
10581 l(' g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||' := '''';');
10582 l(' END;');
10583 END LOOP;
10584 l(' ');
10585 l(' FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) ');
10586 l(' RETURN NUMBER IS');
10587 l(' l_party_type VARCHAR2(255);');
10588 l(' l_person_id NUMBER(15);');
10589 l(' BEGIN');
10590 l(' SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;');
10591 l(' IF l_party_type = ''PERSON'' THEN');
10592 l(' RETURN p_party_id;');
10593 l(' ELSIF p_contact_id IS NULL THEN');
10594 l(' RETURN NULL;');
10595 l(' ELSE');
10596 l(' BEGIN ');
10597 l(' SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p');
10601 l(' AND p.party_id = r.subject_id ');
10598 l(' WHERE oc.org_contact_id = p_contact_id');
10599 l(' AND r.relationship_id = oc.party_relationship_id ');
10600 l(' AND r.object_id = p_party_id');
10602 l(' AND p.party_type = ''PERSON''');
10603 l(' AND ROWNUM=1;');
10604 l(' ');
10605 l(' RETURN l_person_id;');
10606 l(' EXCEPTION');
10607 l(' WHEN NO_DATA_FOUND THEN');
10608 l(' RETURN NULL;');
10609 l(' END; ');
10610 l(' END IF;');
10611 l(' END; ');
10612 l('');
10613 l(' PROCEDURE push_eval IS');
10614 l(' BEGIN');
10615 l(' H_PARTY_ID.DELETE;');
10616 l(' H_PARTY_ID_LIST.DELETE;');
10617 l(' H_SCORES.DELETE; ');
10618 l(' g_mappings.DELETE;');
10619 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
10620 l(' call_order(5) := call_order(1);');
10621 l(' call_type(5) := ''AND'';');
10622 l(' call_max_score(5) := call_max_score(1);');
10623 l(' call_type(2) := ''OR'';');
10624 l(' END;');
10625 l('');
10626 l(' /** Private procedure to acquire and score at party level ***/');
10627 l(' PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
10628 l(' l_party_id_idx NUMBER:=1;');
10629 l(' l_ctx_id NUMBER;');
10630 l(' BEGIN');
10631 l(' SAVEPOINT eval_start;');
10632 l(' set_person_party_type;');
10633 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10634 l(' l_ctx_id := l_search_ctx_id;');
10635 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10636 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10637 l(' l_search_ctx_id,H_PARTY_ID(I));');
10638 l(' H_PARTY_ID.DELETE;');
10639 l(' H_PARTY_ID_LIST.DELETE;');
10640 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10641 l(' l_ctx_id := l_search_ctx_id;');
10642 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10643 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10644 l(' l_search_ctx_id,H_PARTY_ID(I));');
10645 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10646 l(' ELSE');
10647 l(' l_ctx_id := NULL;');
10648 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10649 l(' END IF;');
10650 l(' open_party_cursor(null, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,null,l_party_cur);');
10651 l(' LOOP ');
10652 l(' FETCH l_party_cur INTO');
10653 l(' l_party_id '||l_p_into_list||';');
10654 l(' EXIT WHEN l_party_cur%NOTFOUND;');
10655 l(' l_index := map_id(l_party_id);');
10656 l(' l_score := GET_PARTY_SCORE('||l_p_param_list||');');
10657
10658 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
10659 l(' H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
10660 l(' ELSE');
10661 l(' H_SCORES(l_index).TOTAL_SCORE := ');
10662 l(' H_SCORES(l_index).TOTAL_SCORE+l_score;');
10663 l(' H_SCORES(l_index).PARTY_SCORE := l_score;');
10664 l(' END IF;');
10665 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
10666 l(' H_PARTY_ID_LIST(l_index) := 1;');
10667 l(' H_PARTY_ID(l_party_id_idx) := l_party_id;');
10668 l(' l_party_id_idx:= l_party_id_idx+1;');
10669 l(' END IF;');
10670 l(' IF l_party_id_idx>l_max_thresh THEN');
10671 l(' CLOSE l_party_cur;'); --Bug No: 3872745
10672 l(' IF p_index>1 THEN');
10673 ldbg_s('In eval party level number of matches found exceeded threshold');
10674 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10675 l(' FND_MSG_PUB.ADD;');
10676 l(' RAISE FND_API.G_EXC_ERROR;');
10677 l(' ELSE');
10678 l(' push_eval;');
10679 l(' RETURN;');
10680 l(' END IF;');
10681 l(' END IF;');
10682 ds(fnd_log.level_statement);
10683 dc(fnd_log.level_statement,'Party Level Matches');
10684 dc(fnd_log.level_statement,'l_party_id','l_party_id');
10685 dc(fnd_log.level_statement,'l_score','l_score');
10686 de;
10687 l(' END LOOP;');
10688 l(' CLOSE l_party_cur;');
10689 l(' ROLLBACK to eval_start;');
10690 l(' END;');
10691 l(' PROCEDURE open_person_contact_cursor(');
10692 l(' p_contains_str VARCHAR2, ');
10693 l(' p_search_ctx_id NUMBER, ');
10694 l(' x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
10695 l(' BEGIN');
10696 l(' OPEN x_cursor FOR ');
10697 l(' SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
10698 l(' FROM HZ_STAGED_CONTACTS stage');
10699 l(' WHERE contains( concat_col, p_contains_str)>0');
10700 l(' AND ORG_CONTACT_ID in (');
10701 l(' SELECT /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ ');
10702 l(' org_contact_id');
10703 l(' from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc');
10704 l(' where d.party_id = r.subject_id');
10705 l(' and oc.party_relationship_id = r.relationship_id');
10706 l(' and d.search_context_id = p_search_ctx_id); ');
10707 --bug 4959719 start
10708 l(' exception');
10709 l(' when others then');
10710 l(' if (instrb(SQLERRM,''DRG-51030'')>0) then ');
10711 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
10712 l(' FND_MSG_PUB.ADD;');
10713 l(' RAISE FND_API.G_EXC_ERROR;');
10714 --Start Bug No: 3032742.
10715 l(' elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
10716 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
10717 l(' FND_MSG_PUB.ADD;');
10718 l(' RAISE FND_API.G_EXC_ERROR;');
10722 l(' end if;');
10719 --End Bug No : 3032742.
10720 l(' else ');
10721 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
10723 --bug 4959719 end
10724 l(' END;');
10725
10726 l('');
10727 l(' /** Private procedure to acquire and score at party site level ***/');
10728 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');
10729 l(' l_party_id_idx NUMBER:=1;');
10730 l(' l_ctx_id NUMBER;');
10731 -- l(' h_ps_id HZ_PARTY_SEARCH.IDList;');
10732 -- l(' h_ps_party_id HZ_PARTY_SEARCH.IDList;');
10733 -- l(' h_ps_score HZ_PARTY_SEARCH.IDList;');
10734 -- l(' detcnt NUMBER := 1;');
10735 l(' l_person_id NUMBER;');
10736 l(' BEGIN');
10737 l(' SAVEPOINT eval_start;');
10738 l(' unset_person_party_type;');
10739 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10740 l(' l_ctx_id := l_search_ctx_id;');
10741 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10742 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10743 l(' l_search_ctx_id,H_PARTY_ID(I));');
10744 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10745 l(' SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10746 l(' HZ_RELATIONSHIPS r');
10747 l(' WHERE oc.party_relationship_id = r.relationship_id');
10748 l(' AND r.object_id = d.party_id');
10749 l(' AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10750 l(' H_PARTY_ID.DELETE;');
10751 l(' H_PARTY_ID_LIST.DELETE;');
10752 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10753 l(' l_ctx_id := l_search_ctx_id;');
10754 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10755 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10756 l(' l_search_ctx_id,H_PARTY_ID(I));');
10757 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10758 l(' SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10759 l(' HZ_RELATIONSHIPS r');
10760 l(' WHERE oc.party_relationship_id = r.relationship_id');
10761 l(' AND r.object_id = d.party_id');
10762 l(' AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10763 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10764 l(' ELSE');
10765 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10766 l(' l_ctx_id := NULL;');
10767 l(' END IF;');
10768 l(' open_party_site_cursor(null,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, l_party_site_cur);');
10769 l(' LOOP ');
10770 l(' FETCH l_party_site_cur INTO');
10771 l(' l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
10772 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
10773 l(' l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);');
10774 l(' IF l_person_id IS NOT NULL THEN');
10775 l(' l_index := map_id(l_person_id);');
10776 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
10777
10778 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
10779 l(' IF l_ctx_id IS NULL THEN');
10780 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);');
10781 l(' END IF;');
10782 l(' ELSE');
10783 l(' IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
10784 l(' H_SCORES(l_index).TOTAL_SCORE := ');
10785 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
10786 l(' H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
10787 l(' END IF;');
10788 l(' END IF;');
10789 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
10790 l(' H_PARTY_ID_LIST(l_index) := 1;');
10791 l(' H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
10792 l(' l_party_id_idx:= l_party_id_idx+1;');
10793 l(' END IF;');
10794 l(' IF l_party_id_idx>l_max_thresh THEN');
10795 l(' CLOSE l_party_site_cur;'); --Bug No: 3872745
10796 l(' IF p_index>1 THEN');
10797 ldbg_s('In eval party site level number of matches found exceeded threshold');
10798 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10799 l(' FND_MSG_PUB.ADD;');
10800 l(' RAISE FND_API.G_EXC_ERROR;');
10801 l(' ELSE');
10802 l(' push_eval;');
10803 l(' RETURN;');
10804 l(' END IF;');
10805 l(' END IF;');
10806 l(' IF p_ins_details = ''Y'' THEN');
10807 l(' h_ps_id(detcnt) := l_party_site_id;');
10808 l(' h_ps_party_id(detcnt) := l_person_id;');
10809 l(' h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
10810 l(' detcnt := detcnt +1;');
10811 l(' END IF;');
10812 ds(fnd_log.level_statement);
10813 dc(fnd_log.level_statement,'Party Site Level Matches');
10814 dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
10815 dc(fnd_log.level_statement,'l_ps_party_id','l_person_id');
10816 dc(fnd_log.level_statement,'l_score','l_score');
10817 de;
10818 l(' END IF;');
10819 l(' END LOOP;');
10820 l(' CLOSE l_party_site_cur;');
10821 l(' ROLLBACK to eval_start;');
10822 --l(' IF p_ins_details = ''Y'' THEN');
10823 --l(' FORALL I in 1..h_ps_id.COUNT ');
10824 --l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
10825 --l(' l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
10826 --l(' END IF;');
10827 l(' END;');
10828 l('');
10832 l(' l_ctx_id NUMBER;');
10829 l(' /** Private procedure to acquire and score at party site level ***/');
10830 l(' PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10831 l(' l_party_id_idx NUMBER:=1;');
10833 -- l(' h_ct_id HZ_PARTY_SEARCH.IDList;');
10834 -- l(' h_ct_party_id HZ_PARTY_SEARCH.IDList;');
10835 -- l(' h_ct_score HZ_PARTY_SEARCH.IDList;');
10836 -- l(' detcnt NUMBER := 1;');
10837 -- l(' l_person_id NUMBER;');
10838 l(' BEGIN');
10839 l(' SAVEPOINT eval_start;');
10840 l(' l_ctx_id := l_search_ctx_id;');
10841 l(' unset_person_party_type;');
10842 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10843 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10844 l(' l_search_ctx_id,H_PARTY_ID(I));');
10845 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10846 l(' open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);');
10847 l(' LOOP ');
10848 l(' FETCH l_contact_cur INTO');
10849 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
10850 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
10851 l(' l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);');
10852 l(' l_index := map_id(l_person_id);');
10853 l(' IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) THEN');
10854 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
10855 l(' IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
10856 l(' H_SCORES(l_index).TOTAL_SCORE := ');
10857 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
10858 l(' H_SCORES(l_index).CONTACT_SCORE := l_score;');
10859 l(' END IF;');
10860 l(' END IF;');
10861 l(' IF p_ins_details = ''Y'' THEN');
10862 l(' h_ct_id(detcnt) := l_org_contact_id;');
10863 l(' h_ct_party_id(detcnt) := l_person_id;');
10864 l(' h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
10865 l(' detcnt := detcnt +1;');
10866 l(' END IF;');
10867 ds(fnd_log.level_statement);
10868 dc(fnd_log.level_statement,'Contact Level Matches');
10869 dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
10870 dc(fnd_log.level_statement,'l_ct_party_id','l_person_id');
10871 dc(fnd_log.level_statement,'l_score','l_score');
10872 de;
10873 l(' END LOOP;');
10874 l(' CLOSE l_contact_cur;');
10875 l(' ROLLBACK to eval_start;');
10876 -- l(' IF p_ins_details = ''Y'' THEN');
10877 -- l(' FORALL I in 1..h_ct_id.COUNT ');
10878 -- l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
10879 -- l(' l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
10880 -- l(' END IF;');
10881 l(' END;');
10882 l('');
10883 l(' /** Private procedure to acquire and score at contact point level ***/');
10884 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');
10885 l(' l_party_id_idx NUMBER:=1;');
10886 l(' l_ctx_id NUMBER;');
10887 -- l(' h_cpt_id HZ_PARTY_SEARCH.IDList;');
10888 -- l(' h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
10889 -- l(' h_cpt_score HZ_PARTY_SEARCH.IDList;');
10890 -- l(' detcnt NUMBER := 1;');
10891 -- l(' l_person_id NUMBER;');
10892 l(' BEGIN');
10893 l(' SAVEPOINT eval_start;');
10894 l(' unset_person_party_type;');
10895 l(' IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10896 l(' l_ctx_id := l_search_ctx_id;');
10897 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10898 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10899 l(' l_search_ctx_id,H_PARTY_ID(I));');
10900 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10901 l(' SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10902 l(' HZ_RELATIONSHIPS r');
10903 l(' WHERE oc.party_relationship_id = r.relationship_id');
10904 l(' AND r.object_id = d.party_id');
10905 l(' AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10906 l(' H_PARTY_ID.DELETE;');
10907 l(' H_PARTY_ID_LIST.DELETE;');
10908 l(' ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10909 l(' l_ctx_id := l_search_ctx_id;');
10910 l(' FORALL I in 1..H_PARTY_ID.COUNT ');
10911 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10912 l(' l_search_ctx_id,H_PARTY_ID(I));');
10913 l(' INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10914 l(' SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10915 l(' HZ_RELATIONSHIPS r');
10916 l(' WHERE oc.party_relationship_id = r.relationship_id');
10917 l(' AND r.object_id = d.party_id');
10918 l(' AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10919 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10920 l(' ELSE');
10921 l(' l_ctx_id := NULL;');
10922 l(' l_party_id_idx := H_PARTY_ID.COUNT+1;');
10923 l(' END IF;');
10924 l(' open_contact_pt_cursor(null,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, l_contact_pt_cur);');
10925 l(' LOOP ');
10926 l(' FETCH l_contact_pt_cur INTO');
10927 l(' l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
10928 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
10929 l(' l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);');
10930 l(' IF l_person_id IS NOT NULL THEN');
10931 l(' l_index := map_id(l_person_id);');
10932 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
10933
10937 l(' END IF;');
10934 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
10935 l(' IF l_ctx_id IS NULL THEN');
10936 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);');
10938 l(' ELSE');
10939 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
10940 l(' H_SCORES(l_index).TOTAL_SCORE := ');
10941 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
10942 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
10943 l(' END IF;');
10944 l(' END IF;');
10945 l(' IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
10946 l(' H_PARTY_ID_LIST(l_index) := 1;');
10947 l(' H_PARTY_ID(l_party_id_idx) := l_person_id;');
10948 l(' l_party_id_idx:= l_party_id_idx+1;');
10949 l(' END IF;');
10950 l(' IF l_party_id_idx>l_max_thresh THEN');
10951 l(' CLOSE l_contact_pt_cur;'); --Bug No: 3872745
10952 l(' IF p_index>1 THEN');
10953 ldbg_s('In eval contact point level number of matches found exceeded threshold');
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(' ELSE');
10958 l(' push_eval;');
10959 l(' RETURN;');
10960 l(' END IF;');
10961 l(' END IF;');
10962 l(' IF p_ins_details = ''Y'' THEN');
10963 l(' h_cpt_id(detcnt) := l_contact_pt_id;');
10964 l(' h_cpt_party_id(detcnt) := l_person_id;');
10965 l(' h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
10966 l(' detcnt := detcnt +1;');
10967 l(' END IF;');
10968 ds(fnd_log.level_statement);
10969 dc(fnd_log.level_statement,'Contact pt Level Matches');
10970 dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
10971 dc(fnd_log.level_statement,'l_cpt_party_id','l_person_id');
10972 dc(fnd_log.level_statement,'l_score','l_score');
10973 de;
10974 l(' END IF;');
10975 l(' END LOOP;');
10976 l(' CLOSE l_contact_pt_cur;');
10977 l(' ROLLBACK to eval_start;');
10978 l(' IF p_ins_details = ''Y'' THEN');
10979 l(' FORALL I in 1..h_cpt_id.COUNT ');
10980 l(' INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
10981 l(' l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
10982 l(' END IF;');
10983 l(' END;');
10984 l('');
10985 l(' /** Private procedure to call the eval procedure at each entity in the correct order ***/');
10986 l(' PROCEDURE do_eval (p_index NUMBER) IS');
10987 l(' l_ctx_id NUMBER;');
10988 l(' l_threshold NUMBER;'); --Bug No: 4407425
10989 l(' other_criteria_exists BOOLEAN; '); --Bug No: 4407425
10990 l(' BEGIN');
10991 --Start of Bug No: 4407425
10992 l(' IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
10993 l(' l_threshold := '|| l_match_threshold ||'; ');
10994 l(' other_criteria_exists := TRUE ;');
10995 l(' IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
10996 l(' other_criteria_exists := FALSE; ');
10997 l(' END IF ; ');
10998 l(' IF( (l_match_str = '' AND '' AND other_criteria_exists) OR ( call_max_score(p_index) < l_threshold) )THEN');
10999 l(' RETURN; ');
11000 l(' ELSE');
11001 ldbg_s('In do eval number of matches found exceeded threshold');
11002 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
11003 l(' FND_MSG_PUB.ADD;');
11004 l(' RAISE FND_API.G_EXC_ERROR;');
11005 l(' END IF; ');
11006 l(' END IF;');
11007 --End of Bug No: 4407425
11008 /*
11009 l(' IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
11010 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
11011 l(' FND_MSG_PUB.ADD;');
11012 l(' RAISE FND_API.G_EXC_ERROR;');
11013 l(' END IF;');
11014 */
11015 l(' IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
11016 l(' eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
11017 l(' ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
11018 l(' eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
11019 l(' ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
11020 l(' eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
11021 l(' END IF;');
11022 l(' END;');
11023 l(' /************ End of find_persons private procedures **********/ ');
11024 l('');
11025 l(' BEGIN');
11026 l('');
11027
11028
11029 d(fnd_log.level_procedure,'find_persons(+)');
11030 ds(fnd_log.level_statement);
11031 dc(fnd_log.level_statement,'Input Parameters:');
11032 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11033 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11034 de;
11035
11036 l(' -- ************************************');
11037 l(' -- STEP 1. Initialization and error checks');
11038 l('');
11039
11040 l(' l_match_str := ''' || l_match_str || ''';');
11041 l(' IF p_match_type = ''AND'' THEN');
11042 l(' l_match_str := '' AND '';');
11043 l(' ELSIF p_match_type = ''OR'' THEN');
11044 l(' l_match_str := '' OR '';');
11045 l(' END IF;');
11046 l(' SAVEPOINT find_persons;');
11050 l(' l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
11047 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);');
11048 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
11049 l('');
11051 l(' IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
11052 l(' g_score_until_thresh := true;');
11053 l(' ELSE');
11054 l(' g_score_until_thresh := false;');
11055 l(' END IF;');
11056
11057 l(' l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
11058 l(' l_contact_contains_str := check_contacts_bulk (p_contact_list);');
11059 l(' l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
11060 l(' l_party_contains_str := check_parties_bulk (p_party_search_rec) ;');
11061
11062 l(' init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
11063 l('');
11064 l(' -- Setup Search Context ID');
11065 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
11066 l(' x_search_ctx_id := l_search_ctx_id;');
11067 l('');
11068
11069 l(' IF l_party_contains_str IS NULL THEN');
11070 l(' defpt := 1;');
11071 l(' END IF;');
11072 l(' IF l_party_site_contains_str IS NULL THEN');
11073 l(' defps := 1;');
11074 l(' END IF;');
11075 l(' IF l_contact_contains_str IS NULL THEN');
11076 l(' defct := 1;');
11077 l(' END IF;');
11078 l(' IF l_contact_pt_contains_str IS NULL THEN');
11079 l(' defcpt := 1;');
11080 l(' END IF;');
11081 l('');
11082
11083 ds(fnd_log.level_statement);
11084 dc(fnd_log.level_statement,'l_match_str','l_match_str');
11085 dc(fnd_log.level_statement,'l_party_contains_str','l_party_contains_str');
11086 dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
11087 dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
11088 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
11089 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
11090 de;
11091
11092 /**** Call all 4 evaluation procedures ***********/
11093 l(' FOR I in 1..5 LOOP');
11094 l(' do_eval(I);');
11095 l(' END LOOP;');
11096 l(' ROLLBACK to find_persons;');
11097 l(' IF l_contact_contains_str IS NOT NULL THEN');
11098 l(' eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);');
11099 l(' END IF;');
11100 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
11101
11102 l(' x_num_matches := 0;');
11103 l(' l_num_eval := 0;');
11104 l(' IF l_match_str = '' OR '' THEN');
11105 l(' l_party_id := H_SCORES.FIRST;');
11106 l(' ELSE');
11107 l(' l_party_id := H_PARTY_ID_LIST.FIRST;');
11108 l(' END IF;');
11109
11110 l(' WHILE l_party_id IS NOT NULL LOOP');
11111 l(' l_num_eval:= l_num_eval+1;');
11112 ds(fnd_log.level_statement);
11113 dc(fnd_log.level_statement,'Match Party ID','H_SCORES(l_party_id).PARTY_ID');
11114 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
11115 de;
11116 l(' IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
11117 l(' INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
11118 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));');
11119 l(' x_num_matches := x_num_matches+1;');
11120 l(' END IF;');
11121 l(' IF l_match_str = '' OR '' THEN');
11122 l(' l_party_id:=H_SCORES.NEXT(l_party_id);');
11123 l(' ELSE');
11124 l(' l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
11125 l(' END IF;');
11126 l(' END LOOP;');
11127 l('');
11128 l('----------INSERT INTO HZ_MATCHED_PARTY_SITES -----');
11129 l(' IF p_ins_details = ''Y'' THEN');
11130 l(' FORALL I in 1..h_ps_id.COUNT ');
11131 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
11132 l(' l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
11133 l(' END IF;');
11134
11135 l('----------INSERT INTO HZ_MATCHED_CONTACTS-----');
11136 l(' IF p_ins_details = ''Y'' THEN');
11137 l(' FORALL I in 1..h_ct_id.COUNT ');
11138 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
11139 l(' l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
11140 l(' END IF;');
11141 l('----------INSERT INTO HZ_MATCHED_CPTS-----');
11142 l(' IF p_ins_details = ''Y'' THEN');
11143 l(' FORALL I in 1..h_cpt_id.COUNT ');
11144 l(' INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
11145 l(' l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
11146 l(' END IF;');
11147 l('');
11148 l(' HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
11149 d(fnd_log.level_procedure,'find_persons(-)');
11150
11151
11152 l('EXCEPTION');
11153 l(' WHEN FND_API.G_EXC_ERROR THEN');
11154 l(' ROLLBACK to find_persons;');
11155 l(' RAISE FND_API.G_EXC_ERROR;');
11156 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11157 l(' ROLLBACK to find_persons;');
11158 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11159 l(' WHEN OTHERS THEN');
11160 l(' ROLLBACK to find_persons;');
11164 l(' FND_MSG_PUB.ADD;');
11161 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11162 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_persons'');');
11163 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11165 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11166 l('END find_persons;');
11167 ELSE
11168 l('BEGIN');
11169 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
11170 l(' FND_MSG_PUB.ADD;');
11171 l(' RAISE FND_API.G_EXC_ERROR;');
11172 l('END find_persons;');
11173 l('');
11174 END IF;
11175 l('PROCEDURE find_persons (');
11176 l(' p_rule_id IN NUMBER,');
11177 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
11178 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
11179 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
11180 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
11181 l(' p_restrict_sql IN VARCHAR2,');
11182 l(' p_match_type IN VARCHAR2,');
11183 l(' p_ins_details IN VARCHAR2,');
11184 l(' x_search_ctx_id OUT NUMBER,');
11185 l(' x_num_matches OUT NUMBER');
11186 l(') IS');
11187 l(' BEGIN');
11188 l(' find_persons(p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,');
11189 l(' p_restrict_sql,p_match_type,NULL,p_ins_details,x_search_ctx_id,x_num_matches);');
11190 l(' END find_persons;');
11191 l('');
11192 l('-------------------------------------------------------------------------------------');
11193 l('-------------------- BULK MATCH RULE ::: find_party_details ------------------------');
11194 l('-------------------------------------------------------------------------------------');
11195 l('PROCEDURE find_party_details (');
11196 l(' p_rule_id IN NUMBER,');
11197 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
11198 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
11199 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
11200 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
11201 l(' p_restrict_sql IN VARCHAR2,');
11202 l(' p_match_type IN VARCHAR2,');
11203 l(' p_search_merged IN VARCHAR2,');
11204 l(' x_search_ctx_id OUT NUMBER,');
11205 l(' x_num_matches OUT NUMBER');
11206 l(') IS');
11207 l('');
11208 l(' BEGIN');
11209
11210
11211 d(fnd_log.level_procedure,'find_party_details(+)');
11212 ds(fnd_log.level_statement);
11213 dc(fnd_log.level_statement,'Input Parameters:');
11214 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11215 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11216 dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
11217 de;
11218
11219 l(' find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,');
11220 l(' p_restrict_sql,p_match_type,p_search_merged,null,null, null,''Y'',');
11221 l(' x_search_ctx_id,x_num_matches);');
11222 l(' DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
11223 l(' AND NOT EXISTS ');
11224 l(' (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);');
11225 l(' DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
11226 l(' AND NOT EXISTS ');
11227 l(' (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);');
11228 l(' DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
11229 l(' AND NOT EXISTS ');
11230 l(' (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);');
11231
11232 d(fnd_log.level_procedure,'find_party_details(-)');
11233
11234
11235 l('EXCEPTION');
11236 l(' WHEN FND_API.G_EXC_ERROR THEN');
11237 l(' RAISE FND_API.G_EXC_ERROR;');
11238 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11239 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11240 l(' WHEN OTHERS THEN');
11241 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11242 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_party_details'');');
11243 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11244 l(' FND_MSG_PUB.ADD;');
11245 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11246 l('END find_party_details;');
11247 l('');
11248 l('-------------------------------------------------------------------------------------');
11249 l('-------------------- BULK MATCH RULE ::: find_duplicate_parties -------------------');
11250 l('-------------------------------------------------------------------------------------');
11251 l('PROCEDURE find_duplicate_parties (');
11252 l(' p_rule_id IN NUMBER,');
11253 l(' p_party_id IN NUMBER,');
11254 l(' p_restrict_sql IN VARCHAR2,');
11255 l(' p_match_type IN VARCHAR2,');
11256 l(' p_dup_batch_id IN NUMBER,');
11257 l(' p_search_merged IN VARCHAR2,');
11258 l(' x_dup_set_id OUT NUMBER,');
11259 l(' x_search_ctx_id OUT NUMBER,');
11260 l(' x_num_matches OUT NUMBER');
11261 l(') IS');
11262 l(' l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
11263 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
11264 l(' l_contact_list HZ_PARTY_SEARCH.contact_list;');
11265 l(' l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
11266 l(' l_match_idx NUMBER;');
11267
11271
11268 l('');
11269 l('BEGIN');
11270
11272 d(fnd_log.level_procedure,'find_duplicate_parties(+)');
11273 ds(fnd_log.level_statement);
11274 dc(fnd_log.level_statement,'Input Parameters:');
11275 dc(fnd_log.level_statement,'p_party_id','p_party_id');
11276 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11277 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11278 dc(fnd_log.level_statement,'p_dup_batch_id','p_dup_batch_id');
11279 dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
11280 de;
11281
11282 l('');
11283 l(' get_party_for_search(');
11284 l(' p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);');
11285 l('');
11286 l(' IF NOT check_prim_cond (l_party_rec,');
11287 l(' l_party_site_list,');
11288 l(' l_contact_list,');
11289 l(' l_cpt_list) THEN');
11290 l(' x_dup_set_id:=NULL;');
11291 l(' x_search_ctx_id:=NULL;');
11292 l(' x_num_matches:=0;');
11293 l(' RETURN;');
11294 l(' END IF;');
11295
11296 l(' x_dup_set_id := NULL;');
11297 l(' IF p_dup_batch_id IS NOT NULL THEN');
11298 l(' SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;');
11299 l(' END IF;');
11300 l('');
11301
11302 l(' find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11303 l(' p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,''N'',');
11304 l(' x_search_ctx_id,x_num_matches);');
11305 l(' IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN');
11306 l(' INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,');
11307 l(' STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,');
11308 l(' LAST_UPDATE_DATE, LAST_UPDATED_BY) ');
11309 l(' VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, ''SYSBATCH'',');
11310 l(' ''PARTY_MERGE'', hz_utility_pub.created_by, hz_utility_pub.creation_date,');
11311 l(' hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,');
11312 l(' hz_utility_pub.user_id);');
11313 l('');
11314 l(' INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
11315 l(' MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
11316 l(' LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
11317 l(' VALUES (p_party_id,x_dup_set_id,0,0,');
11318 l(' ''Y'',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,');
11319 l(' hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,');
11320 l(' hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
11321 l(' ELSE');
11322 l(' x_dup_set_id := NULL;');
11323 l(' END IF;');
11324 d(fnd_log.level_procedure,'find_duplicate_parties(-)');
11325
11326
11327 l('EXCEPTION');
11328 l(' WHEN FND_API.G_EXC_ERROR THEN');
11329 l(' RAISE FND_API.G_EXC_ERROR;');
11330 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11331 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11332 l(' WHEN OTHERS THEN');
11333 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11334 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_parties'');');
11335 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11336 l(' FND_MSG_PUB.ADD;');
11337 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11338 l('END find_duplicate_parties;');
11339
11340
11341 l('');
11342 l('-------------------------------------------------------------------------------------');
11343 l('-------------------- BULK MATCH RULE ::: find_duplicate_party_sites-----------------');
11344 l('-------------------------------------------------------------------------------------');
11345 l('PROCEDURE find_duplicate_party_sites (');
11346 l(' p_rule_id IN NUMBER,');
11347 l(' p_party_site_id IN NUMBER,');
11348 l(' p_party_id IN NUMBER,');
11349 l(' p_restrict_sql IN VARCHAR2,');
11350 l(' p_match_type IN VARCHAR2,');
11351 l(' x_search_ctx_id OUT NUMBER,');
11352 l(' x_num_matches OUT NUMBER');
11353 l(') IS');
11354 l('');
11355
11356
11357 l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
11358 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
11359 l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
11360 l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
11361 l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
11362 l(' p_party_site_list HZ_PARTY_SEARCH.IDList; ');
11363 l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
11364 l(' l_match_idx NUMBER;');
11365
11366 l(' cursor get_cpts_for_party_sites is select contact_point_id ');
11367 l(' from hz_contact_points ');
11368 l(' where owner_table_name = ''HZ_PARTY_SITES'' ');
11369 l(' and primary_flag=''Y''');
11370 l(' and owner_table_id = p_party_site_id; ');
11371
11372 l(' BEGIN ');
11373
11374
11375 d(fnd_log.level_procedure,'find_duplicate_party_sites(+)');
11376 ds(fnd_log.level_statement);
11377 dc(fnd_log.level_statement,'Input Parameters:');
11378 dc(fnd_log.level_statement,'p_party_site_id','p_party_site_id');
11379 dc(fnd_log.level_statement,'p_party_id','p_party_id');
11380 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11381 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11382 de;
11383
11387 l(' FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; ');
11384 l(' p_party_site_list(1) := p_party_site_id; ');
11385 l(' OPEN get_cpts_for_party_sites;');
11386 l(' LOOP ');
11388 l(' EXIT WHEN get_cpts_for_party_sites%NOTFOUND; ');
11389 l(' END LOOP; ');
11390 l(' CLOSE get_cpts_for_party_sites; ');
11391 l(' ');
11392 l(' get_search_criteria (');
11393 l(' null,');
11394 l(' p_party_site_list,');
11395 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
11396 l(' contact_point_ids, ');
11397 l(' l_party_search_rec,');
11398 l(' l_party_site_list,');
11399 l(' l_contact_list,');
11400 l(' l_contact_point_list) ;');
11401 l(' IF NOT check_prim_cond (l_party_search_rec,');
11402 l(' l_party_site_list,');
11403 l(' l_contact_list,');
11404 l(' l_contact_point_list) THEN');
11405 l(' x_search_ctx_id:=NULL;');
11406 l(' x_num_matches:=0;');
11407 l(' RETURN;');
11408 l(' END IF;');
11409 l(' ');
11410 l(' get_matching_party_sites (p_rule_id, ');
11411 l(' p_party_id, ');
11412 l(' l_party_site_list, ');
11413 l(' l_contact_point_list,');
11414 l(' p_restrict_sql, ');
11415 l(' p_match_type, ');
11416 l(' p_party_site_id, ');
11417 l(' x_search_ctx_id,');
11418 l(' x_num_matches);');
11419 d(fnd_log.level_procedure,'find_duplicate_party_sites(-)');
11420
11421
11422 l('EXCEPTION');
11423 l(' WHEN FND_API.G_EXC_ERROR THEN');
11424 l(' RAISE FND_API.G_EXC_ERROR;');
11425 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11426 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11427 l(' WHEN OTHERS THEN');
11428 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11429 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_party_sites'');');
11430 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11431 l(' FND_MSG_PUB.ADD;');
11432 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11433 l('END find_duplicate_party_sites; ');
11434 l(' ');
11435
11436 l('-------------------------------------------------------------------------------------');
11437 l('-------------------- BULK MATCH RULE ::: find_duplicate_contacts--------------------');
11438 l('-------------------------------------------------------------------------------------');
11439 l('PROCEDURE find_duplicate_contacts (');
11440 l(' p_rule_id IN NUMBER,');
11441 l(' p_org_contact_id IN NUMBER,');
11442 l(' p_party_id IN NUMBER,');
11443 l(' p_restrict_sql IN VARCHAR2,');
11444 l(' p_match_type IN VARCHAR2,');
11445 l(' x_search_ctx_id OUT NUMBER,');
11446 l(' x_num_matches OUT NUMBER');
11447 l(') IS');
11448 l('');
11449
11450 l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;');
11451 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
11452 l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
11453 l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
11454 l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
11455 l(' p_party_site_list HZ_PARTY_SEARCH.IDList; ');
11456 l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
11457 l(' l_match_idx NUMBER;');
11458
11459 l(' cursor get_cpt_for_contact_id is select contact_point_id ');
11460 l(' from hz_org_contacts a, hz_relationships b, hz_contact_points c ');
11461 l(' where a.party_relationship_id = b.relationship_id ');
11462 l(' and c.owner_table_name = ''HZ_PARTIES'' ');
11463 l(' and c.primary_flag=''Y''');
11464 l(' and c.owner_table_id = b.party_id ');
11465 l(' and b.directional_flag = ''F'' ');
11466 l(' and a.org_contact_id = p_org_contact_id; ');
11467
11468 l('BEGIN ');
11469
11470
11471 d(fnd_log.level_procedure,'find_duplicate_contacts(+)');
11472 ds(fnd_log.level_statement);
11473 dc(fnd_log.level_statement,'Input Parameters:');
11474 dc(fnd_log.level_statement,'p_org_contact_id','p_org_contact_id');
11475 dc(fnd_log.level_statement,'p_party_id','p_party_id');
11476 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11477 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11478 de;
11479
11480
11481 l(' p_contact_ids(1) := p_org_contact_id; ');
11482 l(' OPEN get_cpt_for_contact_id; ');
11483 l(' LOOP ');
11484 l(' FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; ');
11485 l(' EXIT WHEN get_cpt_for_contact_id%NOTFOUND; ');
11486 l(' END LOOP; ');
11487 l(' CLOSE get_cpt_for_contact_id; ');
11488 l(' ');
11489 l(' get_search_criteria (');
11490 l(' null,');
11491 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
11492 l(' p_contact_ids,');
11493 l(' contact_point_ids, ');
11494 l(' l_party_search_rec,');
11495 l(' l_party_site_list, ');
11496 l(' l_contact_list,');
11497 l(' l_contact_point_list) ;');
11498 l(' IF NOT check_prim_cond (l_party_search_rec,');
11499 l(' l_party_site_list,');
11500 l(' l_contact_list,');
11501 l(' l_contact_point_list) THEN');
11502 l(' x_search_ctx_id:=NULL;');
11503 l(' x_num_matches:=0;');
11504 l(' RETURN;');
11505 l(' END IF;');
11506 l(' ');
11510 l(' l_contact_point_list, ');
11507 l(' get_matching_contacts (p_rule_id, ');
11508 l(' p_party_id, ');
11509 l(' l_contact_list, ');
11511 l(' p_restrict_sql, ');
11512 l(' p_match_type, ');
11513 l(' p_org_contact_id, ');
11514 l(' x_search_ctx_id, ');
11515 l(' x_num_matches);');
11516 l(' ');
11517 d(fnd_log.level_procedure,'find_duplicate_contacts(-)');
11518
11519
11520 l('EXCEPTION');
11521 l(' WHEN FND_API.G_EXC_ERROR THEN');
11522 l(' RAISE FND_API.G_EXC_ERROR;');
11523 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11524 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11525 l(' WHEN OTHERS THEN');
11526 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11527 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contacts'');');
11528 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11529 l(' FND_MSG_PUB.ADD;');
11530 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11531 l('END find_duplicate_contacts; ');
11532 l('');
11533 l('-------------------------------------------------------------------------------------');
11534 l('-------------------- BULK MATCH RULE ::: find_duplicate_contact_points -------------');
11535 l('-------------------------------------------------------------------------------------');
11536 l('PROCEDURE find_duplicate_contact_points (');
11537 l(' p_rule_id IN NUMBER,');
11538 l(' p_contact_point_id IN NUMBER,');
11539 l(' p_party_id IN NUMBER,');
11540 l(' p_restrict_sql IN VARCHAR2,');
11541 l(' p_match_type IN VARCHAR2,');
11542 l(' x_search_ctx_id OUT NUMBER,');
11543 l(' x_num_matches OUT NUMBER');
11544 l(') IS');
11545 l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
11546 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
11547 l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
11548 l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
11549 l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
11550 l(' p_party_site_list HZ_PARTY_SEARCH.IDList; ');
11551 l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
11552 l(' l_match_idx NUMBER;');
11553
11554 l('');
11555 l('BEGIN');
11556
11557
11558 d(fnd_log.level_procedure,'find_duplicate_contact_points(+)');
11559 ds(fnd_log.level_statement);
11560 dc(fnd_log.level_statement,'Input Parameters:');
11561 dc(fnd_log.level_statement,'p_contact_point_id','p_contact_point_id');
11562 dc(fnd_log.level_statement,'p_party_id','p_party_id');
11563 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11564 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11565 de;
11566
11567 l(' contact_point_ids(1) := p_contact_point_id; ');
11568 l(' get_search_criteria ( ');
11569 l(' null, ');
11570 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
11571 l(' HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
11572 l(' contact_point_ids, ');
11573 l(' l_party_search_rec, ');
11574 l(' l_party_site_list, ');
11575 l(' l_contact_list, ');
11576 l(' l_contact_point_list ); ');
11577 l(' ');
11578 l(' IF NOT check_prim_cond (l_party_search_rec,');
11579 l(' l_party_site_list,');
11580 l(' l_contact_list,');
11581 l(' l_contact_point_list) THEN');
11582 l(' x_search_ctx_id:=NULL;');
11583 l(' x_num_matches:=0;');
11584 l(' RETURN;');
11585 l(' END IF;');
11586 l(' get_matching_contact_points ( ');
11587 l(' p_rule_id, ');
11588 l(' p_party_id, ');
11589 l(' l_contact_point_list, ');
11590 l(' p_restrict_sql, ');
11591 l(' p_match_type, ');
11592 l(' p_contact_point_id, ');
11593 l(' x_search_ctx_id, ');
11594 l(' x_num_matches ); ');
11595 d(fnd_log.level_procedure,'find_duplicate_contact_points(-)');
11596
11597
11598 l('EXCEPTION');
11599 l(' WHEN FND_API.G_EXC_ERROR THEN');
11600 l(' RAISE FND_API.G_EXC_ERROR;');
11601 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11602 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11603 l(' WHEN OTHERS THEN');
11604 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11605 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contact_points'');');
11606 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11607 l(' FND_MSG_PUB.ADD;');
11608 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11609 l('END find_duplicate_contact_points;');
11610 l('');
11611
11612 l('-------------------------------------------------------------------------------------');
11613 l('-------------------- BULK MATCH RULE ::: find_parties_dynamic-----------------------');
11614 l('-------------------------------------------------------------------------------------');
11615 l('PROCEDURE find_parties_dynamic (');
11616 l(' p_rule_id IN NUMBER,');
11617 l(' p_attrib_id1 IN NUMBER,');
11618 l(' p_attrib_id2 IN NUMBER,');
11619 l(' p_attrib_id3 IN NUMBER,');
11620 l(' p_attrib_id4 IN NUMBER,');
11621 l(' p_attrib_id5 IN NUMBER,');
11622 l(' p_attrib_id6 IN NUMBER,');
11623 l(' p_attrib_id7 IN NUMBER,');
11624 l(' p_attrib_id8 IN NUMBER,');
11625 l(' p_attrib_id9 IN NUMBER,');
11626 l(' p_attrib_id10 IN NUMBER,');
11627 l(' p_attrib_id11 IN NUMBER,');
11628 l(' p_attrib_id12 IN NUMBER,');
11632 l(' p_attrib_id16 IN NUMBER,');
11629 l(' p_attrib_id13 IN NUMBER,');
11630 l(' p_attrib_id14 IN NUMBER,');
11631 l(' p_attrib_id15 IN NUMBER,');
11633 l(' p_attrib_id17 IN NUMBER,');
11634 l(' p_attrib_id18 IN NUMBER,');
11635 l(' p_attrib_id19 IN NUMBER,');
11636 l(' p_attrib_id20 IN NUMBER,');
11637 l(' p_attrib_val1 IN VARCHAR2,');
11638 l(' p_attrib_val2 IN VARCHAR2,');
11639 l(' p_attrib_val3 IN VARCHAR2,');
11640 l(' p_attrib_val4 IN VARCHAR2,');
11641 l(' p_attrib_val5 IN VARCHAR2,');
11642 l(' p_attrib_val6 IN VARCHAR2,');
11643 l(' p_attrib_val7 IN VARCHAR2,');
11644 l(' p_attrib_val8 IN VARCHAR2,');
11645 l(' p_attrib_val9 IN VARCHAR2,');
11646 l(' p_attrib_val10 IN VARCHAR2,');
11647 l(' p_attrib_val11 IN VARCHAR2,');
11648 l(' p_attrib_val12 IN VARCHAR2,');
11649 l(' p_attrib_val13 IN VARCHAR2,');
11650 l(' p_attrib_val14 IN VARCHAR2,');
11651 l(' p_attrib_val15 IN VARCHAR2,');
11652 l(' p_attrib_val16 IN VARCHAR2,');
11653 l(' p_attrib_val17 IN VARCHAR2,');
11654 l(' p_attrib_val18 IN VARCHAR2,');
11655 l(' p_attrib_val19 IN VARCHAR2,');
11656 l(' p_attrib_val20 IN VARCHAR2,');
11657 l(' p_restrict_sql IN VARCHAR2,');
11658 l(' p_match_type IN VARCHAR2,');
11659 l(' p_search_merged IN VARCHAR2,');
11660 l(' x_search_ctx_id OUT NUMBER,');
11661 l(' x_num_matches OUT NUMBER');
11662 l(') IS');
11663 l(' BEGIN');
11664 l(' call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
11665 l(' p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
11666 l(' p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
11667 l(' p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
11668 l(' p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
11669 l(' p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
11670 l(' p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
11671 l(' p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
11672 l(' p_restrict_sql,''FIND_PARTIES'',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);');
11673 l(' END;');
11674
11675 l('');
11676 l('-------------------------------------------------------------------------------------');
11677 l('-------------------- BULK MATCH RULE ::: call_api_dynamic---------------------------');
11678 l('-------------------------------------------------------------------------------------');
11679 l('PROCEDURE call_api_dynamic (');
11680 l(' p_rule_id IN NUMBER,');
11681 l(' p_attrib_id1 IN NUMBER,');
11682 l(' p_attrib_id2 IN NUMBER,');
11683 l(' p_attrib_id3 IN NUMBER,');
11684 l(' p_attrib_id4 IN NUMBER,');
11685 l(' p_attrib_id5 IN NUMBER,');
11686 l(' p_attrib_id6 IN NUMBER,');
11687 l(' p_attrib_id7 IN NUMBER,');
11688 l(' p_attrib_id8 IN NUMBER,');
11689 l(' p_attrib_id9 IN NUMBER,');
11690 l(' p_attrib_id10 IN NUMBER,');
11691 l(' p_attrib_id11 IN NUMBER,');
11692 l(' p_attrib_id12 IN NUMBER,');
11693 l(' p_attrib_id13 IN NUMBER,');
11694 l(' p_attrib_id14 IN NUMBER,');
11695 l(' p_attrib_id15 IN NUMBER,');
11696 l(' p_attrib_id16 IN NUMBER,');
11697 l(' p_attrib_id17 IN NUMBER,');
11698 l(' p_attrib_id18 IN NUMBER,');
11699 l(' p_attrib_id19 IN NUMBER,');
11700 l(' p_attrib_id20 IN NUMBER,');
11701 l(' p_attrib_val1 IN VARCHAR2,');
11702 l(' p_attrib_val2 IN VARCHAR2,');
11703 l(' p_attrib_val3 IN VARCHAR2,');
11704 l(' p_attrib_val4 IN VARCHAR2,');
11705 l(' p_attrib_val5 IN VARCHAR2,');
11706 l(' p_attrib_val6 IN VARCHAR2,');
11707 l(' p_attrib_val7 IN VARCHAR2,');
11708 l(' p_attrib_val8 IN VARCHAR2,');
11709 l(' p_attrib_val9 IN VARCHAR2,');
11710 l(' p_attrib_val10 IN VARCHAR2,');
11711 l(' p_attrib_val11 IN VARCHAR2,');
11712 l(' p_attrib_val12 IN VARCHAR2,');
11713 l(' p_attrib_val13 IN VARCHAR2,');
11714 l(' p_attrib_val14 IN VARCHAR2,');
11715 l(' p_attrib_val15 IN VARCHAR2,');
11716 l(' p_attrib_val16 IN VARCHAR2,');
11717 l(' p_attrib_val17 IN VARCHAR2,');
11718 l(' p_attrib_val18 IN VARCHAR2,');
11719 l(' p_attrib_val19 IN VARCHAR2,');
11720 l(' p_attrib_val20 IN VARCHAR2,');
11721 l(' p_restrict_sql IN VARCHAR2,');
11722 l(' p_api_name IN VARCHAR2,');
11726 l(' x_search_ctx_id OUT NUMBER,');
11723 l(' p_match_type IN VARCHAR2,');
11724 l(' p_party_id IN NUMBER,');
11725 l(' p_search_merged IN VARCHAR2,');
11727 l(' x_num_matches OUT NUMBER');
11728 l(') IS');
11729 l(' TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;');
11730 l(' l_match_idx NUMBER;');
11731 l(' AttrVals AttrList;');
11732 l(' l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
11733 l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
11734 l(' l_contact_list HZ_PARTY_SEARCH.contact_list;');
11735 l(' l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
11736 l(' l_dup_set_id NUMBER;');
11737 l(' l_idx NUMBER;');
11738 l(' l_cpt_type VARCHAR2(255);');
11739 l(' FIRST BOOLEAN := TRUE; ');
11740 l('');
11741 l('BEGIN');
11742
11743 d(fnd_log.level_procedure,'call_api_dynamic(+)');
11744 l('');
11745 FOR I in 1..20 LOOP
11746 l(' IF p_attrib_id'||I||' IS NOT NULL THEN');
11747 l(' AttrVals(p_attrib_id'||I||'):=p_attrib_val'||I||';');
11748 l(' END IF;');
11749 END LOOP;
11750
11751 FIRST := TRUE;
11752 FOR ATTRS IN (
11753 SELECT a.attribute_id, a.attribute_name, a.entity_name
11754 FROM HZ_TRANS_ATTRIBUTES_VL a,
11755 HZ_MATCH_RULE_PRIMARY p
11756 WHERE p.match_rule_id = p_rule_id
11757 AND p.attribute_id = a.attribute_id
11758
11759 UNION
11760
11761 SELECT a.attribute_id, a.attribute_name, a.entity_name
11762 FROM HZ_TRANS_ATTRIBUTES_VL a,
11763 HZ_MATCH_RULE_SECONDARY s
11764 WHERE s.match_rule_id = p_rule_id
11765 AND s.attribute_id = a.attribute_id) LOOP
11766 l(' IF AttrVals.EXISTS('||ATTRS.attribute_id||') THEN');
11767 IF ATTRS.entity_name='PARTY' THEN
11768 l(' l_party_rec.'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11769 d(fnd_log.level_statement,'l_party_rec.'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11770 ELSIF ATTRS.entity_name='PARTY_SITES' THEN
11771 l(' l_party_site_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11772 d(fnd_log.level_statement,'l_party_site_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11773 ELSIF ATTRS.entity_name='CONTACTS' THEN
11774 l(' l_contact_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11775 d(fnd_log.level_statement,'l_contact_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11776 ELSIF ATTRS.entity_name='CONTACT_POINTS' THEN
11777 BEGIN
11778 SELECT tag INTO l_cpt_type FROM fnd_lookup_values
11779 WHERE lookup_type = 'HZ_DQM_CPT_ATTR_TYPE'
11780 AND lookup_code = ATTRS.attribute_name
11781 AND ROWNUM=1;
11782 EXCEPTION
11783 WHEN NO_DATA_FOUND THEN
11784 l_cpt_type:='PHONE';
11785 END;
11786
11787 l(' l_cpt_type := '''||l_cpt_type||''';');
11788 l(' FIRST := FALSE;');
11789 l(' FOR I in 1..l_cpt_list.COUNT LOOP');
11790 l(' IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN');
11791 l(' l_cpt_list(I).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11792 l(' FIRST := TRUE;');
11793 ds(fnd_log.level_statement);
11794 dc(fnd_log.level_statement,'l_cpt_list(''||I||'').CONTACT_POINT_TYPE','l_cpt_type');
11795 dc(fnd_log.level_statement,'l_cpt_list(''||I||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11796 de;
11797 l(' END IF;');
11798 l(' END LOOP;');
11799 l(' IF not FIRST THEN');
11800 l(' l_idx := l_cpt_list.COUNT+1;');
11801 l(' l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;');
11802 l(' l_cpt_list(l_idx).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11803 ds(fnd_log.level_statement);
11804 dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').CONTACT_POINT_TYPE','l_cpt_type');
11805 dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11806 de;
11807 l(' END IF;');
11808 END IF;
11809 l(' END IF;');
11810 l('');
11811 END LOOP;
11812 l('');
11813 l(' IF upper(p_api_name) = ''FIND_PARTIES'' THEN');
11814 l(' find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11815 l(' p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,''N'',');
11816 l(' x_search_ctx_id,x_num_matches);');
11817 l(' ELSIF upper(p_api_name) = ''FIND_PARTY_DETAILS'' THEN');
11818 l(' find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11819 l(' p_restrict_sql,p_match_type,p_search_merged,');
11820 l(' x_search_ctx_id,x_num_matches);');
11821 l(' ELSIF upper(p_api_name) = ''FIND_PERSONS'' THEN');
11822 l(' find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11823 l(' p_restrict_sql,p_match_type,''N'',');
11824 l(' x_search_ctx_id,x_num_matches);');
11825 l(' ELSIF upper(p_api_name) = ''GET_MATCHING_PARTY_SITES'' THEN');
11826 l(' get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,');
11827 l(' p_restrict_sql,p_match_type,NULL,');
11828 l(' x_search_ctx_id,x_num_matches);');
11829 l(' ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACTS'' THEN');
11830 l(' get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,');
11831 l(' p_restrict_sql,p_match_type,NULL,');
11832 l(' x_search_ctx_id,x_num_matches);');
11833 l(' ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACT_POINTS'' THEN');
11837 l(' END IF;');
11834 l(' get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,');
11835 l(' p_restrict_sql,p_match_type,NULL,');
11836 l(' x_search_ctx_id,x_num_matches);');
11838 d(fnd_log.level_procedure,'call_api_dynamic(-)');
11839
11840
11841 l('EXCEPTION');
11842 l(' WHEN FND_API.G_EXC_ERROR THEN');
11843 l(' RAISE FND_API.G_EXC_ERROR;');
11844 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11845 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11846 l(' WHEN OTHERS THEN');
11847 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11848 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.call_api_dynamic'');');
11849 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11850 l(' FND_MSG_PUB.ADD;');
11851 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11852
11853
11854 l('END call_api_dynamic;');
11855 l('');
11856
11857 l('-------------------------------------------------------------------------------------');
11858 l('-------------------- BULK MATCH RULE ::: get_matching_party_sites ------------------');
11859 l('-------------------------------------------------------------------------------------');
11860
11861 l('');
11862 l('PROCEDURE get_matching_party_sites (');
11863 l(' p_rule_id IN NUMBER,');
11864 l(' p_party_id IN NUMBER,');
11865 l(' p_party_site_list IN HZ_PARTY_SEARCH.PARTY_SITE_LIST,');
11866 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
11867 l(' p_restrict_sql IN VARCHAR2,');
11868 l(' p_match_type IN VARCHAR2,');
11869 l(' p_dup_party_site_id IN NUMBER, ');
11870 l(' x_search_ctx_id OUT NUMBER,');
11871 l(' x_num_matches OUT NUMBER');
11872 l(') IS');
11873 l(' ');
11874 l(' -- Strings to hold the generated Intermedia query strings');
11875 l(' l_party_contains_str VARCHAR2(32000); ');
11876 l(' l_match_idx NUMBER;');
11877 l(' l_party_site_contains_str VARCHAR2(32000);');
11878 l(' l_contact_contains_str VARCHAR2(32000);');
11879 l(' l_contact_pt_contains_str VARCHAR2(32000);');
11880 l(' l_tmp VARCHAR2(32000);');
11881 l('');
11882 l(' -- Other local variables');
11883 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
11884 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
11885 l(' -- For Score calculation');
11886 l(' l_max_score NUMBER;');
11887 l(' l_entered_max_score NUMBER;');
11888 l(' FIRST BOOLEAN;');
11889 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
11890 l('');
11891 FOR TX IN (
11892 SELECT distinct f.staged_attribute_column
11893 FROM hz_trans_functions_vl f, hz_secondary_trans st,
11894 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
11895 WHERE sa.match_rule_id = p_rule_id
11896 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
11897 AND st.function_id = f.function_id
11898 AND (a.ENTITY_NAME='PARTY_SITES' OR a.ENTITY_NAME='CONTACT_POINTS')
11899 AND a.attribute_id = sa.attribute_id) LOOP
11900 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
11901 END LOOP;
11902 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
11903 l('');
11904 l(' l_score NUMBER;');
11905 l(' l_idx NUMBER;');
11906 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
11907 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
11908 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
11909 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
11910 l(' l_party_id NUMBER;');
11911 l(' l_ps_party_id NUMBER;');
11912 l(' l_ct_party_id NUMBER;');
11913 l(' l_cpt_party_id NUMBER;');
11914 l(' l_cpt_ps_id NUMBER;');
11915 l(' l_cpt_contact_id NUMBER;');
11916 l(' l_party_site_id NUMBER;');
11917 l(' l_org_contact_id NUMBER;');
11918 l(' l_contact_pt_id NUMBER;');
11919 l(' l_ps_contact_id NUMBER;');
11920 l(' l_party_max_score NUMBER;');
11921 l(' l_ps_max_score NUMBER;');
11922 l(' l_contact_max_score NUMBER;');
11923 l(' l_cpt_max_score NUMBER;');
11924 l('');
11925 l(' defpt NUMBER :=0;');
11926 l(' defps NUMBER :=0;');
11927 l(' defct NUMBER :=0;');
11928 l(' defcpt NUMBER :=0;');
11929 l(' l_index NUMBER;');
11930 l('');
11931 l(' ');
11932 l(' BEGIN');
11933
11934
11935 d(fnd_log.level_procedure,'get_matching_party_sites(+)');
11936 ds(fnd_log.level_statement);
11937 dc(fnd_log.level_statement,'Input Parameters:');
11938 dc(fnd_log.level_statement,'p_match_type','p_match_type');
11939 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11940 dc(fnd_log.level_statement,'p_dup_party_site_id','p_dup_party_site_id');
11941 de;
11942 l('');
11943 l(' -- ************************************');
11944 l(' -- STEP 1. Initialization and error checks');
11945 l('');
11946 l(' l_match_str := ''' || l_match_str || ''';');
11947 l(' IF p_match_type = ''AND'' THEN');
11948 l(' l_match_str := '' AND '';');
11949 l(' ELSIF p_match_type = ''OR'' THEN');
11950 l(' l_match_str := '' OR '';');
11951 l(' END IF;');
11952 l(' SAVEPOINT get_matching_party_sites ;');
11953 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);');
11954 l(' g_score_until_thresh := false;');
11955 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
11956
11957 l('');
11961 l('');
11958 l(' l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
11959 l(' l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
11960 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);');
11962 l(' -- Setup Search Context ID');
11963 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
11964 l(' x_search_ctx_id := l_search_ctx_id;');
11965 l('');
11966
11967 ds(fnd_log.level_statement);
11968 dc(fnd_log.level_statement,'l_match_str','l_match_str');
11969 dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
11970 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
11971 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
11972 de;
11973
11974 l(' IF l_party_site_contains_str IS NULL THEN');
11975 l(' defps := 1;');
11976 l(' END IF;');
11977 l(' IF l_contact_pt_contains_str IS NULL THEN');
11978 l(' defcpt := 1;');
11979 l(' END IF;');
11980 l('');
11981 l(' IF l_party_site_contains_str IS NOT NULL THEN');
11982 l(' open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL,l_party_site_cur);');
11983 l(' LOOP');
11984 l(' FETCH l_party_site_cur INTO ');
11985 l(' l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
11986 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
11987 l(' IF (p_dup_party_site_id IS NULL OR (');
11988 l(' p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND ');
11989 l(' l_party_site_id <> p_dup_party_site_id)) THEN ');
11990 l(' l_index := map_id(l_party_site_id);');
11991 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
11992 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);');
11993 ds(fnd_log.level_statement);
11994 dc(fnd_log.level_statement,'Party Site Level Matches');
11995 dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
11996 dc(fnd_log.level_statement,'l_score','l_score');
11997 de;
11998
11999 l(' END IF; ');
12000 l(' END LOOP;');
12001 l(' CLOSE l_party_site_cur;');
12002 l(' END IF;');
12003 l('');
12004 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
12005 l(' open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12006 l(' LOOP');
12007 l(' FETCH l_contact_pt_cur INTO ');
12008 l(' l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12009 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12010 l(' IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (');
12011 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 ');
12012 l(' l_index := map_id(l_cpt_ps_id);');
12013 l(' IF l_match_str = '' OR '' THEN');
12014 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12015 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
12016 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);');
12017 l(' ELSE');
12018 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
12019 l(' H_SCORES(l_index).TOTAL_SCORE := ');
12020 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
12021 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
12022 l(' END IF;');
12023 l(' END IF;');
12024 l(' ELSE');
12025 l(' IF H_SCORES.EXISTS(l_index) THEN');
12026 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12027 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
12028 l(' H_SCORES(l_index).TOTAL_SCORE := ');
12029 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
12030 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
12031 l(' END IF;');
12032 l(' ELSIF defps=1 THEN');
12033 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12034 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);');
12035 l(' END IF;');
12036 l(' END IF;');
12037 l(' END IF; ');
12038 ds(fnd_log.level_statement);
12039 dc(fnd_log.level_statement,'Contact_point Level Matches');
12040 dc(fnd_log.level_statement,'l_party_site_id','l_cpt_ps_id');
12041 dc(fnd_log.level_statement,'l_score','l_score');
12042 de;
12043 l(' END LOOP;');
12044 l(' CLOSE l_contact_pt_cur;');
12045 l(' END IF;');
12046 l(' ROLLBACK to get_matching_party_sites ;');
12047 l(' x_num_matches := 0;');
12048 l(' l_party_site_id := H_SCORES.FIRST;');
12049 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
12050 l(' WHILE l_party_site_id IS NOT NULL LOOP');
12051 ds(fnd_log.level_statement);
12052 dc(fnd_log.level_statement,'Match Party Site ID','H_SCORES(l_party_site_id).PARTY_SITE_ID');
12053 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100)');
12054 de;
12055 l(' IF l_match_str = '' OR '' THEN');
12059 -- END IF;
12056 l(' IF (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12057 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
12058 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);');
12060 l(' x_num_matches := x_num_matches+1;');
12061 l(' END IF;');
12062 l(' ELSE');
12063 -- IF l_purpose = 'S' THEN
12064 l(' IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND');
12065 l(' H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND');
12066 l(' (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12067 l(' INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
12068 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));');
12069 -- ELSE
12070 -- END IF;
12071 l(' x_num_matches := x_num_matches+1;');
12072 l(' END IF;');
12073 l(' END IF;');
12074 l(' l_party_site_id:=H_SCORES.NEXT(l_party_site_id);');
12075 l(' END LOOP;');
12076
12077 d(fnd_log.level_procedure,'get_matching_party_sites(-)');
12078
12079 l('EXCEPTION');
12080 l(' WHEN FND_API.G_EXC_ERROR THEN');
12081 l(' ROLLBACK to get_matching_party_sites ;');
12082 l(' RAISE FND_API.G_EXC_ERROR;');
12083 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12084 l(' ROLLBACK to get_matching_party_sites ;');
12085 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12086 l(' WHEN OTHERS THEN');
12087 l(' ROLLBACK to get_matching_party_sites ;');
12088 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12089 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_party_sites'');');
12090 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12091 l(' FND_MSG_PUB.ADD;');
12092 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12093 l('END get_matching_party_sites;');
12094 l('');
12095
12096 -- l(' NULL;');
12097 -- l('END;');
12098
12099 l('-------------------------------------------------------------------------------------');
12100 l('-------------------- BULK MATCH RULE ::: get_matching_contacts --------------------');
12101 l('-------------------------------------------------------------------------------------');
12102 l('');
12103 l('PROCEDURE get_matching_contacts (');
12104 l(' p_rule_id IN NUMBER,');
12105 l(' p_party_id IN NUMBER,');
12106 l(' p_contact_list IN HZ_PARTY_SEARCH.CONTACT_LIST,');
12107 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
12108 l(' p_restrict_sql IN VARCHAR2,');
12109 l(' p_match_type IN VARCHAR2,');
12110 l(' p_dup_contact_id IN NUMBER, ');
12111 l(' x_search_ctx_id OUT NUMBER,');
12112 l(' x_num_matches OUT NUMBER');
12113 l(') IS');
12114 l(' ');
12115 l(' -- Strings to hold the generated Intermedia query strings');
12116 l(' l_party_contains_str VARCHAR2(32000); ');
12117 l(' l_party_site_contains_str VARCHAR2(32000);');
12118 l(' l_contact_contains_str VARCHAR2(32000);');
12119 l(' l_contact_pt_contains_str VARCHAR2(32000);');
12120 l(' l_tmp VARCHAR2(32000);');
12121 l('');
12122 l(' -- Other local variables');
12123 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
12124 l(' l_match_idx NUMBER;');
12125 l(' l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
12126 l(' -- For Score calculation');
12127 l(' l_max_score NUMBER;');
12128 l(' l_entered_max_score NUMBER;');
12129 l(' FIRST BOOLEAN;');
12130 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
12131 l('');
12132 FOR TX IN (
12133 SELECT distinct f.staged_attribute_column
12134 FROM hz_trans_functions_vl f, hz_secondary_trans st,
12135 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12136 WHERE sa.match_rule_id = p_rule_id
12137 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12138 AND st.function_id = f.function_id
12139 AND (a.ENTITY_NAME='CONTACTS' OR a.ENTITY_NAME='CONTACT_POINTS')
12140 AND a.attribute_id = sa.attribute_id) LOOP
12141 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12142 END LOOP;
12143 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
12144 l('');
12145 l(' l_score NUMBER;');
12146 l(' l_idx NUMBER;');
12147 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
12148 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
12149 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
12150 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
12151 l(' l_party_id NUMBER;');
12152 l(' l_ps_party_id NUMBER;');
12153 l(' l_ct_party_id NUMBER;');
12154 l(' l_cpt_party_id NUMBER;');
12155 l(' l_cpt_ps_id NUMBER;');
12156 l(' l_cpt_contact_id NUMBER;');
12157 l(' l_party_site_id NUMBER;');
12158 l(' l_org_contact_id NUMBER;');
12159 l(' l_contact_pt_id NUMBER;');
12160 l('');
12161 l(' defpt NUMBER :=0;');
12162 l(' defps NUMBER :=0;');
12163 l(' defct NUMBER :=0;');
12164 l(' defcpt NUMBER :=0;');
12165 l(' l_index NUMBER;');
12166 l(' l_party_max_score NUMBER;');
12167 l(' l_ps_max_score NUMBER;');
12168 l(' l_contact_max_score NUMBER;');
12169 l(' l_cpt_max_score NUMBER;');
12170 l('');
12174
12171 l(' ');
12172 l(' BEGIN');
12173
12175 d(fnd_log.level_procedure,'get_matching_contacts(+)');
12176 ds(fnd_log.level_statement);
12177 dc(fnd_log.level_statement,'Input Parameters:');
12178 dc(fnd_log.level_statement,'p_match_type','p_match_type');
12179 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
12180 dc(fnd_log.level_statement,'p_dup_contact_id','p_dup_contact_id');
12181 de;
12182
12183 l('');
12184 l(' -- ************************************');
12185 l(' -- STEP 1. Initialization and error checks');
12186 l('');
12187 l(' l_match_str := ''' || l_match_str || ''';');
12188 l(' IF p_match_type = ''AND'' THEN');
12189 l(' l_match_str := '' AND '';');
12190 l(' ELSIF p_match_type = ''OR'' THEN');
12191 l(' l_match_str := '' OR '';');
12192 l(' END IF;');
12193 l(' SAVEPOINT get_matching_contacts ;');
12194 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);');
12195 l(' g_score_until_thresh := false;');
12196 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
12197 l('');
12198 l(' l_contact_contains_str := check_contacts_bulk (p_contact_list);');
12199 l(' l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
12200 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);');
12201
12202 l('');
12203 l(' -- Setup Search Context ID');
12204 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
12205 l(' x_search_ctx_id := l_search_ctx_id;');
12206 l('');
12207
12208 ds(fnd_log.level_statement);
12209 dc(fnd_log.level_statement,'l_match_str','l_match_str');
12210 dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
12211 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
12212 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
12213 de;
12214
12215 l(' IF l_contact_contains_str IS NULL THEN');
12216 l(' defct := 1;');
12217 l(' END IF;');
12218 l(' IF l_contact_pt_contains_str IS NULL THEN');
12219 l(' defcpt := 1;');
12220 l(' END IF;');
12221 l('');
12222 l(' IF l_contact_contains_str IS NOT NULL THEN');
12223 l(' open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL,l_contact_cur);');
12224 l(' LOOP');
12225 l(' FETCH l_contact_cur INTO ');
12226 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
12227 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
12228 l(' IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN ');
12229 l(' l_index := map_id(l_org_contact_id);');
12230 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
12231 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);');
12232
12233 ds(fnd_log.level_statement);
12234 dc(fnd_log.level_statement,'Contact Level Matches');
12235 dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
12236 dc(fnd_log.level_statement,'l_score','l_score');
12237 de;
12238
12239 l(' END IF; ');
12240 l(' END LOOP;');
12241 l(' CLOSE l_contact_cur;');
12242 l(' END IF;');
12243
12244 l('');
12245 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
12246 l(' open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12247 l(' LOOP');
12248 l(' FETCH l_contact_pt_cur INTO ');
12249 l(' l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12250 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12251 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 ');
12252 l(' l_index := map_id(l_cpt_contact_id);');
12253 l(' IF l_match_str = '' OR '' THEN');
12254 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12255 l(' IF NOT H_SCORES.EXISTS(l_index) THEN');
12256 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);');
12257 l(' ELSE');
12258 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
12259 l(' H_SCORES(l_index).TOTAL_SCORE := ');
12260 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
12261 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
12262 l(' END IF;');
12263 l(' END IF;');
12264 l(' ELSE');
12265 l(' IF H_SCORES.EXISTS(l_index) THEN');
12266 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12267 l(' IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
12268 l(' H_SCORES(l_index).TOTAL_SCORE := ');
12269 l(' H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
12270 l(' H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
12271 l(' END IF;');
12272 l(' ELSIF defps=1 THEN');
12273 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12274 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);');
12275 l(' END IF;');
12279 ds(fnd_log.level_statement);
12276 l(' END IF;');
12277 l(' END IF; ');
12278 l(' END LOOP;');
12280 dc(fnd_log.level_statement,'Contact_point Level Matches');
12281 dc(fnd_log.level_statement,'l_org_contact_id','l_cpt_contact_id');
12282 dc(fnd_log.level_statement,'l_score','l_score');
12283 de;
12284 l(' CLOSE l_contact_pt_cur;');
12285 l(' END IF;');
12286 l(' ROLLBACK to get_matching_contacts ;');
12287 l(' x_num_matches := 0;');
12288 l(' l_org_contact_id := H_SCORES.FIRST;');
12289 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
12290 l(' WHILE l_org_contact_id IS NOT NULL LOOP');
12291 l(' IF l_match_str = '' OR '' THEN');
12292 ds(fnd_log.level_statement);
12293 dc(fnd_log.level_statement,'Match Contact ID','H_SCORES(l_org_contact_id).ORG_CONTACT_ID');
12294 dc(fnd_log.level_statement,'Score','round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100)');
12295 de;
12296 -- IF l_purpose = 'S' THEN
12297 l(' IF (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12298 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
12299 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);');
12300 -- ELSE
12301 -- END IF;
12302 l(' x_num_matches := x_num_matches+1;');
12303 l(' END IF;');
12304 l(' ELSE');
12305 -- IF l_purpose = 'S' THEN
12306 l(' IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND');
12307 l(' H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND');
12308 l(' (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12309 l(' INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
12310 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));');
12311 -- ELSE
12312 -- END IF;
12313 l(' x_num_matches := x_num_matches+1;');
12314 l(' END IF;');
12315 l(' END IF;');
12316 l(' l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);');
12317 l(' END LOOP;');
12318
12319 d(fnd_log.level_procedure,'get_matching_contacts(-)');
12320
12321 l('EXCEPTION');
12322 l(' WHEN FND_API.G_EXC_ERROR THEN');
12323 l(' ROLLBACK to get_matching_contacts ;');
12324 l(' RAISE FND_API.G_EXC_ERROR;');
12325 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12326 l(' ROLLBACK to get_matching_contacts ;');
12327 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12328 l(' WHEN OTHERS THEN');
12329 l(' ROLLBACK to get_matching_contacts ;');
12330 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12331 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contacts'');');
12332 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12333 l(' FND_MSG_PUB.ADD;');
12334 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12335 l('END get_matching_contacts;');
12336 l('');
12337 l('-------------------------------------------------------------------------------------');
12338 l('-------------------- BULK MATCH RULE ::: get_matching_contact_points ---------------');
12339 l('-------------------------------------------------------------------------------------');
12340 l('');
12341 l('PROCEDURE get_matching_contact_points (');
12342 l(' p_rule_id IN NUMBER,');
12343 l(' p_party_id IN NUMBER,');
12344 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
12345 l(' p_restrict_sql IN VARCHAR2,');
12346 l(' p_match_type IN VARCHAR2,');
12347 l(' p_dup_contact_point_id IN NUMBER, ');
12348 l(' x_search_ctx_id OUT NUMBER,');
12349 l(' x_num_matches OUT NUMBER');
12350 l(') IS');
12351 l('');
12352 l('');
12353 l(' -- Strings to hold the generated Intermedia query strings');
12354 l(' l_contact_pt_contains_str VARCHAR2(32000);');
12355 l(' l_tmp VARCHAR2(32000);');
12356 l('');
12357 l(' -- Other local variables');
12358 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
12359 l(' l_match_idx NUMBER;');
12360 l(' -- For Score calculation');
12361 l(' l_entered_max_score NUMBER;');
12362 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
12363 l('');
12364 FOR TX IN (
12365 SELECT distinct f.staged_attribute_column
12366 FROM hz_trans_functions_vl f, hz_secondary_trans st,
12367 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12368 WHERE sa.match_rule_id = p_rule_id
12369 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12370 AND st.function_id = f.function_id
12371 AND a.ENTITY_NAME='CONTACT_POINTS'
12372 AND a.attribute_id = sa.attribute_id) LOOP
12373 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12374 END LOOP;
12375 l('');
12376 l(' l_score NUMBER;');
12377 l(' l_idx NUMBER;');
12378 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
12379 l(' l_cpt_party_id NUMBER;');
12380 l(' l_cpt_ps_id NUMBER;');
12381 l(' l_cpt_contact_id NUMBER;');
12382 l(' l_contact_pt_id NUMBER;');
12383 l(' H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
12384 l(' H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;');
12385 l(' H_SCORE HZ_PARTY_SEARCH.IDList;');
12386 l('');
12387 l(' cnt NUMBER :=0;');
12388 l(' l_party_max_score NUMBER;');
12389 l(' l_ps_max_score NUMBER;');
12390 l(' l_contact_max_score NUMBER;');
12394 l(' BEGIN');
12391 l(' l_cpt_max_score NUMBER;');
12392 l('');
12393 l(' ');
12395
12396
12397
12398 d(fnd_log.level_procedure,'get_matching_contact_points(+)');
12399 ds(fnd_log.level_statement);
12400 dc(fnd_log.level_statement,'Input Parameters:');
12401 dc(fnd_log.level_statement,'p_match_type','p_match_type');
12402 dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
12403 dc(fnd_log.level_statement,'p_dup_contact_point_id','p_dup_contact_point_id');
12404 de;
12405
12406 l('');
12407 l(' -- ************************************');
12408 l(' -- STEP 1. Initialization and error checks');
12409 l('');
12410
12411 l(' l_match_str := ''' || l_match_str || ''';');
12412 l(' IF p_match_type = ''AND'' THEN');
12413 l(' l_match_str := '' AND '';');
12414 l(' ELSIF p_match_type = ''OR'' THEN');
12415 l(' l_match_str := '' OR '';');
12416 l(' END IF;');
12417 l('SAVEPOINT get_matching_contact_points ;');
12418 l(' l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, ');
12419 l(' HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
12420 l(' p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
12421 l(' g_score_until_thresh := false;');
12422 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
12423 l('');
12424 l(' l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
12425 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);');
12426
12427 l('');
12428 l(' -- Setup Search Context ID');
12429 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
12430 l(' x_search_ctx_id := l_search_ctx_id;');
12431
12432 ds(fnd_log.level_statement);
12433 dc(fnd_log.level_statement,'l_match_str','l_match_str');
12434 dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
12435 dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
12436 de;
12437
12438 l('');
12439 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
12440 l(' open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12441 l(' cnt := 1;');
12442 l(' LOOP');
12443 l(' FETCH l_contact_pt_cur INTO ');
12444 l(' l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12445 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12446 l(' IF (p_dup_contact_point_id IS NULL OR (');
12447 l(' p_dup_contact_point_id IS NOT NULL AND ');
12448 l(' l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND ');
12449 l(' p_dup_contact_point_id <> l_contact_pt_id)) THEN ');
12450 l(' H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;');
12451 l(' H_PARTY_ID(cnt) := l_cpt_party_id;');
12452 l(' H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12453 l(' cnt := cnt+1;');
12454 ds(fnd_log.level_statement);
12455 dc(fnd_log.level_statement,'Contact Point Matches');
12456 dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
12457 dc(fnd_log.level_statement,'l_score','l_score');
12458 de;
12459
12460 l(' END IF; ');
12461 l(' END LOOP;');
12462 l(' CLOSE l_contact_pt_cur;');
12463
12464 d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
12465 l('ROLLBACK to get_matching_contact_points ;');
12466 l(' x_num_matches := 0; ');
12467 l(' FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP');
12468 ds(fnd_log.level_statement);
12469 dc(fnd_log.level_statement,'Match Contact Point ID','H_CONTACT_POINT_ID(I)');
12470 dc(fnd_log.level_statement,'Score','round((H_SCORE(I)/l_entered_max_score)*100)');
12471 de;
12472 l(' IF (H_SCORE(I)/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12473 l(' INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
12474 l(' l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);');
12475 l(' x_num_matches := x_num_matches + 1; ');
12476 l(' END IF;');
12477 l(' END LOOP; ');
12478 l(' END IF;');
12479
12480 d(fnd_log.level_procedure,'get_matching_contact_points(-)');
12481
12482 l('EXCEPTION');
12483 l(' WHEN FND_API.G_EXC_ERROR THEN');
12484 l(' ROLLBACK to get_matching_contact_points ;');
12485 l(' RAISE FND_API.G_EXC_ERROR;');
12486 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12487 l(' ROLLBACK to get_matching_contact_points ;');
12488 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12489 l(' WHEN OTHERS THEN');
12490 l(' ROLLBACK to get_matching_contact_points ;');
12491 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12492 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contact_points'');');
12493 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12494 l(' FND_MSG_PUB.ADD;');
12495 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12496 l('END get_matching_contact_points;');
12497
12498 l('');
12499 l(' /**********************************************************');
12500 l(' This procedure finds the score details for a specific party that ');
12501 l(' matched ');
12502 l('');
12503 l(' **********************************************************/');
12504 l('');
12505 l('PROCEDURE get_score_details (');
12506 l(' p_rule_id IN NUMBER,');
12507 l(' p_party_id IN NUMBER,');
12508 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
12509 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
12510 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
12511 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
12512 l(' x_search_ctx_id IN OUT NUMBER');
12513 l(') IS');
12514 l('');
12515 l(' -- Strings to hold the generated Intermedia query strings');
12516 l(' l_party_contains_str VARCHAR2(32000); ');
12517 l(' l_party_site_contains_str VARCHAR2(32000);');
12518 l(' l_contact_contains_str VARCHAR2(32000);');
12519 l(' l_contact_pt_contains_str VARCHAR2(32000);');
12520 l(' l_tmp VARCHAR2(32000);');
12521 l('');
12522 l(' -- Other local variables');
12523 l(' l_match_str VARCHAR2(30); -- Match type (AND or OR)');
12524 l(' -- For Score calculation');
12525 l(' l_max_score NUMBER;');
12526 l(' l_entered_max_score NUMBER;');
12527 l(' FIRST BOOLEAN;');
12528 l(' l_search_ctx_id NUMBER; -- Generated Search Context ID');
12529 l('');
12530 FOR TX IN (
12531 SELECT distinct f.staged_attribute_column
12532 FROM hz_trans_functions_vl f, hz_secondary_trans st,
12533 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12534 WHERE sa.match_rule_id = p_rule_id
12535 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12536 AND st.function_id = f.function_id
12537 AND a.attribute_id = sa.attribute_id) LOOP
12538 l(' l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12539 l(' l_max_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12540 END LOOP;
12541 l(' H_SCORES HZ_PARTY_SEARCH.score_list;');
12542 l('');
12543 l(' l_score NUMBER;');
12544 l(' l_match_idx NUMBER;');
12545 l(' l_idx NUMBER;');
12546 l(' l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
12547 l(' l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
12548 l(' l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
12549 l(' l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
12550 l(' l_party_id NUMBER;');
12551 l(' l_ps_party_id NUMBER;');
12552 l(' l_ct_party_id NUMBER;');
12553 l(' l_cpt_party_id NUMBER;');
12554 l(' l_cpt_ps_id NUMBER;');
12555 l(' l_cpt_contact_id NUMBER;');
12556 l(' l_party_site_id NUMBER;');
12557 l(' l_org_contact_id NUMBER;');
12558 l(' l_contact_pt_id NUMBER;');
12559 l(' l_ps_contact_id NUMBER;');
12560 l(' l_max_id NUMBER;');
12561 l(' l_max_idx NUMBER;');
12562 l('');
12563 l(' l_index NUMBER;');
12564 l(' l_party_max_score NUMBER;');
12565 l(' l_ps_max_score NUMBER;');
12566 l(' l_contact_max_score NUMBER;');
12567 l(' l_cpt_max_score NUMBER;');
12568 l('');
12569 l(' ');
12570 l(' BEGIN');
12571 l('');
12572
12573 d(fnd_log.level_statement,'get_score_details(+)');
12574 l(' -- ************************************');
12575 l(' -- STEP 1. Initialization and error checks');
12576 l('');
12577 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);');
12578 l(' g_score_until_thresh := false;');
12579 l(' IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
12580
12581 l(' l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
12582 l(' l_contact_contains_str := check_contacts_bulk (p_contact_list);');
12583 l(' l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
12584
12585 l(' init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
12586 l('');
12587 l(' -- Setup Search Context ID');
12588 l(' IF x_search_ctx_id IS NULL THEN');
12589 l(' SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
12590 l(' x_search_ctx_id := l_search_ctx_id;');
12591 l(' ELSE');
12592 l(' l_search_ctx_id := x_search_ctx_id;');
12593 l(' END IF;');
12594 l('');
12595 l(' open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);');
12596 l(' LOOP ');
12597 l(' FETCH l_party_cur INTO');
12598 l(' l_party_id '||l_p_into_list||';');
12599 l(' EXIT WHEN l_party_cur%NOTFOUND;');
12600 IF l_p_param_list IS NOT NULL THEN
12601 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);');
12602 END IF;
12603 l(' END LOOP;');
12604 l(' CLOSE l_party_cur;');
12605 l('');
12606 l(' IF l_party_site_contains_str IS NOT NULL THEN');
12607 l(' l_max_score := 0;');
12608 l(' l_max_id := 0;');
12609 l(' l_max_idx := 0;');
12610 l(' open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,l_party_site_cur);');
12611 l(' LOOP');
12612 l(' FETCH l_party_site_cur INTO ');
12613 l(' l_party_site_id, l_ps_party_id,l_ps_contact_id '||l_ps_into_list||';');
12614 l(' EXIT WHEN l_party_site_cur%NOTFOUND;');
12615 l(' l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
12616 l(' IF l_score > l_max_score THEN');
12617 l(' l_max_score := l_score;');
12618 l(' l_max_id := l_party_site_id;');
12619 l(' l_max_idx := l_match_idx;');
12620 FOR TX IN (
12621 SELECT distinct f.staged_attribute_column
12622 FROM hz_trans_functions_vl f, hz_secondary_trans st,
12623 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12624 WHERE sa.match_rule_id = p_rule_id
12625 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12626 AND st.function_id = f.function_id
12627 AND a.entity_name = 'PARTY_SITES'
12628 AND a.attribute_id = sa.attribute_id) LOOP
12629 l(' l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
12630 END LOOP;
12631 l(' END IF;');
12632 l(' END LOOP;');
12633 l(' CLOSE l_party_site_cur;');
12634 l(' IF l_max_score>0 THEN');
12635 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);');
12636 l(' END IF;');
12637 l(' END IF;');
12638 l('');
12639 l(' IF l_contact_contains_str IS NOT NULL THEN');
12640 l(' l_max_score := 0;');
12641 l(' l_max_id := 0;');
12642 l(' l_max_idx := 0;');
12643 l(' open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL,l_contact_cur);');
12644 l(' LOOP');
12645 l(' FETCH l_contact_cur INTO ');
12646 l(' l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
12647 l(' EXIT WHEN l_contact_cur%NOTFOUND;');
12648 l(' l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
12649 l(' IF l_score > l_max_score THEN');
12650 l(' l_max_score := l_score;');
12651 l(' l_max_id := l_org_contact_id;');
12652 l(' l_max_idx := l_match_idx;');
12653 FOR TX IN (
12654 SELECT distinct f.staged_attribute_column
12655 FROM hz_trans_functions_vl f, hz_secondary_trans st,
12656 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12657 WHERE sa.match_rule_id = p_rule_id
12658 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12659 AND st.function_id = f.function_id
12660 AND a.entity_name = 'CONTACTS'
12661 AND a.attribute_id = sa.attribute_id) LOOP
12662 l(' l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
12663 END LOOP;
12664 l(' END IF;');
12665 l(' END LOOP;');
12666 l(' CLOSE l_contact_cur;');
12667 l(' IF l_max_score>0 THEN');
12668 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);');
12669 l(' END IF;');
12670 l(' END IF;');
12671 l('');
12672 l(' IF l_contact_pt_contains_str IS NOT NULL THEN');
12673 l(' l_max_score := 0;');
12674 l(' l_max_id := 0;');
12675 l(' l_max_idx := 0;');
12676 l(' open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12677 l(' LOOP');
12678 l(' FETCH l_contact_pt_cur INTO ');
12679 l(' l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12680 l(' EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12681 l(' l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12682 l(' IF l_score > l_max_score THEN');
12683 l(' l_max_score := l_score;');
12684 l(' l_max_id := l_contact_pt_id;');
12685 l(' l_max_idx := l_match_idx;');
12686 FOR TX IN (
12687 SELECT distinct f.staged_attribute_column
12688 FROM hz_trans_functions_vl f, hz_secondary_trans st,
12689 hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12690 WHERE sa.match_rule_id = p_rule_id
12691 AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12692 AND st.function_id = f.function_id
12693 AND a.entity_name = 'CONTACT_POINTS'
12694 AND a.attribute_id = sa.attribute_id) LOOP
12695 l(' l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
12696 END LOOP;
12697 l(' END IF;');
12698 l(' END LOOP;');
12699 l(' IF l_max_score>0 THEN');
12700 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);');
12701 l(' END IF;');
12702 l(' CLOSE l_contact_pt_cur;');
12703 l(' END IF;');
12704 l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12705 l(' DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12706 l(' DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12707 l(' DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12708 l(' DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12709 d(fnd_log.level_procedure,'get_score_details(-)');
12710
12711
12712 l('EXCEPTION');
12713 l(' WHEN FND_API.G_EXC_ERROR THEN');
12714 l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12715 l(' DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12716 l(' DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12717 l(' DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12718 l(' DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12719 l(' RAISE FND_API.G_EXC_ERROR;');
12720 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12721 l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12722 l(' DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12723 l(' DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12724 l(' DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12725 l(' DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12726 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12727 l(' WHEN OTHERS THEN');
12728 l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12729 l(' DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12730 l(' DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12731 l(' DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12732 l(' DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12733 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12734 l(' FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_score_details'');');
12735 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12736 l(' FND_MSG_PUB.ADD;');
12737 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12738 l('END get_score_details;');
12739 l('');
12740
12741 generate_acquire_proc(p_rule_id, 'Q');
12742
12743
12744 generate_party_map_proc_bulk('MAP_PARTY_REC', p_rule_id);
12745 l('');
12746 generate_map_proc_bulk('PARTY_SITES', 'MAP_PARTY_SITE_REC', p_rule_id);
12747 l('');
12748 generate_map_proc_bulk('CONTACTS', 'MAP_CONTACT_REC', p_rule_id);
12749 l('');
12750 generate_map_proc_bulk('CONTACT_POINTS', 'MAP_CONTACT_POINT_REC', p_rule_id);
12751 l('');
12752 generate_check_proc(p_rule_id);
12753
12754
12755 generate_check_staged (p_rule_id);
12756 /*l(' PROCEDURE enable_debug IS');
12757
12758 l(' BEGIN');
12759 l(' g_debug_count := g_debug_count + 1;');
12760
12761 l(' IF g_debug_count = 1 THEN');
12762 l(' IF fnd_profile.value(''HZ_API_FILE_DEBUG_ON'') = ''Y'' OR');
12763 l(' fnd_profile.value(''HZ_API_DBMS_DEBUG_ON'') = ''Y''');
12764 l(' THEN');
12765 l(' hz_utility_v2pub.enable_debug;');
12766 l(' g_debug := TRUE;');
12767 d('PKG: '||p_pkg_name||' (+)');
12768 l(' END IF;');
12769 l(' END IF;');
12770 l(' END enable_debug;');
12771
12772 l(' PROCEDURE disable_debug IS');
12773
12774 l(' BEGIN');
12775
12776 l(' IF g_debug THEN');
12777 l(' g_debug_count := g_debug_count - 1;');
12778
12779 l(' IF g_debug_count = 0 THEN');
12780 d('PKG: '||p_pkg_name||' (-)');
12781 l(' hz_utility_v2pub.disable_debug;');
12782 l(' g_debug := FALSE;');
12783 l(' END IF;');
12784 l(' END IF;');
12785
12786 l(' END disable_debug;');
12787 */
12788
12789 l('END;');
12790 l('');
12791 END gen_pkg_body_bulk ;
12792
12793
12794
12795
12796
12797
12798
12799 FUNCTION has_trx_context(proc VARCHAR2) RETURN BOOLEAN IS
12800
12801 l_sql VARCHAR2(255);
12802 l_entity VARCHAR2(255);
12803 l_procedure VARCHAR2(255);
12804 l_attribute VARCHAR2(255);
12805 c NUMBER;
12806 n NUMBER;
12807 l_custom BOOLEAN;
12808
12809 BEGIN
12810 c := dbms_sql.open_cursor;
12811 l_sql := 'select ' || proc ||
12812 '(:attrval,:lang,:attr,:entity,:ctx) from dual';
12813 dbms_sql.parse(c,l_sql,2);
12814 DBMS_SQL.BIND_VARIABLE(c,':attrval','x');
12815 DBMS_SQL.BIND_VARIABLE(c,':lang','x');
12816 DBMS_SQL.BIND_VARIABLE(c,':attr','x');
12817 DBMS_SQL.BIND_VARIABLE(c,':entity','x');
12818 DBMS_SQL.BIND_VARIABLE(c,':ctx','x');
12819 n:=DBMS_SQL.execute(c);
12820 dbms_sql.close_cursor(c);
12821 RETURN TRUE;
12822 EXCEPTION
12823 WHEN OTHERS THEN
12824 dbms_sql.close_cursor(c);
12825 RETURN FALSE;
12826 END;
12827
12828 --VJN Introduced for Bulk Match Rules
12829 PROCEDURE generate_party_map_proc_bulk (
12830 p_proc_name IN VARCHAR2,
12831 p_rule_id IN NUMBER
12832 ) IS
12833
12834 NONE BOOLEAN := TRUE;
12835 trxctx BOOLEAN := FALSE;
12836 INSERT_TRFNS varchar2(32000);
12837 INSERT_TRFN_VALUES varchar2(32000);
12838
12839 BEGIN
12840
12841 l('');
12842 l('/************************************************');
12843 l(' This procedure maps a search record from the logical');
12844 l(' record structure to the stage schema structure ');
12845 l(' for the PARTY Entity after applying ');
12846 l(' the defined transformations');
12847 l('************************************************/');
12848 l('');
12849 l('PROCEDURE ' || p_proc_name || '( ');
12850 l(' p_search_ctx IN BOOLEAN,');
12851 l(' p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, ');
12852 l(' x_entered_max_score OUT NUMBER,');
12853 l(' x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type');
12854 l(' ) IS ');
12855 l(' tmp VARCHAR2(4000);');
12856 l('BEGIN');
12857 ldbg_s('Inside Calling Procedure - '||p_proc_name);
12858 l(' IF p_search_ctx THEN');
12859 l(' x_entered_max_score:=0;');
12860 for SECATTRS IN (
12861 SELECT a.ATTRIBUTE_NAME, SCORE
12862 FROM HZ_TRANS_ATTRIBUTES_VL a,
12863 HZ_MATCH_RULE_SECONDARY sattr
12864 WHERE sattr.MATCH_RULE_ID = p_rule_id
12865 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12866 AND a.ENTITY_NAME = 'PARTY') LOOP
12867 l(' IF p_search_rec.'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12868 l(' x_entered_max_score := x_entered_max_score+'||SECATTRS.SCORE||';');
12869 l(' END IF;');
12870 END LOOP;
12871 l(' END IF;');
12872
12873 for FUNCS IN (
12874 SELECT a.ATTRIBUTE_NAME,
12875 f.PROCEDURE_NAME,
12876 f.STAGED_ATTRIBUTE_COLUMN
12877 FROM HZ_TRANS_FUNCTIONS_VL f,
12878 HZ_TRANS_ATTRIBUTES_VL a,
12879 HZ_MATCH_RULE_PRIMARY pattr,
12880 HZ_PRIMARY_TRANS pfunc
12881 WHERE pattr.MATCH_RULE_ID = p_rule_id
12882 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12883 AND a.ENTITY_NAME = 'PARTY'
12884 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
12885 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
12886
12887 UNION
12888
12889 SELECT a.ATTRIBUTE_NAME,
12890 f.PROCEDURE_NAME,
12891 f.STAGED_ATTRIBUTE_COLUMN
12892 FROM HZ_TRANS_FUNCTIONS_VL f,
12893 HZ_TRANS_ATTRIBUTES_VL a,
12894 HZ_MATCH_RULE_SECONDARY sattr,
12895 HZ_SECONDARY_TRANS sfunc
12896 WHERE sattr.MATCH_RULE_ID = p_rule_id
12897 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12898 AND a.ENTITY_NAME = 'PARTY'
12899 AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
12900 AND sfunc.FUNCTION_ID = f.FUNCTION_ID
12901
12902 UNION
12903
12904 SELECT a.attribute_name,
12905 f.PROCEDURE_NAME,
12906 f.STAGED_ATTRIBUTE_COLUMN
12907 FROM HZ_TRANS_FUNCTIONS_VL f,
12908 HZ_TRANS_ATTRIBUTES_VL a
12909 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12910 AND a.entity_name = 'PARTY'
12911 AND a.attribute_name='PARTY_TYPE'
12912 AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
12913 AND nvl(f.active_flag,'Y')='Y'
12914 AND ROWNUM=1
12915 )
12916 LOOP
12917 NONE := FALSE;
12918 trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
12919 l(' IF p_search_ctx THEN');
12920 l(' IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12921 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
12922 l(' ' || FUNCS.PROCEDURE_NAME ||'(');
12923 l(' p_search_rec.'||FUNCS.ATTRIBUTE_NAME);
12924 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
12925 IF trxctx THEN
12926 l(' ,''PARTY'','''||g_context||''');');
12927 ELSE
12928 l(' ,''PARTY'');');
12929 END IF;
12930 l(' ELSE');
12931 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
12932 l(' END IF;');
12933 IF NOT trxctx THEN
12934 l(' END IF;');
12935 ELSE
12936 l(' ELSE');
12937 l(' IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12938 l(' tmp :=' || FUNCS.PROCEDURE_NAME ||'(');
12939 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
12940 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
12941 l(' ,''PARTY'',''SCORE'');');
12942 l(' IF tmp IS NOT NULL THEN');
12943 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
12944 l(' END IF;');
12945 l(' END IF;');
12946 l(' END IF;');
12947 END IF;
12948 INSERT_TRFNS := INSERT_TRFNS ||','||FUNCS.STAGED_ATTRIBUTE_COLUMN;
12949 INSERT_TRFN_VALUES := INSERT_TRFN_VALUES ||','||'x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
12950 END LOOP;
12951
12952 IF NOT NONE THEN
12953 l('IF p_search_ctx THEN');
12954 l(' insert into HZ_SRCH_PARTIES(batch_id,party_id, party_osr,party_os' || INSERT_TRFNS
12955 || ')'||' values(-1,-1,-1,-1'|| INSERT_TRFN_VALUES ||');');
12956 l('END IF;');
12957 END IF;
12958
12959 IF NONE THEN
12960 l(' NULL;');
12961 END IF;
12962
12963
12964 l('EXCEPTION');
12965 l(' WHEN OTHERS THEN');
12966 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
12967 l(' FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
12968 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
12969 l(' FND_MSG_PUB.ADD;');
12970 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12971 l('END;');
12972
12973 END generate_party_map_proc_bulk ;
12974
12975 PROCEDURE generate_map_proc (
12976 p_entity IN VARCHAR2,
12977 p_proc_name IN VARCHAR2,
12978 p_rule_id IN NUMBER
12979 ) IS
12980
12981 NONE BOOLEAN := TRUE;
12982 trxctx BOOLEAN := FALSE;
12983 BEGIN
12984
12985 l('');
12986 l('/************************************************');
12987 l(' This procedure maps a search record from the logical');
12988 l(' record structure to the stage schema structure ');
12989 l(' for the '||p_entity || ' Entity after applying ');
12990 l(' the defined transformations');
12991 l('************************************************/');
12992 l('');
12993 l('PROCEDURE ' || p_proc_name || '( ');
12994 l(' p_search_ctx IN BOOLEAN,');
12995 IF p_entity = 'PARTY_SITES' THEN
12996 l(' p_search_list IN HZ_PARTY_SEARCH.party_site_list, ');
12997 l(' x_entered_max_score OUT NUMBER,');
12998 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list');
12999 l(' ) IS ');
13000 ELSIF p_entity = 'CONTACTS' THEN
13001 l(' p_search_list IN HZ_PARTY_SEARCH.contact_list, ');
13002 l(' x_entered_max_score OUT NUMBER,');
13003 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list');
13004 l(' ) IS ');
13005 ELSIF p_entity = 'CONTACT_POINTS' THEN
13006 l(' p_search_list IN HZ_PARTY_SEARCH.contact_point_list, ');
13007 l(' x_entered_max_score OUT NUMBER,');
13008 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list');
13009 l(' ) IS ');
13010 END IF;
13011 l(' l_current_max_score NUMBER;');
13012 l(' tmp VARCHAR2(4000);');
13013 if l_purpose IN ('S','W') AND p_entity = 'CONTACT_POINTS' then
13014 l(' TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);');
13015 l(' l_cnt_pt_type_index INDEX_VARCHAR100_TBL;');
13016
13017 l(' TYPE CONTACT_PT_REC_TYPE IS RECORD (');
13018 l(' contact_pt_type VARCHAR2(100),');
13019 l(' max_score NUMBER) ;');
13020
13021 l(' TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;');
13022 l(' l_cnt_pt_type contact_pt_list;');
13023
13024 l(' N NUMBER := 1;');
13025 l(' x_modify VARCHAR2(1);');
13026 end if;
13027 l('BEGIN');
13028 ldbg_s('Inside Calling Procedure - '||p_proc_name);
13029 ldbg_s('p_entity - '||p_entity);
13030 l(' IF p_search_ctx THEN');
13031 IF p_entity = 'PARTY_SITES' THEN
13032 l(' g_ps_den_only:=TRUE;');
13033 END IF;
13034 l(' x_entered_max_score:=0;');
13035 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13036 l(' l_current_max_score:=0;');
13037 IF p_entity = 'CONTACT_POINTS' THEN
13038 l(' x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;');
13039 END IF;
13040 for SECATTRS IN (
13041 SELECT a.ATTRIBUTE_NAME, SCORE, nvl(a.denorm_flag,'N') DENORM_FLAG
13042 FROM HZ_TRANS_ATTRIBUTES_VL a,
13043 HZ_MATCH_RULE_SECONDARY sattr
13044 WHERE sattr.MATCH_RULE_ID = p_rule_id
13045 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13046 AND a.ENTITY_NAME = p_entity) LOOP
13047 l(' IF p_search_list(I).'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13048 l(' l_current_max_score := l_current_max_score+'||SECATTRS.SCORE||';');
13049 IF p_entity = 'PARTY_SITES' AND SECATTRS.DENORM_FLAG='N' THEN
13053 l(' END IF;');
13050 l(' g_ps_den_only:=FALSE;');
13051 END IF;
13052
13054
13055 END LOOP;
13056 if l_purpose IN ('S','W') AND p_entity = 'CONTACT_POINTS' then
13057 l(' x_modify := ''N'';');
13058 l(' FOR J IN 1..l_cnt_pt_type.count LOOP');
13059 l(' if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then');
13060 l(' x_modify := ''Y'';');
13061 l(' IF l_cnt_pt_type(J).max_score<l_current_max_score THEN');
13062 l(' l_cnt_pt_type(J).max_score :=l_current_max_score;');
13063 l(' EXIT;');
13064 l(' END IF;');
13065 l(' end if;');
13066 l(' END LOOP;');
13067 l(' if x_modify=''N'' then');
13068 l(' l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;');
13069 l(' l_cnt_pt_type(N).max_score := l_current_max_score;');
13070 l(' N:= N+1;');
13071 l(' end if;');
13072
13073 else
13074 l(' IF l_current_max_score>x_entered_max_score THEN');
13075 l(' x_entered_max_score:=l_current_max_score;');
13076 l(' END IF;');
13077 end if;
13078
13079 l(' END LOOP;');
13080 if l_purpose IN ('S','W') AND p_entity = 'CONTACT_POINTS' then
13081 l(' FOR M IN 1..l_cnt_pt_type.count LOOP');
13082 l(' x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;');
13083 l(' END LOOP;');
13084 end if;
13085 l(' END IF;');
13086
13087
13088 for FUNCS IN (
13089 SELECT a.ATTRIBUTE_NAME,
13090 f.PROCEDURE_NAME,
13091 f.STAGED_ATTRIBUTE_COLUMN
13092 FROM HZ_TRANS_FUNCTIONS_VL f,
13093 HZ_TRANS_ATTRIBUTES_VL a,
13094 HZ_MATCH_RULE_PRIMARY pattr,
13095 HZ_PRIMARY_TRANS pfunc
13096 WHERE pattr.MATCH_RULE_ID = p_rule_id
13097 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13098 AND a.ENTITY_NAME = p_entity
13099 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13100 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13101
13102 UNION
13103
13104 SELECT a.ATTRIBUTE_NAME,
13105 f.PROCEDURE_NAME,
13106 f.STAGED_ATTRIBUTE_COLUMN
13107 FROM HZ_TRANS_FUNCTIONS_VL f,
13108 HZ_TRANS_ATTRIBUTES_VL a,
13109 HZ_MATCH_RULE_SECONDARY sattr,
13110 HZ_SECONDARY_TRANS sfunc
13111 WHERE sattr.MATCH_RULE_ID = p_rule_id
13112 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13113 AND a.ENTITY_NAME = p_entity
13114 AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13115 AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13116 )
13117 LOOP
13118 NONE := FALSE;
13119 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13120 l(' IF p_search_ctx THEN');
13121 trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
13122 l(' IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13123 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13124 l(' ' || FUNCS.PROCEDURE_NAME ||'(');
13125 l(' p_search_list(I).'||FUNCS.ATTRIBUTE_NAME);
13126 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13127 IF NOT trxctx THEN
13128 l(' ,''' ||p_entity||''');');
13129 ELSE
13130 l(' ,''' ||p_entity||''','''||g_context||''');');
13131 END IF;
13132 l(' ELSE');
13133 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13134 l(' END IF;');
13135 IF NOT trxctx THEN
13136 l(' END IF;');
13137 ELSE
13138 l(' ELSE');
13139 l(' IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13140 l(' tmp := ' || FUNCS.PROCEDURE_NAME ||'(');
13141 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
13142 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13143 l(' ,''' ||p_entity||''',''SCORE'');');
13144 l(' IF tmp IS NOT NULL THEN');
13145 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
13146 l(' END IF;');
13147 l(' END IF;');
13148 l(' END IF;');
13149 END IF;
13150 l(' END LOOP;');
13151 END LOOP;
13152 IF NONE THEN
13153 l(' NULL;');
13154 END IF;
13155
13156 l('EXCEPTION');
13157 l(' WHEN OTHERS THEN');
13158 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13159 l(' FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13160 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13161 l(' FND_MSG_PUB.ADD;');
13162 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13163 l('END;');
13164
13165 END generate_map_proc;
13166
13167
13168 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
13169 -- OF THE GLOBAL CONDITION RECORD FOR REGULAR MATCH RULES
13170
13171 PROCEDURE generate_ent_cond_pop_rec_proc (
13172 p_entity IN VARCHAR2,
13173 p_rule_id IN NUMBER
13174 ) IS
13175
13176 p_proc_name VARCHAR2(200);
13177 NONE BOOLEAN := TRUE;
13178
13179
13180 BEGIN
13181
13182 p_proc_name := 'POP_'||p_entity||'_COND_REC';
13183 l('');
13184 l('/************************************************');
13185 l(' This procedure populates global cond record');
13186 l(' for the '||p_entity || ' Entity ');
13187 l('************************************************/');
13191 l(' p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type ');
13188 l('');
13189 l('PROCEDURE ' || p_proc_name||'(');
13190 IF p_entity = 'PARTY' THEN
13192 l(' ) IS ');
13193 ELSIF p_entity = 'PARTY_SITES' THEN
13194 l(' p_search_list IN HZ_PARTY_SEARCH.party_site_list ');
13195 l(' ) IS ');
13196 ELSIF p_entity = 'CONTACTS' THEN
13197 l(' p_search_list IN HZ_PARTY_SEARCH.contact_list ');
13198 l(' ) IS ');
13199 ELSIF p_entity = 'CONTACT_POINTS' THEN
13200 l(' p_search_list IN HZ_PARTY_SEARCH.contact_point_list ');
13201 l(' ) IS ');
13202 END IF;
13203
13204 l('BEGIN');
13205
13206 for FUNCS IN (
13207 SELECT a.ATTRIBUTE_ID, a.ATTRIBUTE_NAME
13208 FROM HZ_TRANS_FUNCTIONS_VL f,
13209 HZ_TRANS_ATTRIBUTES_VL a,
13210 HZ_MATCH_RULE_PRIMARY pattr,
13211 HZ_PRIMARY_TRANS pfunc
13212 WHERE pattr.MATCH_RULE_ID = p_rule_id
13213 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13214 AND a.ENTITY_NAME = p_entity
13215 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13216 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13217
13218 UNION
13219
13220 SELECT a.ATTRIBUTE_ID, a.ATTRIBUTE_NAME
13221 FROM HZ_TRANS_FUNCTIONS_VL f,
13222 HZ_TRANS_ATTRIBUTES_VL a,
13223 HZ_MATCH_RULE_SECONDARY sattr,
13224 HZ_SECONDARY_TRANS sfunc
13225 WHERE sattr.MATCH_RULE_ID = p_rule_id
13226 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13227 AND a.ENTITY_NAME = p_entity
13228 AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13229 AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13230 )
13231 LOOP
13232 IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( FUNCS.attribute_id)
13233 THEN
13234 NONE := FALSE ;
13235 l('---------POPULATE THE GLOBAL WORD CONDITION REC FOR ' || p_entity || '-------------');
13236 IF p_entity = 'PARTY'
13237 THEN
13238
13239 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||FUNCS.attribute_id||','||'p_search_rec.'||FUNCS.attribute_name||');');
13240
13241 ELSE
13242 l('------ Populate global condition record only if search list is not empty -----------');
13243 l(' IF p_search_list.COUNT > 0');
13244 l(' THEN') ;
13245 l(' HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||FUNCS.attribute_id||','||'p_search_list(1).'||FUNCS.attribute_name||');');
13246 l('END IF ;');
13247 END IF;
13248 END IF ;
13249 END LOOP;
13250
13251 IF NONE
13252 THEN
13253 l( 'NULL ;');
13254 END IF ;
13255
13256 l('EXCEPTION');
13257 l(' WHEN OTHERS THEN');
13258 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13259 l(' FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13260 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13261 l(' FND_MSG_PUB.ADD;');
13262 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13263 l('END;');
13264
13265 END ;
13266
13267 PROCEDURE generate_map_proc_bulk (
13268 p_entity IN VARCHAR2,
13269 p_proc_name IN VARCHAR2,
13270 p_rule_id IN NUMBER
13271 ) IS
13272
13273 NONE BOOLEAN := TRUE;
13274 trxctx BOOLEAN := FALSE;
13275 INSERT_TRFNS varchar2(32000);
13276 INSERT_TRFN_VALUES varchar2(32000);
13277 BEGIN
13278
13279 l('');
13280 l('/************************************************');
13281 l(' This procedure maps a search record from the logical');
13282 l(' record structure to the stage schema structure ');
13283 l(' for the '||p_entity || ' Entity after applying ');
13284 l(' the defined transformations');
13285 l('************************************************/');
13286 l('');
13287 l('PROCEDURE ' || p_proc_name || '( ');
13288 l(' p_search_ctx IN BOOLEAN,');
13289 IF p_entity = 'PARTY_SITES' THEN
13290 l(' p_search_list IN HZ_PARTY_SEARCH.party_site_list, ');
13291 l(' x_entered_max_score OUT NUMBER,');
13292 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list');
13293 l(' ) IS ');
13294 ELSIF p_entity = 'CONTACTS' THEN
13295 l(' p_search_list IN HZ_PARTY_SEARCH.contact_list, ');
13296 l(' x_entered_max_score OUT NUMBER,');
13297 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list');
13298 l(' ) IS ');
13299 ELSIF p_entity = 'CONTACT_POINTS' THEN
13300 l(' p_search_list IN HZ_PARTY_SEARCH.contact_point_list, ');
13301 l(' x_entered_max_score OUT NUMBER,');
13302 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list');
13303 l(' ) IS ');
13304 END IF;
13305 l(' l_current_max_score NUMBER;');
13306 l(' tmp VARCHAR2(4000);');
13307 l('BEGIN');
13308 ldbg_s('Inside Calling Procedure - '||p_proc_name);
13309 ldbg_s('p_entity - '||p_entity);
13310 l(' IF p_search_ctx THEN');
13311 l(' x_entered_max_score:=0;');
13312 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13313 l(' l_current_max_score:=0;');
13314 IF p_entity = 'CONTACT_POINTS' THEN
13315 l(' x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;');
13316 END IF;
13317 for SECATTRS IN (
13318 SELECT a.ATTRIBUTE_NAME, SCORE
13319 FROM HZ_TRANS_ATTRIBUTES_VL a,
13320 HZ_MATCH_RULE_SECONDARY sattr
13321 WHERE sattr.MATCH_RULE_ID = p_rule_id
13322 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13323 AND a.ENTITY_NAME = p_entity) LOOP
13324 l(' IF p_search_list(I).'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13325 l(' l_current_max_score := l_current_max_score+'||SECATTRS.SCORE||';');
13329 l(' x_entered_max_score:=l_current_max_score;');
13326 l(' END IF;');
13327 END LOOP;
13328 l(' IF l_current_max_score>x_entered_max_score THEN');
13330 l(' END IF;');
13331 l(' END LOOP;');
13332 l(' END IF;');
13333
13334 for FUNCS IN (
13335 SELECT a.ATTRIBUTE_NAME,
13336 f.PROCEDURE_NAME,
13337 f.STAGED_ATTRIBUTE_COLUMN
13338 FROM HZ_TRANS_FUNCTIONS_VL f,
13339 HZ_TRANS_ATTRIBUTES_VL a,
13340 HZ_MATCH_RULE_PRIMARY pattr,
13341 HZ_PRIMARY_TRANS pfunc
13342 WHERE pattr.MATCH_RULE_ID = p_rule_id
13343 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13344 AND a.ENTITY_NAME = p_entity
13345 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13346 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13347
13348 UNION
13349
13350 SELECT a.ATTRIBUTE_NAME,
13351 f.PROCEDURE_NAME,
13352 f.STAGED_ATTRIBUTE_COLUMN
13353 FROM HZ_TRANS_FUNCTIONS_VL f,
13354 HZ_TRANS_ATTRIBUTES_VL a,
13355 HZ_MATCH_RULE_SECONDARY sattr,
13356 HZ_SECONDARY_TRANS sfunc
13357 WHERE sattr.MATCH_RULE_ID = p_rule_id
13358 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13359 AND a.ENTITY_NAME = p_entity
13360 AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13361 AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13362 )
13363 LOOP
13364 NONE := FALSE;
13365 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13366 l(' IF p_search_ctx THEN');
13367 trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
13368 l(' IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13369 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13370 l(' ' || FUNCS.PROCEDURE_NAME ||'(');
13371 l(' p_search_list(I).'||FUNCS.ATTRIBUTE_NAME);
13372 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13373 IF NOT trxctx THEN
13374 l(' ,''' ||p_entity||''');');
13375 ELSE
13376 l(' ,''' ||p_entity||''','''||g_context||''');');
13377 END IF;
13378 l(' ELSE');
13379 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13380 l(' END IF;');
13381 IF NOT trxctx THEN
13382 l(' END IF;');
13383 ELSE
13384 l(' ELSE');
13385 l(' IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13386 l(' tmp := ' || FUNCS.PROCEDURE_NAME ||'(');
13387 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
13388 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13389 l(' ,''' ||p_entity||''',''SCORE'');');
13390 l(' IF tmp IS NOT NULL THEN');
13391 l(' x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
13392 l(' END IF;');
13393 l(' END IF;');
13394 l(' END IF;');
13395 END IF;
13396 l(' END LOOP;');
13397 END LOOP;
13398
13399 -- VJN : For inserting into the Search Tables
13400 IF NOT NONE THEN
13401
13402 for FUNCS IN (
13403 SELECT a.ATTRIBUTE_NAME,
13404 f.PROCEDURE_NAME,
13405 f.STAGED_ATTRIBUTE_COLUMN
13406 FROM HZ_TRANS_FUNCTIONS_VL f,
13407 HZ_TRANS_ATTRIBUTES_VL a,
13408 HZ_MATCH_RULE_PRIMARY pattr,
13409 HZ_PRIMARY_TRANS pfunc
13410 WHERE pattr.MATCH_RULE_ID = p_rule_id
13411 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13412 AND a.ENTITY_NAME = p_entity
13413 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13414 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13415
13416 UNION
13417
13418 SELECT a.ATTRIBUTE_NAME,
13419 f.PROCEDURE_NAME,
13420 f.STAGED_ATTRIBUTE_COLUMN
13421 FROM HZ_TRANS_FUNCTIONS_VL f,
13422 HZ_TRANS_ATTRIBUTES_VL a,
13423 HZ_MATCH_RULE_SECONDARY sattr,
13424 HZ_SECONDARY_TRANS sfunc
13425 WHERE sattr.MATCH_RULE_ID = p_rule_id
13426 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13427 AND a.ENTITY_NAME = p_entity
13428 AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13429 AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13430 )
13431 LOOP
13432
13433 NONE := FALSE;
13434 INSERT_TRFNS := INSERT_TRFNS ||','||FUNCS.STAGED_ATTRIBUTE_COLUMN;
13435 INSERT_TRFN_VALUES := INSERT_TRFN_VALUES ||','||'x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
13436
13437 END LOOP;
13438
13439 IF p_entity = 'PARTY_SITES'
13440 THEN
13441 l('IF p_search_ctx THEN');
13442 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13443 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
13444 || ')'||' values(-1,-1,-1,-1,-1,-1,-1,''Y'''|| INSERT_TRFN_VALUES ||');');
13445 l(' END LOOP;');
13446 l('END IF;');
13447 END IF;
13448
13449 IF p_entity = 'CONTACTS'
13450 THEN
13451 l('IF p_search_ctx THEN');
13452 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13456 l('END IF;');
13453 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
13454 || ')'||' values(-1,-1,-1,-1,-1,-1,-1,''Y'''|| INSERT_TRFN_VALUES ||');');
13455 l(' END LOOP;');
13457 END IF;
13458
13459 IF p_entity = 'CONTACT_POINTS'
13460 THEN
13461 l('IF p_search_ctx THEN');
13462 l(' FOR I IN 1..p_search_list.COUNT LOOP');
13463 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
13464 || ')'||' values(-1,-1,-1,-1,-1,-1,-1,-1,''Y'''|| INSERT_TRFN_VALUES ||');');
13465 l(' END LOOP;');
13466 l('END IF; ');
13467 END IF;
13468 END IF;
13469
13470 IF NONE THEN
13471 l(' NULL;');
13472 END IF;
13473
13474 l('EXCEPTION');
13475 l(' WHEN OTHERS THEN');
13476 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13477 l(' FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13478 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13479 l(' FND_MSG_PUB.ADD;');
13480 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13481 l('END;');
13482
13483 END generate_map_proc_bulk ;
13484
13485
13486
13487 PROCEDURE generate_party_map_proc (
13488 p_proc_name IN VARCHAR2,
13489 p_rule_id IN NUMBER
13490 ) IS
13491
13492 NONE BOOLEAN := TRUE;
13493 trxctx BOOLEAN := FALSE;
13494 l_filt VARCHAR2(1);
13495 BEGIN
13496
13497 l('');
13498 l('/************************************************');
13499 l(' This procedure maps a search record from the logical');
13500 l(' record structure to the stage schema structure ');
13501 l(' for the PARTY Entity after applying ');
13502 l(' the defined transformations');
13503 l('************************************************/');
13504 l('');
13505 l('PROCEDURE ' || p_proc_name || '( ');
13506 l(' p_search_ctx IN BOOLEAN,');
13507 l(' p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, ');
13508 l(' x_entered_max_score OUT NUMBER,');
13509 l(' x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type');
13510 l(' ) IS ');
13511 l(' tmp VARCHAR2(4000);');
13512 l(' l_party_name VARCHAR2(4000);');
13513 l('BEGIN');
13514 ldbg_s('Inside Calling Procedure - '||p_proc_name);
13515 l(' IF p_search_ctx THEN');
13516 l(' x_stage_rec.TX8 := NULL;');
13517 l(' g_other_party_level_attribs:=FALSE;');
13518 NONE:=TRUE;
13519 for PRIMATTRS IN (
13520 SELECT a.ATTRIBUTE_NAME
13521 FROM HZ_TRANS_ATTRIBUTES_VL a,
13522 HZ_MATCH_RULE_PRIMARY sattr
13523 WHERE sattr.MATCH_RULE_ID = p_rule_id
13524 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13525 AND a.ENTITY_NAME = 'PARTY'
13526 ) LOOP
13527 IF PRIMATTRS.ATTRIBUTE_NAME not in (
13528 'PARTY_NAME','PARTY_TYPE','STATUS','PARTY_ALL_NAMES') THEN
13529 IF NONE THEN
13530 l(' IF p_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL ');
13531 NONE:=FALSE;
13532 ELSE
13533 l(' OR p_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL ');
13534 END IF;
13535 END IF;
13536 END LOOP;
13537 IF NOT NONE THEN
13538 l(' THEN');
13539 l(' g_other_party_level_attribs:=TRUE;');
13540 l(' END IF;');
13541 END IF;
13542
13543 l(' x_entered_max_score:=0;');
13544 for SECATTRS IN (
13545 SELECT a.ATTRIBUTE_NAME, SCORE
13546 FROM HZ_TRANS_ATTRIBUTES_VL a,
13547 HZ_MATCH_RULE_SECONDARY sattr
13548 WHERE sattr.MATCH_RULE_ID = p_rule_id
13549 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13550 AND a.ENTITY_NAME = 'PARTY') LOOP
13551 l(' IF p_search_rec.'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13552 l(' x_entered_max_score := x_entered_max_score+'||SECATTRS.SCORE||';');
13553 l(' END IF;');
13554 END LOOP;
13555 l(' END IF;');
13556
13557 for FUNCS IN (
13558 SELECT a.ATTRIBUTE_NAME,a.attribute_id,
13559 f.PROCEDURE_NAME,
13560 f.STAGED_ATTRIBUTE_COLUMN
13561 FROM HZ_TRANS_FUNCTIONS_VL f,
13562 HZ_TRANS_ATTRIBUTES_VL a,
13563 HZ_MATCH_RULE_PRIMARY pattr,
13564 HZ_PRIMARY_TRANS pfunc
13565 WHERE pattr.MATCH_RULE_ID = p_rule_id
13566 AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13567 AND a.ENTITY_NAME = 'PARTY'
13568 AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13569 AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13570
13571 UNION
13572
13573 SELECT a.ATTRIBUTE_NAME,a.attribute_id,
13574 f.PROCEDURE_NAME,
13575 f.STAGED_ATTRIBUTE_COLUMN
13576 FROM HZ_TRANS_FUNCTIONS_VL f,
13577 HZ_TRANS_ATTRIBUTES_VL a,
13578 HZ_MATCH_RULE_SECONDARY sattr,
13579 HZ_SECONDARY_TRANS sfunc
13580 WHERE sattr.MATCH_RULE_ID = p_rule_id
13581 AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13582 AND a.ENTITY_NAME = 'PARTY'
13583 AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13584 AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13585
13586 UNION
13587
13588 SELECT a.attribute_name,a.attribute_id,
13589 f.PROCEDURE_NAME,
13590 f.STAGED_ATTRIBUTE_COLUMN
13591 FROM HZ_TRANS_FUNCTIONS_VL f,
13595 AND a.attribute_name='PARTY_TYPE'
13592 HZ_TRANS_ATTRIBUTES_VL a
13593 WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13594 AND a.entity_name = 'PARTY'
13596 AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
13597 AND nvl(f.active_flag,'Y')='Y'
13598 AND ROWNUM=1
13599 )
13600 LOOP
13601 NONE := FALSE;
13602 trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
13603 begin
13604 select nvl(filter_flag, 'N') INTO l_filt
13605 FROM HZ_MATCH_RULE_PRIMARY p
13606 where p.MATCH_RULE_ID = p_rule_id
13607 AND p.attribute_id = FUNCS.attribute_id;
13608 exception
13609 when no_data_found then
13610 l_filt:='N';
13611 end;
13612 IF l_filt = 'N' THEN
13613 l(' IF p_search_ctx THEN');
13614 l(' IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13615 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13616 l(' ' || FUNCS.PROCEDURE_NAME ||'(');
13617 l(' p_search_rec.'||FUNCS.ATTRIBUTE_NAME);
13618 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13619 IF trxctx THEN
13620 l(' ,''PARTY'','''||g_context||''');');
13621 ELSE
13622 l(' ,''PARTY'');');
13623 END IF;
13624 l(' ELSE');
13625 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13626 l(' END IF;');
13627 IF NOT trxctx THEN
13628 l(' END IF;');
13629 ELSE
13630 l(' ELSE');
13631 l(' IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13632 l(' tmp :=' || FUNCS.PROCEDURE_NAME ||'(');
13633 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
13634 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13635 l(' ,''PARTY'',''SCORE'');');
13636 l(' IF tmp IS NOT NULL THEN');
13637 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
13638 l(' END IF;');
13639 l(' END IF;');
13640 l(' END IF;');
13641 END IF;
13642 ELSE
13643 l(' IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13644 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13645 l(' ' || FUNCS.PROCEDURE_NAME ||'(');
13646 l(' p_search_rec.'||FUNCS.ATTRIBUTE_NAME);
13647 l(' ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13648 IF trxctx THEN
13649 l(' ,''PARTY'',''STAGE'');');
13650 ELSE
13651 l(' ,''PARTY'');');
13652 END IF;
13653 l(' ELSE');
13654 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13655 l(' END IF;');
13656 END IF;
13657
13658 --- Modified for Bug 4016594
13659 IF FUNCS.ATTRIBUTE_NAME = 'DUNS_NUMBER_C' AND upper(FUNCS.PROCEDURE_NAME) = 'HZ_TRANS_PKG.EXACT' THEN
13660 l(' IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13661 l(' x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13662 l(' lpad(x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ',9,''0'');');
13663 l(' END IF;');
13664 END IF;
13665
13666 END LOOP;
13667 l(' l_party_name := p_search_rec.PARTY_NAME;');
13668 l(' IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN');
13669 l(' l_party_name := p_search_rec.PARTY_ALL_NAMES;');
13670 l(' END IF;');
13671 l(' IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN');
13672 l(' x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,''PARTY_NAME'',''PARTY'','''||g_context||''');');
13673 l(' END IF;');
13674
13675 IF NONE THEN
13676 l(' NULL;');
13677 END IF;
13678
13679
13680 l('EXCEPTION');
13681 l(' WHEN OTHERS THEN');
13682 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13683 l(' FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13684 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13685 l(' FND_MSG_PUB.ADD;');
13686 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13687 l('END;');
13688
13689 END generate_party_map_proc;
13690
13691
13692
13693 PROCEDURE generate_check_proc (
13694 p_rule_id NUMBER) IS
13695 FIRST BOOLEAN;
13696 BEGIN
13697 l('');
13698 l('/************************************************');
13699 l(' This procedure checks if the input search criteria ');
13700 l(' is valid. It checks if : ');
13701 l(' 1. At least one primary condition is passed');
13702 l(' 2. Contact Point Type is not null for each condition');
13703 l('************************************************/');
13704 l('');
13705
13706 l('FUNCTION check_prim_cond(');
13707 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
13708 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
13709 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
13710 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list)');
13711 l(' RETURN BOOLEAN IS');
13712 l(' BEGIN');
13713
13714 FIRST := TRUE;
13715 FOR CPTS IN (SELECT ATTRIBUTE_NAME
13716 FROM HZ_TRANS_ATTRIBUTES_VL a,
13717 HZ_MATCH_RULE_PRIMARY p
13718 WHERE p.match_rule_id = p_rule_id
13719 AND a.ENTITY_NAME = 'CONTACT_POINTS'
13720 AND p.attribute_id = a.attribute_id
13721 AND ATTRIBUTE_NAME <> 'CONTACT_POINT_TYPE'
13722 AND nvl(p.FILTER_FLAG,'N') = 'N') LOOP
13723 IF FIRST THEN
13724 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
13725 l(' IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (');
13726 l('p_contact_point_list(I).'||CPTS.ATTRIBUTE_NAME||' IS NOT NULL ');
13730 END IF;
13727 FIRST := FALSE;
13728 ELSE
13729 l('OR p_contact_point_list(I).'||CPTS.ATTRIBUTE_NAME||' IS NOT NULL ');
13731 END LOOP;
13732 IF NOT FIRST THEN
13733 l(' ) THEN');
13734 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_CONTACT_POINT_TYPE'');');
13735 l(' FND_MSG_PUB.ADD;');
13736 l(' RAISE FND_API.G_EXC_ERROR;');
13737 l(' END IF;');
13738 l(' END LOOP;');
13739 l('');
13740 END IF;
13741
13742 FOR PRIMATTRS IN (
13743 SELECT ATTRIBUTE_NAME
13744 FROM HZ_TRANS_ATTRIBUTES_VL a,
13745 HZ_MATCH_RULE_PRIMARY p
13746 WHERE p.match_rule_id = p_rule_id
13747 AND p.attribute_id = a.attribute_id
13748 AND a.ENTITY_NAME = 'PARTY'
13749 AND nvl(p.FILTER_FLAG,'N') = 'N') LOOP
13750 l(' IF p_party_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13751 l(' RETURN TRUE;');
13752 l(' END IF;');
13753 END LOOP;
13754
13755 FOR PRIMATTRS IN (
13756 SELECT ENTITY_NAME, 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'
13761 AND p.attribute_id = a.attribute_id
13762 AND ATTRIBUTE_NAME <> 'CONTACT_POINT_TYPE'
13763 AND nvl(p.FILTER_FLAG,'N') = 'N')
13764 LOOP
13765 IF PRIMATTRS.ENTITY_NAME = 'PARTY_SITES' THEN
13766 l(' FOR I IN 1..p_party_site_list.COUNT LOOP');
13767 HZ_GEN_PLSQL.add_line(' IF p_party_site_list(I).',false);
13768 ELSIF PRIMATTRS.ENTITY_NAME = 'CONTACTS' THEN
13769 l(' FOR I IN 1..p_contact_list.COUNT LOOP');
13770 HZ_GEN_PLSQL.add_line(' IF p_contact_list(I).',false);
13771 ELSIF PRIMATTRS.ENTITY_NAME = 'CONTACT_POINTS' THEN
13772 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
13773 HZ_GEN_PLSQL.add_line(' IF p_contact_point_list(I).',false);
13774 END IF;
13775 l(PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL THEN ');
13776 l(' RETURN TRUE;');
13777 l(' END IF;');
13778 l(' END LOOP;');
13779 END LOOP;
13780 l(' RETURN FALSE;');
13781 l('EXCEPTION');
13782 l(' WHEN FND_API.G_EXC_ERROR THEN');
13783 l(' RAISE FND_API.G_EXC_ERROR;');
13784 l(' WHEN OTHERS THEN');
13785 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
13786 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_prim_cond'');');
13787 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
13788 l(' FND_MSG_PUB.ADD;');
13789 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13790 l(' END check_prim_cond;');
13791 l('');
13792
13793 l('/************************************************');
13794 l(' This procedure checks if the input search condition ');
13795 l(' has party site criteria. ');
13796 l('************************************************/');
13797
13798 l('');
13799 l('PROCEDURE check_party_site_cond(');
13800 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
13801 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
13802 l(' x_secondary OUT BOOLEAN,');
13803 l(' x_primary OUT BOOLEAN');
13804 l(') IS');
13805 l(' BEGIN');
13806 l(' x_primary:= FALSE;');
13807 l(' x_secondary:= FALSE;');
13808
13809 l(' FOR I IN 1..p_party_site_list.COUNT LOOP');
13810 FIRST := TRUE;
13811 FOR PRIMATTRS IN (
13812 SELECT ATTRIBUTE_NAME
13813 FROM HZ_TRANS_ATTRIBUTES_VL a,
13814 HZ_MATCH_RULE_PRIMARY p
13815 WHERE p.match_rule_id = p_rule_id
13816 AND a.ENTITY_NAME = 'PARTY_SITES'
13817 AND p.attribute_id = a.attribute_id)
13818 LOOP
13819 IF FIRST THEN
13820 l(' IF p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13821 FIRST := FALSE;
13822 ELSE
13823 l(' OR p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13824 END IF;
13825 END LOOP;
13826 IF NOT FIRST THEN
13827 l(' THEN');
13828 l(' x_primary := TRUE;');
13829 l(' END IF;');
13830 l(' EXIT WHEN x_primary;');
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 PRIMATTRS IN (
13839 SELECT ATTRIBUTE_NAME
13840 FROM HZ_TRANS_ATTRIBUTES_VL a,
13841 HZ_MATCH_RULE_PRIMARY p
13842 WHERE p.match_rule_id = p_rule_id
13843 AND a.ENTITY_NAME = 'CONTACT_POINTS'
13844 AND p.attribute_id = a.attribute_id)
13845 LOOP
13846 IF FIRST THEN
13847 l(' IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13848 FIRST := FALSE;
13849 ELSE
13850 l(' OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13851 END IF;
13852 END LOOP;
13853
13854 IF NOT FIRST THEN
13855 l(' THEN');
13856 l(' x_primary := TRUE;');
13857 l(' END IF;');
13858 l(' EXIT WHEN x_primary;');
13859 ELSE
13860 l(' NULL;');
13861 END IF;
13862 l(' END LOOP;');
13863 l('');
13864
13865 l(' FOR I IN 1..p_party_site_list.COUNT LOOP');
13866 FIRST := TRUE;
13867 FOR SECATTRS IN (
13868 SELECT ATTRIBUTE_NAME
13869 FROM HZ_TRANS_ATTRIBUTES_VL a,
13870 HZ_MATCH_RULE_SECONDARY s
13871 WHERE s.match_rule_id = p_rule_id
13872 AND a.ENTITY_NAME = 'PARTY_SITES'
13873 AND s.attribute_id = a.attribute_id)
13874 LOOP
13878 ELSE
13875 IF FIRST THEN
13876 l(' IF p_party_site_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13877 FIRST := FALSE;
13879 l(' OR p_party_site_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13880 END IF;
13881 END LOOP;
13882 IF NOT FIRST THEN
13883 l(' THEN');
13884 l(' x_secondary := TRUE;');
13885 l(' END IF;');
13886 l(' EXIT WHEN x_secondary;');
13887 ELSE
13888 l(' NULL;');
13889 END IF;
13890 l(' END LOOP;');
13891
13892 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
13893 FIRST := TRUE;
13894 FOR SECATTRS IN (
13895 SELECT ATTRIBUTE_NAME
13896 FROM HZ_TRANS_ATTRIBUTES_VL a,
13897 HZ_MATCH_RULE_SECONDARY s
13898 WHERE s.match_rule_id = p_rule_id
13899 AND a.ENTITY_NAME = 'CONTACT_POINTS'
13900 AND s.attribute_id = a.attribute_id)
13901 LOOP
13902 IF FIRST THEN
13903 l(' IF p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13904 FIRST := FALSE;
13905 ELSE
13906 l(' OR p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13907 END IF;
13908 END LOOP;
13909
13910 IF NOT FIRST THEN
13911 l(' THEN');
13912 l(' x_secondary := TRUE;');
13913 l(' END IF;');
13914 l(' EXIT WHEN x_secondary;');
13915 ELSE
13916 l(' NULL;');
13917 END IF;
13918 l(' END LOOP;');
13919 l('EXCEPTION');
13920 l(' WHEN OTHERS THEN');
13921 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
13922 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_party_site_cond'');');
13923 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
13924 l(' FND_MSG_PUB.ADD;');
13925 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13926 l(' END check_party_site_cond;');
13927 l('');
13928
13929 l('/************************************************');
13930 l(' This procedure checks if the input search condition ');
13931 l(' has contact criteria. ');
13932 l('************************************************/');
13933
13934 l('');
13935 l('PROCEDURE check_contact_cond(');
13936 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
13937 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
13938 l(' x_secondary OUT BOOLEAN,');
13939 l(' x_primary OUT BOOLEAN');
13940 l(') IS');
13941
13942 l(' BEGIN');
13943 l(' x_primary:= FALSE;');
13944 l(' x_secondary:= FALSE;');
13945
13946
13947 l(' FOR I IN 1..p_contact_list.COUNT LOOP');
13948 FIRST := TRUE;
13949 FOR PRIMATTRS IN (
13950 SELECT ATTRIBUTE_NAME
13951 FROM HZ_TRANS_ATTRIBUTES_VL a,
13952 HZ_MATCH_RULE_PRIMARY p
13953 WHERE p.match_rule_id = p_rule_id
13954 AND a.ENTITY_NAME = 'CONTACTS'
13955 AND p.attribute_id = a.attribute_id)
13956 LOOP
13957 IF FIRST THEN
13958 l(' IF p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13959 FIRST := FALSE;
13960 ELSE
13961 l(' OR p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13962 END IF;
13963 END LOOP;
13964 IF NOT FIRST THEN
13965 l(' THEN');
13966 l(' x_primary := TRUE;');
13967 l(' END IF;');
13968 l(' EXIT WHEN x_primary;');
13969 ELSE
13970 l(' NULL;');
13971 END IF;
13972 l(' END LOOP;');
13973 l('');
13974 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
13975 FIRST := TRUE;
13976 FOR PRIMATTRS IN (
13977 SELECT ATTRIBUTE_NAME
13978 FROM HZ_TRANS_ATTRIBUTES_VL a,
13979 HZ_MATCH_RULE_PRIMARY p
13980 WHERE p.match_rule_id = p_rule_id
13981 AND a.ENTITY_NAME = 'CONTACT_POINTS'
13982 AND p.attribute_id = a.attribute_id)
13983 LOOP
13984 IF FIRST THEN
13985 l(' IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13986 FIRST := FALSE;
13987 ELSE
13988 l(' OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13989 END IF;
13990 END LOOP;
13991 IF NOT FIRST THEN
13992 l(' THEN');
13993 l(' x_primary := TRUE;');
13994 l(' END IF;');
13995 l(' EXIT WHEN x_primary;');
13996 ELSE
13997 l(' NULL;');
13998 END IF;
13999 l(' END LOOP;');
14000
14001 l('');
14002 l(' FOR I IN 1..p_contact_list.COUNT LOOP');
14003 FIRST := TRUE;
14004 FOR SECATTRS IN (
14005 SELECT ATTRIBUTE_NAME
14006 FROM HZ_TRANS_ATTRIBUTES_VL a,
14007 HZ_MATCH_RULE_SECONDARY s
14008 WHERE s.match_rule_id = p_rule_id
14009 AND a.ENTITY_NAME = 'CONTACTS'
14010 AND s.attribute_id = a.attribute_id)
14011 LOOP
14012 IF FIRST THEN
14013 l(' IF p_contact_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14014 FIRST := FALSE;
14015 ELSE
14016 l(' OR p_contact_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14017 END IF;
14018 END LOOP;
14019 IF NOT FIRST THEN
14020 l(' THEN');
14021 l(' x_secondary := TRUE;');
14022 l(' END IF;');
14023 l(' EXIT WHEN x_secondary;');
14024 ELSE
14025 l(' NULL;');
14026 END IF;
14027 l(' END LOOP;');
14028 l('');
14032 FOR SECATTRS IN (
14029
14030 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
14031 FIRST := TRUE;
14033 SELECT ATTRIBUTE_NAME
14034 FROM HZ_TRANS_ATTRIBUTES_VL a,
14035 HZ_MATCH_RULE_SECONDARY s
14036 WHERE s.match_rule_id = p_rule_id
14037 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14038 AND s.attribute_id = a.attribute_id)
14039 LOOP
14040 IF FIRST THEN
14041 l(' IF p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14042 FIRST := FALSE;
14043 ELSE
14044 l(' OR p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
14045 END IF;
14046 END LOOP;
14047 IF NOT FIRST THEN
14048 l(' THEN');
14049 l(' x_secondary := TRUE;');
14050 l(' END IF;');
14051 l(' EXIT WHEN x_secondary;');
14052 ELSE
14053 l(' NULL;');
14054 END IF;
14055 l(' END LOOP;');
14056
14057 l('EXCEPTION');
14058 l(' WHEN OTHERS THEN');
14059 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14060 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_contact_cond'');');
14061 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14062 l(' FND_MSG_PUB.ADD;');
14063 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14064 l(' END check_contact_cond;');
14065 l('');
14066
14067 l('/************************************************');
14068 l(' This procedure checks if the input search condition ');
14069 l(' has valid contact point criteria. ');
14070 l('************************************************/');
14071
14072 l('');
14073 l('PROCEDURE check_contact_point_cond(');
14074 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
14075 l(' x_secondary OUT BOOLEAN,');
14076 l(' x_primary OUT BOOLEAN');
14077 l(') IS');
14078 l(' BEGIN');
14079 l(' x_primary:= FALSE;');
14080 l(' x_secondary:= FALSE;');
14081 l('');
14082 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
14083 l(' IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN ');
14084 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_CONTACT_POINT_TYPE'');');
14085 l(' FND_MSG_PUB.ADD;');
14086 l(' RAISE FND_API.G_EXC_ERROR;');
14087 l(' END IF;');
14088 l(' END LOOP;');
14089 l('');
14090 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
14091 FIRST := TRUE;
14092 FOR PRIMATTRS IN (
14093 SELECT ATTRIBUTE_NAME
14094 FROM HZ_TRANS_ATTRIBUTES_VL a,
14095 HZ_MATCH_RULE_PRIMARY p
14096 WHERE p.match_rule_id = p_rule_id
14097 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14098 AND p.attribute_id = a.attribute_id)
14099 LOOP
14100 IF FIRST THEN
14101 l(' IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14102 FIRST := FALSE;
14103 ELSE
14104 l(' OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14105 END IF;
14106 END LOOP;
14107 IF NOT FIRST THEN
14108 l(' THEN');
14109 l(' x_primary := TRUE;');
14110 l(' END IF;');
14111 l(' EXIT WHEN x_primary;');
14112 ELSE
14113 l(' NULL;');
14114 END IF;
14115 l(' END LOOP;');
14116
14117 l(' FOR I IN 1..p_contact_point_list.COUNT LOOP');
14118 FIRST := TRUE;
14119 FOR SECATTRS IN (
14120 SELECT ATTRIBUTE_NAME
14121 FROM HZ_TRANS_ATTRIBUTES_VL a,
14122 HZ_MATCH_RULE_SECONDARY s
14123 WHERE s.match_rule_id = p_rule_id
14124 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14125 AND s.attribute_id = a.attribute_id)
14126 LOOP
14127 IF FIRST THEN
14128 l(' IF p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14129 FIRST := FALSE;
14130 ELSE
14131 l(' OR p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14132 END IF;
14133 END LOOP;
14134
14135 IF NOT FIRST THEN
14136 l(' THEN');
14137 l(' x_secondary := TRUE;');
14138 l(' END IF;');
14139 l(' EXIT WHEN x_secondary;');
14140 ELSE
14141 l(' NULL;');
14142 END IF;
14143 l(' END LOOP;');
14144 l('EXCEPTION');
14145 l(' WHEN OTHERS THEN');
14146 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14147 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''check_contact_point_cond'');');
14148 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14149 l(' FND_MSG_PUB.ADD;');
14150 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14151 l(' END check_contact_point_cond;');
14152 l('');
14153
14154
14155 END;
14156
14157 PROCEDURE generate_custom_code (
14158 p_rule_id NUMBER,
14159 p_record VARCHAR2,
14160 p_entity VARCHAR2,
14161 p_record_id VARCHAR2) IS
14162
14163 BEGIN
14164
14165 ldbg_s('Inside calling procedure - generate_custom_code');
14166
14167 FOR CUSTATTRS IN (
14168 SELECT distinct ATTRIBUTE_NAME, CUSTOM_ATTRIBUTE_PROCEDURE
14169 FROM HZ_TRANS_ATTRIBUTES_VL a,
14170 HZ_MATCH_RULE_PRIMARY p
14171 WHERE p.match_rule_id = p_rule_id
14172 AND p.attribute_id = a.attribute_id
14173 AND a.ENTITY_NAME = p_entity
14174 AND (a.SOURCE_TABLE = 'CUSTOM'
14175 OR a.CUSTOM_ATTRIBUTE_PROCEDURE IS NOT NULL)
14176 UNION
14177 SELECT distinct ATTRIBUTE_NAME, CUSTOM_ATTRIBUTE_PROCEDURE
14181 AND s.attribute_id = a.attribute_id
14178 FROM HZ_TRANS_ATTRIBUTES_VL a,
14179 HZ_MATCH_RULE_SECONDARY s
14180 WHERE s.match_rule_id = p_rule_id
14182 AND a.ENTITY_NAME = p_entity
14183 AND (a.SOURCE_TABLE = 'CUSTOM'
14184 OR a.CUSTOM_ATTRIBUTE_PROCEDURE IS NOT NULL)) LOOP
14185
14186 l(p_record||'.'||CUSTATTRS.ATTRIBUTE_NAME||':=');
14187 l(' '||CUSTATTRS.CUSTOM_ATTRIBUTE_PROCEDURE||'('||
14188 p_record_id||' , '''||p_entity||''','''||CUSTATTRS.ATTRIBUTE_NAME||''');');
14189 END LOOP;
14190 END;
14191
14192 -- Fix for Bug 4734661. Modified to add the p_called_from parameter.
14193 PROCEDURE generate_acquire_proc (
14194 p_rule_id NUMBER
14195 ,p_called_from VARCHAR2) IS
14196
14197 l_num_attrs NUMBER;
14198 FIRST BOOLEAN;
14199 BEGIN
14200 l('');
14201 l('/************************************************');
14202 l(' This procedure retrieves the match rule attributes into ');
14203 l(' the search record structures');
14204 l('************************************************/');
14205 l('');
14206 l('PROCEDURE get_party_for_search (');
14207 l(' p_party_id IN NUMBER,');
14208 l(' x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
14209 l(' x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
14210 l(' x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
14211 l(' x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
14212 l(') IS');
14213 l(' l_party_id NUMBER;');
14214 l(' l_party_site_ids HZ_PARTY_SEARCH.IDList;');
14215 l(' l_contact_ids HZ_PARTY_SEARCH.IDList;');
14216 l(' l_contact_pt_ids HZ_PARTY_SEARCH.IDList;');
14217 l(' ps NUMBER :=1;');
14218 l(' cpt NUMBER :=1;');
14219 l(' ct NUMBER :=1;');
14220 l(' l_use_contact_info varchar2(1);');--bug 5169483
14221 l('BEGIN');
14222 l('');
14223
14224 --bug 5169483
14225 l(' l_use_contact_info := ''Y'';');
14226 l(' IF nvl(FND_PROFILE.VALUE(''HZ_DQM_REL_PARTY_MATCH''),''N'')=''Y'' THEN');
14227 l(' l_use_contact_info := ''N'';');
14228 l(' END IF;');
14229 --bug 5169483
14230
14231 -- Query number of party attributes
14232 SELECT COUNT(*) INTO l_num_attrs
14233 FROM (
14234 SELECT a.attribute_id
14235 FROM HZ_TRANS_ATTRIBUTES_VL a,
14236 HZ_MATCH_RULE_PRIMARY p
14237 WHERE p.match_rule_id = p_rule_id
14238 AND p.attribute_id = a.attribute_id
14239 AND a.ENTITY_NAME = 'PARTY'
14240
14241 UNION
14242
14243 SELECT a.attribute_id
14244 FROM HZ_TRANS_ATTRIBUTES_VL a,
14245 HZ_MATCH_RULE_SECONDARY s
14246 WHERE s.match_rule_id = p_rule_id
14247 AND s.attribute_id = a.attribute_id
14248 AND a.ENTITY_NAME = 'PARTY'
14249 );
14250
14251 IF l_num_attrs > 0 THEN
14252 l(' l_party_id := p_party_id;');
14253 ELSE
14254 l(' l_party_id := null;');
14255 END IF;
14256
14257 SELECT COUNT(*) INTO l_num_attrs
14258 FROM (
14259 SELECT a.attribute_id
14260 FROM HZ_TRANS_ATTRIBUTES_VL a,
14261 HZ_MATCH_RULE_PRIMARY p
14262 WHERE p.match_rule_id = p_rule_id
14263 AND p.attribute_id = a.attribute_id
14264 AND a.ENTITY_NAME = 'PARTY_SITES'
14265
14266 UNION
14267
14268 SELECT a.attribute_id
14269 FROM HZ_TRANS_ATTRIBUTES_VL a,
14270 HZ_MATCH_RULE_SECONDARY s
14271 WHERE s.match_rule_id = p_rule_id
14272 AND s.attribute_id = a.attribute_id
14273 AND a.ENTITY_NAME = 'PARTY_SITES'
14274 );
14275
14276
14277 IF l_num_attrs > 0 THEN
14278
14279 l(' FOR PARTY_SITES IN (');
14280 l(' SELECT party_site_id FROM ('); ---Code Change for Match Rule Set
14281 l(' SELECT party_site_id,identifying_address_flag'); ---Code Change for Match Rule Set
14282 l(' FROM HZ_PARTY_SITES');
14283 l(' WHERE party_id = p_party_id');
14284 l(' AND (status is null OR status = ''A'') ');
14285 l(' AND identifying_address_flag=''Y''');
14286 l(' UNION');
14287 l('');
14288 l(' SELECT party_site_id,NVL(identifying_address_flag,''N'') identifying_address_flag'); ---Code Change for Match Rule Set
14289 l(' FROM HZ_PARTY_SITES');
14290 l(' WHERE party_id = p_party_id');
14291 l(' AND (status is null OR status = ''A'') ');
14292 l(' AND (identifying_address_flag IS NULL OR identifying_address_flag = ''N'')');
14293 -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14294 IF p_called_from IS NULL THEN
14295 l(' AND ROWNUM<6');
14296 END IF;
14297 l(' UNION');
14298 l('');
14299 l(' SELECT party_site_id,NVL(identifying_address_flag,''N'') identifying_address_flag');
14300 l(' FROM HZ_PARTY_SITES');
14301 l(' WHERE (status is null OR status = ''A'') ');
14302 l(' AND party_id in (');
14303 l(' SELECT party_id');
14304 l(' FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS');
14305 l(' WHERE HZ_RELATIONSHIPS.object_id = p_party_id');
14306 l(' AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14307 l(' AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14308 l(' AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14309 l(' and l_use_contact_info = ''Y''');--bug 5169483
14310 l(' ) ');
14311 -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14312 IF p_called_from IS NULL THEN
14313 l(' AND ROWNUM<6');
14314 END IF;
14315 l(') order by identifying_address_flag desc'); ---Code Change for Match Rule Set
14316 l(' ) LOOP');
14320 END IF;
14317 l(' l_party_site_ids(ps) := PARTY_SITES.party_site_id;');
14318 l(' ps:=ps+1;');
14319 l(' END LOOP;');
14321
14322 -- Query number of contact attributes
14323 SELECT COUNT(*) INTO l_num_attrs
14324 FROM (
14325 SELECT a.attribute_id
14326 FROM HZ_TRANS_ATTRIBUTES_VL a,
14327 HZ_MATCH_RULE_PRIMARY p
14328 WHERE p.match_rule_id = p_rule_id
14329 AND p.attribute_id = a.attribute_id
14330 AND a.ENTITY_NAME = 'CONTACTS'
14331
14332 UNION
14333
14334 SELECT a.attribute_id
14335 FROM HZ_TRANS_ATTRIBUTES_VL a,
14336 HZ_MATCH_RULE_SECONDARY s
14337 WHERE s.match_rule_id = p_rule_id
14338 AND s.attribute_id = a.attribute_id
14339 AND a.ENTITY_NAME = 'CONTACTS'
14340 );
14341
14342 IF l_num_attrs > 0 THEN
14343 l(' FOR CONTACTS IN (');
14344 l(' SELECT org_contact_id');
14345 l(' FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS');
14346 l(' WHERE HZ_RELATIONSHIPS.object_id = p_party_id');
14347 l(' AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14348 l(' AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14349 l(' AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = ''F''');
14350 l(' AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14351 -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14352 IF p_called_from IS NULL THEN
14353 l(' AND ROWNUM<6 ');
14354 END IF;
14355 l(' ) LOOP');
14356 l(' l_contact_ids(ct) := CONTACTS.org_contact_id;');
14357 l(' ct := ct+1;');
14358 l(' END LOOP;');
14359 END IF;
14360
14361 -- Query number of contact point attributes
14362 SELECT COUNT(*) INTO l_num_attrs
14363 FROM (
14364 SELECT a.attribute_id
14365 FROM HZ_TRANS_ATTRIBUTES_VL a,
14366 HZ_MATCH_RULE_PRIMARY p
14367 WHERE p.match_rule_id = p_rule_id
14368 AND p.attribute_id = a.attribute_id
14369 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14370
14371 UNION
14372
14373 SELECT a.attribute_id
14374 FROM HZ_TRANS_ATTRIBUTES_VL a,
14375 HZ_MATCH_RULE_SECONDARY s
14376 WHERE s.match_rule_id = p_rule_id
14377 AND s.attribute_id = a.attribute_id
14378 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14379 );
14380
14381 IF l_num_attrs > 0 THEN
14382 l(' FOR CONTACT_POINTS IN (');
14383 l(' SELECT CONTACT_POINT_ID');
14384 l(' FROM HZ_CONTACT_POINTS ');
14385 l(' WHERE PRIMARY_FLAG = ''Y''');
14386 l(' AND owner_table_name = ''HZ_PARTIES''');
14387 l(' AND owner_table_id = p_party_id');
14388 l('');
14389 l(' UNION');
14390 l('');
14391 l(' SELECT CONTACT_POINT_ID');
14392 l(' FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS ');--bug 4873802
14393 l(' WHERE PRIMARY_FLAG = ''Y''');
14394 l(' AND owner_table_name = ''HZ_PARTIES''');
14395 l(' AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id');--bug 4873802
14396 l(' AND HZ_RELATIONSHIPS.object_id = p_party_id');
14397 l(' AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14398 l(' AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14399 l(' AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14400 l(' and l_use_contact_info = ''Y''');--bug 5169483
14401 -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14402 IF p_called_from IS NULL THEN
14403 l(' AND ROWNUM<6');
14404 END IF;
14405 l(' UNION');
14406 l('');
14407 l(' SELECT CONTACT_POINT_ID');
14408 l(' FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES ');--bug 4873802
14409 l(' WHERE PRIMARY_FLAG = ''Y''');
14410 l(' AND owner_table_name = ''HZ_PARTY_SITES''');
14411 l(' AND owner_table_id = party_site_id ');--bug 4873802
14412 l(' AND PARTY_ID = p_party_id ');
14413 l(' AND IDENTIFYING_ADDRESS_FLAG = ''Y'') LOOP');
14414 l(' l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;');
14415 l(' cpt := cpt+1;');
14416 l(' END LOOP;');
14417 END IF;
14418
14419 l(' get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,');
14420 l(' x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);');
14421
14422 l('EXCEPTION');
14423 l(' WHEN FND_API.G_EXC_ERROR THEN');
14424 l(' RAISE FND_API.G_EXC_ERROR;');
14425 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
14426 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14427 l(' WHEN OTHERS THEN');
14428 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14429 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''get_party_for_search'');');
14430 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14431 l(' FND_MSG_PUB.ADD;');
14432 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14433 l('END get_party_for_search;');
14434 l('');
14435
14436 l('PROCEDURE get_search_criteria (');
14437 l(' p_party_id IN NUMBER,');
14438 l(' p_party_site_ids IN HZ_PARTY_SEARCH.IDList,');
14439 l(' p_contact_ids IN HZ_PARTY_SEARCH.IDList,');
14440 l(' p_contact_pt_ids IN HZ_PARTY_SEARCH.IDList,');
14441 l(' x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
14442 l(' x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
14443 l(' x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
14444 l(' x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
14445 l(') IS');
14446 l('BEGIN');
14447 l('');
14451 SELECT COUNT(*) INTO l_num_attrs
14448 ldbg_s('Inside Calling Procedure - get_search_criteria');
14449
14450 -- Query number of party attributes
14452 FROM (
14453 SELECT a.attribute_id
14454 FROM HZ_TRANS_ATTRIBUTES_VL a,
14455 HZ_MATCH_RULE_PRIMARY p
14456 WHERE p.match_rule_id = p_rule_id
14457 AND p.attribute_id = a.attribute_id
14458 AND a.ENTITY_NAME = 'PARTY'
14459
14460 UNION
14461
14462 SELECT a.attribute_id
14463 FROM HZ_TRANS_ATTRIBUTES_VL a,
14464 HZ_MATCH_RULE_SECONDARY s
14465 WHERE s.match_rule_id = p_rule_id
14466 AND s.attribute_id = a.attribute_id
14467 AND a.ENTITY_NAME = 'PARTY'
14468 );
14469
14470 IF l_num_attrs > 0 THEN
14471 l(' IF p_party_id IS NOT NULL THEN');
14472 ldbg_s('Before Calling Procedure - get_party_rec');
14473 l(' get_party_rec(p_party_id, x_party_search_rec);');
14474 l(' END IF;');
14475 END IF;
14476
14477 SELECT COUNT(*) INTO l_num_attrs
14478 FROM (
14479 SELECT a.attribute_id
14480 FROM HZ_TRANS_ATTRIBUTES_VL a,
14481 HZ_MATCH_RULE_PRIMARY p
14482 WHERE p.match_rule_id = p_rule_id
14483 AND p.attribute_id = a.attribute_id
14484 AND a.ENTITY_NAME = 'PARTY_SITES'
14485
14486 UNION
14487
14488 SELECT a.attribute_id
14489 FROM HZ_TRANS_ATTRIBUTES_VL a,
14490 HZ_MATCH_RULE_SECONDARY s
14491 WHERE s.match_rule_id = p_rule_id
14492 AND s.attribute_id = a.attribute_id
14493 AND a.ENTITY_NAME = 'PARTY_SITES'
14494 );
14495
14496
14497 IF l_num_attrs > 0 THEN
14498 l(' IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN');
14499 ldbg_s('Before Calling Procedure - get_party_site_rec');
14500 l(' get_party_site_rec(p_party_site_ids, x_party_site_list);');
14501 l(' END IF;');
14502 END IF;
14503
14504 -- Query number of contact attributes
14505 SELECT COUNT(*) INTO l_num_attrs
14506 FROM (
14507 SELECT a.attribute_id
14508 FROM HZ_TRANS_ATTRIBUTES_VL a,
14509 HZ_MATCH_RULE_PRIMARY p
14510 WHERE p.match_rule_id = p_rule_id
14511 AND p.attribute_id = a.attribute_id
14512 AND a.ENTITY_NAME = 'CONTACTS'
14513
14514 UNION
14515
14516 SELECT a.attribute_id
14517 FROM HZ_TRANS_ATTRIBUTES_VL a,
14518 HZ_MATCH_RULE_SECONDARY s
14519 WHERE s.match_rule_id = p_rule_id
14520 AND s.attribute_id = a.attribute_id
14521 AND a.ENTITY_NAME = 'CONTACTS'
14522 );
14523
14524 IF l_num_attrs > 0 THEN
14525 l(' IF p_contact_ids IS NOT NULL AND p_contact_ids.COUNT>0 THEN');
14526 ldbg_s('Before Calling Procedure - get_contact_rec');
14527 l(' get_contact_rec(p_contact_ids, x_contact_list);');
14528 l(' END IF;');
14529 END IF;
14530
14531 -- Query number of contact point attributes
14532 SELECT COUNT(*) INTO l_num_attrs
14533 FROM (
14534 SELECT a.attribute_id
14535 FROM HZ_TRANS_ATTRIBUTES_VL a,
14536 HZ_MATCH_RULE_PRIMARY p
14537 WHERE p.match_rule_id = p_rule_id
14538 AND p.attribute_id = a.attribute_id
14539 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14540
14541 UNION
14542
14543 SELECT a.attribute_id
14544 FROM HZ_TRANS_ATTRIBUTES_VL a,
14545 HZ_MATCH_RULE_SECONDARY s
14546 WHERE s.match_rule_id = p_rule_id
14547 AND s.attribute_id = a.attribute_id
14548 AND a.ENTITY_NAME = 'CONTACT_POINTS'
14549 );
14550
14551 IF l_num_attrs > 0 THEN
14552 l(' IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN');
14553 ldbg_s('Before Calling Procedure - get_contact_point_rec');
14554 l(' get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);');
14555 l(' END IF;');
14556 END IF;
14557 l('EXCEPTION');
14558 l(' WHEN FND_API.G_EXC_ERROR THEN');
14559 l(' RAISE FND_API.G_EXC_ERROR;');
14560 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
14561 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14562 l(' WHEN OTHERS THEN');
14563 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14564 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''get_search_criteria'');');
14565 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14566 l(' FND_MSG_PUB.ADD;');
14567 l(' RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14568 l('END get_search_criteria;');
14569 l('');
14570
14571 l('');
14572 l('/************************************************');
14573 l(' This procedure retrieves the match rule party attributes into ');
14574 l(' the party search record structure ');
14575 l('************************************************/');
14576 l('');
14577 l('PROCEDURE get_party_rec (');
14578 l(' p_party_id IN NUMBER,');
14579 l(' x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type');
14580 l(') IS');
14581 l(' l_party_type VARCHAR2(255);');
14582 l('BEGIN');
14583 l('');
14584 ldbg_s('Inside calling procedure - get_party_rec');
14585 l(' SELECT PARTY_TYPE INTO l_party_type');
14586 l(' FROM HZ_PARTIES');
14587 l(' WHERE PARTY_ID = p_party_id;');
14588 l('');
14589 ldbg_sv('l_party_type is - ','l_party_type' ) ;
14590 l(' IF l_party_type = ''ORGANIZATION'' THEN');
14591
14592 SELECT COUNT(*) INTO l_num_attrs
14593 FROM (
14594 SELECT a.attribute_id
14595 FROM HZ_TRANS_ATTRIBUTES_VL a,
14596 HZ_MATCH_RULE_PRIMARY p
14597 WHERE p.match_rule_id = p_rule_id
14598 AND p.attribute_id = a.attribute_id
14599 AND a.ENTITY_NAME = 'PARTY'
14600 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14601 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14605 UNION
14602 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14603 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14604 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14606 SELECT a.attribute_id
14607 FROM HZ_TRANS_ATTRIBUTES_VL a,
14608 HZ_MATCH_RULE_SECONDARY s
14609 WHERE s.match_rule_id = p_rule_id
14610 AND s.attribute_id = a.attribute_id
14611 AND a.ENTITY_NAME = 'PARTY'
14612 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14613 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14614 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14615 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14616 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14617 );
14618
14619 IF l_num_attrs>0 THEN
14620 l(' SELECT ');
14621 FIRST := TRUE;
14622 FOR ATTRS IN (
14623 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
14624 FROM HZ_TRANS_ATTRIBUTES_VL a,
14625 HZ_MATCH_RULE_PRIMARY p
14626 WHERE p.match_rule_id = p_rule_id
14627 AND p.attribute_id = a.attribute_id
14628 AND a.ENTITY_NAME = 'PARTY'
14629 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14630 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14631 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14632 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14633 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14634 UNION
14635 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
14636 FROM HZ_TRANS_ATTRIBUTES_VL a,
14637 HZ_MATCH_RULE_SECONDARY s
14638 WHERE s.match_rule_id = p_rule_id
14639 AND s.attribute_id = a.attribute_id
14640 AND a.ENTITY_NAME = 'PARTY'
14641 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14642 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14643 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14644 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14645 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14646
14647 IF FIRST THEN
14648 l(' translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14649 FIRST := FALSE;
14650 ELSE
14651 l(' ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14652 END IF;
14653 END LOOP;
14654
14655 l(' INTO ');
14656 FIRST := TRUE;
14657 FOR ATTRS IN (
14658 SELECT distinct a.ATTRIBUTE_NAME
14659 FROM HZ_TRANS_ATTRIBUTES_VL a,
14660 HZ_MATCH_RULE_PRIMARY p
14661 WHERE p.match_rule_id = p_rule_id
14662 AND p.attribute_id = a.attribute_id
14663 AND a.ENTITY_NAME = 'PARTY'
14664 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14665 a.SOURCE_TABLE = 'HZ_ORGANIZATION_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 UNION
14670 SELECT distinct a.ATTRIBUTE_NAME
14671 FROM HZ_TRANS_ATTRIBUTES_VL a,
14672 HZ_MATCH_RULE_SECONDARY s
14673 WHERE s.match_rule_id = p_rule_id
14674 AND s.attribute_id = a.attribute_id
14675 AND a.ENTITY_NAME = 'PARTY'
14676 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14677 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14678 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14679 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14680 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14681
14682
14683 IF FIRST THEN
14684 l(' x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14685 FIRST := FALSE;
14686 ELSE
14687 l(' ,x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14688 END IF;
14689 END LOOP;
14690
14691 l(' FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES');
14692 l(' WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id');
14693 l(' AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL');
14694 l(' AND HZ_PARTIES.party_id = p_party_id;');
14695 ELSE
14696 l(' NULL;');
14697 END IF;
14698 l(' ELSIF l_party_type = ''PERSON'' THEN');
14699
14700 SELECT COUNT(*) INTO l_num_attrs
14701 FROM (
14702 SELECT a.attribute_id
14703 FROM HZ_TRANS_ATTRIBUTES_VL a,
14704 HZ_MATCH_RULE_PRIMARY p
14705 WHERE p.match_rule_id = p_rule_id
14706 AND p.attribute_id = a.attribute_id
14707 AND a.ENTITY_NAME = 'PARTY'
14708 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14709 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14710 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14711 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14712 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14713 UNION
14714 SELECT a.attribute_id
14715 FROM HZ_TRANS_ATTRIBUTES_VL a,
14716 HZ_MATCH_RULE_SECONDARY s
14717 WHERE s.match_rule_id = p_rule_id
14718 AND s.attribute_id = a.attribute_id
14719 AND a.ENTITY_NAME = 'PARTY'
14720 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14721 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14722 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14723 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14727 IF l_num_attrs>0 THEN
14724 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14725 );
14726
14728 l(' SELECT ');
14729 FIRST := TRUE;
14730 FOR ATTRS IN (
14731 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
14732 FROM HZ_TRANS_ATTRIBUTES_VL a,
14733 HZ_MATCH_RULE_PRIMARY p
14734 WHERE p.match_rule_id = p_rule_id
14735 AND p.attribute_id = a.attribute_id
14736 AND a.ENTITY_NAME = 'PARTY'
14737 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14738 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14739 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14740 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14741 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14742 UNION
14743 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
14744 FROM HZ_TRANS_ATTRIBUTES_VL a,
14745 HZ_MATCH_RULE_SECONDARY s
14746 WHERE s.match_rule_id = p_rule_id
14747 AND s.attribute_id = a.attribute_id
14748 AND a.ENTITY_NAME = 'PARTY'
14749 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14750 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14751 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
14752 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES')
14753 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14754
14755 IF FIRST THEN
14756 l(' translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14757 FIRST := FALSE;
14758 ELSE
14759 l(' ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14760 END IF;
14761 END LOOP;
14762
14763 l(' INTO ');
14764 FIRST := TRUE;
14765 FOR ATTRS IN (
14766 SELECT distinct a.ATTRIBUTE_NAME
14767 FROM HZ_TRANS_ATTRIBUTES_VL a,
14768 HZ_MATCH_RULE_PRIMARY p
14769 WHERE p.match_rule_id = p_rule_id
14770 AND p.attribute_id = a.attribute_id
14771 AND a.ENTITY_NAME = 'PARTY'
14772 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14773 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14774 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
14775 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES')
14776 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14777 UNION
14778 SELECT distinct a.ATTRIBUTE_NAME
14779 FROM HZ_TRANS_ATTRIBUTES_VL a,
14780 HZ_MATCH_RULE_SECONDARY s
14781 WHERE s.match_rule_id = p_rule_id
14782 AND s.attribute_id = a.attribute_id
14783 AND a.ENTITY_NAME = 'PARTY'
14784 AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14785 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14786 a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
14787 a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES')
14788 AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14789
14790 IF FIRST THEN
14791 l(' x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14792 FIRST := FALSE;
14793 ELSE
14794 l(' ,x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14795 END IF;
14796 END LOOP;
14797
14798 l(' FROM HZ_PARTIES, HZ_PERSON_PROFILES');
14799 l(' WHERE HZ_PARTIES.party_id = HZ_PERSON_PROFILES.party_id');
14800 l(' AND HZ_PERSON_PROFILES.effective_end_date is NULL');
14801 l(' AND HZ_PARTIES.party_id = p_party_id;');
14802 ELSE
14803 l(' NULL;');
14804 END IF;
14805 l(' END IF;');
14806 l(' x_party_search_rec.PARTY_TYPE := l_party_type;');
14807 generate_custom_code(p_rule_id, ' x_party_search_rec','PARTY','p_party_id');
14808 l('');
14809 l('EXCEPTION');
14810 l(' WHEN OTHERS THEN');
14811 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
14812 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''get_party_rec'');');
14813 l(' FND_MESSAGE.SET_TOKEN(''PARTY_ID'',p_party_id);');
14814 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14815 l(' FND_MSG_PUB.ADD;');
14816 l(' RAISE FND_API.G_EXC_ERROR;');
14817 l('END get_party_rec;');
14818 l('');
14819 l('/************************************************');
14820 l(' This procedure retrieves the match rule party site attributes into ');
14821 l(' the party site search record structure ');
14822 l('************************************************/');
14823 l('');
14824 l('PROCEDURE get_party_site_rec (');
14825 l(' p_party_site_ids IN HZ_PARTY_SEARCH.IDList,');
14826 l(' x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list');
14827 l(') IS');
14828 l(' CURSOR c_party_sites(cp_party_site_id NUMBER) IS');
14829 l(' SELECT party_site_id');
14830 FOR ATTRS IN (
14831 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14832 FROM HZ_TRANS_ATTRIBUTES_VL a,
14833 HZ_MATCH_RULE_PRIMARY p
14834 WHERE p.match_rule_id = p_rule_id
14835 AND p.attribute_id = a.attribute_id
14836 AND a.ENTITY_NAME = 'PARTY_SITES'
14837 AND a.SOURCE_TABLE <> 'CUSTOM'
14838 UNION
14839 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14840 FROM HZ_TRANS_ATTRIBUTES_VL a,
14841 HZ_MATCH_RULE_SECONDARY s
14842 WHERE s.match_rule_id = p_rule_id
14843 AND s.attribute_id = a.attribute_id
14844 AND a.ENTITY_NAME = 'PARTY_SITES'
14845 AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14846
14850 l(' WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id');
14847 l(' ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14848 END LOOP;
14849 l(' FROM HZ_PARTY_SITES, HZ_LOCATIONS');
14851 l(' AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;');
14852 l('');
14853 l(' I NUMBER;');
14854 l(' J NUMBER:=1;');
14855 l(' l_party_site_id NUMBER;');
14856 l('');
14857 l('BEGIN');
14858 l('');
14859 ldbg_s('Inside calling procedure - get_party_site_rec');
14860 l(' FOR I IN 1..p_party_site_ids.COUNT LOOP');
14861 l(' l_party_site_id := p_party_site_ids(I);');
14862 l(' OPEN c_party_sites(p_party_site_ids(I));');
14863 l(' LOOP');
14864 l(' FETCH c_party_sites INTO');
14865 l(' l_party_site_id');
14866 FOR ATTRS IN (
14867 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14868 FROM HZ_TRANS_ATTRIBUTES_VL a,
14869 HZ_MATCH_RULE_PRIMARY p
14870 WHERE p.match_rule_id = p_rule_id
14871 AND p.attribute_id = a.attribute_id
14872 AND a.ENTITY_NAME = 'PARTY_SITES'
14873 AND a.SOURCE_TABLE <> 'CUSTOM'
14874
14875 UNION
14876
14877 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14878 FROM HZ_TRANS_ATTRIBUTES_VL a,
14879 HZ_MATCH_RULE_SECONDARY s
14880 WHERE s.match_rule_id = p_rule_id
14881 AND s.attribute_id = a.attribute_id
14882 AND a.ENTITY_NAME = 'PARTY_SITES'
14883 AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14884
14885 l(' ,x_party_site_list(J).'||ATTRS.ATTRIBUTE_NAME);
14886 END LOOP;
14887 l(' ;');
14888 l(' EXIT WHEN c_party_sites%NOTFOUND;');
14889 l('');
14890 generate_custom_code(p_rule_id, ' x_party_site_list(J)','PARTY_SITES','l_party_site_id')
14891 ;
14892 l(' J:=J+1;');
14893 l('');
14894 l(' END LOOP;');
14895 l(' CLOSE c_party_sites;');
14896 l(' END LOOP;');
14897 l('');
14898 l('EXCEPTION');
14899 l(' WHEN OTHERS THEN');
14900 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
14901 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''get_party_site_rec'');');
14902 l(' FND_MESSAGE.SET_TOKEN(''PARTY_ID'',l_party_site_id);');
14903 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14904 l(' FND_MSG_PUB.ADD;');
14905 l(' RAISE FND_API.G_EXC_ERROR;');
14906 l('END get_party_site_rec;');
14907 l('');
14908
14909 l('/************************************************');
14910 l(' This procedure retrieves the match rule contact attributes into ');
14911 l(' the contact search record structure ');
14912 l('************************************************/');
14913 l('');
14914 l('PROCEDURE get_contact_rec (');
14915 l(' p_contact_ids IN HZ_PARTY_SEARCH.IDList,');
14916 l(' x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list');
14917 l(') IS');
14918 l(' CURSOR c_contacts(cp_org_contact_id NUMBER) IS');
14919 l(' SELECT org_contact_id');
14920 FOR ATTRS IN (
14921 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14922 FROM HZ_TRANS_ATTRIBUTES_VL a,
14923 HZ_MATCH_RULE_PRIMARY p
14924 WHERE p.match_rule_id = p_rule_id
14925 AND p.attribute_id = a.attribute_id
14926 AND a.ENTITY_NAME = 'CONTACTS'
14927 AND a.SOURCE_TABLE <> 'CUSTOM'
14928 UNION
14929 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14930 FROM HZ_TRANS_ATTRIBUTES_VL a,
14931 HZ_MATCH_RULE_SECONDARY s
14932 WHERE s.match_rule_id = p_rule_id
14933 AND s.attribute_id = a.attribute_id
14934 AND a.ENTITY_NAME = 'CONTACTS'
14935 AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14936
14937 l(' ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14938 END LOOP;
14939 l(' FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES');
14940 l(' WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id');
14941 l(' AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14942 l(' AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14943 l(' AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = ''F''');
14944 l(' AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14945 l(' AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id');
14946 l(' AND HZ_PERSON_PROFILES.effective_end_date IS NULL;');
14947 l('');
14948 l(' I NUMBER;');
14949 l(' l_org_contact_id NUMBER;');
14950 l(' J NUMBER:=1;');
14951
14952 l(' BEGIN');
14953 l('');
14954 ldbg_s('Inside calling procedure - get_contact_rec');
14955 l(' FOR I IN 1..p_contact_ids.COUNT LOOP');
14956 l(' l_org_contact_id := p_contact_ids(I);');
14957 l(' OPEN c_contacts(p_contact_ids(I));');
14958 l(' LOOP');
14959 l(' FETCH c_contacts INTO');
14960 l(' l_org_contact_id');
14961 FOR ATTRS IN (
14962 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14963 FROM HZ_TRANS_ATTRIBUTES_VL a,
14964 HZ_MATCH_RULE_PRIMARY p
14965 WHERE p.match_rule_id = p_rule_id
14966 AND p.attribute_id = a.attribute_id
14967 AND a.ENTITY_NAME = 'CONTACTS'
14968 AND a.SOURCE_TABLE <> 'CUSTOM'
14969
14970 UNION
14971
14972 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14973 FROM HZ_TRANS_ATTRIBUTES_VL a,
14974 HZ_MATCH_RULE_SECONDARY s
14975 WHERE s.match_rule_id = p_rule_id
14976 AND s.attribute_id = a.attribute_id
14977 AND a.ENTITY_NAME = 'CONTACTS'
14978 AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14979
14980 l(' ,x_contact_list(J).'||ATTRS.ATTRIBUTE_NAME);
14981 END LOOP;
14982 l(' ;');
14983 l(' EXIT WHEN c_contacts%NOTFOUND;');
14984 l('');
14988 l(' END LOOP;');
14985 generate_custom_code(p_rule_id, ' x_contact_list(J)','CONTACTS','l_org_contact_id');
14986 l('');
14987 l(' J:=J+1;');
14989 l(' CLOSE c_contacts;');
14990 l(' END LOOP;');
14991 l('');
14992 l('EXCEPTION');
14993 l(' WHEN OTHERS THEN');
14994 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
14995 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''get_contact_rec'');');
14996 l(' FND_MESSAGE.SET_TOKEN(''PARTY_ID'',l_org_contact_id);');
14997 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14998 l(' FND_MSG_PUB.ADD;');
14999 l(' RAISE FND_API.G_EXC_ERROR;');
15000 l('END get_contact_rec;');
15001 l('');
15002 l('/************************************************');
15003 l(' This procedure retrieves the match rule contact point attributes into ');
15004 l(' the contact point search record structure ');
15005 l('************************************************/');
15006 l('');
15007 l('PROCEDURE get_contact_point_rec (');
15008 l(' p_contact_point_ids IN HZ_PARTY_SEARCH.IDList,');
15009 l(' x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15010 l(') IS');
15011 l('');
15012 l(' -- Cursor to fetch primary contact points for party');
15013 l(' CURSOR c_cpts(cp_contact_point_id NUMBER) IS');
15014 l(' SELECT contact_point_id, contact_point_type');
15015 FOR ATTRS IN (
15016 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
15017 FROM HZ_TRANS_ATTRIBUTES_VL a,
15018 HZ_MATCH_RULE_PRIMARY p
15019 WHERE p.match_rule_id = p_rule_id
15020 AND p.attribute_id = a.attribute_id
15021 AND a.ENTITY_NAME = 'CONTACT_POINTS'
15022 AND a.SOURCE_TABLE <> 'CUSTOM'
15023
15024 UNION
15025
15026 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
15027 FROM HZ_TRANS_ATTRIBUTES_VL a,
15028 HZ_MATCH_RULE_SECONDARY s
15029 WHERE s.match_rule_id = p_rule_id
15030 AND s.attribute_id = a.attribute_id
15031 AND a.ENTITY_NAME = 'CONTACT_POINTS'
15032 AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
15033
15034 l(' ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5565522
15035 END LOOP;
15036 l(' FROM HZ_CONTACT_POINTS');
15037 l(' WHERE contact_point_id = cp_contact_point_id;');
15038
15039 l('');
15040 l(' I NUMBER;');
15041 l(' l_contact_point_id NUMBER;');
15042 l(' J NUMBER:=1;');
15043
15044 l(' BEGIN');
15045 l('');
15046 ldbg_s('Inside calling procedure - get_contact_point_rec');
15047 l(' FOR I in 1..p_contact_point_ids.COUNT LOOP');
15048 l(' l_contact_point_id := p_contact_point_ids(I);');
15049 l(' OPEN c_cpts(p_contact_point_ids(I));');
15050 l(' LOOP');
15051 l(' FETCH c_cpts INTO');
15052 l(' l_contact_point_id, x_contact_point_list(J).contact_point_type');
15053
15054 FOR ATTRS IN (
15055 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
15056 FROM HZ_TRANS_ATTRIBUTES_VL a,
15057 HZ_MATCH_RULE_PRIMARY p
15058 WHERE p.match_rule_id = p_rule_id
15059 AND p.attribute_id = a.attribute_id
15060 AND a.ENTITY_NAME = 'CONTACT_POINTS'
15061 AND a.SOURCE_TABLE <> 'CUSTOM'
15062
15063 UNION
15064
15065 SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
15066 FROM HZ_TRANS_ATTRIBUTES_VL a,
15067 HZ_MATCH_RULE_SECONDARY s
15068 WHERE s.match_rule_id = p_rule_id
15069 AND s.attribute_id = a.attribute_id
15070 AND a.ENTITY_NAME = 'CONTACT_POINTS'
15071 AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
15072
15073
15074 l(' ,x_contact_point_list(J).'||ATTRS.ATTRIBUTE_NAME);
15075 END LOOP;
15076 l(' ;');
15077 l(' EXIT WHEN c_cpts%NOTFOUND;');
15078 l('');
15079 generate_custom_code(p_rule_id, ' x_contact_point_list(J)','CONTACT_POINTS','l_contact_point_id');
15080 l(' J:=J+1;');
15081 l('');
15082 l(' END LOOP;');
15083 l(' CLOSE c_cpts;');
15084 l(' END LOOP;');
15085
15086 l('');
15087 l('EXCEPTION');
15088 l(' WHEN OTHERS THEN');
15089 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
15090 l(' FND_MESSAGE.SET_TOKEN(''PROC'',''get_contact_point_rec'');');
15091 l(' FND_MESSAGE.SET_TOKEN(''PARTY_ID'',l_contact_point_id);');
15092 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
15093 l(' FND_MSG_PUB.ADD;');
15094 l(' RAISE FND_API.G_EXC_ERROR;');
15095 l('END get_contact_point_rec;');
15096
15097 END;
15098
15099 PROCEDURE generate_check_staged (
15100 p_rule_id IN NUMBER
15101 ) IS
15102
15103 CURSOR c_trans_func IS
15104 SELECT f.FUNCTION_ID
15105 FROM hz_primary_trans f, hz_match_rule_primary a
15106 WHERE a.MATCH_RULE_ID = p_rule_id
15107 AND a.PRIMARY_ATTRIBUTE_ID = f.PRIMARY_ATTRIBUTE_ID
15108
15109 UNION
15110
15111 SELECT f.FUNCTION_ID
15112 FROM hz_secondary_trans f, hz_match_rule_secondary a
15113 WHERE a.MATCH_RULE_ID = p_rule_id
15114 AND a.SECONDARY_ATTRIBUTE_ID = f.SECONDARY_ATTRIBUTE_ID;
15115
15116 ---Start of Code Change for Match Rule Set
15117 CURSOR c_ruleset_trans_func IS
15118 SELECT f.FUNCTION_ID
15119 FROM hz_primary_trans f, hz_match_rule_primary a
15120 WHERE a.MATCH_RULE_ID IN (SELECT UNIQUE CONDITION_MATCH_RULE_ID
15121 FROM HZ_MATCH_RULE_CONDITIONS
15122 WHERE MATCH_RULE_SET_ID = p_rule_id
15123 )
15124 AND a.PRIMARY_ATTRIBUTE_ID = f.PRIMARY_ATTRIBUTE_ID
15125
15126 UNION
15127
15128 SELECT f.FUNCTION_ID
15129 FROM hz_secondary_trans f, hz_match_rule_secondary a
15133 )
15130 WHERE a.MATCH_RULE_ID IN (SELECT UNIQUE CONDITION_MATCH_RULE_ID
15131 FROM HZ_MATCH_RULE_CONDITIONS
15132 WHERE MATCH_RULE_SET_ID = p_rule_id
15134 AND a.SECONDARY_ATTRIBUTE_ID = f.SECONDARY_ATTRIBUTE_ID;
15135
15136 ---End of Code Change for Match Rule Set
15137
15138 l_func_id NUMBER;
15139 FIRST BOOLEAN := FALSE;
15140 l_rule_type varchar2(30); ---Code Change for Match Rule Set
15141 BEGIN
15142 ---Start of Code Change for Match Rule Set
15143 SELECT nvl(match_rule_type,'SINGLE') into l_rule_type FROM HZ_MATCH_RULES_VL
15144 WHERE match_rule_id = p_rule_id;
15145 ---End of Code Change for Match Rule Set
15146
15147 l('FUNCTION check_staged RETURN BOOLEAN IS');
15148 l('');
15149 l(' CURSOR c_check_staged IS ');
15150 l(' SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL ');
15151 l(' WHERE nvl(STAGED_FLAG,''N'') = ''N'' ');
15152 l(' AND FUNCTION_ID in (');
15153 FIRST := TRUE;
15154 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
15155 OPEN c_trans_func;
15156 LOOP
15157 FETCH c_trans_func INTO l_func_id;
15158 EXIT WHEN c_trans_func%NOTFOUND;
15159
15160 IF FIRST THEN
15161 l(' ' || l_func_id);
15162 FIRST := FALSE;
15163 ELSE
15164 l(' ,'|| l_func_id);
15165 END IF;
15166 END LOOP;
15167 CLOSE c_trans_func;
15168 ELSE ---Start of Code Change for Match Rule Set
15169 OPEN c_ruleset_trans_func;
15170 LOOP
15171 FETCH c_ruleset_trans_func INTO l_func_id;
15172 EXIT WHEN c_ruleset_trans_func%NOTFOUND;
15173
15174 IF FIRST THEN
15175 l(' ' || l_func_id);
15176 FIRST := FALSE;
15177 ELSE
15178 l(' ,'|| l_func_id);
15179 END IF;
15180 END LOOP;
15181 CLOSE c_ruleset_trans_func;
15182
15183 END IF; ---End of Code Change for Match Rule Set
15184 l(' );');
15185
15186 l(' l_tmp NUMBER;');
15187
15188 l('BEGIN');
15189 l(' IF g_staged = 1 THEN');
15190 l(' RETURN TRUE;');
15191 l(' ELSIF g_staged = 0 THEN');
15192 l(' RETURN FALSE;');
15193 l(' END IF;');
15194 l('');
15195 l(' OPEN c_check_staged;');
15196 l(' FETCH c_check_staged INTO l_tmp;');
15197 l(' IF c_check_staged%FOUND THEN');
15198 l(' CLOSE c_check_staged;');
15199 l(' g_staged := 0;');
15200 l(' RETURN FALSE;');
15201 l(' ELSE');
15202 l(' CLOSE c_check_staged;');
15203 l(' g_staged := 1;');
15204 l(' RETURN TRUE;');
15205 l(' END IF;');
15206 l('END check_staged;');
15207
15208 l('');
15209 l('-- Fix for Bug 4736139');
15210 l('FUNCTION check_staged_var RETURN VARCHAR2 IS');
15211 l(' l_staged VARCHAR2(1);');
15212 l(' l_staged_bool BOOLEAN;');
15213 l('BEGIN');
15214 l(' l_staged_bool := check_staged;');
15215 l(' IF l_staged_bool THEN');
15216 l(' l_staged := ''Y'';');
15217 l(' ELSE');
15218 l(' l_staged := ''N'';');
15219 l(' END IF;');
15220 l(' RETURN l_staged;');
15221 l('END check_staged_var;');
15222 l('-- End fix for Bug 4736139');
15223 l('');
15224
15225 END;
15226
15227 PROCEDURE gen_pkg_spec (
15228 p_pkg_name IN VARCHAR2,
15229 p_rule_id IN NUMBER
15230 ) IS
15231
15232 BEGIN
15233
15234 l('CREATE or REPLACE PACKAGE ' || p_pkg_name || ' AUTHID CURRENT_USER AS');
15235 l('PROCEDURE map_party_rec (');
15236 l(' p_search_ctx IN BOOLEAN,');
15237 l(' p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15238 l(' x_entered_max_score OUT NUMBER,');
15239 l(' x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type');
15240 l(');');
15241 l('PROCEDURE map_party_site_rec (');
15242 l(' p_search_ctx IN BOOLEAN,');
15243 l(' p_search_list IN HZ_PARTY_SEARCH.party_site_list, ');
15244 l(' x_entered_max_score OUT NUMBER,');
15245 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list');
15246 l(');');
15247 l('PROCEDURE map_contact_rec (');
15248 l(' p_search_ctx IN BOOLEAN,');
15249 l(' p_search_list IN HZ_PARTY_SEARCH.contact_list,');
15250 l(' x_entered_max_score OUT NUMBER,');
15251 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list');
15252 l(' );');
15253 l('PROCEDURE map_contact_point_rec (');
15254 l(' p_search_ctx IN BOOLEAN,');
15255 l(' p_search_list IN HZ_PARTY_SEARCH.contact_point_list,');
15256 l(' x_entered_max_score OUT NUMBER,');
15257 l(' x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list');
15258 l(' );');
15259 l('PROCEDURE get_party_rec (');
15260 l(' p_party_id IN NUMBER,');
15261 l(' x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type');
15262 l(');');
15263 l('PROCEDURE get_party_site_rec (');
15264 l(' p_party_site_ids IN HZ_PARTY_SEARCH.IDList,');
15265 l(' x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list');
15266 l(');');
15267 l('PROCEDURE get_contact_rec (');
15268 l(' p_contact_ids IN HZ_PARTY_SEARCH.IDList,');
15269 l(' x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list');
15270 l(');');
15271 l('PROCEDURE get_contact_point_rec (');
15272 l(' p_contact_point_ids IN HZ_PARTY_SEARCH.IDList,');
15273 l(' x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15274 l(');');
15275
15276 l('FUNCTION check_prim_cond(');
15277 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15281 l(' RETURN BOOLEAN;');
15278 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
15279 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
15280 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list)');
15282 l('PROCEDURE check_party_site_cond(');
15283 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
15284 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15285 l(' x_secondary OUT BOOLEAN,');
15286 l(' x_primary OUT BOOLEAN');
15287 l(');');
15288 l('PROCEDURE check_contact_cond(');
15289 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
15290 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15291 l(' x_secondary OUT BOOLEAN,');
15292 l(' x_primary OUT BOOLEAN');
15293 l(');');
15294 l('PROCEDURE check_contact_point_cond(');
15295 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15296 l(' x_secondary OUT BOOLEAN,');
15297 l(' x_primary OUT BOOLEAN');
15298 l(');');
15299 l('PROCEDURE find_parties (');
15300 l(' p_rule_id IN NUMBER,');
15301 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15302 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
15303 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
15304 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15305 l(' p_restrict_sql IN VARCHAR2,');
15306 l(' p_match_type IN VARCHAR2,');
15307 l(' p_search_merged IN VARCHAR2,');
15308 l(' p_dup_party_id IN NUMBER,');
15309 l(' p_dup_set_id IN NUMBER,');
15310 l(' p_dup_batch_id IN NUMBER,');
15311 l(' p_ins_details IN VARCHAR2,');
15312 l(' x_search_ctx_id OUT NUMBER,');
15313 l(' x_num_matches OUT NUMBER');
15314 l(');');
15315 l('PROCEDURE find_persons (');
15316 l(' p_rule_id IN NUMBER,');
15317 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15318 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
15319 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
15320 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15321 l(' p_restrict_sql IN VARCHAR2,');
15322 l(' p_match_type IN VARCHAR2,');
15323 l(' p_search_merged IN VARCHAR2,');
15324 l(' p_ins_details IN VARCHAR2,');
15325 l(' x_search_ctx_id OUT NUMBER,');
15326 l(' x_num_matches OUT NUMBER');
15327 l(');');
15328 l('PROCEDURE find_party_details (');
15329 l(' p_rule_id IN NUMBER,');
15330 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15331 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
15332 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
15333 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15334 l(' p_restrict_sql IN VARCHAR2,');
15335 l(' p_match_type IN VARCHAR2,');
15336 l(' p_search_merged IN VARCHAR2,');
15337 l(' x_search_ctx_id OUT NUMBER,');
15338 l(' x_num_matches OUT NUMBER');
15339 l(');');
15340 l('PROCEDURE find_duplicate_party_sites(');
15341 l(' p_rule_id IN NUMBER,');
15342 l(' p_party_site_id IN NUMBER,');
15343 l(' p_party_id IN NUMBER,');
15344 l(' p_restrict_sql IN VARCHAR2,');
15345 l(' p_match_type IN VARCHAR2,');
15346 l(' x_search_ctx_id OUT NUMBER,');
15347 l(' x_num_matches OUT NUMBER');
15348 l(');');
15349 l('PROCEDURE find_duplicate_contacts(');
15350 l(' p_rule_id IN NUMBER,');
15351 l(' p_org_contact_id IN NUMBER,');
15352 l(' p_party_id IN NUMBER,');
15353 l(' p_restrict_sql IN VARCHAR2,');
15354 l(' p_match_type IN VARCHAR2,');
15355 l(' x_search_ctx_id OUT NUMBER,');
15356 l(' x_num_matches OUT NUMBER');
15357 l(');');
15358 l('PROCEDURE find_duplicate_contact_points(');
15359 l(' p_rule_id IN NUMBER,');
15360 l(' p_contact_point_id IN NUMBER,');
15361 l(' p_party_id IN NUMBER,');
15362 l(' p_restrict_sql IN VARCHAR2,');
15363 l(' p_match_type IN VARCHAR2,');
15364 l(' x_search_ctx_id OUT NUMBER,');
15365 l(' x_num_matches OUT NUMBER');
15366 l(');');
15367 l('PROCEDURE find_duplicate_parties (');
15368 l(' p_rule_id IN NUMBER,');
15369 l(' p_party_id IN NUMBER,');
15370 l(' p_restrict_sql IN VARCHAR2,');
15371 l(' p_match_type IN VARCHAR2,');
15372 l(' p_dup_batch_id IN NUMBER,');
15373 l(' p_search_merged IN VARCHAR2,');
15374 l(' x_dup_set_id OUT NUMBER,');
15375 l(' x_search_ctx_id OUT NUMBER,');
15376 l(' x_num_matches OUT NUMBER');
15377 l(');');
15378 l('PROCEDURE get_matching_party_sites (');
15379 l(' p_rule_id IN NUMBER,');
15380 l(' p_party_id IN NUMBER,');
15381 l(' p_party_site_list IN HZ_PARTY_SEARCH.PARTY_SITE_LIST,');
15385 l(' p_dup_party_site_id IN NUMBER, ');
15382 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
15383 l(' p_restrict_sql IN VARCHAR2,');
15384 l(' p_match_type IN VARCHAR2,');
15386 l(' x_search_ctx_id OUT NUMBER,');
15387 l(' x_num_matches OUT NUMBER');
15388 l(');');
15389 l('PROCEDURE get_matching_contacts (');
15390 l(' p_rule_id IN NUMBER,');
15391 l(' p_party_id IN NUMBER,');
15392 l(' p_contact_list IN HZ_PARTY_SEARCH.CONTACT_LIST,');
15393 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
15394 l(' p_restrict_sql IN VARCHAR2,');
15395 l(' p_match_type IN VARCHAR2,');
15396 l(' p_dup_contact_id IN NUMBER, ');
15397 l(' x_search_ctx_id OUT NUMBER,');
15398 l(' x_num_matches OUT NUMBER');
15399 l(');');
15400 l('');
15401 l('PROCEDURE get_matching_contact_points (');
15402 l(' p_rule_id IN NUMBER,');
15403 l(' p_party_id IN NUMBER,');
15404 l(' p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
15405 l(' p_restrict_sql IN VARCHAR2,');
15406 l(' p_match_type IN VARCHAR2,');
15407 l(' p_dup_contact_point_id IN NUMBER, ');
15408 l(' x_search_ctx_id OUT NUMBER,');
15409 l(' x_num_matches OUT NUMBER');
15410 l(');');
15411 l('PROCEDURE get_score_details (');
15412 l(' p_rule_id IN NUMBER,');
15413 l(' p_party_id IN NUMBER,');
15414 l(' p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15415 l(' p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,');
15416 l(' p_contact_list IN HZ_PARTY_SEARCH.contact_list,');
15417 l(' p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,');
15418 l(' x_search_ctx_id IN OUT NUMBER');
15419 l(');');
15420 l('PROCEDURE find_parties_dynamic (');
15421 l(' p_rule_id IN NUMBER,');
15422 l(' p_attrib_id1 IN NUMBER,');
15423 l(' p_attrib_id2 IN NUMBER,');
15424 l(' p_attrib_id3 IN NUMBER,');
15425 l(' p_attrib_id4 IN NUMBER,');
15426 l(' p_attrib_id5 IN NUMBER,');
15427 l(' p_attrib_id6 IN NUMBER,');
15428 l(' p_attrib_id7 IN NUMBER,');
15429 l(' p_attrib_id8 IN NUMBER,');
15430 l(' p_attrib_id9 IN NUMBER,');
15431 l(' p_attrib_id10 IN NUMBER,');
15432 l(' p_attrib_id11 IN NUMBER,');
15433 l(' p_attrib_id12 IN NUMBER,');
15434 l(' p_attrib_id13 IN NUMBER,');
15435 l(' p_attrib_id14 IN NUMBER,');
15436 l(' p_attrib_id15 IN NUMBER,');
15437 l(' p_attrib_id16 IN NUMBER,');
15438 l(' p_attrib_id17 IN NUMBER,');
15439 l(' p_attrib_id18 IN NUMBER,');
15440 l(' p_attrib_id19 IN NUMBER,');
15441 l(' p_attrib_id20 IN NUMBER,');
15442 l(' p_attrib_val1 IN VARCHAR2,');
15443 l(' p_attrib_val2 IN VARCHAR2,');
15444 l(' p_attrib_val3 IN VARCHAR2,');
15445 l(' p_attrib_val4 IN VARCHAR2,');
15446 l(' p_attrib_val5 IN VARCHAR2,');
15447 l(' p_attrib_val6 IN VARCHAR2,');
15448 l(' p_attrib_val7 IN VARCHAR2,');
15449 l(' p_attrib_val8 IN VARCHAR2,');
15450 l(' p_attrib_val9 IN VARCHAR2,');
15451 l(' p_attrib_val10 IN VARCHAR2,');
15452 l(' p_attrib_val11 IN VARCHAR2,');
15453 l(' p_attrib_val12 IN VARCHAR2,');
15454 l(' p_attrib_val13 IN VARCHAR2,');
15455 l(' p_attrib_val14 IN VARCHAR2,');
15456 l(' p_attrib_val15 IN VARCHAR2,');
15457 l(' p_attrib_val16 IN VARCHAR2,');
15458 l(' p_attrib_val17 IN VARCHAR2,');
15459 l(' p_attrib_val18 IN VARCHAR2,');
15460 l(' p_attrib_val19 IN VARCHAR2,');
15461 l(' p_attrib_val20 IN VARCHAR2,');
15462 l(' p_restrict_sql IN VARCHAR2,');
15463 l(' p_match_type IN VARCHAR2,');
15464 l(' p_search_merged IN VARCHAR2,');
15465 l(' x_search_ctx_id OUT NUMBER,');
15466 l(' x_num_matches OUT NUMBER');
15467 l(');');
15468 l('PROCEDURE call_api_dynamic (');
15469 l(' p_rule_id IN NUMBER,');
15470 l(' p_attrib_id1 IN NUMBER,');
15471 l(' p_attrib_id2 IN NUMBER,');
15472 l(' p_attrib_id3 IN NUMBER,');
15473 l(' p_attrib_id4 IN NUMBER,');
15474 l(' p_attrib_id5 IN NUMBER,');
15475 l(' p_attrib_id6 IN NUMBER,');
15476 l(' p_attrib_id7 IN NUMBER,');
15477 l(' p_attrib_id8 IN NUMBER,');
15478 l(' p_attrib_id9 IN NUMBER,');
15479 l(' p_attrib_id10 IN NUMBER,');
15480 l(' p_attrib_id11 IN NUMBER,');
15481 l(' p_attrib_id12 IN NUMBER,');
15482 l(' p_attrib_id13 IN NUMBER,');
15486 l(' p_attrib_id17 IN NUMBER,');
15483 l(' p_attrib_id14 IN NUMBER,');
15484 l(' p_attrib_id15 IN NUMBER,');
15485 l(' p_attrib_id16 IN NUMBER,');
15487 l(' p_attrib_id18 IN NUMBER,');
15488 l(' p_attrib_id19 IN NUMBER,');
15489 l(' p_attrib_id20 IN NUMBER,');
15490 l(' p_attrib_val1 IN VARCHAR2,');
15491 l(' p_attrib_val2 IN VARCHAR2,');
15492 l(' p_attrib_val3 IN VARCHAR2,');
15493 l(' p_attrib_val4 IN VARCHAR2,');
15494 l(' p_attrib_val5 IN VARCHAR2,');
15495 l(' p_attrib_val6 IN VARCHAR2,');
15496 l(' p_attrib_val7 IN VARCHAR2,');
15497 l(' p_attrib_val8 IN VARCHAR2,');
15498 l(' p_attrib_val9 IN VARCHAR2,');
15499 l(' p_attrib_val10 IN VARCHAR2,');
15500 l(' p_attrib_val11 IN VARCHAR2,');
15501 l(' p_attrib_val12 IN VARCHAR2,');
15502 l(' p_attrib_val13 IN VARCHAR2,');
15503 l(' p_attrib_val14 IN VARCHAR2,');
15504 l(' p_attrib_val15 IN VARCHAR2,');
15505 l(' p_attrib_val16 IN VARCHAR2,');
15506 l(' p_attrib_val17 IN VARCHAR2,');
15507 l(' p_attrib_val18 IN VARCHAR2,');
15508 l(' p_attrib_val19 IN VARCHAR2,');
15509 l(' p_attrib_val20 IN VARCHAR2,');
15510 l(' p_restrict_sql IN VARCHAR2,');
15511 l(' p_api_name IN VARCHAR2,');
15512 l(' p_match_type IN VARCHAR2,');
15513 l(' p_party_id IN NUMBER,');
15514 l(' p_search_merged IN VARCHAR2,');
15515 l(' x_search_ctx_id OUT NUMBER,');
15516 l(' x_num_matches OUT NUMBER');
15517 l(');');
15518
15519 l('PROCEDURE get_party_for_search (');
15520 l(' p_party_id IN NUMBER,');
15521 l(' x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
15522 l(' x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
15523 l(' x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
15524 l(' x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15525 l(');');
15526 l('PROCEDURE get_search_criteria (');
15527 l(' p_party_id IN NUMBER,');
15528 l(' p_party_site_ids IN HZ_PARTY_SEARCH.IDList,');
15529 l(' p_contact_ids IN HZ_PARTY_SEARCH.IDList,');
15530 l(' p_contact_pt_ids IN HZ_PARTY_SEARCH.IDList,');
15531 l(' x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
15532 l(' x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
15533 l(' x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
15534 l(' x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15535 l(');');
15536
15537 l('FUNCTION check_staged RETURN BOOLEAN;');
15538 l('');
15539 l('-- Fix for Bug 4736139');
15540 l('FUNCTION check_staged_var RETURN VARCHAR2;');
15541 l('');
15542 l(' g_staged NUMBER := -1;');
15543 l('END ' || p_pkg_name || ';');
15544
15545 END;
15546
15547 FUNCTION num_primary(
15548 p_entity VARCHAR2,
15549 p_rule_id NUMBER) RETURN NUMBER IS
15550
15551 l_num_primary NUMBER;
15552 BEGIN
15553 SELECT count(1) INTO l_num_primary
15554 FROM HZ_MATCH_RULE_PRIMARY p,
15555 HZ_TRANS_ATTRIBUTES_VL a
15556 WHERE p.match_rule_id = p_rule_id
15557 AND p.ATTRIBUTE_ID = a.ATTRIBUTE_ID
15558 AND ENTITY_NAME = p_entity;
15559 RETURN l_num_primary;
15560
15561 END;
15562
15563 FUNCTION num_secondary(
15564 p_rule_id NUMBER,
15565 p_entity VARCHAR2) RETURN NUMBER IS
15566
15567 l_num_secondary NUMBER;
15568 BEGIN
15569 SELECT count(1) INTO l_num_secondary
15570 FROM HZ_MATCH_RULE_SECONDARY p,
15571 HZ_TRANS_ATTRIBUTES_VL a
15572 WHERE p.match_rule_id = p_rule_id
15573 AND p.ATTRIBUTE_ID = a.ATTRIBUTE_ID
15574 AND ENTITY_NAME = p_entity;
15575 RETURN l_num_secondary;
15576
15577 END;
15578
15579
15580 PROCEDURE gen_exception_block IS
15581
15582 BEGIN
15583 l(' --Standard call to get message count and if count is 1, get message info');
15584 l(' FND_MSG_PUB.Count_And_Get(');
15585 l(' p_encoded => FND_API.G_FALSE,');
15586 l(' p_count => x_msg_count,');
15587 l(' p_data => x_msg_data);');
15588 l(' EXCEPTION');
15589 l(' WHEN FND_API.G_EXC_ERROR THEN');
15590 l(' x_return_status := FND_API.G_RET_STS_ERROR;');
15591 l(' FND_MSG_PUB.Count_And_Get(');
15592 l(' p_encoded => FND_API.G_FALSE,');
15593 l(' p_count => x_msg_count,');
15594 l(' p_data => x_msg_data);');
15595 l(' WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
15596 l(' x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;');
15597 l(' FND_MSG_PUB.Count_And_Get(');
15598 l(' p_encoded => FND_API.G_FALSE,');
15599 l(' p_count => x_msg_count,');
15600 l(' p_data => x_msg_data);');
15601 l('');
15602 l(' WHEN OTHERS THEN');
15603 l(' x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;');
15604 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
15608 l('');
15605 l(' FND_MESSAGE.SET_TOKEN(''PROC'' ,''HZ_PARTY_SEARCH'');');
15606 l(' FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
15607 l(' FND_MSG_PUB.ADD;');
15609 l(' FND_MSG_PUB.Count_And_Get(');
15610 l(' p_encoded => FND_API.G_FALSE,');
15611 l(' p_count => x_msg_count,');
15612 l(' p_data => x_msg_data);');
15613 END;
15614
15615
15616 -- VJN put the meat of what this was earlier doing into the overloaded
15617 -- procedure, that would do the actual compiling based on the match rule purpose
15618 PROCEDURE compile_all_rules_nolog IS
15619 BEGIN
15620 compile_all_rules_nolog('D');
15621 compile_all_rules_nolog('S');
15622 compile_all_rules_nolog('W');
15623
15624 END;
15625
15626 -- VJN introduced overloaded procedure
15627 PROCEDURE compile_all_rules_nolog( p_rule_purpose IN varchar2)
15628 IS
15629
15630 l_return_status varchar2(100) := null;
15631 l_msg_count number(15) := 0;
15632 l_msg_data varchar2(4000) := null;
15633
15634 CURSOR c_rules_for_compile IS
15635 SELECT MATCH_RULE_ID,RULE_NAME FROM HZ_MATCH_RULES_VL
15636 where rule_purpose = p_rule_purpose ;
15637
15638 l_cur_date DATE;
15639
15640 l_match_rule_id NUMBER;
15641 l_rule_name HZ_MATCH_RULES_TL.RULE_NAME%TYPE;
15642 err VARCHAR2(2000);
15643
15644 BEGIN
15645
15646 -- Initialize return status and message stack
15647 FND_MSG_PUB.initialize;
15648
15649 l_cur_date := SYSDATE;
15650
15651 UPDATE HZ_MATCH_RULES_B SET compilation_flag = 'U'
15652 where rule_purpose = p_rule_purpose ;
15653
15654 OPEN c_rules_for_compile ;
15655 LOOP
15656 FETCH c_rules_for_compile INTO l_match_rule_id, l_rule_name;
15657 EXIT WHEN c_rules_for_compile%NOTFOUND;
15658
15659 BEGIN
15660 HZ_MATCH_RULE_COMPILE.COMPILE_MATCH_RULE( l_match_rule_id,'Y',
15661 l_return_status,
15662 l_msg_count,
15663 l_msg_data) ;
15664
15665 EXCEPTION
15666 WHEN OTHERS THEN
15667 UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_match_rule_id;
15668 COMMIT;
15669 END;
15670
15671 END LOOP;
15672
15673 -- IF p_rule_purpose <> 'Q'
15674 -- THEN
15675 HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
15676 gen_wrap_pkg_body(-1);
15677 HZ_GEN_PLSQL.compile_code;
15678 -- END IF;
15679
15680 EXCEPTION
15681 WHEN OTHERS THEN
15682 ROLLBACK;
15683 END;
15684
15685
15686
15687
15688 PROCEDURE compile_all_rules (
15689 errbuf OUT NOCOPY VARCHAR2,
15690 retcode OUT NOCOPY VARCHAR2
15691 ) IS
15692
15693 l_return_status varchar2(100) := null;
15694 l_msg_count number(15) := 0;
15695 l_msg_data varchar2(4000) := null;
15696
15697 CURSOR c_rules_for_compile IS
15698 SELECT MATCH_RULE_ID,RULE_NAME FROM HZ_MATCH_RULES_VL ORDER BY match_rule_type DESC nulls first;--bug 5263694
15699
15700 l_cur_date DATE;
15701
15702 l_match_rule_id NUMBER;
15703 l_rule_name HZ_MATCH_RULES_TL.RULE_NAME%TYPE;
15704 err VARCHAR2(2000);
15705
15706 BEGIN
15707
15708 retcode := 0;
15709
15710 outandlog('Starting Concurrent Program ''Compile Match Rules ''');
15711 outandlog('Start Time ' || TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
15712 outandlog('NEWLINE');
15713
15714 -- Initialize return status and message stack
15715 FND_MSG_PUB.initialize;
15716
15717 l_cur_date := SYSDATE;
15718
15719 log('');
15720
15721 UPDATE HZ_MATCH_RULES_B SET compilation_flag = 'U';
15722
15723 OPEN c_rules_for_compile ;
15724 LOOP
15725 FETCH c_rules_for_compile INTO l_match_rule_id, l_rule_name;
15726 EXIT WHEN c_rules_for_compile%NOTFOUND;
15727
15728 BEGIN
15729 log('Compiling Match Rule ' || l_rule_name || ' ... ', FALSE);
15730 HZ_MATCH_RULE_COMPILE.COMPILE_MATCH_RULE( l_match_rule_id,'Y',
15731 l_return_status,
15732 l_msg_count,
15733 l_msg_data) ;
15734
15735 IF l_return_status = 'S' THEN
15736 log('Done');
15737 ELSE
15738 retcode := 1;
15739 log('');
15740 log('Error Compiling Rule : ');
15741 err := logerror;
15742 END IF;
15743 EXCEPTION
15744 WHEN OTHERS THEN
15745 retcode := 1;
15746 log('');
15747 log('Error Compiling Rule : ');
15748 err := logerror(SQLERRM);
15749 UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_match_rule_id;
15750 COMMIT;
15751 END;
15752 END LOOP;
15753 HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
15754 gen_wrap_pkg_body(-1);
15755 HZ_GEN_PLSQL.compile_code;
15756
15757 IF retcode = 1 THEN
15758 outandlog('One or More match rules compilation had errors. Please check the log file for details');
15759 END IF;
15760
15761 outandlog('Concurrent Program Execution completed ');
15762 outandlog('End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
15763 EXCEPTION
15764 WHEN OTHERS THEN
15765 retcode := 2;
15766 ROLLBACK;
15767 log('Errors Encountered');
15768 errbuf := logerror(SQLERRM);
15772 * Procedure to write a message to the out file
15769 END;
15770
15771 /**
15773 **/
15774 PROCEDURE out(
15775 message IN VARCHAR2,
15776 newline IN BOOLEAN DEFAULT TRUE) IS
15777 BEGIN
15778 IF message = 'NEWLINE' THEN
15779 FND_FILE.NEW_LINE(FND_FILE.OUTPUT, 1);
15780 ELSIF (newline) THEN
15781 FND_FILE.put_line(fnd_file.output,message);
15782 ELSE
15783 FND_FILE.put(fnd_file.output,message);
15784 END IF;
15785 END out;
15786
15787 /**
15788 * Procedure to write a message to the log file
15789 **/
15790 PROCEDURE log(
15791 message IN VARCHAR2,
15792 newline IN BOOLEAN DEFAULT TRUE
15793 ) IS
15794 BEGIN
15795 IF message = 'NEWLINE' THEN
15796 FND_FILE.NEW_LINE(FND_FILE.LOG, 1);
15797 ELSIF (newline) THEN
15798 FND_FILE.put_line(fnd_file.log,message);
15799 ELSE
15800 FND_FILE.put(fnd_file.log,message);
15801 END IF;
15802 END log;
15803
15804 /**
15805 * Procedure to write a message to the out and log files
15806 **/
15807 PROCEDURE outandlog(
15808 message IN VARCHAR2,
15809 newline IN BOOLEAN DEFAULT TRUE) IS
15810 BEGIN
15811 out(message, newline);
15812 log(message, newline);
15813 END outandlog;
15814
15815 /**
15816 * Function to fetch messages of the stack and log the error
15817 * Also returns the error
15818 **/
15819 FUNCTION logerror(SQLERRM VARCHAR2 DEFAULT NULL)
15820 RETURN VARCHAR2 IS
15821
15822 l_msg_data VARCHAR2(2000);
15823 BEGIN
15824 FND_MSG_PUB.Reset;
15825
15826 FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
15827 l_msg_data := l_msg_data || FND_MSG_PUB.Get(p_encoded => FND_API.G_FALSE );
15828 END LOOP;
15829 IF (SQLERRM IS NOT NULL) THEN
15830 l_msg_data := l_msg_data || SQLERRM;
15831 END IF;
15832 log(l_msg_data);
15833 RETURN l_msg_data;
15834 END logerror;
15835
15836 PROCEDURE gen_call_api_dynamic_names IS
15837
15838 BEGIN
15839 l(' ');
15840 l(' FUNCTION get_attrib_id(p_str VARCHAR2) ');
15841 l(' RETURN NUMBER IS ');
15842 l(' l_id NUMBER; ');
15843 l(' l_pl NUMBER; ');
15844 l(' l_token VARCHAR2(1); ');
15845 l(' BEGIN ');
15846 l(' l_token := ''.''; ');
15847 l(' l_pl := instrb(p_str, l_token); ');
15848 l(' select attribute_id into l_id ');
15849 l(' from hz_trans_attributes_b ');
15850 l(' where entity_name = substrb(p_str, 0, l_pl - 1) ');
15851 l(' and ATTRIBUTE_NAME = substrb(p_str, l_pl + 1); ');
15852 l(' RETURN l_id; ');
15853 l(' EXCEPTION WHEN NO_DATA_FOUND THEN ');
15854 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_NOATTRIB_ERROR'' ); ');
15855 l(' FND_MESSAGE.SET_TOKEN(''ENTITY_ATTRIBUTE'' ,p_str); ');
15856 l(' FND_MSG_PUB.ADD; ');
15857 l(' RAISE FND_API.G_EXC_ERROR; ');
15858 l(' END get_attrib_id; ');
15859
15860 l(' PROCEDURE call_api_dynamic_names (');
15861 l(' p_init_msg_list IN VARCHAR2:= FND_API.G_FALSE,');
15862 l(' p_rule_id IN NUMBER,');
15863 l(' p_attrib_name1 IN VARCHAR2,');
15864 l(' p_attrib_name2 IN VARCHAR2,');
15865 l(' p_attrib_name3 IN VARCHAR2,');
15866 l(' p_attrib_name4 IN VARCHAR2,');
15867 l(' p_attrib_name5 IN VARCHAR2,');
15868 l(' p_attrib_name6 IN VARCHAR2,');
15869 l(' p_attrib_name7 IN VARCHAR2,');
15870 l(' p_attrib_name8 IN VARCHAR2,');
15871 l(' p_attrib_name9 IN VARCHAR2,');
15872 l(' p_attrib_name10 IN VARCHAR2,');
15873 l(' p_attrib_name11 IN VARCHAR2,');
15874 l(' p_attrib_name12 IN VARCHAR2,');
15875 l(' p_attrib_name13 IN VARCHAR2,');
15876 l(' p_attrib_name14 IN VARCHAR2,');
15877 l(' p_attrib_name15 IN VARCHAR2,');
15878 l(' p_attrib_name16 IN VARCHAR2,');
15879 l(' p_attrib_name17 IN VARCHAR2,');
15880 l(' p_attrib_name18 IN VARCHAR2,');
15881 l(' p_attrib_name19 IN VARCHAR2,');
15882 l(' p_attrib_name20 IN VARCHAR2,');
15883 l(' p_attrib_val1 IN VARCHAR2,');
15884 l(' p_attrib_val2 IN VARCHAR2,');
15885 l(' p_attrib_val3 IN VARCHAR2,');
15886 l(' p_attrib_val4 IN VARCHAR2,');
15887 l(' p_attrib_val5 IN VARCHAR2,');
15888 l(' p_attrib_val6 IN VARCHAR2,');
15889 l(' p_attrib_val7 IN VARCHAR2,');
15890 l(' p_attrib_val8 IN VARCHAR2,');
15891 l(' p_attrib_val9 IN VARCHAR2,');
15892 l(' p_attrib_val10 IN VARCHAR2,');
15893 l(' p_attrib_val11 IN VARCHAR2,');
15894 l(' p_attrib_val12 IN VARCHAR2,');
15895 l(' p_attrib_val13 IN VARCHAR2,');
15896 l(' p_attrib_val14 IN VARCHAR2,');
15897 l(' p_attrib_val15 IN VARCHAR2,');
15898 l(' p_attrib_val16 IN VARCHAR2,');
15899 l(' p_attrib_val17 IN VARCHAR2,');
15900 l(' p_attrib_val18 IN VARCHAR2,');
15901 l(' p_attrib_val19 IN VARCHAR2,');
15902 l(' p_attrib_val20 IN VARCHAR2,');
15903 l(' p_restrict_sql IN VARCHAR2,');
15904 l(' p_api_name IN VARCHAR2,');
15905 l(' p_match_type IN VARCHAR2,');
15906 l(' p_party_id IN NUMBER,');
15910 l(' x_return_status OUT VARCHAR2,');
15907 l(' p_search_merged IN VARCHAR2,');
15908 l(' x_search_ctx_id OUT NUMBER,');
15909 l(' x_num_matches OUT NUMBER,');
15911 l(' x_msg_count OUT NUMBER,');
15912 l(' x_msg_data OUT VARCHAR2');
15913 l(' ) IS');
15914 l(' l_attrib_id1 NUMBER; ');
15915 l(' l_attrib_id2 NUMBER; ');
15916 l(' l_attrib_id3 NUMBER; ');
15917 l(' l_attrib_id4 NUMBER; ');
15918 l(' l_attrib_id5 NUMBER; ');
15919 l(' l_attrib_id6 NUMBER; ');
15920 l(' l_attrib_id7 NUMBER; ');
15921 l(' l_attrib_id8 NUMBER; ');
15922 l(' l_attrib_id9 NUMBER; ');
15923 l(' l_attrib_id10 NUMBER; ');
15924 l(' l_attrib_id11 NUMBER; ');
15925 l(' l_attrib_id12 NUMBER; ');
15926 l(' l_attrib_id13 NUMBER; ');
15927 l(' l_attrib_id14 NUMBER; ');
15928 l(' l_attrib_id15 NUMBER; ');
15929 l(' l_attrib_id16 NUMBER; ');
15930 l(' l_attrib_id17 NUMBER; ');
15931 l(' l_attrib_id18 NUMBER; ');
15932 l(' l_attrib_id19 NUMBER; ');
15933 l(' l_attrib_id20 NUMBER; ');
15934 l(' BEGIN');
15935 d(fnd_log.level_procedure,'call_api_dynamic_names(+)');
15936 d(fnd_log.level_statement,'Rule ID','p_rule_id ');
15937 l(' ');
15938 l(' IF (p_attrib_name1 IS NOT NULL) THEN ');
15939 l(' l_attrib_id1 := get_attrib_id(p_attrib_name1); ');
15940 l(' END IF; ');
15941 l(' IF (p_attrib_name2 IS NOT NULL) THEN ');
15942 l(' l_attrib_id2 := get_attrib_id(p_attrib_name2); ');
15943 l(' END IF; ');
15944 l(' IF (p_attrib_name3 IS NOT NULL) THEN ');
15945 l(' l_attrib_id3 := get_attrib_id(p_attrib_name3); ');
15946 l(' END IF; ');
15947 l(' IF (p_attrib_name4 IS NOT NULL) THEN ');
15948 l(' l_attrib_id4 := get_attrib_id(p_attrib_name4); ');
15949 l(' END IF; ');
15950 l(' IF (p_attrib_name5 IS NOT NULL) THEN ');
15951 l(' l_attrib_id5 := get_attrib_id(p_attrib_name5); ');
15952 l(' END IF; ');
15953 l(' IF (p_attrib_name6 IS NOT NULL) THEN ');
15954 l(' l_attrib_id6 := get_attrib_id(p_attrib_name6); ');
15955 l(' END IF; ');
15956 l(' IF (p_attrib_name7 IS NOT NULL) THEN ');
15957 l(' l_attrib_id7 := get_attrib_id(p_attrib_name7); ');
15958 l(' END IF; ');
15959 l(' IF (p_attrib_name8 IS NOT NULL) THEN ');
15960 l(' l_attrib_id8 := get_attrib_id(p_attrib_name8); ');
15961 l(' END IF; ');
15962 l(' IF (p_attrib_name9 IS NOT NULL) THEN ');
15963 l(' l_attrib_id9 := get_attrib_id(p_attrib_name9); ');
15964 l(' END IF; ');
15965 l(' IF (p_attrib_name10 IS NOT NULL) THEN ');
15966 l(' l_attrib_id10 := get_attrib_id(p_attrib_name10); ');
15967 l(' END IF; ');
15968 l(' IF (p_attrib_name11 IS NOT NULL) THEN ');
15969 l(' l_attrib_id11 := get_attrib_id(p_attrib_name11); ');
15970 l(' END IF; ');
15971 l(' IF (p_attrib_name12 IS NOT NULL) THEN ');
15972 l(' l_attrib_id12 := get_attrib_id(p_attrib_name12); ');
15973 l(' END IF; ');
15974 l(' IF (p_attrib_name13 IS NOT NULL) THEN ');
15975 l(' l_attrib_id13 := get_attrib_id(p_attrib_name13); ');
15976 l(' END IF; ');
15977 l(' IF (p_attrib_name14 IS NOT NULL) THEN ');
15978 l(' l_attrib_id14 := get_attrib_id(p_attrib_name14); ');
15979 l(' END IF; ');
15980 l(' IF (p_attrib_name15 IS NOT NULL) THEN ');
15981 l(' l_attrib_id15 := get_attrib_id(p_attrib_name15); ');
15982 l(' END IF; ');
15983 l(' IF (p_attrib_name16 IS NOT NULL) THEN ');
15984 l(' l_attrib_id16 := get_attrib_id(p_attrib_name16); ');
15985 l(' END IF; ');
15986 l(' IF (p_attrib_name17 IS NOT NULL) THEN ');
15987 l(' l_attrib_id17 := get_attrib_id(p_attrib_name17); ');
15988 l(' END IF; ');
15989 l(' IF (p_attrib_name18 IS NOT NULL) THEN ');
15990 l(' l_attrib_id18 := get_attrib_id(p_attrib_name18); ');
15991 l(' END IF; ');
15992 l(' IF (p_attrib_name19 IS NOT NULL) THEN ');
15993 l(' l_attrib_id19 := get_attrib_id(p_attrib_name19); ');
15994 l(' END IF; ');
15995 l(' IF (p_attrib_name20 IS NOT NULL) THEN ');
15996 l(' l_attrib_id20 := get_attrib_id(p_attrib_name20); ');
15997 l(' END IF; ');
15998
15999
16000 l(' hz_party_search.call_api_dynamic( ');
16001 l(' p_init_msg_list, p_rule_id, ');
16002 l(' l_attrib_id1,l_attrib_id2,l_attrib_id3,l_attrib_id4,l_attrib_id5, ');
16003 l(' l_attrib_id6,l_attrib_id7,l_attrib_id8,l_attrib_id9,l_attrib_id10, ');
16004 l(' l_attrib_id11,l_attrib_id12,l_attrib_id13,l_attrib_id14,l_attrib_id15, ');
16005 l(' l_attrib_id16,l_attrib_id17,l_attrib_id18,l_attrib_id19,l_attrib_id20, ');
16006 l(' p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5, ');
16007 l(' p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10, ');
16008 l(' p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15, ');
16009 l(' p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20, ');
16010 l(' p_restrict_sql,p_api_name,p_match_type,p_party_id,p_search_merged, ');
16011 l(' x_search_ctx_id,x_num_matches, x_return_status, x_msg_count, x_msg_data); ');
16012 d(fnd_log.level_procedure,'call_api_dynamic_names(-)');
16013 gen_exception_block;
16014 l(' END call_api_dynamic_names; ');
16015
16016 END gen_call_api_dynamic_names;
16017
16018 ---Start of Code Change for Match Rule Set
16019 FUNCTION has_uncompiled_childern(p_rule_set_id NUMBER)
16020 RETURN BOOLEAN
16021 IS
16025 FROM HZ_MATCH_RULE_CONDITIONS
16022 CURSOR c_uncompiled_children IS
16023 SELECT count(unique compilation_flag) FROM HZ_MATCH_RULES_B
16024 WHERE match_rule_id IN( SELECT unique condition_match_rule_id
16026 WHERE match_rule_set_id = p_rule_set_id)
16027 AND compilation_flag <> 'C';
16028 l_count NUMBER;
16029
16030 BEGIN
16031 OPEN c_uncompiled_children;
16032 FETCH c_uncompiled_children INTO l_count;
16033 CLOSE c_uncompiled_children;
16034 IF (l_count >0 )THEN
16035 RETURN TRUE;
16036 ELSE
16037 RETURN FALSE;
16038 END IF;
16039 END;
16040
16041 PROCEDURE compile_all_rulesets (
16042 p_cond_rule_id IN NUMBER
16043 ) IS
16044
16045 l_return_status varchar2(100) := null;
16046 l_msg_count number(15) := 0;
16047 l_msg_data varchar2(4000) := null;
16048
16049 CURSOR c_rulesets_for_compile IS
16050 SELECT UNIQUE MATCH_RULE_ID,RULE_NAME FROM HZ_MATCH_RULES_VL
16051 WHERE COMPILATION_FLAG <> 'C'
16052 AND MATCH_RULE_ID IN (SELECT UNIQUE MATCH_RULE_SET_ID FROM HZ_MATCH_RULE_CONDITIONS
16053 WHERE CONDITION_MATCH_RULE_ID = p_cond_rule_id)
16054 ;
16055
16056
16057 l_match_rule_set_id NUMBER;
16058 l_rule_name HZ_MATCH_RULES_TL.RULE_NAME%TYPE;
16059 err VARCHAR2(2000);
16060 l_has_errors BOOLEAN := FALSE;
16061 BEGIN
16062
16063 -- Initialize return status and message stack
16064 FND_MSG_PUB.initialize;
16065
16066 log('');
16067
16068 OPEN c_rulesets_for_compile ;
16069 LOOP
16070 FETCH c_rulesets_for_compile INTO l_match_rule_set_id, l_rule_name;
16071 EXIT WHEN c_rulesets_for_compile%NOTFOUND;
16072
16073 BEGIN
16074 log('Compiling Match Rule Set ' || l_rule_name || ' ... ', FALSE);
16075 HZ_MATCH_RULE_COMPILE.COMPILE_MATCH_RULE( l_match_rule_set_id,'Y',
16076 l_return_status,
16077 l_msg_count,
16078 l_msg_data) ;
16079
16080 IF l_return_status = 'S' THEN
16081 log('Done');
16082 ELSE
16083 log('');
16084 l_has_errors :=TRUE;
16085 log('Error Compiling Rule Set: '||l_match_rule_set_id || ' msg_data='||l_msg_data);
16086
16087 END IF;
16088 EXCEPTION
16089 WHEN OTHERS THEN
16090 log('');
16091 l_has_errors :=TRUE;
16092 log('Error Compiling Rule Set : '||l_match_rule_set_id||' ,sqlerrm='||sqlerrm);
16093 UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_match_rule_set_id;
16094 COMMIT;
16095 END;
16096 END LOOP;
16097 close c_rulesets_for_compile;
16098 IF NOT l_has_errors THEN
16099 HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
16100 gen_wrap_pkg_body(-1);
16101 HZ_GEN_PLSQL.compile_code;
16102 END IF;
16103
16104 EXCEPTION
16105 WHEN OTHERS THEN
16106 ROLLBACK;
16107 log('Errors Encountered during match rule set compilation..sqlerrm='||sqlerrm);
16108 END;
16109
16110 PROCEDURE pop_conditions(p_mrule_set_id IN NUMBER,
16111 p_api_name IN VARCHAR2,
16112 p_parameters IN VARCHAR2,
16113 p_eval_level IN VARCHAR2)
16114 IS
16115
16116 TYPE ref_conditions is ref cursor;
16117 c_ref_conditions ref_conditions;
16118
16119
16120 l_cond_string varchar2(32000);
16121 l_add_then BOOLEAN;
16122 l_count NUMBER;
16123 l_value VARCHAR2(2000);
16124 l_tmp_value varchar2(30);
16125 l_index NUMBER;
16126 l_sql varchar2(1000);
16127 l_close_if BOOLEAN;
16128
16129 l_condition_match_rule_id NUMBER(15);
16130 l_entity_name VARCHAR2(255);
16131 l_attribute_name VARCHAR2(255);
16132 l_operation VARCHAR2(30);
16133 l_rank NUMBER;
16134
16135 BEGIN
16136
16137 IF p_eval_level = 'PARTY' THEN
16138 l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16139 ' attr.attribute_name,operation,value,rank '||
16140 ' FROM hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16141 ' WHERE cond.match_rule_set_id = '||P_MRULE_SET_ID||
16142 ' AND cond.attribute_id= attr.attribute_id (+) '||
16143 ' ORDER BY rank ASC';
16144 ELSIF p_eval_level = 'PARTY_SITES' then
16145 l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16146 ' attr.attribute_name,operation,value,rank '||
16147 ' FROM hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16148 ' WHERE cond.match_rule_set_id = '||P_MRULE_SET_ID||
16149 ' AND nvl(attr.entity_name,''XYZ'') NOT IN (''PARTY'',''CONTACTS'') '||
16150 ' AND cond.attribute_id= attr.attribute_id (+) '||
16151 ' ORDER BY rank ASC';
16152 ELSIF p_eval_level = 'CONTACTS' then
16153 l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16154 ' attr.attribute_name,operation,value,rank '||
16155 ' FROM hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16156 ' WHERE cond.match_rule_set_id = '||P_MRULE_SET_ID||
16157 ' AND nvl(attr.entity_name,''XYZ'') NOT IN (''PARTY'',''PARTY_SITES'') '||
16158 ' AND cond.attribute_id= attr.attribute_id (+) '||
16159 ' ORDER BY rank ASC';
16160 ELSIF p_eval_level = 'CONTACT_POINTS' then
16161 l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16162 ' attr.attribute_name,operation,value,rank '||
16163 ' FROM hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16164 ' WHERE cond.match_rule_set_id = '||P_MRULE_SET_ID||
16165 ' AND nvl(attr.entity_name,''XYZ'') NOT IN (''PARTY'',''PARTY_SITES'',''CONTACTS'') '||
16169 RETURN;
16166 ' AND cond.attribute_id= attr.attribute_id (+) '||
16167 ' ORDER BY rank ASC';
16168 ELSE
16170 END IF;
16171
16172 l_add_then := FALSE;
16173 l_count := 0;
16174 l_cond_string := NULL;
16175 l_value := NULL;
16176 l_index := 0;
16177 l_close_if := FALSE;
16178 --Start of Bug No: 4234203
16179 l('DECLARE');
16180 l(' l_condition_match_rule_id NUMBER(15);');
16181 l(' l_cond_rule_name VARCHAR2(255);');
16182 l(' CURSOR c_rule_name(p_rule_id NUMBER) IS SELECT rule_name FROM hz_match_rules_vl ');
16183 l(' where match_rule_id=p_rule_id ;');
16184 l('BEGIN');
16185 --End of Bug No: 4234203
16186 OPEN c_ref_conditions FOR l_sql;
16187 LOOP
16188 FETCH c_ref_conditions INTO l_condition_match_rule_id,l_entity_name,l_attribute_name,l_operation,
16189 l_value,l_rank;
16190 EXIT WHEN c_ref_conditions%NOTFOUND;
16191 l_cond_string := NULL;
16192 l_count := l_count+1;
16193 IF l_count = 1 AND l_attribute_name IS NOT NULL THEN
16194 l('IF ');
16195 l_add_then := TRUE;
16196 l_close_if := TRUE;
16197 ELSIF l_attribute_name IS NOT NULL THEN
16198 l('ELSIF ');
16199 l_add_then := TRUE;
16200 l_close_if := TRUE;
16201 ELSIF l_attribute_name IS NULL AND l_add_then THEN
16202 l('ELSE ');
16203 l_add_then := FALSE;
16204 l_close_if := TRUE;
16205 END IF;
16206 IF l_operation = 'LIKE' then
16207 l_value :=''''||HZ_TRANS_PKG.EXACT(l_value,NULL,l_attribute_name,l_entity_name)||'%''';
16208 ELSIF l_operation = 'IN' then
16209 l_tmp_value := l_value;
16210 l_value := NULL;
16211 LOOP
16212 l_index := instrb(l_tmp_value,',');
16213 IF l_index =0 then
16214 l_value := l_value ||','''||HZ_TRANS_PKG.EXACT(l_tmp_value,NULL,l_attribute_name,l_entity_name)||'''';
16215 l_value := '('||ltrim(l_value,',')||')';
16216 exit;
16217 END IF;
16218 l_value := l_value ||','''||HZ_TRANS_PKG.EXACT(substrb(l_tmp_value,1,l_index-1),NULL,l_attribute_name,l_entity_name)||'''';
16219 l_tmp_value := substrb(l_tmp_value,l_index+1);
16220 END LOOP;
16221
16222 ELSE
16223 l_value :=''''||HZ_TRANS_PKG.EXACT(l_value,NULL,l_attribute_name,l_entity_name)||'''';
16224 END IF;
16225
16226 IF l_entity_name = 'PARTY' THEN
16227 l_cond_string := 'HZ_TRANS_PKG.EXACT(p_party_search_rec.'||l_attribute_name||',NULL,'''||
16228 l_attribute_name||''',''PARTY'') '|| l_operation ||' '|| l_value;
16229 ELSIF l_entity_name = 'PARTY_SITES' THEN
16230 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).'||
16231 l_attribute_name||',NULL,'''||l_attribute_name||''',''PARTY_SITES'') '|| l_operation ||' '|| l_value ||')';
16232 ELSIF l_entity_name = 'CONTACTS' THEN
16233 l_cond_string := '(p_contact_list IS NOT NULL AND p_contact_list.COUNT >0) AND (HZ_TRANS_PKG.EXACT(p_contact_list(1).'||
16234 l_attribute_name||',NULL,'''||l_attribute_name||''',''CONTACTS'') '|| l_operation ||' '|| l_value ||')';
16235 ELSIF l_entity_name = 'CONTACT_POINTS' THEN
16236 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).'||
16237 l_attribute_name||',NULL,'''||l_attribute_name||''',''CONTACT_POINTS'') '|| l_operation ||' '|| l_value ||')';
16238 END IF;
16239 IF l_add_then THEN
16240 l_cond_string := l_cond_string || ' THEN ';
16241 END IF;
16242
16243 l(l_cond_string);
16244 l(' l_condition_match_rule_id :='|| l_condition_match_rule_id ||';'); --Bug No: 4234203
16245 ldbg_s('Calling '||p_api_name||' using match rule id :'||l_condition_match_rule_id); --Bug No: 4234203
16246 l(' HZ_MATCH_RULE_'||l_condition_match_rule_id||'.'||p_api_name||'('|| p_parameters ||');');
16247 END LOOP;
16248 CLOSE c_ref_conditions;
16249 IF l_close_if THEN
16250 l('END IF;');
16251 END IF;
16252 --Start of Bug No: 4234203
16253 l('EXCEPTION');
16254 l(' WHEN OTHERS THEN') ;
16255 l(' OPEN c_rule_name(l_condition_match_rule_id);');
16256 l(' FETCH c_rule_name INTO l_cond_rule_name;');
16257 l(' CLOSE c_rule_name; ');
16258 l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_SRCH_ERROR''); ');
16259 l(' FND_MESSAGE.SET_TOKEN(''MATCH_RULE'',l_cond_rule_name); ');
16260 l(' FND_MSG_PUB.ADD; ');
16261 l(' RAISE; ');
16262 l('END;');
16263 --End of Bug No: 4234203
16264 END pop_conditions;
16265 ---End of Code Change for Match Rule Set
16266
16267 --Start of Bug No: 4162385
16268 FUNCTION get_entity_level_score(p_match_rule_id NUMBER,p_entity_name VARCHAR2)
16269 RETURN NUMBER
16270 IS
16271 l_score NUMBER;
16272 BEGIN
16273 SELECT nvl(sum(sec.score),0) INTO l_score
16274 FROM HZ_MATCH_RULE_SECONDARY sec,HZ_TRANS_ATTRIBUTES_VL attr
16275 WHERE sec.match_rule_id = p_match_rule_id
16276 AND sec.attribute_id = attr.attribute_id
16277 AND attr.entity_name = p_entity_name;
16278
16279 RETURN l_score;
16280 END get_entity_level_score;
16281 --End of Bug No: 4162385
16282
16283 END;