DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_COMPILE

Source


1 PACKAGE BODY HZ_MATCH_RULE_COMPILE AS
2 /*$Header: ARHDQMCB.pls 120.97.12010000.3 2008/10/06 12:44:14 amstephe ship $ */
3 
4 g_party_and_query VARCHAR2(4000);
5 g_party_or_query VARCHAR2(4000);
6 g_party_site_query VARCHAR2(4000);
7 g_contact_query VARCHAR2(4000);
8 g_cpt_query VARCHAR2(4000);
9 l_purpose VARCHAR2(30);
10 
11 --Start of Bug No: 4162385dbms_output.put_line(' ');
12 FUNCTION get_entity_level_score(p_match_rule_id NUMBER,p_entity_name VARCHAR2)
13 RETURN NUMBER;
14 --End of Bug No: 4162385
15 
16 
17 /*******************Private Procedures forward declarations ********/
18 PROCEDURE gen_pkg_body (
19         p_pkg_name      IN      VARCHAR2,
20         p_rule_id       IN      NUMBER
21 );
22 
23 -- VJN introduced procedure to generate body for bulk match rules
24 PROCEDURE gen_pkg_body_bulk (
25         p_pkg_name      IN      VARCHAR2,
26         p_rule_id       IN      NUMBER
27 );
28 
29 PROCEDURE gen_call_api_dynamic_names;
30 
31 FUNCTION has_acquisition_attribs ( p_match_rule_id IN NUMBER, p_entity_name IN VARCHAR2)
32 RETURN BOOLEAN
33 IS
34 temp BOOLEAN := FALSE ;
35 BEGIN
36         FOR attrs in (
37         SELECT primary_attribute_id
38         FROM HZ_MATCH_RULE_PRIMARY p, HZ_TRANS_ATTRIBUTES_VL a
39         where  p.match_rule_id= p_match_rule_id
40         and p.attribute_id=a.attribute_id
41         and a.entity_name = p_entity_name
42         )
43         LOOP
44             temp := TRUE ;
45         END LOOP;
46    return temp ;
47 END has_acquisition_attribs ;
48 
49 ---Start of Code Change for Match Rule Set
50 FUNCTION has_uncompiled_childern(p_rule_set_id NUMBER)
51 RETURN BOOLEAN;
52 
53 PROCEDURE compile_all_rulesets (
54         p_cond_rule_id   IN NUMBER
55 );
56 PROCEDURE pop_conditions(p_mrule_set_id	   IN  NUMBER,
57 			   p_api_name		   IN  VARCHAR2,
58 			   p_parameters		   IN  VARCHAR2,
59 			   p_eval_level IN  VARCHAR2
60 );
61 ---End of Code Change for Match Rule Set
62 
63 PROCEDURE generate_map_proc (
64    p_entity             IN      VARCHAR2,
65    p_proc_name          IN      VARCHAR2,
66    p_rule_id            IN      NUMBER
67 );
68 
69 PROCEDURE generate_map_proc_bulk (
70    p_entity             IN      VARCHAR2,
71    p_proc_name          IN      VARCHAR2,
72    p_rule_id            IN      NUMBER
73 );
74 
75 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
76  -- OF THE GLOBAL CONDITION RECORD FOR REGULAR MATCH RULES
77 
78 PROCEDURE generate_ent_cond_pop_rec_proc (
79    p_entity             IN      VARCHAR2,
80    p_rule_id		    IN      NUMBER
81 );
82 
83 
84 PROCEDURE generate_party_map_proc (
85    p_proc_name          IN      VARCHAR2,
86    p_rule_id            IN      NUMBER
87 );
88 
89 PROCEDURE generate_party_map_proc_bulk (
90    p_proc_name          IN      VARCHAR2,
91    p_rule_id            IN      NUMBER
92 );
93 
94 PROCEDURE generate_check_proc (
95         p_rule_id       NUMBER);
96 
97 PROCEDURE gen_pkg_spec (
98         p_pkg_name      IN      VARCHAR2,
99         p_rule_id       IN      NUMBER
100 );
101 
102 PROCEDURE gen_wrap_pkg_body(
103 	p_rule_id IN NUMBER
104 );
105 
106 PROCEDURE gen_exception_block;
107 
108 -- Fix for Bug 4734661. Modified to add the p_called_from parameter.
109 PROCEDURE generate_acquire_proc (
110         p_rule_id       NUMBER
111        ,p_called_from   VARCHAR2 DEFAULT NULL);
112 
113 PROCEDURE generate_check_staged (
114         p_rule_id       IN      NUMBER
115 );
116 
117 PROCEDURE out(
118    message      IN      VARCHAR2,
119    newline      IN      BOOLEAN DEFAULT TRUE);
120 
121 PROCEDURE log(
122    message      IN      VARCHAR2,
123    newline      IN      BOOLEAN DEFAULT TRUE);
124 
125 PROCEDURE outandlog(
126    message      IN      VARCHAR2,
127    newline      IN      BOOLEAN DEFAULT TRUE);
128 
129 FUNCTION logerror(SQLERRM VARCHAR2 DEFAULT NULL)
130          RETURN VARCHAR2;
131 
132 
133 
134 /*** Private procedure for inserting lines into generated packages **/
135 PROCEDURE l(str VARCHAR2) IS
136 BEGIN
137   HZ_GEN_PLSQL.add_line(str);
138 END;
139 
140 /*** Private procedure for inserting statement , procedure level debug lines into generated packages **/
141 PROCEDURE d(p_msg_level NUMBER,str VARCHAR2, val VARCHAR2 DEFAULT NULL, pad VARCHAR2 DEFAULT '    ') IS
142 l_msg_level VARCHAR2(30);
143 BEGIN
144   IF p_msg_level=FND_LOG.LEVEL_STATEMENT THEN
145    l(pad||'IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN');
146    l_msg_level :='fnd_log.level_statement';
147   ELSIF p_msg_level=FND_LOG.LEVEL_PROCEDURE THEN
148    l(pad||'IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN');
149    l_msg_level :='fnd_log.level_procedure';
150   ELSE
151    RETURN;
152   END IF;
153   IF val IS NULL THEN
154     -- REPURI. Bug 4996283. Adding tracking indentifiers for fnd log messages
155     -- Passing p_module_prefix as dqm and p_module as hz_match_rule_xxx to help debug fnd logs better
156 
157     l(pad||'  hz_utility_v2pub.debug(p_message=>'''||str||' '',p_module_prefix=>''dqm'',p_module=>''hz_match_rule_xxx'',p_prefix=>NULL,p_msg_level=>'||l_msg_level||');');
158   ELSE
159   l(pad||'  hz_utility_v2pub.debug(p_message=>'''||str||' ''||'||val||',p_module_prefix=>''dqm'',p_module=>''hz_match_rule_xxx'',p_prefix=>NULL,p_msg_level=>'||l_msg_level||');');
160   END IF;
161   l(pad||'END IF;');
162 END;
163 
164 /*** Private procedure for inserting statement , procedure level debug start lines into generated packages **/
165 PROCEDURE ds(p_msg_level NUMBER,pad VARCHAR2 DEFAULT '    ') IS
166 BEGIN
167 IF nvl(FND_PROFILE.VALUE('HZ_DQM_DEV_DEBUG'), 'N') = 'N'
168 THEN
169   IF p_msg_level=FND_LOG.LEVEL_STATEMENT THEN
170    l(pad||'IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN');
171   ELSIF p_msg_level=FND_LOG.LEVEL_PROCEDURE THEN
172    l(pad||'IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN');
173   ELSE
174    RETURN;
175   END IF;
176 END IF;
177 END;
178 
179 /*** Private procedure for inserting statement , procedure level debug content lines into generated packages **/
180 PROCEDURE dc(p_msg_level NUMBER,str VARCHAR2, val VARCHAR2 DEFAULT NULL, pad VARCHAR2 DEFAULT '    ') IS
181 l_msg_level VARCHAR2(30);
182 BEGIN
183 IF nvl(FND_PROFILE.VALUE('HZ_DQM_DEV_DEBUG'), 'N') = 'N'
184 THEN
185   IF p_msg_level=FND_LOG.LEVEL_STATEMENT THEN
186      l_msg_level :='fnd_log.level_statement';
187   ELSIF p_msg_level=FND_LOG.LEVEL_PROCEDURE THEN
188       l_msg_level :='fnd_log.level_procedure';
189   ELSE
190    RETURN;
191   END IF;
192   IF val IS NULL THEN
193     -- REPURI. Bug 4996283. Adding tracking indentifiers for fnd log messages
194     -- Passing p_module_prefix as dqm and p_module as hz_match_rule_xxx to help debug fnd logs better
195 
196     l(pad||'  hz_utility_v2pub.debug(p_message=>'''||str||''',p_module_prefix=>''dqm'',p_module=>''hz_match_rule_xxx'',p_prefix=>NULL,p_msg_level=>'||l_msg_level||');');
197   ELSE
198     l(pad||'  hz_utility_v2pub.debug(p_message=>'''||str||' ''||'||val||',p_module_prefix=>''dqm'',p_module=>''hz_match_rule_xxx'',p_prefix=>NULL,p_msg_level=>'||l_msg_level||');');
199   END IF;
200 ELSE
201   IF val IS NULL THEN
202      l('dbms_output.put_line(SubStr(''' || str || ''', 1, 255));');
203   ELSE
204      l('dbms_output.put_line(SubStr(''' || str || '''||''---''||' || val || ', 1, 255));');
205   END IF;
206 
207 END IF;
208 END;
209 
210 /*** Private procedure for inserting statement , procedure level debug end lines into generated packages **/
211 PROCEDURE de(pad VARCHAR2 DEFAULT '    ') IS
212 BEGIN
213 IF nvl(FND_PROFILE.VALUE('HZ_DQM_DEV_DEBUG'), 'N') = 'N'
214 THEN
215   l(pad||'END IF;');
216 END IF;
217 END;
218 
219 /*** VJN Introduced Private procedures for inserting
220 upto four consecutive procedure level debug lines with
221 statement level header and footer into generated
222 packages
223      Note that str1 and val1 are not defaulted. We need atleast
224 one procedure level line.
225 
226      This the string - value pair version
227 **/
228 PROCEDURE ldbg_sv(str1 VARCHAR2, val1 VARCHAR2,
229                str2 VARCHAR2 DEFAULT NULL, val2 VARCHAR2 DEFAULT NULL,
230                str3 VARCHAR2 DEFAULT NULL, val3 VARCHAR2 DEFAULT NULL,
231                str4 VARCHAR2 DEFAULT NULL, val4 VARCHAR2 DEFAULT NULL
232                ) IS
233 BEGIN
234 
235   IF str1 IS NOT NULL
236   THEN
237     ds(fnd_log.level_statement, '   ');
238     dc(fnd_log.level_statement, str1, val1) ;
239   END IF;
240 
241   IF str2 IS NOT NULL
242   THEN
243     dc(fnd_log.level_statement, str2, val2) ;
244   END IF;
245 
246   IF str3 IS NOT NULL
247   THEN
248     dc(fnd_log.level_statement, str3, val3) ;
249   END IF;
250 
251   IF str4 IS NOT NULL
252   THEN
253     dc(fnd_log.level_statement, str4, val4) ;
254   END IF;
255 
256   IF str1 IS NOT NULL
257   THEN
258      de ;
259   END IF;
260 
261 END;
262 
263 /**
264    This the string only version
265 **/
266 PROCEDURE ldbg_s(str1 VARCHAR2,
267                str2 VARCHAR2 DEFAULT NULL,
268                str3 VARCHAR2 DEFAULT NULL,
269                str4 VARCHAR2 DEFAULT NULL
270                ) IS
271 BEGIN
272 
273   IF str1 IS NOT NULL
274   THEN
275     ds(fnd_log.level_statement, '   ');
276     dc(fnd_log.level_statement, str1 ) ;
277   END IF;
278 
279   IF str2 IS NOT NULL
280   THEN
281     dc(fnd_log.level_statement, str2 ) ;
282   END IF;
283 
284   IF str3 IS NOT NULL
285   THEN
286     dc(fnd_log.level_statement, str3 ) ;
287   END IF;
288 
289   IF str4 IS NOT NULL
290   THEN
291     dc(fnd_log.level_statement, str4) ;
292   END IF;
293 
294   IF str1 IS NOT NULL
295   THEN
296      de ;
297   END IF;
298 
299 END;
300 
301 PROCEDURE ldbg_procedure
302 IS
303 BEGIN
304   IF nvl(FND_PROFILE.VALUE('HZ_DQM_DEV_DEBUG'), 'N') = 'Y'
305   THEN
306     l('');
307     l('PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)');
308     l('IS');
309     l('     remainder_str VARCHAR2(4000);');
310     l('     current_pos NUMBER ;');
311     l('BEGIN');
312     l('     remainder_str := input_str ;');
313     l('     current_pos := 1 ;');
314     l('     WHILE remainder_str IS NOT NULL');
315     l('     LOOP');
316     l('         dbms_output.put_line(substr(remainder_str, 1 , 255 ) );');
317     l('         current_pos := current_pos + 255 ;');
318     l('         remainder_str := substr(input_str,current_pos );');
319     l('     END LOOP ;');
320     l('END ;');
321    ELSE
322     l('');
323     l('PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)');
324     l('IS');
325     l('     remainder_str VARCHAR2(4000);');
326     l('     current_pos NUMBER ;');
327     l('     temp VARCHAR2(300) ;');
328     l('BEGIN');
329     l('     remainder_str := input_str ;');
330     l('     current_pos := 1 ;');
331     ds(fnd_log.level_statement, '   ');
332     l('     WHILE remainder_str IS NOT NULL');
333     l('     LOOP');
334     l('     temp := substr(remainder_str, 1 , 255 );');
335     dc(fnd_log.level_statement, ' ', 'temp' ) ;
336     l('     current_pos := current_pos + 255 ;');
337     l('     remainder_str := substr(input_str,current_pos );');
338     l('     END LOOP ;');
339     de ;
340     l('END ;');
341    END IF ;
342 END ;
343 
344 FUNCTION num_secondary(
345    p_rule_id NUMBER,
346    p_entity VARCHAR2) RETURN NUMBER;
347 
348 
349 -- VJN Introduced Private procedure to generate primary attribute predicate for bulk match rules
350 PROCEDURE generate_bulk_predicate(
351    p_rule_id IN NUMBER,
352    p_dynamic_sql_flag  IN VARCHAR2 DEFAULT 'N',
353    p_match_str IN VARCHAR2,
354    p_entity IN VARCHAR2)
355 IS
356 FIRST1 boolean;
357 FIRST boolean;
358 BEGIN
359    IF p_dynamic_sql_flag = 'Y'
360    THEN
361         l('            ''srch.batch_id = -1''||');
362         l('            ''AND''||');
363         l('            ''(''||'    );
364                -- Generate the Primary Attribute section of the query for the passed in entity
365          FIRST1 := TRUE;
366          FOR attrs in (
367           SELECT primary_attribute_id
368           FROM HZ_MATCH_RULE_PRIMARY p, HZ_TRANS_ATTRIBUTES_VL a
369           where  p.match_rule_id=p_rule_id
370           and p.attribute_id=a.attribute_id
371           and a.entity_name = p_entity
372           and nvl(p.filter_flag,'N') = 'N' )
373          LOOP
374                       -- between attributes
375                       IF FIRST1
376                       THEN
377                          FIRST1 := FALSE;
378                          l('-------' ||  p_entity || ' LEVEL ACQUISITION ON NON-FILTER ATTRIBUTES USING B-TREE INDEXES ---------');
379                       ELSE
380                          -- spit out the 'AND' or 'OR' depending on the match_all_flag in the match_rule
381                          l(''''||p_match_str||''''||'||');
382 
383                       END IF;
384 
385                      FIRST := TRUE;
386                      FOR trans in ( SELECT staged_attribute_column
387                         FROM hz_primary_trans pt, hz_trans_functions_vl f
388                         where f.function_id = pt.function_id
389                         and pt.primary_attribute_id = attrs.primary_attribute_id
390                      )
391                      LOOP
392                           IF FIRST
393                           THEN
394                               l('-- do an or between all the transformations of an attribute -- ');
395                               l('''(''||');
396                               l('''(srch.'|| trans.staged_attribute_column || ' is not null and ' ||
397                                                'stage.'|| trans.staged_attribute_column || ' like srch.'||
398                                                trans.staged_attribute_column || ' || ''''%'''')' || '''||');
399 
400                               FIRST := FALSE;
401                           ELSE
402                                l('''or (srch.'|| trans.staged_attribute_column || ' is not null and ' ||
403                                                'stage.'|| trans.staged_attribute_column || ' like srch.'||
404                                                trans.staged_attribute_column || ' || ''''%'''')' || '''||');
405                           END IF;
406 
407                      END LOOP;
408                    l(''')''||');
409          END LOOP;
410         l(''')''||');
411 
412    ELSE
413          l('            srch.batch_id = -1');
414          l('            AND');
415          l('            (');
416          -- Generate the Primary Attribute section of the query for the passed in entity
417          FIRST1 := TRUE;
418          FOR attrs in (
419           SELECT primary_attribute_id
420           FROM HZ_MATCH_RULE_PRIMARY p, HZ_TRANS_ATTRIBUTES_VL a
421           where  p.match_rule_id=p_rule_id
422           and p.attribute_id=a.attribute_id
423           and a.entity_name = p_entity
424           and nvl(p.filter_flag,'N') = 'N' )
425          LOOP
426                       -- between attributes
427                       IF FIRST1
428                       THEN
429                          FIRST1 := FALSE;
430                          l('-------' || 'PARTY LEVEL ACQUISITION ON NON-FILTER ATTRIBUTES USING B-TREE INDEXES ---------');
431                       ELSE
432                          -- spit out the 'AND' or 'OR' depending on the match_all_flag in the match_rule
433                          l(p_match_str);
434 
435                       END IF;
436 
437                      FIRST := TRUE;
438                      FOR trans in ( SELECT staged_attribute_column
439                         FROM hz_primary_trans pt, hz_trans_functions_vl f
440                         where f.function_id = pt.function_id
441                         and pt.primary_attribute_id = attrs.primary_attribute_id
442                      )
443                      LOOP
444                           IF FIRST
445                           THEN
446                               l('-- do an or between all the transformations of an attribute -- ');
447                               l('(');
448                               l('(srch.'|| trans.staged_attribute_column || ' is not null and ' ||
449                                                'stage.'|| trans.staged_attribute_column || ' like srch.'||
450                                                trans.staged_attribute_column || ' || ''%'')');
451 
452                               FIRST := FALSE;
453                           ELSE
454                                l('or (srch.'|| trans.staged_attribute_column || ' is not null and ' ||
455                                                'stage.'|| trans.staged_attribute_column || ' like srch.'||
456                                                trans.staged_attribute_column || ' || ''%'')'); --Bug No:3863630
457                           END IF;
458 
459                      END LOOP;
460                    l(')');
461          END LOOP;
462          l(')');
463    END IF;
464 
465 END ;
466 
467 
468 
469 
470 
471 /**
472 * Public procedure to compile a match rule.
473 * This procedure generates a compiled PLSQL package
474 * spec and body for the given Match Rule (p_rule_id).
475 *
476 * The name of the generated match rule is:
477 *     HZ_MATCH_RULE_<p_rule_id>
478 *
479 **/
480 PROCEDURE compile_match_rule (
481 	p_rule_id	IN	NUMBER,
482 	p_skip_wrap	IN	VARCHAR2,
483         x_return_status         OUT NOCOPY    VARCHAR2,
484         x_msg_count             OUT NOCOPY    NUMBER,
485         x_msg_data              OUT NOCOPY    VARCHAR2
486 ) IS
487 
488    CURSOR check_null_set IS
489     SELECT DISTINCT a.entity_name
490     FROM hz_match_rule_secondary s, hz_trans_attributes_vl a
491     WHERE a.attribute_id = s.attribute_id
492     AND s.match_rule_id = p_rule_id
493     MINUS
494     SELECT DISTINCT a.entity_name
495     FROM hz_match_rule_primary p, hz_trans_attributes_vl a
496     WHERE a.attribute_id = p.attribute_id
497     AND p.match_rule_id = p_rule_id;
498 
499    CURSOR check_inactive IS
500     SELECT 1
501     FROM hz_match_rule_primary p, hz_primary_trans pt, hz_trans_functions_vl f
502     WHERE p.match_rule_id = p_rule_id
503     AND pt.PRIMARY_ATTRIBUTE_ID = p.PRIMARY_ATTRIBUTE_ID
504     AND f.function_id = pt.function_id
505     AND f.ACTIVE_FLAG = 'N'
506     UNION
507     SELECT 1
508     FROM hz_match_rule_secondary s, hz_secondary_trans pt, hz_trans_functions_vl f
509     WHERE s.match_rule_id = p_rule_id
510     AND pt.SECONDARY_ATTRIBUTE_ID = s.SECONDARY_ATTRIBUTE_ID
511     AND f.function_id = pt.function_id
512     AND f.ACTIVE_FLAG = 'N';
513 
514 -- Local variable declarations
515     l_tmp VARCHAR2(255);
516 
517     l_rule_id NUMBER;
518     l_batch_flag VARCHAR2(1);
519     l_purpose VARCHAR2(1);
520     l_package_name VARCHAR2(2000);
521     l_match_rule_type varchar2(30); --Code Change for Match Rule Set
522 
523 BEGIN
524 
525   --Initialize API return status to success.
526   x_return_status := FND_API.G_RET_STS_SUCCESS;
527 
528   -- Initialize the compiled package name
529   l_rule_id := TO_NUMBER(p_rule_id);
530   l_package_name := 'HZ_MATCH_RULE_'||p_rule_id;
531 
532   -- Initialize message stack
533   FND_MSG_PUB.initialize;
534 
535   BEGIN
536     -- Verify that the match rule exists
537     SELECT 1 INTO l_batch_flag
538     FROM HZ_MATCH_RULES_VL
539     WHERE match_rule_id = l_rule_id;
540 
541   EXCEPTION
542     WHEN NO_DATA_FOUND THEN
543       FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_NO_RULE');
544       FND_MSG_PUB.ADD;
545       RAISE FND_API.G_EXC_ERROR;
546   END;
547 
548 
549   SELECT RULE_PURPOSE,NVL(MATCH_RULE_TYPE,'SINGLE') into l_purpose,l_match_rule_type FROM HZ_MATCH_RULES_VL --Code Change for Match Rule Set
550   WHERE match_rule_id = l_rule_id;
551 
552  --Start of Code Change for Match Rule Set
553   IF (l_match_rule_type = 'SET') THEN
554     IF (has_uncompiled_childern(l_rule_id)) THEN
555       FND_MESSAGE.SET_NAME('AR', 'HZ_RULE_SET_UNCOMP_RULE_EXISTS');
556       FND_MSG_PUB.ADD;
557       RAISE FND_API.G_EXC_ERROR;
558     END IF;
559    --Populate the match rule set primary and secondary attributes
560    HZ_POP_MRULE_SET_ATTR_V2PUB.pop_mrule_set_attributes(l_rule_id);
561   END IF;
562  --End Of Code Change for Match Rule Set
563 
564 
565  -- VJN : In order to make sure that Bulk Duplicate Identification Match rules
566  --       have both the following versions:
567  --       1. HZ_MATCH_RULE_XXX that incorporate the  "find APIS"
568  --          that use the conventional B-tree indexes as opposed to Intermedia indexes.
569  --       2. HZ_IMP_MATCH_RULE_XXX that incorporate the APIs which do the
570  --          bulk duplicate identification, using B-tree indexes.
571  --       I have changed the logic of this match rule generating package to
572  --       generate HZ_MATCH_RULE_XXX for all match rules ( no matter which rule_purpose it is)
573  --       and generate HZ_IMP_MATCH_RULE_XXX in addition, when the rule_purpose is "Q".
574 
575     /* abordia.  Added to check that acquisition has at least one attribute for each
576      entity defined in scoring.  Added update statements since compile_match_rule
577      is public api and commented unnecessary updates in compile_all_rules and
578      compile_all_rules_nolog.  */
579     OPEN  check_null_set;
580     FETCH check_null_set INTO l_tmp;
581     IF check_null_set%FOUND THEN
582       CLOSE  check_null_set;
583       BEGIN
584         EXECUTE IMMEDIATE 'DROP PACKAGE HZ_MATCH_RULE_'||l_rule_id;
585       EXCEPTION
586         WHEN OTHERS THEN
587           NULL;
588       END;
589       fnd_message.set_name('AR','HZ_SCORING_NO_ACQUISITION');
590       FND_MSG_PUB.ADD;
591       RAISE FND_API.G_EXC_ERROR;
592     END IF;
593     CLOSE check_null_set;
594 
595     /* Check if match rule has any inactive transformations */
596     OPEN check_inactive;
597     FETCH check_inactive INTO l_tmp;
598     IF check_inactive%FOUND THEN
599       CLOSE  check_inactive;
600       BEGIN
601         EXECUTE IMMEDIATE 'DROP PACKAGE HZ_MATCH_RULE_'||l_rule_id;
602       EXCEPTION
603         WHEN OTHERS THEN
604           NULL;
605       END;
606 
607       fnd_message.set_name('AR','HZ_MR_HAS_INACTIVE_TX');
608       FND_MSG_PUB.ADD;
609       RAISE FND_API.G_EXC_ERROR;
610     END IF;
611     CLOSE check_inactive;
612 
613     -- Generate and compile match rule package spec
614     HZ_GEN_PLSQL.new(l_package_name, 'PACKAGE');
615     gen_pkg_spec(l_package_name, l_rule_id);
616     HZ_GEN_PLSQL.compile_code;
617 
618     -- Generate the package body
619     HZ_GEN_PLSQL.new(l_package_name, 'PACKAGE BODY');
620 
621     -- VJN: generate the body for HZ_MATCH_RULE_XXX depending on the rule purpose:
622     --      If rule purpose is Q, we would generate Bulk Match rules that use B-tree indexes
623     --      Else we would generate Match rules that use the regular intermedia text indexes
624 
625     g_context := 'SEARCH';
626     IF l_purpose = 'Q'
627     THEN
628        gen_pkg_body_bulk(l_package_name, l_rule_id);
629     ELSE
630        IF(l_purpose ='D')THEN
631         g_context := 'SDIB';
632        END IF;
633        gen_pkg_body(l_package_name, l_rule_id);
634     END IF;
635 
636     -- Compile the package body
637     HZ_GEN_PLSQL.compile_code;
638 
639 
640     IF p_skip_wrap IS NULL OR p_skip_wrap='N' THEN
641       -- Generate and compile API package body (Package HZ_PARTY_SEARCH)
642       HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
643       gen_wrap_pkg_body(p_rule_id);
644       HZ_GEN_PLSQL.compile_code;
645     END IF;
646 
647     EXECUTE IMMEDIATE 'ALTER PACKAGE ' || l_package_name || ' COMPILE SPECIFICATION';  --bug 5622345
648 
649     --Standard call to get message count and if count is 1, get message info.
650     FND_MSG_PUB.Count_And_Get(
651      p_encoded => FND_API.G_FALSE,
652      p_count => x_msg_count,
653      p_data  => x_msg_data);
654 
655     UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'C' WHERE MATCH_RULE_ID = l_rule_id;
656     COMMIT;
657 
658      /*
659     IF l_match_rule_type <> 'SET' THEN
660      compile_all_rulesets(l_rule_id);
661     END IF;
662     */
663 
664   -- VJN: For match rules of type "Q" viz., Bulk Match Rules, generate
665   --      and compile HZ_IMP_MATCH_RULE_XXX packages
666 
667   IF l_purpose = 'Q'
668   THEN
669      HZ_DQM_DUP_ID_PKG.compile_match_rule(l_rule_id,x_return_status,x_msg_count,x_msg_data);
670   END IF;
671 
672 EXCEPTION
673   WHEN FND_API.G_EXC_ERROR THEN
674     FND_MSG_PUB.Count_And_Get(
675       p_encoded => FND_API.G_FALSE,
676       p_count => x_msg_count,
677       p_data  => x_msg_data);
678     x_return_status := FND_API.G_RET_STS_ERROR;
679     UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_rule_id;
680     COMMIT;
681   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
682     FND_MSG_PUB.Count_And_Get(
683       p_encoded => FND_API.G_FALSE,
684       p_count => x_msg_count,
685       p_data  => x_msg_data);
686       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
687     UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_rule_id;
688     COMMIT;
689   WHEN OTHERS THEN
690 
691     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
692     FND_MESSAGE.SET_TOKEN('PROC','compile_match_rule');
693     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
694     FND_MSG_PUB.ADD;
695 
696     FND_MSG_PUB.Count_And_Get(
697       p_encoded => FND_API.G_FALSE,
698       p_count => x_msg_count,
699       p_data  => x_msg_data);
700     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
701     UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_rule_id;
702     COMMIT;
703 END;
704 
705 PROCEDURE compile_match_rule (
706 	p_rule_id	IN	NUMBER,
707         x_return_status         OUT NOCOPY    VARCHAR2,
708         x_msg_count             OUT NOCOPY    NUMBER,
709         x_msg_data              OUT NOCOPY    VARCHAR2
710 ) IS
711 BEGIN
712   compile_match_rule(p_rule_id,'N',x_return_status,x_msg_count,x_msg_data);
713 END;
714 
715 /**
716 * Private procedure to generate the body of the API package
717 *    HZ_PARTY_SEARCH
718 *
719 * This procedure generates a call to the appropriate match rule
720 * procedure for each match rule
721 *
722 **/
723 PROCEDURE gen_wrap_pkg_body (
724 	p_rule_id	IN	NUMBER
725 ) IS
726 
727 FIRST BOOLEAN;
728   l_sql VARCHAR2(4000);
729 
730   FUNCTION check_proc (p_rule_id NUMBER) RETURN BOOLEAN IS
731     c NUMBER;
732   BEGIN
733     c := dbms_sql.open_cursor;
734     dbms_sql.parse(c,replace(l_sql,'RULEID',to_char(p_rule_id)),2);
735     dbms_sql.close_cursor(c);
736     RETURN TRUE;
737   EXCEPTION
738     WHEN OTHERS THEN
739       RETURN FALSE;
740   END;
741 
742 BEGIN
743  -- UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'T' WHERE RULE_PURPOSE='Q' AND COMPILATION_FLAG='C';
744   -- Generation of code
745   l('CREATE or REPLACE PACKAGE BODY HZ_PARTY_SEARCH AS');
746   l('/*=======================================================================+');
747   l(' |  Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|');
748   l(' |                          All rights reserved.                         |');
749   l(' +=======================================================================+');
750   l(' | NAME');
751   l(' |      HZ_PARTY_SEARCH');
752   l(' |');
753   l(' | DESCRIPTION');
754   l(' |');
755   l(' | Compiled by the HZ Match Rule Compiler');
756   l(' | PUBLIC PROCEDURES');
757   l(' |    find_parties');
758   l(' |    get_matching_party_sites');
759   l(' |    get_matching_contacts');
760   l(' |    get_matching_contact_points');
761   l(' |    get_party_score_details');
762   l(' |    ');
763   l(' | HISTORY');
764   l(' |      '||TO_CHAR(SYSDATE,'DD-MON-YYYY') || ' Generated by HZ Match Rule Compiler');
765   l(' |');
766   l(' *=======================================================================*/');
767 
768   l('  g_debug_count                        NUMBER := 0;');
769   --l('  g_debug                              BOOLEAN := FALSE;');
770   l('  g_last_rule			    NUMBER := -1;');
771   l('  g_last_rule_valid	 	    BOOLEAN := FALSE;');
772 
773   --l('  PROCEDURE enable_debug;');
774   --l('  PROCEDURE disable_debug;');
775 
776   -- Generate find_parties code. Backward compatible signature.
777   l('  PROCEDURE find_parties (');
778   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
779   l('      x_rule_id               IN OUT  NUMBER,');
780   l('      p_party_search_rec      IN      party_search_rec_type,');
781   l('      p_party_site_list       IN      party_site_list,');
782   l('      p_contact_list          IN      contact_list,');
783   l('      p_contact_point_list    IN      contact_point_list,');
784   l('      p_restrict_sql          IN      VARCHAR2,');
785   l('      p_search_merged         IN      VARCHAR2,');
786   l('      x_search_ctx_id         IN OUT  NUMBER,');
787   l('      x_num_matches           IN OUT  NUMBER,');
788   l('      x_return_status         OUT     VARCHAR2,');
789   l('      x_msg_count             OUT     NUMBER,');
790   l('      x_msg_data              OUT     VARCHAR2');
791   l(') IS');
792   l('  BEGIN');
793   d(fnd_log.level_procedure,'find_parties-1(+)');
794   d(fnd_log.level_statement,'Rule ID','x_rule_id');
795 
796   l('     find_parties(p_init_msg_list,x_rule_id,p_party_search_rec,');
797   l('            p_party_site_list,p_contact_list,p_contact_point_list,');
798   l('            p_restrict_sql,NULL,p_search_merged,x_search_ctx_id,');
799   l('            x_num_matches,x_return_status,x_msg_count,x_msg_data);');
800   d(fnd_log.level_procedure,'find_parties-1(-)');
801   l('  END;');
802   l('');
803   -- Generate find_parties code. Public  signature.
804   l('  PROCEDURE find_parties (');
805   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
806   l('      p_rule_id               IN      NUMBER,');
807   l('      p_party_search_rec      IN      party_search_rec_type,');
808   l('      p_party_site_list       IN      party_site_list,');
809   l('      p_contact_list          IN      contact_list,');
810   l('      p_contact_point_list    IN      contact_point_list,');
811   l('      p_restrict_sql          IN      VARCHAR2,');
812   l('      p_match_type            IN      VARCHAR2,');
813   l('      p_search_merged         IN      VARCHAR2,');
814   l('      x_search_ctx_id         OUT     NUMBER,');
815   l('      x_num_matches           OUT     NUMBER,');
816   l('      x_return_status         OUT     VARCHAR2,');
817   l('      x_msg_count             OUT     NUMBER,');
818   l('      x_msg_data              OUT     VARCHAR2');
819   l(') IS');
820   l('  CURSOR c_match_rule IS ');
821   l('    SELECT COMPILATION_FLAG ');
822   l('    FROM HZ_MATCH_RULES_VL ');
823   l('    WHERE MATCH_RULE_ID = p_rule_id;');
824   l('  l_cmp_flag VARCHAR2(1);');
825   l('  BEGIN');
826   l('');
827   d(fnd_log.level_procedure,'find_parties(+)');
828   d(fnd_log.level_statement,'Rule ID','p_rule_id');
829   l('    -- Initialize return status and message stack');
830   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
831   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
832   l('      FND_MSG_PUB.initialize;');
833   l('    END IF;');
834   l('');
835   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
836   l('      -- Find the match rule');
837   l('      null;');
838   l('');
839   l('      -- No MATCH RULE FOUND');
840   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
841   l('      FND_MSG_PUB.ADD;');
842   l('      RAISE FND_API.G_EXC_ERROR;');
843   l('    END IF;');
844 
845   l('    OPEN c_match_rule;');
846   l('    FETCH c_match_rule INTO l_cmp_flag;');
847   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
848   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
849   l('      FND_MSG_PUB.ADD;');
850   l('      RAISE FND_API.G_EXC_ERROR;');
851   l('    END IF;');
852 
853   FIRST := TRUE;
854   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
855                FROM HZ_MATCH_RULES_VL
856                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
857                AND (nvl(COMPILATION_FLAG,'N') = 'C'
858                OR MATCH_RULE_ID = p_rule_id)) LOOP
859     l('    -- Code for Match rule '||RULE.RULE_NAME);
860     IF FIRST THEN
861       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
862       FIRST := FALSE;
863     ELSE
864       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
865     END IF;
866     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
867     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
868     l('        FND_MSG_PUB.ADD;');
869     l('        RAISE FND_API.G_EXC_ERROR;');
870     l('      END IF;');
871 
872     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_parties(');
873     l('        p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,');
874     l('        p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,''N'',x_search_ctx_id,x_num_matches);');
875   END LOOP;
876   l('    END IF;');
877   -- Quality Score
878   l(' -- User quality score ');
879   l(' IF (fnd_profile.value(''HZ_QUALITY_WEIGHTING_USER_HOOK'') = ''Y'')  THEN  ');
880   l('     HZ_DQM_SEARCH_UTIL.get_quality_score ( x_search_ctx_id, p_rule_id); ');
881   l('  END IF; ');
882 
883   d(fnd_log.level_procedure,'find_parties(-)');
884   gen_exception_block;
885   l('  END;');
886   l('');
887 
888 
889   -- Generate find_persons code. Public  signature.
890   l('  PROCEDURE find_persons (');
891   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
892   l('      p_rule_id               IN      NUMBER,');
893   l('      p_party_search_rec      IN      party_search_rec_type,');
894   l('      p_party_site_list       IN      party_site_list,');
895   l('      p_contact_list          IN      contact_list,');
896   l('      p_contact_point_list    IN      contact_point_list,');
897   l('      p_restrict_sql          IN      VARCHAR2,');
898   l('      p_match_type            IN      VARCHAR2,');
899   l('      p_search_merged         IN      VARCHAR2, ');
900   l('      x_search_ctx_id         OUT     NUMBER,');
901   l('      x_num_matches           OUT     NUMBER,');
902   l('      x_return_status         OUT     VARCHAR2,');
903   l('      x_msg_count             OUT     NUMBER,');
904   l('      x_msg_data              OUT     VARCHAR2');
905   l(') IS');
906   l('  CURSOR c_match_rule IS ');
907   l('    SELECT COMPILATION_FLAG ');
908   l('    FROM HZ_MATCH_RULES_VL ');
909   l('    WHERE MATCH_RULE_ID = p_rule_id;');
910   l('  l_cmp_flag VARCHAR2(1);');
911   l('  BEGIN');
912   l('');
913   d(fnd_log.level_procedure,'find_persons(+)');
914   d(fnd_log.level_statement,'Rule ID','p_rule_id');
915   l('    -- Initialize return status and message stack');
916   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
917   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
918   l('      FND_MSG_PUB.initialize;');
919   l('    END IF;');
920   l('');
921   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
922   l('      -- Find the match rule');
923   l('      null;');
924   l('');
925   l('      -- No MATCH RULE FOUND');
926   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
927   l('      FND_MSG_PUB.ADD;');
928   l('      RAISE FND_API.G_EXC_ERROR;');
929   l('    END IF;');
930 
931   l('    OPEN c_match_rule;');
932   l('    FETCH c_match_rule INTO l_cmp_flag;');
933   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
934   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
935   l('      FND_MSG_PUB.ADD;');
936   l('      RAISE FND_API.G_EXC_ERROR;');
937   l('    END IF;');
938   ---Bug:5261867, additional parameter null in place of p_search_merged
939   l_sql := 'declare x number; y number; begin HZ_MATCH_RULE_RULEID.find_persons(-1,'||
940     'HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,'||
941     'HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,'||
942     'null,null,null,null,x,y); end;';
943 
944   FIRST := TRUE;
945   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
946                FROM HZ_MATCH_RULES_VL
947                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
948                AND (nvl(COMPILATION_FLAG,'N') = 'C'
949                OR MATCH_RULE_ID = p_rule_id)) LOOP
950     l('    -- Code for Match rule '||RULE.RULE_NAME);
951     IF FIRST THEN
952       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
953       FIRST := FALSE;
954     ELSE
955       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
956     END IF;
957     IF check_proc(RULE.MATCH_RULE_ID) THEN
958       l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
959       l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
960       l('        FND_MSG_PUB.ADD;');
961       l('        RAISE FND_API.G_EXC_ERROR;');
962       l('      END IF;');
963       l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_persons(');
964       l('        p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,');
965       l('        p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,''N'',x_search_ctx_id,x_num_matches);');
966     ELSE
967       l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
968       l('      FND_MSG_PUB.ADD;');
969       l('      RAISE FND_API.G_EXC_ERROR;');
970     END IF;
971 
972   END LOOP;
973   l('    END IF;');
974   d(fnd_log.level_procedure,'find_persons(-)');
975   gen_exception_block;
976   l('  END;');
977   l('');
978 
979 
980   -- Generate find_persons code. Public  signature.
981   l('  PROCEDURE find_persons (');
982   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
983   l('      p_rule_id               IN      NUMBER,');
984   l('      p_party_search_rec      IN      party_search_rec_type,');
985   l('      p_party_site_list       IN      party_site_list,');
986   l('      p_contact_list          IN      contact_list,');
987   l('      p_contact_point_list    IN      contact_point_list,');
988   l('      p_restrict_sql          IN      VARCHAR2,');
989   l('      p_match_type            IN      VARCHAR2,');
990   l('      x_search_ctx_id         OUT     NUMBER,');
991   l('      x_num_matches           OUT     NUMBER,');
992   l('      x_return_status         OUT     VARCHAR2,');
993   l('      x_msg_count             OUT     NUMBER,');
994   l('      x_msg_data              OUT     VARCHAR2');
995   l(') IS');
996   l('  BEGIN');
997   l('  	find_persons (');
998   l('      p_init_msg_list,p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, ');
999   l('      p_restrict_sql ,p_match_type,NULL,x_search_ctx_id,x_num_matches,x_return_status,');
1000   l('      x_msg_count,x_msg_data);');
1001   l('  END;');
1002   l('');
1003 
1004   -- Generate find_party_details code. Public  signature.
1005   l('  PROCEDURE find_party_details (');
1006   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1007   l('      p_rule_id               IN      NUMBER,');
1008   l('      p_party_search_rec      IN      party_search_rec_type,');
1009   l('      p_party_site_list       IN      party_site_list,');
1010   l('      p_contact_list          IN      contact_list,');
1011   l('      p_contact_point_list    IN      contact_point_list,');
1012   l('      p_restrict_sql          IN      VARCHAR2,');
1013   l('      p_match_type            IN      VARCHAR2,');
1014   l('      p_search_merged         IN      VARCHAR2,');
1015   l('      x_search_ctx_id         OUT     NUMBER,');
1016   l('      x_num_matches           OUT     NUMBER,');
1017   l('      x_return_status         OUT     VARCHAR2,');
1018   l('      x_msg_count             OUT     NUMBER,');
1019   l('      x_msg_data              OUT     VARCHAR2');
1020   l(') IS');
1021   l('  CURSOR c_match_rule IS ');
1022   l('    SELECT COMPILATION_FLAG ');
1023   l('    FROM HZ_MATCH_RULES_VL ');
1024   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1025   l('  l_cmp_flag VARCHAR2(1);');
1026   l('  BEGIN');
1027 
1028   ds(fnd_log.level_procedure,'    ');
1029   dc(fnd_log.level_procedure,'find_party_details(+)');
1030   de('    ');
1031   ds(fnd_log.level_statement,'    ');
1032   dc(fnd_log.level_statement,'Rule ID','p_rule_id');
1033   de('    ');
1034   l('');
1035   l('    -- Initialize return status and message stack');
1036   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1037   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1038   l('      FND_MSG_PUB.initialize;');
1039   l('    END IF;');
1040   l('');
1041   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1042   l('      -- Find the match rule');
1043   l('      null;');
1044   l('');
1045   l('      -- No MATCH RULE FOUND');
1046   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1047   l('      FND_MSG_PUB.ADD;');
1048   l('      RAISE FND_API.G_EXC_ERROR;');
1049   l('    END IF;');
1050 
1051   l('    OPEN c_match_rule;');
1052   l('    FETCH c_match_rule INTO l_cmp_flag;');
1053   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1054   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1055   l('      FND_MSG_PUB.ADD;');
1056   l('      RAISE FND_API.G_EXC_ERROR;');
1057   l('    END IF;');
1058 
1059   FIRST := TRUE;
1060   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1061                FROM HZ_MATCH_RULES_VL
1062                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1063                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1064                OR MATCH_RULE_ID = p_rule_id)) LOOP
1065     l('    -- Code for Match rule '||RULE.RULE_NAME);
1066     IF FIRST THEN
1067       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1068       FIRST := FALSE;
1069     ELSE
1070       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1071     END IF;
1072     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1073     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1074     l('        FND_MSG_PUB.ADD;');
1075     l('        RAISE FND_API.G_EXC_ERROR;');
1076     l('      END IF;');
1077 
1078     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_party_details(');
1079     l('        p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,');
1080     l('        p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,x_search_ctx_id,x_num_matches);');
1081   END LOOP;
1082   l('    END IF;');
1083   d(fnd_log.level_procedure,'find_party_details(-)');
1084   gen_exception_block;
1085   l('  END;');
1086   l('');
1087   l('  PROCEDURE find_duplicate_parties (');
1088   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1089   l('      p_rule_id               IN      NUMBER,');
1090   l('      p_party_id              IN      NUMBER,');
1091   l('      p_restrict_sql          IN      VARCHAR2,');
1092   l('      p_match_type            IN      VARCHAR2,');
1093   l('      p_dup_batch_id          IN      NUMBER,');
1094   l('      p_search_merged         IN      VARCHAR2,');
1095   l('      x_dup_set_id            OUT     NUMBER,');
1096   l('      x_search_ctx_id         OUT     NUMBER,');
1097   l('      x_num_matches           OUT     NUMBER,');
1098   l('      x_return_status         OUT     VARCHAR2,');
1099   l('      x_msg_count             OUT     NUMBER,');
1100   l('      x_msg_data              OUT     VARCHAR2');
1101   l(') IS');
1102   l('  CURSOR c_match_rule IS ');
1103   l('    SELECT COMPILATION_FLAG ');
1104   l('    FROM HZ_MATCH_RULES_VL ');
1105   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1106   l('  l_cmp_flag VARCHAR2(1);');
1107   l('  BEGIN');
1108 
1109 
1110   d(fnd_log.level_procedure,'find_duplicate_parties(+)');
1111   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1112 
1113   l('');
1114   l('    -- Initialize return status and message stack');
1115   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1116   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1117   l('      FND_MSG_PUB.initialize;');
1118   l('    END IF;');
1119   l('');
1120   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1121   l('      -- Find the match rule');
1122   l('      null;');
1123   l('');
1124   l('      -- No MATCH RULE FOUND');
1125   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1126   l('      FND_MSG_PUB.ADD;');
1127   l('      RAISE FND_API.G_EXC_ERROR;');
1128   l('    END IF;');
1129 
1130   l('    IF g_last_rule<>p_rule_id OR NOT g_last_rule_valid THEN');
1131   l('      OPEN c_match_rule;');
1132   l('      FETCH c_match_rule INTO l_cmp_flag;');
1133   l('      IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1134   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1135   l('        FND_MSG_PUB.ADD;');
1136   l('        RAISE FND_API.G_EXC_ERROR;');
1137   l('      END IF;');
1138   l('      g_last_rule := p_rule_id;');
1139   l('      g_last_rule_valid := TRUE;');
1140   l('    END IF;');
1141 
1142   FIRST := TRUE;
1143   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1144                FROM HZ_MATCH_RULES_VL
1145                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1146                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1147                OR MATCH_RULE_ID = p_rule_id)) LOOP
1148     l('    -- Code for Match rule '||RULE.RULE_NAME);
1149     IF FIRST THEN
1150       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1151       FIRST := FALSE;
1152     ELSE
1153       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1154     END IF;
1155     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1156     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1157     l('        FND_MSG_PUB.ADD;');
1158     l('        RAISE FND_API.G_EXC_ERROR;');
1159     l('      END IF;');
1160 
1161     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_duplicate_parties(');
1162     l('        p_rule_id,p_party_id,');
1163     l('        p_restrict_sql,p_match_type,p_dup_batch_id,p_search_merged,x_dup_set_id, x_search_ctx_id,x_num_matches);');
1164   END LOOP;
1165   l('    END IF;');
1166   d(fnd_log.level_procedure,'find_duplicate_parties(-)');
1167 
1168   gen_exception_block;
1169   l('  END;');
1170   l('');
1171 
1172   l('');
1173   l('  PROCEDURE find_duplicate_party_sites (');
1174   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1175   l('      p_rule_id               IN      NUMBER,');
1176   l('      p_party_site_id         IN      NUMBER,');
1177   l('      p_party_id              IN      NUMBER,');
1178   l('      p_restrict_sql          IN      VARCHAR2,');
1179   l('      p_match_type            IN      VARCHAR2,');
1180   l('      x_search_ctx_id         OUT     NUMBER,');
1181   l('      x_num_matches           OUT     NUMBER,');
1182   l('      x_return_status         OUT     VARCHAR2,');
1183   l('      x_msg_count             OUT     NUMBER,');
1184   l('      x_msg_data              OUT     VARCHAR2');
1185   l(') IS');
1186   l('  CURSOR c_match_rule IS ');
1187   l('    SELECT COMPILATION_FLAG ');
1188   l('    FROM HZ_MATCH_RULES_VL ');
1189   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1190   l('  l_cmp_flag VARCHAR2(1);');
1191   l('  BEGIN');
1192 
1193 
1194   d(fnd_log.level_procedure,'find_duplicate_party_sites(+)');
1195   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1196 
1197   l('');
1198   l('    -- Initialize return status and message stack');
1199   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1200   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1201   l('      FND_MSG_PUB.initialize;');
1202   l('    END IF;');
1203   l('');
1204   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1205   l('      -- Find the match rule');
1206   l('      null;');
1207   l('');
1208   l('      -- No MATCH RULE FOUND');
1209   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1210   l('      FND_MSG_PUB.ADD;');
1211   l('      RAISE FND_API.G_EXC_ERROR;');
1212   l('    END IF;');
1213 
1214   l('    OPEN c_match_rule;');
1215   l('    FETCH c_match_rule INTO l_cmp_flag;');
1216   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1217   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1218   l('      FND_MSG_PUB.ADD;');
1219   l('      RAISE FND_API.G_EXC_ERROR;');
1220   l('    END IF;');
1221 
1222   FIRST := TRUE;
1223   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1224                FROM HZ_MATCH_RULES_VL
1225                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1226                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1227                OR MATCH_RULE_ID = p_rule_id)) LOOP
1228     l('    -- Code for Match rule '||RULE.RULE_NAME);
1229     IF FIRST THEN
1230       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1231       FIRST := FALSE;
1232     ELSE
1233       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1234     END IF;
1235     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1236     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1237     l('        FND_MSG_PUB.ADD;');
1238     l('        RAISE FND_API.G_EXC_ERROR;');
1239     l('      END IF;');
1240 
1241     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_duplicate_party_sites(');
1242     l('        p_rule_id,p_party_site_id,p_party_id,');
1243     l('        p_restrict_sql,p_match_type,x_search_ctx_id,x_num_matches);');
1244   END LOOP;
1245   l('    END IF;');
1246   d(fnd_log.level_procedure,'find_duplicate_party_sites(-)');
1247 
1248   gen_exception_block;
1249   l('  END;');
1250 
1251   l('');
1252   l('  PROCEDURE find_duplicate_contacts (');
1253   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1254   l('      p_rule_id               IN      NUMBER,');
1255   l('      p_org_contact_id        IN      NUMBER,');
1256   l('      p_party_id              IN      NUMBER,');
1257   l('      p_restrict_sql          IN      VARCHAR2,');
1258   l('      p_match_type            IN      VARCHAR2,');
1259   l('      x_search_ctx_id         OUT     NUMBER,');
1260   l('      x_num_matches           OUT     NUMBER,');
1261   l('      x_return_status         OUT     VARCHAR2,');
1262   l('      x_msg_count             OUT     NUMBER,');
1263   l('      x_msg_data              OUT     VARCHAR2');
1264   l(') IS');
1265   l('  CURSOR c_match_rule IS ');
1266   l('    SELECT COMPILATION_FLAG ');
1267   l('    FROM HZ_MATCH_RULES_VL ');
1268   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1269   l('  l_cmp_flag VARCHAR2(1);');
1270   l('  BEGIN');
1271 
1272 
1273   d(fnd_log.level_procedure,'find_duplicate_contacts(+)');
1274   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1275 
1276   l('');
1277   l('    -- Initialize return status and message stack');
1278   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1279   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1280   l('      FND_MSG_PUB.initialize;');
1281   l('    END IF;');
1282   l('');
1283   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1284   l('      -- Find the match rule');
1285   l('      null;');
1286   l('');
1287   l('      -- No MATCH RULE FOUND');
1288   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1289   l('      FND_MSG_PUB.ADD;');
1290   l('      RAISE FND_API.G_EXC_ERROR;');
1291   l('    END IF;');
1292 
1293   l('    OPEN c_match_rule;');
1294   l('    FETCH c_match_rule INTO l_cmp_flag;');
1295   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1296   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1297   l('      FND_MSG_PUB.ADD;');
1298   l('      RAISE FND_API.G_EXC_ERROR;');
1299   l('    END IF;');
1300 
1301   FIRST := TRUE;
1302   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1303                FROM HZ_MATCH_RULES_VL
1304                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1305                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1306                OR MATCH_RULE_ID = p_rule_id)) LOOP
1307     l('    -- Code for Match rule '||RULE.RULE_NAME);
1308     IF FIRST THEN
1309       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1310       FIRST := FALSE;
1311     ELSE
1312       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1313     END IF;
1314     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1315     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1316     l('        FND_MSG_PUB.ADD;');
1317     l('        RAISE FND_API.G_EXC_ERROR;');
1318     l('      END IF;');
1319 
1320     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_duplicate_contacts(');
1321     l('        p_rule_id,p_org_contact_id,p_party_id,');
1322     l('        p_restrict_sql,p_match_type,x_search_ctx_id,x_num_matches);');
1323   END LOOP;
1324   l('    END IF;');
1325   d(fnd_log.level_procedure,'find_duplicate_contacts(-)');
1326 
1327   gen_exception_block;
1328   l('  END;');
1329 
1330   l('');
1331   l('  PROCEDURE find_duplicate_contact_points (');
1332   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1333   l('      p_rule_id               IN      NUMBER,');
1334   l('      p_contact_point_id      IN      NUMBER,');
1335   l('      p_party_id              IN      NUMBER,');
1336   l('      p_restrict_sql          IN      VARCHAR2,');
1337   l('      p_match_type            IN      VARCHAR2,');
1338   l('      x_search_ctx_id         OUT     NUMBER,');
1339   l('      x_num_matches           OUT     NUMBER,');
1340   l('      x_return_status         OUT     VARCHAR2,');
1341   l('      x_msg_count             OUT     NUMBER,');
1342   l('      x_msg_data              OUT     VARCHAR2');
1343   l(') IS');
1344   l('  CURSOR c_match_rule IS ');
1345   l('    SELECT COMPILATION_FLAG ');
1346   l('    FROM HZ_MATCH_RULES_VL ');
1347   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1348   l('  l_cmp_flag VARCHAR2(1);');
1349   l('  BEGIN');
1350 
1351 
1352   d(fnd_log.level_procedure,'find_duplicate_contact_points(+)');
1353   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1354 
1355   l('');
1356   l('    -- Initialize return status and message stack');
1357   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1358   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1359   l('      FND_MSG_PUB.initialize;');
1360   l('    END IF;');
1361   l('');
1362   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1363   l('      -- Find the match rule');
1364   l('      null;');
1365   l('');
1366   l('      -- No MATCH RULE FOUND');
1367   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1368   l('      FND_MSG_PUB.ADD;');
1369   l('      RAISE FND_API.G_EXC_ERROR;');
1370   l('    END IF;');
1371 
1372   l('    OPEN c_match_rule;');
1373   l('    FETCH c_match_rule INTO l_cmp_flag;');
1374   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1375   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1376   l('      FND_MSG_PUB.ADD;');
1377   l('      RAISE FND_API.G_EXC_ERROR;');
1378   l('    END IF;');
1379 
1380   FIRST := TRUE;
1381   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1382                FROM HZ_MATCH_RULES_VL
1383                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1384                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1385                OR MATCH_RULE_ID = p_rule_id)) LOOP
1386     l('    -- Code for Match rule '||RULE.RULE_NAME);
1387     IF FIRST THEN
1388       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1389       FIRST := FALSE;
1390     ELSE
1391       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1392     END IF;
1393     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1394     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1395     l('        FND_MSG_PUB.ADD;');
1396     l('        RAISE FND_API.G_EXC_ERROR;');
1397     l('      END IF;');
1398 
1399     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_duplicate_contact_points(');
1400     l('        p_rule_id,p_contact_point_id,p_party_id,');
1401     l('        p_restrict_sql,p_match_type,x_search_ctx_id,x_num_matches);');
1402   END LOOP;
1403   l('    END IF;');
1404   d(fnd_log.level_procedure,'find_duplicate_contact_points(-)');
1405 
1406   gen_exception_block;
1407   l('  END;');
1408   l('');
1409   l('');
1410   l('  PROCEDURE find_parties_dynamic (');
1411   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1412   l('      p_rule_id               IN      NUMBER,');
1413   l('      p_attrib_id1            IN      NUMBER,');
1414   l('      p_attrib_id2            IN      NUMBER,');
1415   l('      p_attrib_id3            IN      NUMBER,');
1416   l('      p_attrib_id4            IN      NUMBER,');
1417   l('      p_attrib_id5            IN      NUMBER,');
1418   l('      p_attrib_id6            IN      NUMBER,');
1419   l('      p_attrib_id7            IN      NUMBER,');
1420   l('      p_attrib_id8            IN      NUMBER,');
1421   l('      p_attrib_id9            IN      NUMBER,');
1422   l('      p_attrib_id10           IN      NUMBER,');
1423   l('      p_attrib_id11           IN      NUMBER,');
1424   l('      p_attrib_id12           IN      NUMBER,');
1425   l('      p_attrib_id13           IN      NUMBER,');
1426   l('      p_attrib_id14           IN      NUMBER,');
1427   l('      p_attrib_id15           IN      NUMBER,');
1428   l('      p_attrib_id16           IN      NUMBER,');
1429   l('      p_attrib_id17           IN      NUMBER,');
1430   l('      p_attrib_id18           IN      NUMBER,');
1431   l('      p_attrib_id19           IN      NUMBER,');
1432   l('      p_attrib_id20           IN      NUMBER,');
1433   l('      p_attrib_val1           IN      VARCHAR2,');
1434   l('      p_attrib_val2           IN      VARCHAR2,');
1435   l('      p_attrib_val3           IN      VARCHAR2,');
1436   l('      p_attrib_val4           IN      VARCHAR2,');
1437   l('      p_attrib_val5           IN      VARCHAR2,');
1438   l('      p_attrib_val6           IN      VARCHAR2,');
1439   l('      p_attrib_val7           IN      VARCHAR2,');
1440   l('      p_attrib_val8           IN      VARCHAR2,');
1441   l('      p_attrib_val9           IN      VARCHAR2,');
1442   l('      p_attrib_val10          IN      VARCHAR2,');
1443   l('      p_attrib_val11          IN      VARCHAR2,');
1444   l('      p_attrib_val12          IN      VARCHAR2,');
1445   l('      p_attrib_val13          IN      VARCHAR2,');
1446   l('      p_attrib_val14          IN      VARCHAR2,');
1447   l('      p_attrib_val15          IN      VARCHAR2,');
1448   l('      p_attrib_val16          IN      VARCHAR2,');
1449   l('      p_attrib_val17          IN      VARCHAR2,');
1450   l('      p_attrib_val18          IN      VARCHAR2,');
1451   l('      p_attrib_val19          IN      VARCHAR2,');
1452   l('      p_attrib_val20          IN      VARCHAR2,');
1453   l('      p_restrict_sql          IN      VARCHAR2,');
1454   l('      p_match_type            IN      VARCHAR2,');
1455   l('      p_search_merged         IN      VARCHAR2,');
1456   l('      x_search_ctx_id         OUT     NUMBER,');
1457   l('      x_num_matches           OUT     NUMBER,');
1458   l('      x_return_status         OUT     VARCHAR2,');
1459   l('      x_msg_count             OUT     NUMBER,');
1460   l('      x_msg_data              OUT     VARCHAR2');
1461   l(') IS');
1462   l('  CURSOR c_match_rule IS ');
1463   l('    SELECT COMPILATION_FLAG ');
1464   l('    FROM HZ_MATCH_RULES_VL ');
1465   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1466   l('  l_cmp_flag VARCHAR2(1);');
1467   l('  BEGIN');
1468 
1469 
1470   d(fnd_log.level_procedure,'find_parties_dynamic(+)');
1471   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1472 
1473   l('');
1474   l('    -- Initialize return status and message stack');
1475   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1476   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1477   l('      FND_MSG_PUB.initialize;');
1478   l('    END IF;');
1479   l('');
1480   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1481   l('      -- Find the match rule');
1482   l('      null;');
1483   l('');
1484   l('      -- No MATCH RULE FOUND');
1485   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1486   l('      FND_MSG_PUB.ADD;');
1487   l('      RAISE FND_API.G_EXC_ERROR;');
1488   l('    END IF;');
1489 
1490   l('    OPEN c_match_rule;');
1491   l('    FETCH c_match_rule INTO l_cmp_flag;');
1492   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1493   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1494   l('      FND_MSG_PUB.ADD;');
1495   l('      RAISE FND_API.G_EXC_ERROR;');
1496   l('    END IF;');
1497 
1498   FIRST := TRUE;
1499   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1500                FROM HZ_MATCH_RULES_VL
1501                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1502                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1503                OR MATCH_RULE_ID = p_rule_id)) LOOP
1504     l('    -- Code for Match rule '||RULE.RULE_NAME);
1505     IF FIRST THEN
1506       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1507       FIRST := FALSE;
1508     ELSE
1509       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1510     END IF;
1511     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1512     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1513     l('        FND_MSG_PUB.ADD;');
1514     l('        RAISE FND_API.G_EXC_ERROR;');
1515     l('      END IF;');
1516 
1517     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_parties_dynamic(');
1518     l('        p_rule_id,');
1519     l('        p_attrib_id1,p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
1520     l('        p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
1521     l('        p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
1522     l('        p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
1523     l('        p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
1524     l('        p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
1525     l('        p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
1526     l('        p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
1527     l('        p_restrict_sql,p_match_type,p_search_merged,x_search_ctx_id,x_num_matches);');
1528   END LOOP;
1529   l('    END IF;');
1530   d(fnd_log.level_procedure,'find_parties_dynamic(-)');
1531 
1532   gen_exception_block;
1533   l('  END;');
1534   l('');
1535   l('  PROCEDURE call_api_dynamic (');
1536   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1537   l('      p_rule_id               IN      NUMBER,');
1538   l('      p_attrib_id1            IN      NUMBER,');
1539   l('      p_attrib_id2            IN      NUMBER,');
1540   l('      p_attrib_id3            IN      NUMBER,');
1541   l('      p_attrib_id4            IN      NUMBER,');
1542   l('      p_attrib_id5            IN      NUMBER,');
1543   l('      p_attrib_id6            IN      NUMBER,');
1544   l('      p_attrib_id7            IN      NUMBER,');
1545   l('      p_attrib_id8            IN      NUMBER,');
1546   l('      p_attrib_id9            IN      NUMBER,');
1547   l('      p_attrib_id10           IN      NUMBER,');
1548   l('      p_attrib_id11           IN      NUMBER,');
1549   l('      p_attrib_id12           IN      NUMBER,');
1550   l('      p_attrib_id13           IN      NUMBER,');
1551   l('      p_attrib_id14           IN      NUMBER,');
1552   l('      p_attrib_id15           IN      NUMBER,');
1553   l('      p_attrib_id16           IN      NUMBER,');
1554   l('      p_attrib_id17           IN      NUMBER,');
1555   l('      p_attrib_id18           IN      NUMBER,');
1556   l('      p_attrib_id19           IN      NUMBER,');
1557   l('      p_attrib_id20           IN      NUMBER,');
1558   l('      p_attrib_val1           IN      VARCHAR2,');
1559   l('      p_attrib_val2           IN      VARCHAR2,');
1560   l('      p_attrib_val3           IN      VARCHAR2,');
1561   l('      p_attrib_val4           IN      VARCHAR2,');
1562   l('      p_attrib_val5           IN      VARCHAR2,');
1563   l('      p_attrib_val6           IN      VARCHAR2,');
1564   l('      p_attrib_val7           IN      VARCHAR2,');
1565   l('      p_attrib_val8           IN      VARCHAR2,');
1566   l('      p_attrib_val9           IN      VARCHAR2,');
1567   l('      p_attrib_val10          IN      VARCHAR2,');
1568   l('      p_attrib_val11          IN      VARCHAR2,');
1569   l('      p_attrib_val12          IN      VARCHAR2,');
1570   l('      p_attrib_val13          IN      VARCHAR2,');
1571   l('      p_attrib_val14          IN      VARCHAR2,');
1572   l('      p_attrib_val15          IN      VARCHAR2,');
1573   l('      p_attrib_val16          IN      VARCHAR2,');
1574   l('      p_attrib_val17          IN      VARCHAR2,');
1575   l('      p_attrib_val18          IN      VARCHAR2,');
1576   l('      p_attrib_val19          IN      VARCHAR2,');
1577   l('      p_attrib_val20          IN      VARCHAR2,');
1578   l('      p_restrict_sql          IN      VARCHAR2,');
1579   l('      p_api_name              IN      VARCHAR2,');
1580   l('      p_match_type            IN      VARCHAR2,');
1581   l('      p_party_id              IN      NUMBER,');
1582   l('      p_search_merged         IN      VARCHAR2,');
1583   l('      x_search_ctx_id         OUT     NUMBER,');
1584   l('      x_num_matches           OUT     NUMBER,');
1585   l('      x_return_status         OUT     VARCHAR2,');
1586   l('      x_msg_count             OUT     NUMBER,');
1587   l('      x_msg_data              OUT     VARCHAR2');
1588   l(') IS');
1589   l('  CURSOR c_match_rule IS ');
1590   l('    SELECT COMPILATION_FLAG ');
1591   l('    FROM HZ_MATCH_RULES_VL ');
1592   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1593   l('  l_cmp_flag VARCHAR2(1);');
1594   l('  BEGIN');
1595 
1596 
1597   d(fnd_log.level_procedure,'find_parties_dynamic(+)');
1598   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1599 
1600   l('');
1601   l('    -- Initialize return status and message stack');
1602   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1603   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1604   l('      FND_MSG_PUB.initialize;');
1605   l('    END IF;');
1606   l('');
1607   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1608   l('      -- Find the match rule');
1609   l('      null;');
1610   l('');
1611   l('      -- No MATCH RULE FOUND');
1612   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1613   l('      FND_MSG_PUB.ADD;');
1614   l('      RAISE FND_API.G_EXC_ERROR;');
1615   l('    END IF;');
1616 
1617   l('    OPEN c_match_rule;');
1618   l('    FETCH c_match_rule INTO l_cmp_flag;');
1619   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1620   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1621   l('      FND_MSG_PUB.ADD;');
1622   l('      RAISE FND_API.G_EXC_ERROR;');
1623   l('    END IF;');
1624 
1625   l_sql := 'declare x number; y number; begin HZ_MATCH_RULE_RULEID.call_api_dynamic(null,null,'||
1626        'null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'||
1627        'null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'||
1628        'null,null,null,null,null,null,null,null,null,null,null,null,x,y); end;';
1629 
1630 
1631   FIRST := TRUE;
1632   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1633                FROM HZ_MATCH_RULES_VL
1634                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1635                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1636                OR MATCH_RULE_ID = p_rule_id)) LOOP
1637     l('    -- Code for Match rule '||RULE.RULE_NAME);
1638     IF FIRST THEN
1639       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1640       FIRST := FALSE;
1641     ELSE
1642       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1643     END IF;
1644     IF check_proc(RULE.MATCH_RULE_ID) THEN
1645 
1646       l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1647       l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1648       l('        FND_MSG_PUB.ADD;');
1649       l('        RAISE FND_API.G_EXC_ERROR;');
1650       l('      END IF;');
1651 
1652       l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.call_api_dynamic(');
1653       l('        p_rule_id,');
1654       l('        p_attrib_id1,p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
1655       l('        p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
1656       l('        p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
1657       l('        p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
1658       l('        p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
1659       l('        p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
1660       l('        p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
1661       l('        p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
1662       l('        p_restrict_sql,p_api_name,p_match_type,p_party_id,p_search_merged,x_search_ctx_id,x_num_matches);');
1663     ELSE
1664       l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1665       l('      FND_MSG_PUB.ADD;');
1666       l('      RAISE FND_API.G_EXC_ERROR;');
1667     END IF;
1668 
1669   END LOOP;
1670   l('    END IF;');
1671   d(fnd_log.level_procedure,'call_api_dynamic(-)');
1672 
1673   gen_exception_block;
1674   l('  END; ');
1675 
1676   gen_call_api_dynamic_names;
1677 
1678   -- Generate get_matching_party_sites code
1679   l('PROCEDURE get_matching_party_sites (');
1680   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1681   l('        p_rule_id               IN      NUMBER,');
1682   l('        p_party_id              IN      NUMBER,');
1683   l('        p_party_site_list	     IN	     PARTY_SITE_LIST,');
1684   l('        p_contact_point_list    IN	     CONTACT_POINT_LIST,');
1685   l('        x_search_ctx_id         OUT     NUMBER,');
1686   l('        x_return_status         OUT     VARCHAR2,');
1687   l('        x_msg_count             OUT     NUMBER,');
1688   l('        x_msg_data              OUT     VARCHAR2');
1689   l(') IS');
1690   l('  l_num_matches NUMBER;');
1691   l('  BEGIN');
1692 
1693 
1694   d(fnd_log.level_procedure,'get_matching_party_sites-1(+)');
1695   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1696 
1697   l('     get_matching_party_sites(p_init_msg_list,p_rule_id,p_party_id,');
1698   l('            p_party_site_list,p_contact_point_list,');
1699   l('            NULL,NULL,x_search_ctx_id,');
1700   l('            l_num_matches,x_return_status,x_msg_count,x_msg_data);');
1701   d(fnd_log.level_procedure,'get_matching_party_sites-1(-)');
1702 
1703   l('  END;');
1704 
1705   l('PROCEDURE get_matching_party_sites (');
1706   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1707   l('        p_rule_id               IN      NUMBER,');
1708   l('        p_party_id              IN      NUMBER,');
1709   l('        p_party_site_list       IN      PARTY_SITE_LIST,');
1710   l('        p_contact_point_list    IN      CONTACT_POINT_LIST,');
1711   l('        p_restrict_sql          IN      VARCHAR2,');
1712   l('        p_match_type            IN      VARCHAR2,');
1713   l('        x_search_ctx_id         OUT     NUMBER,');
1714   l('        x_num_matches           OUT     NUMBER,');
1715   l('        x_return_status         OUT     VARCHAR2,');
1716   l('        x_msg_count             OUT     NUMBER,');
1717   l('        x_msg_data              OUT     VARCHAR2');
1718   l(') IS');
1719   l('  CURSOR c_match_rule IS ');
1720   l('    SELECT COMPILATION_FLAG ');
1721   l('    FROM HZ_MATCH_RULES_VL ');
1722   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1723   l('  l_cmp_flag VARCHAR2(1);');
1724   l('  BEGIN');
1725 
1726 
1727   d(fnd_log.level_procedure,'get_matching_party_sites(+)');
1728   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1729 
1730 
1731   l('');
1732   l('    -- Initialize return status and message stack');
1733   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1734   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1735   l('      FND_MSG_PUB.initialize;');
1736   l('    END IF;');
1737   l('');
1738   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1739   l('      -- No MATCH RULE FOUND');
1740   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1741   l('      FND_MSG_PUB.ADD;');
1742   l('      RAISE FND_API.G_EXC_ERROR;');
1743   l('    END IF;');
1744 
1745   l('    OPEN c_match_rule;');
1746   l('    FETCH c_match_rule INTO l_cmp_flag;');
1747   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1748   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1749   l('      FND_MSG_PUB.ADD;');
1750   l('      RAISE FND_API.G_EXC_ERROR;');
1751   l('    END IF;');
1752 
1753   FIRST := TRUE;
1754   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1755                FROM HZ_MATCH_RULES_VL
1756                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1757                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1758                OR MATCH_RULE_ID = p_rule_id)) LOOP
1759     l('    -- Code for Match rule '||RULE.RULE_NAME);
1760     IF FIRST THEN
1761       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1762       FIRST := FALSE;
1763     ELSE
1764       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1765     END IF;
1766     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1767     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1768     l('        FND_MSG_PUB.ADD;');
1769     l('        RAISE FND_API.G_EXC_ERROR;');
1770     l('      END IF;');
1771     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_matching_party_sites(');
1772     l('        p_rule_id, p_party_id,p_party_site_list, p_contact_point_list,');
1773     l('        p_restrict_sql, p_match_type,null,x_search_ctx_id,x_num_matches);');
1774   END LOOP;
1775   l('    END IF;');
1776   d(fnd_log.level_procedure,'get_matching_party_sites(-)');
1777 
1778   gen_exception_block;
1779   l('  END;');
1780   l('');
1781   -- Generate get_matching_contacts code
1782   l('PROCEDURE get_matching_contacts (');
1783   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1784   l('        p_rule_id               IN      NUMBER,');
1785   l('        p_party_id              IN      NUMBER,');
1786   l('        p_contact_list          IN      CONTACT_LIST,');
1787   l('        p_contact_point_list    IN      CONTACT_POINT_LIST,');
1788   l('        x_search_ctx_id         OUT     NUMBER,');
1789   l('        x_return_status         OUT     VARCHAR2,');
1790   l('        x_msg_count             OUT     NUMBER,');
1791   l('        x_msg_data              OUT     VARCHAR2');
1792   l(') IS');
1793   l('  l_num_matches NUMBER;');
1794   l('  BEGIN');
1795 
1796 
1797   d(fnd_log.level_procedure,'get_matching_contacts-1(+)');
1798   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1799 
1800   l('     get_matching_contacts(p_init_msg_list,p_rule_id,p_party_id,');
1801   l('            p_contact_list,p_contact_point_list,');
1802   l('            NULL,NULL,x_search_ctx_id,');
1803   l('            l_num_matches,x_return_status,x_msg_count,x_msg_data);');
1804   d(fnd_log.level_procedure,'get_matching_contacts-1(-)');
1805 
1806   l('  END;');
1807 
1808   l('PROCEDURE get_matching_contacts (');
1809   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1810   l('        p_rule_id               IN      NUMBER,');
1811   l('        p_party_id              IN      NUMBER,');
1812   l('        p_contact_list	     IN	     CONTACT_LIST,');
1813   l('        p_contact_point_list    IN	     CONTACT_POINT_LIST,');
1814   l('        p_restrict_sql          IN      VARCHAR2,');
1815   l('        p_match_type            IN      VARCHAR2,');
1816   l('        x_search_ctx_id         OUT     NUMBER,');
1817   l('        x_num_matches           OUT     NUMBER,');
1818   l('        x_return_status         OUT     VARCHAR2,');
1819   l('        x_msg_count             OUT     NUMBER,');
1820   l('        x_msg_data              OUT     VARCHAR2');
1821   l(') IS');
1822   l('  CURSOR c_match_rule IS ');
1823   l('    SELECT COMPILATION_FLAG ');
1824   l('    FROM HZ_MATCH_RULES_VL ');
1825   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1826   l('  l_cmp_flag VARCHAR2(1);');
1827   l('  BEGIN');
1828 
1829 
1830   d(fnd_log.level_procedure,'get_matching_contacts(+)');
1831   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1832 
1833 
1834   l('');
1835   l('    -- Initialize return status and message stack');
1836   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1837   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1838   l('      FND_MSG_PUB.initialize;');
1839   l('    END IF;');
1840   l('');
1841   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1842   l('      -- No MATCH RULE FOUND');
1843   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1844   l('      FND_MSG_PUB.ADD;');
1845   l('      RAISE FND_API.G_EXC_ERROR;');
1846   l('    END IF;');
1847 
1848   l('    OPEN c_match_rule;');
1849   l('    FETCH c_match_rule INTO l_cmp_flag;');
1850   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1851   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1852   l('      FND_MSG_PUB.ADD;');
1853   l('      RAISE FND_API.G_EXC_ERROR;');
1854   l('    END IF;');
1855 
1856   FIRST := TRUE;
1857   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1858                FROM HZ_MATCH_RULES_VL
1859                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1860                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1861                OR MATCH_RULE_ID = p_rule_id)) LOOP
1862     l('    -- Code for Match rule '||RULE.RULE_NAME);
1863     IF FIRST THEN
1864       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1865       FIRST := FALSE;
1866     ELSE
1867       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1868     END IF;
1869     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1870     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1871     l('        FND_MSG_PUB.ADD;');
1872     l('        RAISE FND_API.G_EXC_ERROR;');
1873     l('      END IF;');
1874     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_matching_contacts(');
1875     l('        p_rule_id, p_party_id,p_contact_list, p_contact_point_list,');
1876     l('        p_restrict_sql, p_match_type,null,x_search_ctx_id,x_num_matches);');
1877   END LOOP;
1878   l('    END IF;');
1879   gen_exception_block;
1880   d(fnd_log.level_procedure,'get_matching_contacts(-)');
1881 
1882   l('  END;');
1883   l('');
1884   -- Generate get_matching_contact_points code
1885   l('PROCEDURE get_matching_contact_points (');
1886   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1887   l('        p_rule_id               IN      NUMBER,');
1888   l('        p_party_id              IN      NUMBER,');
1889   l('        p_contact_point_list    IN	     CONTACT_POINT_LIST,');
1890   l('        x_search_ctx_id         OUT     NUMBER,');
1891   l('        x_return_status         OUT     VARCHAR2,');
1892   l('        x_msg_count             OUT     NUMBER,');
1893   l('        x_msg_data              OUT     VARCHAR2');
1894   l(') IS');
1895   l('  l_num_matches NUMBER;');
1896   l('  BEGIN');
1897 
1898 
1899   d(fnd_log.level_procedure,'get_matching_contact_points-1(+)');
1900   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1901 
1902   l('     get_matching_contact_points(p_init_msg_list,p_rule_id,p_party_id,');
1903   l('            p_contact_point_list,');
1904   l('            NULL,NULL,x_search_ctx_id,');
1905   l('            l_num_matches,x_return_status,x_msg_count,x_msg_data);');
1906   d(fnd_log.level_procedure,'get_matching_contact_points-1(-)');
1907 
1908   l('  END;');
1909   l('PROCEDURE get_matching_contact_points (');
1910   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1911   l('        p_rule_id               IN      NUMBER,');
1912   l('        p_party_id              IN      NUMBER,');
1913   l('        p_contact_point_list    IN	     CONTACT_POINT_LIST,');
1914   l('        p_restrict_sql          IN      VARCHAR2,');
1915   l('        p_match_type            IN      VARCHAR2,');
1916   l('        x_search_ctx_id         OUT     NUMBER,');
1917   l('        x_num_matches           OUT     NUMBER,');
1918   l('        x_return_status         OUT     VARCHAR2,');
1919   l('        x_msg_count             OUT     NUMBER,');
1920   l('        x_msg_data              OUT     VARCHAR2');
1921   l(') IS');
1922   l('  CURSOR c_match_rule IS ');
1923   l('    SELECT COMPILATION_FLAG ');
1924   l('    FROM HZ_MATCH_RULES_VL ');
1925   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1926   l('  l_cmp_flag VARCHAR2(1);');
1927   l('  BEGIN');
1928 
1929 
1930   d(fnd_log.level_procedure,'get_matching_contact_points(+)');
1931   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1932 
1933   l('');
1934   l('    -- Initialize return status and message stack');
1935   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1936   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1937   l('      FND_MSG_PUB.initialize;');
1938   l('    END IF;');
1939   l('');
1940   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1941   l('      -- No MATCH RULE FOUND');
1942   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1943   l('      FND_MSG_PUB.ADD;');
1944   l('      RAISE FND_API.G_EXC_ERROR;');
1945   l('    END IF;');
1946 
1947   l('    OPEN c_match_rule;');
1948   l('    FETCH c_match_rule INTO l_cmp_flag;');
1949   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1950   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1951   l('      FND_MSG_PUB.ADD;');
1952   l('      RAISE FND_API.G_EXC_ERROR;');
1953   l('    END IF;');
1954 
1955   FIRST := TRUE;
1956   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1957                FROM HZ_MATCH_RULES_VL
1958                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1959                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1960                OR MATCH_RULE_ID = p_rule_id)) LOOP
1961     l('    -- Code for Match rule '||RULE.RULE_NAME);
1962     IF FIRST THEN
1963       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1964       FIRST := FALSE;
1965     ELSE
1966       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1967     END IF;
1968     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1969     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1970     l('        FND_MSG_PUB.ADD;');
1971     l('        RAISE FND_API.G_EXC_ERROR;');
1972     l('      END IF;');
1973 
1974     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_matching_contact_points(');
1975     l('        p_rule_id, p_party_id, p_contact_point_list,');
1976     l('        p_restrict_sql, p_match_type,null,x_search_ctx_id,x_num_matches);');
1977   END LOOP;
1978   l('    END IF;');
1979   d(fnd_log.level_procedure,'get_matching_contact_points(-)');
1980 
1981   gen_exception_block;
1982   l('  END;');
1983   l('');
1984   -- Generate get_party_score_details code
1985   l('PROCEDURE get_party_score_details (');
1986   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1987   l('        p_rule_id               IN      NUMBER,');
1988   l('        p_party_id              IN      NUMBER,');
1989   l('        p_search_ctx_id         IN      NUMBER,');
1990   l('      p_party_search_rec      IN      party_search_rec_type,');
1991   l('      p_party_site_list       IN      party_site_list,');
1992   l('      p_contact_list          IN      contact_list,');
1993   l('      p_contact_point_list    IN      contact_point_list,');
1994   l('        x_return_status         OUT     VARCHAR2,');
1995   l('        x_msg_count             OUT     NUMBER,');
1996   l('        x_msg_data              OUT     VARCHAR2');
1997   l(') IS');
1998   l('  l_search_ctx_id NUMBER;');
1999   l('  BEGIN');
2000 
2001 
2002   d(fnd_log.level_procedure,'get_party_score_details(+)');
2003   d(fnd_log.level_statement,'Rule ID','p_rule_id');
2004 
2005   l('     l_search_ctx_id:=p_search_ctx_id;');
2006   l('     get_score_details(p_init_msg_list,p_rule_id,p_party_id,');
2007   l('            p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,');
2008   l('            l_search_ctx_id,x_return_status,x_msg_count,x_msg_data);');
2009   d(fnd_log.level_procedure,'get_party_score_details(-)');
2010 
2011   l('  END;');
2012 
2013   l('PROCEDURE get_score_details (');
2014   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
2015   l('        p_rule_id               IN      NUMBER,');
2016   l('        p_party_id              IN      NUMBER,');
2017   l('        p_party_search_rec      IN      party_search_rec_type,');
2018   l('        p_party_site_list       IN      party_site_list,');
2019   l('        p_contact_list          IN      contact_list,');
2020   l('        p_contact_point_list    IN      contact_point_list,');
2021   l('        x_search_ctx_id         IN OUT  NUMBER,');
2022   l('        x_return_status         OUT     VARCHAR2,');
2023   l('        x_msg_count             OUT     NUMBER,');
2024   l('        x_msg_data              OUT     VARCHAR2');
2025   l(') IS');
2026   l('  CURSOR c_match_rule IS ');
2027   l('    SELECT COMPILATION_FLAG ');
2028   l('    FROM HZ_MATCH_RULES_VL ');
2029   l('    WHERE MATCH_RULE_ID = p_rule_id;');
2030   l('  l_cmp_flag VARCHAR2(1);');
2031   l('  BEGIN');
2032 
2033 
2034   d(fnd_log.level_procedure,'get_score_details(+)');
2035   d(fnd_log.level_statement,'Rule ID','p_rule_id');
2036 
2037 
2038   l('');
2039   l('    -- Initialize return status and message stack');
2040   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
2041   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
2042   l('      FND_MSG_PUB.initialize;');
2043   l('    END IF;');
2044   l('');
2045   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
2046   l('      -- No MATCH RULE FOUND');
2047   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
2048   l('      FND_MSG_PUB.ADD;');
2049   l('      RAISE FND_API.G_EXC_ERROR;');
2050   l('    END IF;');
2051 
2052   l('    OPEN c_match_rule;');
2053   l('    FETCH c_match_rule INTO l_cmp_flag;');
2054   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
2055   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
2056   l('      FND_MSG_PUB.ADD;');
2057   l('      RAISE FND_API.G_EXC_ERROR;');
2058   l('    END IF;');
2059 
2060   FIRST := TRUE;
2061   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
2062                FROM HZ_MATCH_RULES_VL
2063                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
2064                AND (nvl(COMPILATION_FLAG,'N') = 'C'
2065                OR MATCH_RULE_ID = p_rule_id)) LOOP
2066     l('    -- Code for Match rule '||RULE.RULE_NAME);
2067     IF FIRST THEN
2068       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2069       FIRST := FALSE;
2070     ELSE
2071       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2072     END IF;
2073     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
2074     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
2075     l('        FND_MSG_PUB.ADD;');
2076     l('        RAISE FND_API.G_EXC_ERROR;');
2077     l('      END IF;');
2078     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_score_details(');
2079     l('        p_rule_id,');
2080     l('        p_party_id, p_party_search_rec,p_party_site_list,');
2081     l('        p_contact_list, p_contact_point_list,x_search_ctx_id);');
2082   END LOOP;
2083   l('    END IF;');
2084   d(fnd_log.level_procedure,'get_score_details(-)');
2085 
2086   gen_exception_block;
2087   l('  END;');
2088   l('PROCEDURE get_party_for_search (');
2089   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
2090   l('        p_rule_id               IN      NUMBER,');
2091   l('        p_party_id              IN      NUMBER,');
2092   l('        x_party_search_rec      OUT NOCOPY party_search_rec_type,');
2093   l('        x_party_site_list       OUT NOCOPY party_site_list,');
2094   l('        x_contact_list          OUT NOCOPY contact_list,');
2095   l('        x_contact_point_list    OUT NOCOPY contact_point_list,');
2096   l('        x_return_status         OUT     VARCHAR2,');
2097   l('        x_msg_count             OUT     NUMBER,');
2098   l('        x_msg_data              OUT     VARCHAR2');
2099   l(') IS');
2100   l('  CURSOR c_match_rule IS ');
2101   l('    SELECT COMPILATION_FLAG ');
2102   l('    FROM HZ_MATCH_RULES_VL ');
2103   l('    WHERE MATCH_RULE_ID = p_rule_id;');
2104   l('  l_cmp_flag VARCHAR2(1);');
2105   l('  BEGIN');
2106 
2107 
2108   d(fnd_log.level_procedure,'get_party_for_search(+)');
2109   d(fnd_log.level_statement,'Rule ID','p_rule_id');
2110 
2111   l('');
2112   l('    -- Initialize return status and message stack');
2113   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
2114   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
2115   l('      FND_MSG_PUB.initialize;');
2116   l('    END IF;');
2117   l('');
2118   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
2119   l('      -- No MATCH RULE FOUND');
2120   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
2121   l('      FND_MSG_PUB.ADD;');
2122   l('      RAISE FND_API.G_EXC_ERROR;');
2123   l('    END IF;');
2124 
2125   l('    OPEN c_match_rule;');
2126   l('    FETCH c_match_rule INTO l_cmp_flag;');
2127   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
2128   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
2129   l('      FND_MSG_PUB.ADD;');
2130   l('      RAISE FND_API.G_EXC_ERROR;');
2131   l('    END IF;');
2132 
2133   FIRST := TRUE;
2134   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
2135                FROM HZ_MATCH_RULES_VL
2136                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
2137                AND (nvl(COMPILATION_FLAG,'N') = 'C'
2138                OR MATCH_RULE_ID = p_rule_id)) LOOP
2139     l('    -- Code for Match rule '||RULE.RULE_NAME);
2140     IF FIRST THEN
2141       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2142       FIRST := FALSE;
2143     ELSE
2144       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2145     END IF;
2146     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
2147     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
2148     l('        FND_MSG_PUB.ADD;');
2149     l('        RAISE FND_API.G_EXC_ERROR;');
2150     l('      END IF;');
2151     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_party_for_search(');
2152     l('        p_party_id, x_party_search_rec,x_party_site_list,');
2153     l('        x_contact_list, x_contact_point_list);');
2154   END LOOP;
2155   l('    END IF;');
2156   d(fnd_log.level_procedure,'get_party_for_search(-)');
2157 
2158   gen_exception_block;
2159   l('  END;');
2160 
2161   l('PROCEDURE get_search_criteria (');
2162   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
2163   l('        p_rule_id               IN      NUMBER,');
2164   l('        p_party_id              IN      NUMBER,');
2165   l('        p_party_site_ids        IN      IDList,');
2166   l('        p_contact_ids           IN      IDList,');
2167   l('        p_contact_pt_ids        IN      IDList,');
2168   l('        x_party_search_rec      OUT NOCOPY party_search_rec_type,');
2169   l('        x_party_site_list       OUT NOCOPY party_site_list,');
2170   l('        x_contact_list          OUT NOCOPY contact_list,');
2171   l('        x_contact_point_list    OUT NOCOPY contact_point_list,');
2172   l('        x_return_status         OUT     VARCHAR2,');
2173   l('        x_msg_count             OUT     NUMBER,');
2174   l('        x_msg_data              OUT     VARCHAR2');
2175   l(') IS');
2176   l('  CURSOR c_match_rule IS ');
2177   l('    SELECT COMPILATION_FLAG ');
2178   l('    FROM HZ_MATCH_RULES_VL ');
2179   l('    WHERE MATCH_RULE_ID = p_rule_id;');
2180   l('  l_cmp_flag VARCHAR2(1);');
2181   l('  BEGIN');
2182 
2183   d(fnd_log.level_procedure,'get_search_criteria(+)');
2184   d(fnd_log.level_statement,'Rule ID','p_rule_id');
2185 
2186   l('');
2187   l('    -- Initialize return status and message stack');
2188   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
2189   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
2190   l('      FND_MSG_PUB.initialize;');
2191   l('    END IF;');
2192   l('');
2193   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
2194   l('      -- No MATCH RULE FOUND');
2195   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
2196   l('      FND_MSG_PUB.ADD;');
2197   l('      RAISE FND_API.G_EXC_ERROR;');
2198   l('    END IF;');
2199 
2200   l('    OPEN c_match_rule;');
2201   l('    FETCH c_match_rule INTO l_cmp_flag;');
2202   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
2203   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
2204   l('      FND_MSG_PUB.ADD;');
2205   l('      RAISE FND_API.G_EXC_ERROR;');
2206   l('    END IF;');
2207 
2208   FIRST := TRUE;
2209   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
2210                FROM HZ_MATCH_RULES_VL
2211                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
2212                AND (nvl(COMPILATION_FLAG,'N') = 'C'
2213                OR MATCH_RULE_ID = p_rule_id)) LOOP
2214     l('    -- Code for Match rule '||RULE.RULE_NAME);
2215     IF FIRST THEN
2216       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2217       FIRST := FALSE;
2218     ELSE
2219       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2220     END IF;
2221     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
2222     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
2223     l('        FND_MSG_PUB.ADD;');
2224     l('        RAISE FND_API.G_EXC_ERROR;');
2225     l('      END IF;');
2226     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_search_criteria(');
2227     l('        p_party_id, p_party_site_ids, p_contact_ids, p_contact_pt_ids, x_party_search_rec,x_party_site_list,');
2228     l('        x_contact_list, x_contact_point_list);');
2229   END LOOP;
2230   l('    END IF;');
2231   d(fnd_log.level_procedure,'get_search_criteria(-)');
2232 
2233   gen_exception_block;
2234   l('  END;');
2235 
2236   /*l('  PROCEDURE enable_debug IS');
2237 
2238   l('  BEGIN');
2239   l('    g_debug_count := g_debug_count + 1;');
2240 
2241   l('    IF g_debug_count = 1 THEN');
2242   l('      IF fnd_profile.value(''HZ_API_FILE_DEBUG_ON'') = ''Y'' OR');
2243   l('         fnd_profile.value(''HZ_API_DBMS_DEBUG_ON'') = ''Y''');
2244   l('      THEN');
2245   l('        hz_utility_v2pub.enable_debug;');
2246   l('        g_debug := TRUE;');
2247   l('      END IF;');
2248   l('    END IF;');
2249   d('PKG: HZ_PARTY_SEARCH (+)');
2250   l('  END enable_debug;');
2251 
2252   l('  PROCEDURE disable_debug IS');
2253 
2254   l('  BEGIN');
2255 
2256   l('    IF g_debug THEN');
2257   d('PKG: HZ_PARTY_SEARCH (-)');
2258   l('      g_debug_count := g_debug_count - 1;');
2259 
2260   l('      IF g_debug_count = 0 THEN');
2261   l('        hz_utility_v2pub.disable_debug;');
2262   l('        g_debug := FALSE;');
2263   l('      END IF;');
2264   l('    END IF;');
2265 
2266   l('  END disable_debug;');
2267   */
2268 
2269   l('END;');
2270   -- UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'C' WHERE  COMPILATION_FLAG = 'T';
2271 
2272 END;
2273 
2274 /** Procedure to create score function for party sites, contacts and contact points ***/
2275 PROCEDURE add_score_function(p_entity VARCHAR2, p_rule_id NUMBER) IS
2276 FIRST boolean := TRUE;
2277 l_list VARCHAR2(255);
2278 
2279 BEGIN
2280   l('  FUNCTION GET_'||p_entity||'_SCORE (');
2281   l('       x_matchidx OUT NUMBER');
2282   FIRST := TRUE;
2283   FOR TX IN (
2284       SELECT f.staged_attribute_column
2285       FROM hz_trans_functions_vl f, hz_secondary_trans st,
2286            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
2287       WHERE sa.match_rule_id = p_rule_id
2288       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
2289       AND st.function_id = f.function_id
2290       AND a.attribute_id = sa.attribute_id
2291       AND a.entity_name= p_entity
2292       ORDER BY sa.attribute_id) LOOP
2293      l('      ,p_table_'||TX.STAGED_ATTRIBUTE_COLUMN||' VARCHAR2');
2294   END LOOP;
2295   l('  ) RETURN NUMBER IS');
2296   l('    maxscore NUMBER := 0;');
2297   l('    l_current_score NUMBER := 0;');
2298   l('  BEGIN');
2299   l('    x_matchidx := 0;');
2300   IF p_entity='PARTY_SITES' THEN
2301     l_list := 'g_party_site_stage_list';
2302   ELSIF p_entity='CONTACTS' THEN
2303     l_list := 'g_contact_stage_list';
2304   ELSIF p_entity='CONTACT_POINTS' THEN
2305     l_list := 'g_contact_pt_stage_list';
2306   END IF;
2307   l('    IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN');
2308   l('       RETURN l_current_score;');
2309   l('    END IF;');
2310 
2311   l('    FOR J IN 1..'||l_list||'.COUNT LOOP');
2312   l('      l_current_score := 0;');
2313   FOR SECATTRS IN (
2314         SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id
2315         FROM HZ_TRANS_ATTRIBUTES_VL a,
2316              HZ_MATCH_RULE_SECONDARY s
2317         WHERE s.match_rule_id = p_rule_id
2318         AND s.attribute_id = a.attribute_id
2319         AND a.entity_name = p_entity ) LOOP
2320       FIRST := TRUE;
2321       FOR SECTRANS IN (
2322           SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
2323                  TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
2324           FROM HZ_SECONDARY_TRANS s,
2325                HZ_TRANS_FUNCTIONS_VL f
2326           WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
2327           AND s.FUNCTION_ID = f.FUNCTION_ID
2328           ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
2329         IF FIRST THEN
2330            FIRST := FALSE;
2331            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
2332              l('      IF HZ_DQM_SEARCH_UTIL.is_similar_match('||l_list||'(J).'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2333                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||',(50000*(J-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2334            ELSE
2335              l('      IF HZ_DQM_SEARCH_UTIL.is_match('||l_list||'(J).'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2336                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',(50000*(J-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2337            END IF;
2338            l('        l_current_score:=l_current_score+ '||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
2339         ELSE
2340            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
2341              l('      ELSIF l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) || ' AND ');
2342              l('          HZ_DQM_SEARCH_UTIL.is_similar_match('||l_list||'(J).'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2343                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||',(50000*(J-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2344            ELSE
2345              l('      ELSIF -- l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) || ' AND ');
2346              l('          HZ_DQM_SEARCH_UTIL.is_match('||l_list||'(J).'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2347                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',(50000*(J-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2348            END IF;
2349            l('        l_current_score:=l_current_score+ '||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
2350         END IF;
2351         l('        IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN');
2352         l('          x_matchidx:=J;');
2353         l('          RETURN l_current_score;');
2354         l('        END IF;');
2355       END LOOP;
2356       l('      END IF;');
2357   END LOOP;
2358   l('      IF maxscore<l_current_score THEN');
2359   l('        maxscore:=l_current_score;');
2360   l('        x_matchidx:=J;');
2361   l('      END IF;');
2362   l('    END LOOP;');
2363   l('    RETURN maxscore;');
2364   l('  END;');
2365 END;
2366 
2367 /** Procedure to create score function for party sites, contacts and contact points ***/
2368 PROCEDURE add_insert_function(p_entity VARCHAR2, p_rule_id NUMBER) IS
2369 FIRST boolean := TRUE;
2370 l_list VARCHAR2(255);
2371 
2372 BEGIN
2373   l('  PROCEDURE INSERT_'||p_entity||'_SCORE (');
2374   l('       p_party_id IN  NUMBER');
2375   l('       ,p_record_id IN  NUMBER');
2376   l('       ,p_search_ctx_id IN  NUMBER');
2377   IF p_entity='PARTY' THEN
2378     l('       ,p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type');
2379     l('       ,p_stage_rec IN HZ_PARTY_STAGE.party_stage_rec_type');
2380   ELSIF p_entity='PARTY_SITES' THEN
2381     l('       ,p_search_rec IN HZ_PARTY_SEARCH.party_site_search_rec_type');
2382     l('       ,p_stage_rec IN HZ_PARTY_STAGE.party_site_stage_rec_type');
2383   ELSIF p_entity='CONTACTS' THEN
2384     l('       ,p_search_rec IN HZ_PARTY_SEARCH.contact_search_rec_type');
2385     l('       ,p_stage_rec IN HZ_PARTY_STAGE.contact_stage_rec_type');
2386   ELSIF p_entity='CONTACT_POINTS' THEN
2387     l('       ,p_search_rec IN HZ_PARTY_SEARCH.contact_point_search_rec_type');
2388     l('       ,p_stage_rec IN HZ_PARTY_STAGE.contact_pt_stage_rec_type');
2389   END IF;
2390   FIRST := TRUE;
2391   FOR TX IN (
2392       SELECT f.staged_attribute_column
2393       FROM hz_trans_functions_vl f, hz_secondary_trans st,
2394            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
2395       WHERE sa.match_rule_id = p_rule_id
2396       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
2397       AND st.function_id = f.function_id
2398       AND a.attribute_id = sa.attribute_id
2399       AND a.entity_name= p_entity
2400       ORDER BY sa.attribute_id) LOOP
2401      l('      ,p_table_'||TX.STAGED_ATTRIBUTE_COLUMN||' VARCHAR2');
2402   END LOOP;
2403   l('        ,p_idx IN NUMBER) IS');
2404   l('    l_current_score NUMBER:=0;');
2405   l('    l_score NUMBER;');
2406   l('    l_attrib_value VARCHAR2(2000);');
2407   l('  BEGIN');
2408   ldbg_s('Inside Calling Procedure - INSERT_'||p_entity||'_SCORE');
2409 
2410   FOR SECATTRS IN (
2411         SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id,
2412                USER_DEFINED_ATTRIBUTE_NAME
2413         FROM HZ_TRANS_ATTRIBUTES_VL a,
2414              HZ_MATCH_RULE_SECONDARY s
2415         WHERE s.match_rule_id = p_rule_id
2416         AND s.attribute_id = a.attribute_id
2417         AND a.entity_name = p_entity ) LOOP
2418       FIRST := TRUE;
2419       l('     l_score :=0;');
2420       FOR SECTRANS IN (
2421           SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
2422                  TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
2423           FROM HZ_SECONDARY_TRANS s,
2424                HZ_TRANS_FUNCTIONS_VL f
2425           WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
2426           AND s.FUNCTION_ID = f.FUNCTION_ID
2427           ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
2428         IF FIRST THEN
2429            FIRST := FALSE;
2430            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
2431              l('      IF HZ_DQM_SEARCH_UTIL.is_similar_match(p_stage_rec.'||
2432                SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2433                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2434            ELSE
2435 	       IF(l_purpose='S' and SECATTRS.attribute_id=16) --6334571
2436 		THEN
2437              l('      IF HZ_DQM_SEARCH_UTIL.is_match(case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2438 			' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
2439 			' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then  p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2440 			' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2441 
2442 	       ELSE
2443 	        l('      IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2444                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2445 	       END IF;
2446            END IF;
2447            l('      l_score :='||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
2448            ldbg_sv('l_score is - ','l_score'  ) ;
2449         ELSE
2450            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
2451              l('      ELSIF l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) ||
2452                ' AND ');
2453              l('          HZ_DQM_SEARCH_UTIL.is_similar_match(p_stage_rec.'||
2454                SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2455                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2456            ELSE
2457 	      IF(l_purpose='S' and SECATTRS.attribute_id=16) --6334571
2458 		THEN
2459 		 l('      ELSIF l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) || ' AND ');
2460                  l('          HZ_DQM_SEARCH_UTIL.is_match(case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2461 			' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
2462 			' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then  p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2463 			' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2464 		ELSE
2465              l('      ELSIF l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) || ' AND ');
2466              l('          HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2467                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2468 	       END IF;
2469            END IF;
2470            l('      l_score :='||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
2471            ldbg_sv('l_score is - ','l_score'  ) ;
2472         END IF;
2473       END LOOP;
2474       l('      END IF;');
2475       l('      IF l_score>0 THEN');
2476   ldbg_s('l_score > 0');
2477         l('      l_attrib_value := get_attrib_val(p_record_id,'''||SECATTRS.ENTITY_NAME||''','''||SECATTRS.ATTRIBUTE_NAME||''');');
2478   ldbg_s('Inserting into HZ_PARTY_SCORE_DTLS_GT ...');
2479         l('      INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,');
2480         l('                ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)');
2481         l('      VALUES (');
2482         l('           p_party_id,p_record_id,p_search_ctx_id,'''||
2483 	              SECATTRS.ATTRIBUTE_NAME||''','); --Bug No: 3820598
2484                       --replace(SECATTRS.USER_DEFINED_ATTRIBUTE_NAME,'''','''''')||''','); --Bug No: 3820598
2485         l('           '''||SECATTRS.ENTITY_NAME||''', p_search_rec.'||SECATTRS.ATTRIBUTE_NAME||',');
2486         l('           l_attrib_value,l_score);');
2487         ldbg_s('Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done');
2488       l('      END IF;');
2489   END LOOP;
2490   l('    NULL;');
2491   l('  END;');
2492 END;
2493 
2494 PROCEDURE add_get_attrib_func(p_rule_id NUMBER) IS
2495   Type charTab IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
2496   entList charTab;
2497   entity VARCHAR2(255);
2498 
2499 BEGIN
2500 
2501   l('  FUNCTION get_attrib_val(');
2502   l('      p_record_id 	NUMBER');
2503   l('     ,p_entity 	VARCHAR2');
2504   l('     ,p_attribute 	VARCHAR2');
2505   l('  ) RETURN VARCHAR2 IS');
2506   l('  l_matched_value VARCHAR2(2000);');
2507   l('  l_party_type VARCHAR2(255);');
2508   l('  BEGIN');
2509 
2510   entList(1) := 'PARTY';
2511   entList(2) := 'PARTY_SITES';
2512   entList(3) := 'CONTACTS';
2513   entList(4) := 'CONTACT_POINTS';
2514   FOR I IN 1..4 LOOP
2515     entity := entList(I);
2516     l('  IF p_entity = '''||entity||''' THEN');
2517     FOR SECATTRS IN (
2518         SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id,
2519                USER_DEFINED_ATTRIBUTE_NAME, SOURCE_TABLE, CUSTOM_ATTRIBUTE_PROCEDURE
2520         FROM HZ_TRANS_ATTRIBUTES_VL a,
2521              HZ_MATCH_RULE_SECONDARY s
2522         WHERE s.match_rule_id = p_rule_id
2523         AND s.attribute_id = a.attribute_id
2524         AND a.entity_name = entity) LOOP
2525       l('  IF p_attribute = '''||SECATTRS.ATTRIBUTE_NAME||''' THEN');
2526       IF entity = 'PARTY' THEN
2527         l('');
2528         IF SECATTRS.SOURCE_TABLE <> 'CUSTOM' AND SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
2529           l('      SELECT party_type INTO l_party_type ');
2530           l('      FROM HZ_PARTIES');
2531           l('      WHERE party_id = p_record_id;');
2532           l('      IF l_party_type = ''ORGANIZATION'' THEN');
2533           l('        SELECT '||SECATTRS.ATTRIBUTE_NAME ||
2534           ' INTO l_matched_value ');
2535           IF SECATTRS.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' or
2536              SECATTRS.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' or
2537              SECATTRS.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' THEN
2538             l('        FROM HZ_ORGANIZATION_PROFILES');
2539             l('        WHERE party_id = p_record_id ');
2540             l('        and effective_end_date is null');
2541           ELSE
2542             l('        FROM '||SECATTRS.SOURCE_TABLE);
2543             l('        WHERE party_id = p_record_id ');
2544           END IF;
2545           l('        and rownum = 1;');
2546 
2547           l('      ELSIF l_party_type = ''PERSON'' THEN');
2548           l('        SELECT '||SECATTRS.ATTRIBUTE_NAME ||
2549           ' INTO l_matched_value ');
2550           IF SECATTRS.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' or
2551              SECATTRS.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' or
2552              SECATTRS.SOURCE_TABLE = 'HZ_PERSON_PROFILES' THEN
2553             l('        FROM HZ_PERSON_PROFILES');
2554             l('        WHERE party_id = p_record_id ');
2555             l('        and effective_end_date is null ');
2556           ELSE
2557             l('        FROM '||SECATTRS.SOURCE_TABLE);
2558             l('        WHERE party_id = p_record_id ');
2559           END IF;
2560           l('        and rownum = 1;');
2561           l('      END IF;');
2562         ELSE
2563           l('     l_matched_value := '||SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE ||
2564             ' (p_record_id, p_entity,'''||SECATTRS.ATTRIBUTE_NAME||''',''Y'');');
2565         END IF;
2566         l('      RETURN l_matched_value;');
2567      ELSIF entity = 'PARTY_SITES' THEN
2568        IF SECATTRS.SOURCE_TABLE <> 'CUSTOM' AND SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
2569           l('     BEGIN');
2570           l('       SELECT '|| SECATTRS.SOURCE_TABLE||'.'||
2571                     SECATTRS.ATTRIBUTE_NAME);
2572           l('       INTO l_matched_value ');
2573           l('       FROM HZ_PARTY_SITES, HZ_LOCATIONS');
2574           l('       WHERE HZ_PARTY_SITES.party_site_id = p_record_id');
2575           l('       AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id and rownum=1;');
2576           l('     EXCEPTION');
2577           l('       WHEN NO_DATA_FOUND THEN');
2578           l('         l_matched_value := ''Err'';');
2579           l('     END;');
2580        ELSE
2581           l('     l_matched_value := '||SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE ||
2582             ' (p_record_id, p_entity,'''||SECATTRS.ATTRIBUTE_NAME||''',''Y'');');
2583        END IF;
2584        l('      RETURN l_matched_value;');
2585      ELSIF entity = 'CONTACTS' THEN
2586        IF SECATTRS.SOURCE_TABLE <> 'CUSTOM' AND SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
2587           l('     BEGIN');
2588           l('       SELECT '|| SECATTRS.SOURCE_TABLE||'.'||
2589                   SECATTRS.ATTRIBUTE_NAME);
2590           l('       INTO l_matched_value ');
2591           l('       FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES');
2592           l('       WHERE HZ_ORG_CONTACTS.org_contact_id = p_record_id');
2593           l('       AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
2594           l('       AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
2595           l('       AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = ''F''');
2596           l('       AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
2597           l('       AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id');
2598           l('       AND HZ_PERSON_PROFILES.effective_end_date IS NULL and rownum=1;');
2599           l('     EXCEPTION');
2600           l('       WHEN NO_DATA_FOUND THEN');
2601           l('         l_matched_value := ''Err'';');
2602           l('     END;');
2603        ELSE
2604           l('     l_matched_value := '||SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE ||
2605             ' (p_record_id, p_entity,'''||SECATTRS.ATTRIBUTE_NAME||''',''Y'');');
2606        END IF;
2607        l('      RETURN l_matched_value;');
2608      ELSIF entity = 'CONTACT_POINTS' THEN
2609        IF SECATTRS.SOURCE_TABLE <> 'CUSTOM' AND SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
2610           l('     BEGIN');
2611           l('       SELECT ' || SECATTRS.ATTRIBUTE_NAME || ' INTO l_matched_value ');
2612           l('       FROM HZ_CONTACT_POINTS ');
2613           l('       WHERE contact_point_id = p_record_id and rownum=1;');
2614           l('     EXCEPTION');
2615           l('       WHEN NO_DATA_FOUND THEN');
2616           l('         l_matched_value := ''Err'';');
2617           l('     END;');
2618        ELSE
2619           l('     l_matched_value := '||SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE ||
2620             ' (p_record_id, p_entity,'''||SECATTRS.ATTRIBUTE_NAME||''',''Y'');');
2621        END IF;
2622        l('      RETURN l_matched_value;');
2623      END IF;
2624      l('    END IF;');
2625    END LOOP;
2626    l('    NULL;');
2627    l('  END IF;');
2628  END LOOP;
2629  l('END;');
2630 END;
2631 
2632 
2633 PROCEDURE add_query_gen_func (p_entity VARCHAR2, p_rule_id NUMBER) IS
2634 
2635   l_num_primary NUMBER;
2636   l_list VARCHAR2(255);
2637   l_trans VARCHAR2(4000);
2638   l_query VARCHAR2(4000);
2639   FIRST BOOLEAN := TRUE;
2640   FIRST1 BOOLEAN := TRUE;
2641   l_den_section VARCHAR2(30) := null;
2642   tmp VARCHAR2(30);
2643 
2644 BEGIN
2645   l('  FUNCTION INIT_'||p_entity||'_QUERY(p_match_str VARCHAR2, x_denorm_str OUT VARCHAR2) RETURN VARCHAR2 IS');
2646   l('    l_contains_str VARCHAR2(32000); ');
2647   l('    l_contains_str_temp VARCHAR2(32000); ');
2648   l('    l_den_contains_str VARCHAR2(32000); ');
2649   l('    l_den_contains_str_temp VARCHAR2(32000); ');
2650   l('    l_filter_str VARCHAR2(4000) := null;');
2651   l('    l_prim_temp VARCHAR2(4000) := null;');
2652   l('    l_prim_temp_den VARCHAR2(4000) := null;');
2653   if l_purpose='S' and p_entity='CONTACT_POINTS' then
2654     l('    TYPE CONTACT_PT_REC_TYPE IS RECORD (');
2655     l('    contact_pt_type		VARCHAR2(100)) ;');
2656 
2657     l('    TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;');
2658     l('    l_cnt_pt_type contact_pt_list;');
2659 
2660     l('    N NUMBER:=1;');
2661     l('    x_modify VARCHAR2(1);');
2662   end if;
2663   l('  BEGIN');
2664   d(fnd_log.level_procedure,'INIT_'||p_entity||'_QUERY ');
2665   l('    x_denorm_str := NULL;');
2666 
2667   -- Setup of contains str
2668   l_num_primary := 0;
2669   SELECT count(1) INTO l_num_primary
2670   FROM HZ_MATCH_RULE_PRIMARY p,
2671        HZ_TRANS_ATTRIBUTES_VL a
2672   WHERE p.match_rule_id = p_rule_id
2673   AND   p.ATTRIBUTE_ID = a.ATTRIBUTE_ID
2674   AND   ENTITY_NAME = p_entity;
2675 
2676   IF p_entity='PARTY_SITES' THEN
2677     l_list := 'g_party_site_stage_list';
2678     l_den_section := 'D_PS';
2679   ELSIF p_entity='CONTACTS' THEN
2680     l_list := 'g_contact_stage_list';
2681     l_den_section := 'D_CT';
2682   ELSIF p_entity='CONTACT_POINTS' THEN
2683     l_list := 'g_contact_pt_stage_list';
2684     l_den_section := 'D_CPT';
2685   END IF;
2686 
2687   l_query := null;
2688   IF l_num_primary >0 THEN
2689     l('');
2690     l('    -- Dynamic setup of party site contains str');
2691     l('    --');
2692     l('    -- For each primary transformation add to intermedia query if it ');
2693     l('    -- is not null');
2694     l('    FOR I IN 1..'||l_list||'.COUNT LOOP');
2695     l('      l_contains_str_temp := null;');
2696     l('      l_den_contains_str_temp := null;');
2697     l('      l_filter_str := null;');
2698     IF p_entity = 'CONTACT_POINTS' THEN
2699       l('      l_filter_str := ''(''||'||l_list||'(I).CONTACT_POINT_TYPE||'') '';');
2700     END IF;
2701 
2702     if l_purpose='S' and p_entity='CONTACT_POINTS' then
2703         l('      if(l_cnt_pt_type.count>0) then');
2704         l('      x_modify := ''Y'';');
2705        l('      FOR J IN 1..l_cnt_pt_type.COUNT LOOP');
2706         l('      IF (l_cnt_pt_type(J).contact_pt_type=g_contact_pt_stage_list(I).CONTACT_POINT_TYPE) THEN');
2707          l('      x_modify := ''N'';');
2708         l('      END IF;');
2709        l('      END LOOP;');
2710        l('      if x_modify = ''Y'' then');
2711         l('      l_cnt_pt_type(N).contact_pt_type := g_contact_pt_stage_list(I).CONTACT_POINT_TYPE;');
2712         l('      N := N+1;');
2713        l('      end if;');
2714       l('      else');
2715         l('      l_cnt_pt_type(N).contact_pt_type := g_contact_pt_stage_list(I).CONTACT_POINT_TYPE;');
2716         l('      N := N+1;');
2717       l('      end if;');
2718     end if;
2719 
2720     FIRST := TRUE;
2721     FOR PRIMATTRS IN (
2722       SELECT a.ATTRIBUTE_ID, PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME,nvl(FILTER_FLAG,'N') FILTER_FLAG,
2723              nvl(DENORM_FLAG,'N') DENORM_FLAG
2724       FROM HZ_TRANS_ATTRIBUTES_VL a,
2725            HZ_MATCH_RULE_PRIMARY p
2726       WHERE p.match_rule_id = p_rule_id
2727       AND p.attribute_id = a.attribute_id
2728       AND a.ENTITY_NAME = p_entity) LOOP
2729       l('');
2730       l('      -- Setup query string for '||PRIMATTRS.ATTRIBUTE_NAME);
2731       l('      l_prim_temp := null;');
2732       l('      l_prim_temp_den := null;');
2733       FIRST1 := TRUE;
2734       FOR PRIMTRANS IN (
2735         SELECT f.STAGED_ATTRIBUTE_COLUMN, f.TRANSFORMATION_NAME, nvl(f.PRIMARY_FLAG,'N') PRIMARY_FLAG
2736         FROM HZ_TRANS_FUNCTIONS_VL f,
2737            HZ_PRIMARY_TRANS pt
2738       WHERE pt.PRIMARY_ATTRIBUTE_ID = PRIMATTRS.PRIMARY_ATTRIBUTE_ID
2739       AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
2740         IF PRIMATTRS.FILTER_FLAG <> 'Y' THEN
2741 
2742           IF PRIMTRANS.PRIMARY_FLAG = 'Y' THEN
2743             tmp := '''A'||PRIMATTRS.ATTRIBUTE_ID||'''';
2744           ELSE
2745             tmp := 'NULL';
2746           END IF;
2747 
2748           l('      HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
2749           l('            '||l_list||'(I).'||
2750             PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
2751             ','||tmp||',l_prim_temp);');
2752           IF PRIMATTRS.DENORM_FLAG = 'Y' THEN
2753             l('      HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
2754             l('            '||l_list||'(I).'||
2755               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
2756               ','''||l_den_section||''',l_prim_temp_den);');
2757           END IF;
2758         ELSE
2759           l('      HZ_DQM_SEARCH_UTIL.add_filter( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
2760           l('             '||l_list||'(I).'||
2761             PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
2762             ',''A'||PRIMATTRS.ATTRIBUTE_ID||''',l_filter_str);');
2763         END IF;
2764         IF FIRST1 THEN
2765           l_trans := '('||l_list||'(1).'||
2766                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' '' || '||
2767                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||'||l_list||'(1).'||
2768                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
2769           FIRST1 := FALSE;
2770         ELSE
2771           l_trans := l_trans|| ' OR ('|| l_list||'(1).'||
2772                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' '' ||'||
2773                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||'||l_list||'(1).'||
2774                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
2775         END IF;
2776       END LOOP;
2777 /*
2778       IF FIRST THEN
2779         l_query := '('||l_trans||')';
2780         FIRST := FALSE;
2781       ELSE
2782         l_query := l_query || ' AND (' || l_trans||')';
2783       END IF;
2784 */
2785       IF PRIMATTRS.FILTER_FLAG <> 'Y' THEN
2786         IF PRIMATTRS.DENORM_FLAG = 'Y' THEN
2787           l('      HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp_den, '' AND '', l_den_contains_str_temp);');
2788         END IF;
2789         l('      HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, '' AND '', l_contains_str_temp);');
2790       END IF;
2791     END LOOP;
2792 
2793     IF p_entity='PARTY_SITES' THEN
2794       g_party_site_query := l_query;
2795     ELSIF p_entity='CONTACTS' THEN
2796       g_contact_query := l_query;
2797     ELSIF p_entity='CONTACT_POINTS' THEN
2798       g_cpt_query := l_query;
2799     END IF;
2800     l('');
2801     l('      HZ_DQM_SEARCH_UTIL.add_search_record(l_contains_str_temp, '||
2802       ' 	 l_filter_str, l_contains_str);');
2803     l('      HZ_DQM_SEARCH_UTIL.add_search_record(l_den_contains_str_temp, '||
2804       ' 	 null, l_den_contains_str);');
2805     if l_purpose='S' and p_entity='CONTACT_POINTS' then
2806      	l('IF N>1 THEN ');
2807      	l(' distinct_search_cpt_types := N-1;');
2808      	l('ELSE');
2809         l(' distinct_search_cpt_types := N;');
2810 		l('END IF;');
2811       ldbg_sv('distinct_search_cpt_types is - ','distinct_search_cpt_types'  ) ;
2812     end if;
2813 
2814     l('    END LOOP;');
2815     l('    -- Add the search criteria to query string');
2816     l('    IF lengthb(l_contains_str) > 4000 THEN');
2817     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_SEARCH_CRIT_LARGE_ERROR'');');
2818     l('        FND_MESSAGE.SET_TOKEN(''ENTITY'','''||p_entity||''');');
2819     l('        FND_MSG_PUB.ADD;');
2820     l('        RAISE FND_API.G_EXC_ERROR;');
2821     l('    END IF;');
2822     l('    x_denorm_str := l_den_contains_str;');
2823     l('    RETURN l_contains_str;');
2824     l('  END;');
2825     l('');
2826   ELSE
2827     l('    RETURN NULL;');
2828     l('  END;');
2829     l('');
2830   END IF;
2831 END;
2832 
2833 PROCEDURE get_column_list (
2834 	p_rule_id	IN	NUMBER,
2835  	p_entity	IN	VARCHAR2,
2836 	x_select_list	OUT NOCOPY	VARCHAR2,
2837 	x_param_list	OUT NOCOPY	VARCHAR2,
2838 	x_into_list	OUT NOCOPY	VARCHAR2) IS
2839 
2840 FIRST BOOLEAN;
2841 BEGIN
2842   x_select_list := '';
2843   x_into_list := '';
2844   x_param_list := '';
2845 
2846   FIRST := TRUE;
2847   FOR TX IN (
2848       SELECT f.staged_attribute_column, a.attribute_name, f.procedure_name
2849       FROM hz_trans_functions_vl f, hz_secondary_trans st,
2850            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
2851       WHERE sa.match_rule_id = p_rule_id
2852       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
2853       AND st.function_id = f.function_id
2854       AND a.attribute_id = sa.attribute_id
2855       AND a.entity_name= p_entity
2856       ORDER BY sa.attribute_id) LOOP
2857      --- Modified for Bug 4016594
2858      IF TX.ATTRIBUTE_NAME = 'DUNS_NUMBER_C' AND upper(TX.PROCEDURE_NAME) = 'HZ_TRANS_PKG.EXACT' THEN
2859        x_select_list := x_select_list || ', lpad(rtrim('||TX.STAGED_ATTRIBUTE_COLUMN||'),9,chr('||ascii('0')||'))';
2860      ELSE
2861        x_select_list := x_select_list || ', '||TX.STAGED_ATTRIBUTE_COLUMN;
2862      END IF;
2863 
2864      x_into_list := x_into_list || ', '||'l_'||TX.STAGED_ATTRIBUTE_COLUMN;
2865      IF FIRST AND p_entity = 'PARTY' THEN
2866        x_param_list := 'l_'||TX.STAGED_ATTRIBUTE_COLUMN;
2867        FIRST := FALSE;
2868      ELSE
2869        x_param_list := x_param_list||',l_'||TX.STAGED_ATTRIBUTE_COLUMN;
2870      END IF;
2871   END LOOP;
2872   RETURN;
2873 END;
2874 
2875 /**
2876 * Private procedure to generate the body of the Public Match Rule API
2877 * for a match rule. Package Name is:
2878 *    HZ_MATCH_RULE_<p_rule_id>
2879 *
2880 * This procedure generates the code required to execute searches
2881 *
2882 **/
2883 PROCEDURE gen_pkg_body (
2884         p_pkg_name      IN      VARCHAR2,
2885         p_rule_id	IN	NUMBER
2886 ) IS
2887 
2888   -- Local Variables
2889   FIRST boolean;
2890   FIRST1 boolean;
2891   UPSTMT boolean;
2892   l_match_str VARCHAR2(255);
2893   l_attrib_cnt NUMBER;
2894   l_party_filter VARCHAR2(1) := null;
2895   l_ps_filter VARCHAR2(1) := null;
2896   l_contact_filter VARCHAR2(1) := null;
2897   l_cpt_filter VARCHAR2(1) := null;
2898   l_num_primary NUMBER;
2899   l_num_secondary NUMBER;
2900   l_ent VARCHAR2(30);
2901   l_max_score NUMBER;
2902   l_match_threshold NUMBER;
2903 
2904   TYPE NumberList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
2905   TYPE CharList IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
2906   attribList NumberList;
2907 
2908   l_party_filter_str VARCHAR2(2000);
2909   l_dyn_party_filter_str VARCHAR2(2000);
2910   l_p_select_list VARCHAR2(1000);
2911   l_p_param_list VARCHAR2(1000);
2912   l_p_into_list VARCHAR2(1000);
2913   l_ps_select_list VARCHAR2(1000);
2914   l_ps_param_list VARCHAR2(1000);
2915   l_ps_into_list VARCHAR2(1000);
2916   l_c_select_list VARCHAR2(1000);
2917   l_c_param_list VARCHAR2(1000);
2918   l_c_into_list VARCHAR2(1000);
2919   l_cpt_select_list VARCHAR2(1000);
2920   l_cpt_param_list VARCHAR2(1000);
2921   l_cpt_into_list VARCHAR2(1000);
2922   cnt NUMBER;
2923   l_party_filt_bind CharList;
2924   party_binds CharList;
2925   l_cpt_type VARCHAR2(255);
2926   l_trans VARCHAR2(4000);
2927   l_auto_merge_score NUMBER;
2928   tmp VARCHAR2(30);
2929   l_party_name_score VARCHAR2(255);
2930   l_party_level_cnt NUMBER;
2931   l_rule_type VARCHAR2(30); ---Code Change for Match Rule Set
2932 
2933   l_entity_score_lh VARCHAR2(4000); --Bug No: 4162385
2934   l_entity_score_rh VARCHAR2(4000); --Bug No: 4162385
2935 
2936 BEGIN
2937 
2938   -- Query match thresholds and search type
2939   SELECT RULE_PURPOSE, MATCH_SCORE, nvl(AUTO_MERGE_SCORE,99999), decode(MATCH_ALL_FLAG,'Y',' AND ',' OR '),
2940   NVL(match_rule_type,'SINGLE') ---Code Change for Match Rule Set
2941   INTO l_purpose, l_match_threshold, l_auto_merge_score, l_match_str,l_rule_type---Code Change for Match Rule Set
2942   FROM HZ_MATCH_RULES_VL
2943   WHERE match_rule_id = p_rule_id;
2944 
2945   SELECT nvl(SUM(SCORE),1) INTO l_max_score
2946   FROM HZ_MATCH_RULE_SECONDARY
2947   WHERE match_rule_id = p_rule_id;
2948 
2949   --bug 5878732
2950   IF  l_purpose='S' AND Nvl(l_match_threshold,0)<>0 THEN
2951   l_match_threshold:= ROUND((l_match_threshold/100) *  l_max_score);
2952   END IF;
2953 
2954   l('CREATE or REPLACE PACKAGE BODY ' || p_pkg_name || ' AS');
2955   l('/*=======================================================================+');
2956   l(' |  Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|');
2957   l(' |                          All rights reserved.                         |');
2958   l(' +=======================================================================+');
2959   l(' | NAME');
2960   l(' |      ' || p_pkg_name);
2961   l(' |');
2962   l(' | DESCRIPTION');
2963   l(' |');
2964   l(' | Compiled by the HZ Match Rule Compiler');
2965   l(' | -- Do Not Modify --');
2966   l(' |');
2967   l(' | PUBLIC PROCEDURES');
2968   l(' |    find_parties');
2969   l(' |    get_matching_party_sites');
2970   l(' |    get_matching_contacts');
2971   l(' |    get_matching_contact_points');
2972   l(' |    get_score_details');
2973   l(' |    ');
2974   l(' | HISTORY');
2975   l(' |      '||TO_CHAR(SYSDATE,'DD-MON-YYYY') || ' Generated by HZ Match Rule Compiler');
2976   l(' |');
2977   l(' *=======================================================================*/');
2978 
2979   IF l_purpose = 'S'
2980   THEN
2981       l('');
2982       l('-- ==========================================================================================');
2983       l('-- ============MATCH RULE COMPILER GENERATED CODE FOR SEARCH MATCH RULES ====================');
2984       l('-- ==========================================================================================');
2985       l('');
2986   ELSIF l_purpose = 'D'
2987   THEN
2988       l('');
2989       l('-- ==========================================================================================');
2990       l('-- ============MATCH RULE COMPILER GENERATED CODE FOR DUP IDENTIFICATION MATCH RULES ========');
2991       l('-- ==========================================================================================');
2992       l('');
2993   END IF;
2994 
2995   l('  TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;');
2996   l('  call_order vlisttype;');
2997   l('  call_max_score HZ_PARTY_SEARCH.IDList;');
2998   l('  call_type vlisttype;');
2999   l('  g_party_stage_rec  HZ_PARTY_STAGE.party_stage_rec_type;');
3000   l('  g_party_site_stage_list  HZ_PARTY_STAGE.party_site_stage_list;');
3001   l('  g_contact_stage_list  HZ_PARTY_STAGE.contact_stage_list;');
3002   l('  g_contact_pt_stage_list  HZ_PARTY_STAGE.contact_pt_stage_list;');
3003   l('  g_mappings  HZ_PARTY_SEARCH.IDList;');
3004   l('  g_max_id NUMBER:=2000000000;');
3005   l('  g_other_party_level_attribs BOOLEAN;');
3006   l('');
3007   l('  g_debug_count                        NUMBER := 0;');
3008   --l('  g_debug                              BOOLEAN := FALSE;');
3009   l('  g_score_until_thresh BOOLEAN:=false;');
3010   l(' ');
3011   l('  g_thres_score NUMBER:=1000;');
3012   l('  g_ps_den_only BOOLEAN;');
3013   l('  g_index_owner VARCHAR2(255);');
3014   l('  distinct_search_cpt_types NUMBER ; ');
3015   --l('  PROCEDURE enable_debug;');
3016   --l('  PROCEDURE disable_debug;');
3017 
3018 
3019   IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
3020 	ldbg_procedure;
3021   l('FUNCTION check_estimate_hits (');
3022   l('  p_entity VARCHAR2,');
3023   l('  p_contains_str VARCHAR2) RETURN NUMBER IS');
3024   l('  ');
3025   l('  ustatus VARCHAR2(255);');
3026   l('  dstatus VARCHAR2(255);');
3027   l('  l_bool BOOLEAN;');
3028   l('  l_hits NUMBER := 0;'); --Bug No: 6048573
3029   l('BEGIN');
3030   l('  IF g_index_owner IS NULL THEN');
3031   l('    l_bool := fnd_installation.GET_APP_INFO(''AR'',ustatus,dstatus,g_index_owner);');
3032   l('  END IF;');
3033   l('  IF p_entity=''PARTY'' THEN');
3034   l('');
3035   l('    l_hits :=  CTX_QUERY.count_hits(');
3036   l('        g_index_owner||''.''||''HZ_STAGE_PARTIES_T1'',p_contains_str, false);');
3037   l('  ELSIF p_entity=''PARTY_SITES'' THEN');
3038   l('    l_hits :=  CTX_QUERY.count_hits(');
3039   l('        g_index_owner||''.''||''HZ_STAGE_PARTY_SITES_T1'',p_contains_str, false);');
3040   l('  ELSIF p_entity=''CONTACTS'' THEN');
3041   l('    l_hits :=  CTX_QUERY.count_hits(');
3042   l('        g_index_owner||''.''||''HZ_STAGE_CONTACT_T1'',p_contains_str, false);');
3043   l('  ELSIF p_entity=''CONTACT_POINTS'' THEN');
3044   l('    l_hits :=  CTX_QUERY.count_hits(');
3045   l('        g_index_owner||''.''||''HZ_STAGE_CPT_T1'',p_contains_str, false);');
3046   l('  END IF;');
3047   l('  RETURN floor(l_hits/2) ;'); --Bug No: 6048573
3048   l('  ');
3049   l('');
3050 --bug 4959719 start
3051   l('  exception');
3052   l('    when others then');
3053   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
3054   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
3055   l('        FND_MSG_PUB.ADD;');
3056   l('        RAISE FND_API.G_EXC_ERROR;');
3057    --Start Bug No: 3032742.
3058   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
3059   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
3060   l('        FND_MSG_PUB.ADD;');
3061   l('        RAISE FND_API.G_EXC_ERROR;');
3062   --End Bug No : 3032742.
3063   l('      else ');
3064   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
3065   l('      end if;');
3066 --bug 4959719 end
3067   l('END;');
3068 
3069   -- VJN Introduced function for Bug 3979089
3070   l('');
3071   l('');
3072   l('FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)');
3073   l('RETURN VARCHAR2');
3074   l('IS');
3075   l('p_person_restrict_sql VARCHAR2(32767);');
3076   l('p_restrict1_sql VARCHAR2(32767);');
3077   l('p_final_restrict_sql VARCHAR2(32767);');
3078   l('BEGIN');
3079   l('   p_final_restrict_sql := p_restrict_sql ; ');
3080   l('   IF p_restrict_sql IS NOT NULL');
3081   l('   THEN');
3082   l('     IF instrb(p_restrict_sql, ''STAGE.'') > 0');
3083   l('     THEN');
3084   l('        p_restrict1_sql := replace( p_restrict_sql, ''STAGE.'', ''stage1.'');');
3085   l('     ELSIF instrb(p_restrict_sql, ''stage.'') > 0');
3086   l('     THEN');
3087   l('           p_restrict1_sql := replace( p_restrict_sql, ''stage.'', ''stage1.'');');
3088   l('     END IF;');
3089 
3090   l('    p_person_restrict_sql := ''exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r'' ');
3091   l('                               ||' || ' '' where oc.org_contact_id = stage.org_contact_id and'' ');
3092   l('                               ||' || ' '' r.relationship_id = oc.party_relationship_id'' ');
3093   l('                               ||' || ' '' and r.subject_type = ''''PERSON'''' AND r.object_type = ''''ORGANIZATION'''' '' ');
3094   l('                               ||' || ' '' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id'' ');
3095   l('                               ||' || ' '' and '' || p_restrict1_sql || '' ) )'' ; ');
3096 
3097   l('p_final_restrict_sql := ''((stage.org_contact_id is null and '' || p_restrict_sql || '') or (stage.org_contact_id is not null and '' ');
3098   l('                           || p_person_restrict_sql ||  '' ))''; ');
3099   l(' END IF;');
3100   l(' return p_final_restrict_sql ;');
3101   l('END;');
3102 
3103   /***********************************************************************
3104   * Private procedure to map IDs greater than the max allowed by PLSQL
3105   * Index-by tables.
3106   ************************************************************************/
3107   l('  FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS');
3108   l('    l_newidx NUMBER;');
3109   l('  BEGIN ');
3110   ldbg_s('-----------------','calling the function map_id');
3111   ldbg_sv('argument in_id = ', 'in_id');
3112 
3113   l('    IF in_id<g_max_id THEN ');
3114   l('      RETURN in_id;');
3115   l('    ELSE');
3116   l('      FOR I in 1..g_mappings.COUNT LOOP');
3117   l('        IF in_id = g_mappings(I) THEN');
3118   l('          RETURN (g_max_id+I);');
3119   l('        END IF;');
3120   l('      END LOOP;');
3121   l('      l_newidx := g_mappings.COUNT+1;');
3122   l('      g_mappings(l_newidx) := in_id;');
3123   l('      RETURN (g_max_id+l_newidx);');
3124   l('    END IF;');
3125   l('  END;');
3126 
3127   l('  FUNCTION GET_PARTY_SCORE ');
3128   FIRST := TRUE;
3129   FOR TX IN (
3130       SELECT f.staged_attribute_column
3131       FROM hz_trans_functions_vl f, hz_secondary_trans st,
3132            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
3133       WHERE sa.match_rule_id = p_rule_id
3134       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
3135       AND st.function_id = f.function_id
3136       AND a.attribute_id = sa.attribute_id
3137       AND a.entity_name= 'PARTY'
3138       ORDER BY sa.attribute_id) LOOP
3139      IF FIRST THEN
3140        l('       (');
3141        l('       p_table_'||TX.staged_attribute_column||' VARCHAR2');
3142        FIRST := FALSE;
3143      ELSE
3144        l('      ,p_table_'||TX.staged_attribute_column||' VARCHAR2');
3145      END IF;
3146   END LOOP;
3147   IF FIRST THEN
3148     l('   RETURN NUMBER IS');
3149   ELSE
3150     l('  ) RETURN NUMBER IS');
3151   END IF;
3152   l('    total NUMBER := 0;');
3153   l('  BEGIN');
3154   ldbg_s('-----------------','calling the function get_party_score');
3155   d(fnd_log.level_procedure,'GET_PARTY_SCORE  ');
3156   l('    IF g_score_until_thresh AND (total)>=g_thres_score THEN');
3157   ldbg_sv('get_party_score returned total = ', 'total');
3158   l('      RETURN total;');
3159   l('    END IF;');
3160   FOR SECATTRS IN (
3161         SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id
3162         FROM HZ_TRANS_ATTRIBUTES_VL a,
3163              HZ_MATCH_RULE_SECONDARY s
3164         WHERE s.match_rule_id = p_rule_id
3165         AND s.attribute_id = a.attribute_id
3166         AND a.entity_name = 'PARTY') LOOP
3167       FIRST := TRUE;
3168       FOR SECTRANS IN (
3169           SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
3170                  TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
3171           FROM HZ_SECONDARY_TRANS s,
3172                HZ_TRANS_FUNCTIONS_VL f
3173           WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
3174           AND s.FUNCTION_ID = f.FUNCTION_ID
3175           ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
3176         IF FIRST THEN
3177            FIRST := FALSE;
3178            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
3179              l('    IF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3180                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
3181            ELSE
3182 		IF(l_purpose='S' and SECATTRS.attribute_id=16) --6334571
3183 		THEN
3184                         l('    IF HZ_DQM_SEARCH_UTIL.is_match(case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3185 			' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
3186 			' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then  p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3187 			' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||SECTRANS.FUNCTION_ID||') THEN');
3188 
3189 
3190          	ELSE
3191              l('    IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3192                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
3193 	       END IF;
3194            END IF;
3195         ELSE
3196            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
3197              l('    ELSIF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3198                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
3199            ELSE
3200 	   		IF(l_purpose='S' and SECATTRS.attribute_id=16) --6334571
3201 			THEN
3202 
3203 			l('    ELSIF HZ_DQM_SEARCH_UTIL.is_match(case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3204 			' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
3205 			' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then  p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3206 			' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||SECTRANS.FUNCTION_ID||') THEN');
3207 
3208 			ELSE
3209 
3210              l('    ELSIF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3211                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
3212 		       END IF;
3213            END IF;
3214         END IF;
3215         l('      total := total+'||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
3216         l('      IF g_score_until_thresh AND (total)>=g_thres_score THEN ');
3217 	ldbg_sv('get_party_score returned total = ', 'total');
3218         l('        RETURN total;');
3219         l('      END IF;');
3220       END LOOP;
3221       l('    END IF;');
3222   END LOOP;
3223   l('    RETURN total;');
3224   l('  END;');
3225 
3226   add_score_function('PARTY_SITES',p_rule_id);
3227   add_score_function('CONTACTS',p_rule_id);
3228   add_score_function('CONTACT_POINTS',p_rule_id);
3229   add_get_attrib_func(p_rule_id);
3230   add_insert_function('PARTY',p_rule_id);
3231   add_insert_function('PARTY_SITES',p_rule_id);
3232   add_insert_function('CONTACTS',p_rule_id);
3233   add_insert_function('CONTACT_POINTS',p_rule_id);
3234 
3235   --- VJN Introduced for conditional Word Replacements
3236   --- Populate the global condition record before doing the mapping
3237   --- so that mapping takes into account conditional word replacements if any
3238   generate_ent_cond_pop_rec_proc('PARTY', p_rule_id);
3239   l('');
3240   generate_ent_cond_pop_rec_proc('PARTY_SITES', p_rule_id);
3241   l('');
3242   generate_ent_cond_pop_rec_proc('CONTACTS', p_rule_id);
3243   l('');
3244   generate_ent_cond_pop_rec_proc('CONTACT_POINTS', p_rule_id);
3245   l('');
3246 
3247 
3248   l('  PROCEDURE init_score_context (');
3249   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type:=');
3250   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
3251   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list:=');
3252   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
3253   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list:= ');
3254   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
3255   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list:=');
3256   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST');
3257   l('  ) IS');
3258   l('   l_dummy NUMBER;');
3259   l('  BEGIN');
3260   ldbg_s('-----------------','calling the procedure init_score_context');
3261   ldbg_s('In init_score_context calling the Map procedures');
3262   l('    -- Transform search criteria');
3263   l('    HZ_TRANS_PKG.clear_globals;');
3264   l('    MAP_PARTY_REC(FALSE,p_party_search_rec, l_dummy, g_party_stage_rec);');
3265   l('    MAP_PARTY_SITE_REC(FALSE,p_party_site_list, l_dummy, g_party_site_stage_list);');
3266   l('    MAP_CONTACT_REC(FALSE,p_contact_list, l_dummy, g_contact_stage_list);');
3267   l('    MAP_CONTACT_POINT_REC(FALSE,p_contact_point_list, l_dummy, g_contact_pt_stage_list);');
3268   l('');
3269   l('  END;');
3270 
3271 
3272   l('  FUNCTION init_search(');
3273   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type:=');
3274   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
3275   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list:=');
3276   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
3277   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list:= ');
3278   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
3279   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list:=');
3280   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,');
3281   l('      p_match_type            IN  VARCHAR2,');
3282   l('      x_party_max_score       OUT NUMBER,');
3283   l('      x_ps_max_score       OUT NUMBER,');
3284   l('      x_contact_max_score       OUT NUMBER,');
3285   l('      x_cpt_max_score       OUT NUMBER');
3286   l('  ) RETURN NUMBER IS ');
3287   l('  l_entered_max_score NUMBER:=0;');
3288   l('  l_ps_entered_max_score NUMBER:=0;');
3289   l('  l_ct_entered_max_score NUMBER:=0;');
3290   l('  l_cpt_entered_max_score NUMBER:=0;');
3291   l('  vlist vlisttype;');
3292   l('  maxscore HZ_PARTY_SEARCH.IDList;');
3293   l('  l_name VARCHAR2(200);');
3294   l('  l_idx NUMBER; ');
3295   l('  l_num NUMBER; ');
3296   l('  total NUMBER; ');
3297   l('  threshold NUMBER; ');
3298   l('  BEGIN');
3299   ldbg_s('-----------------','calling the function init_search');
3300   l('    IF NOT check_prim_cond (p_party_search_rec,');
3301   l('                            p_party_site_list,');
3302   l('                            p_contact_list,');
3303   l('                            p_contact_point_list) THEN');
3304   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_PRIMARY_COND'');');
3305   l('      FND_MSG_PUB.ADD;');
3306   l('      RAISE FND_API.G_EXC_ERROR;');
3307   l('    END IF;');
3308   IF l_max_score=1 THEN
3309     ldbg_s('In init_search calling util package set_no_score');
3310     l('    HZ_DQM_SEARCH_UTIL.set_no_score;');
3311   ELSE
3312     ldbg_s('In init_search calling util package set_score');
3313     l('    HZ_DQM_SEARCH_UTIL.set_score;');
3314   END IF;
3315   l('    g_mappings.DELETE;');
3316   l('    g_party_site_stage_list.DELETE;');
3317   l('    g_contact_stage_list.DELETE;');
3318   l('    g_contact_pt_stage_list.DELETE;');
3319   l('    call_order.DELETE;');
3320   l('    call_max_score.DELETE;');
3321   l('    HZ_DQM_SEARCH_UTIL.new_search;');
3322   l('    HZ_TRANS_PKG.set_party_type(p_party_search_rec.PARTY_TYPE);');
3323   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
3324   l('');
3325   ldbg_s('In init_search calling the Map procedures');
3326   l('    -- Transform search criteria');
3327   -- VJN Introduced for conditional Word Replacements
3328   --- Populate the global condition record before doing the mapping
3329   --- so that mapping takes into account conditional word replacements if any
3330   l('POP_PARTY_COND_REC(p_party_search_rec);');
3331   l('');
3332   l('POP_PARTY_SITES_COND_REC(p_party_site_list);');
3333   l('');
3334   l('POP_CONTACTS_COND_REC(p_contact_list);');
3335   l('');
3336   l('POP_CONTACT_POINTS_COND_REC(p_contact_point_list);');
3337   l('');
3338 
3339   l('    MAP_PARTY_REC(TRUE,p_party_search_rec, l_entered_max_score, g_party_stage_rec);');
3340   l('    MAP_PARTY_SITE_REC(TRUE,p_party_site_list, l_ps_entered_max_score, g_party_site_stage_list);');
3341   l('    MAP_CONTACT_REC(TRUE,p_contact_list, l_ct_entered_max_score, g_contact_stage_list);');
3342   l('    MAP_CONTACT_POINT_REC(TRUE,p_contact_point_list, l_cpt_entered_max_score, g_contact_pt_stage_list);');
3343   l('');
3344   l('      ');
3345   ldbg_s('In init_search determining call order of entities');
3346   l('    l_idx := l_entered_max_score+1;');
3347   l('    vlist (l_idx) := ''PARTY'';');
3348   l('    maxscore (l_idx) := l_entered_max_score;');
3349 
3350   l('    l_idx := l_ps_entered_max_score+1;');
3351   l('    WHILE vlist.EXISTS(l_idx) LOOP');
3352   l('      l_idx := l_idx+1;');
3353   l('    END LOOP;');
3354   l('    vlist (l_idx) := ''PARTY_SITE'';');
3355   l('    maxscore (l_idx) := l_ps_entered_max_score;');
3356   l('');
3357   l('    l_idx := l_ct_entered_max_score+1;');
3358   l('    WHILE vlist.EXISTS(l_idx) LOOP');
3359   l('      l_idx := l_idx+1;');
3360   l('    END LOOP;');
3361   l('    vlist (l_idx) := ''CONTACT'';');
3362   l('    maxscore (l_idx) := l_ct_entered_max_score;');
3363   l('');
3364   l('    l_idx := l_cpt_entered_max_score+1;');
3365   l('    WHILE vlist.EXISTS(l_idx) LOOP');
3366   l('      l_idx := l_idx+1;');
3367   l('    END LOOP;');
3368   l('    vlist (l_idx) := ''CONTACT_POINT'';');
3369   l('    maxscore (l_idx) := l_cpt_entered_max_score;');
3370   l('');
3371   l('    l_num := 1;');
3372   l('    l_idx := vlist.LAST;');
3373   ldbg_s('Call order is the following');
3374   l('    WHILE l_idx IS NOT NULL LOOP');
3375   l('      call_order(l_num) := vlist(l_idx);');
3376   l('      call_max_score(l_num) := maxscore(l_idx);');
3377   ldbg_s('-----------------');
3378   ldbg_sv('l_num = ','l_num','entity = ', 'vlist(l_idx)', 'call_max_score for entity = ', 'maxscore(l_idx)');
3379   l('      l_idx := vlist.PRIOR(l_idx);');
3380   l('      l_num := l_num+1;');
3381   l('    END LOOP;  ');
3382   ldbg_s('-----------------');
3383   l('    call_order(5):=''NONE'';');
3384   ldbg_s('In init_search determining call type of entities');
3385   l('    IF p_match_type = '' OR '' THEN');
3386   ldbg_s('This is an OR Match Rule');
3387   IF l_purpose = 'S' THEN
3388     l('      threshold := round(('||l_match_threshold||'/'||l_max_score||')*(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score));');
3389     ldbg_s('This is a search Match Rule');
3390     ldbg_sv('Threshold defined in Match Rule, after rounding off is ', 'threshold');
3391   ELSE
3392     l('      threshold := '||l_match_threshold||';');
3393     ldbg_s('This is a Duplicate Identification Match Rule');
3394     ldbg_sv('Threshold defined in Match Rule is ', 'threshold');
3395   END IF;
3396 
3397   l('      l_idx := vlist.FIRST;');
3398   l('      total := 0;');
3399   l('      l_num := 4;');
3400   l('      WHILE l_idx IS NOT NULL LOOP');
3401   l('        total := total+maxscore(l_idx);');
3402   l('        IF total<threshold THEN');
3403   l('          call_type(l_num) := ''AND'';');
3404   l('        ELSE');
3405   l('          call_type(l_num) := ''OR'';');
3406   l('        END IF;');
3407   l('        l_idx := vlist.NEXT(l_idx);');
3408   l('        l_num := l_num-1;');
3409   l('      END LOOP;');
3410   l('    ELSE');
3411   l('      call_type(1) := ''OR'';');
3412   l('      call_type(2) := ''AND'';');
3413   l('      call_type(3) := ''AND'';');
3414   l('      call_type(4) := ''AND'';');
3415   l('    END IF;');
3416   ldbg_s('Call types are the following');
3417   ldbg_s('-----------------');
3418   ldbg_sv('call type 1 = ', 'call_type(1)', 'call type 2 = ', 'call_type(2)','call type 3 = ', 'call_type(3)','call type 4 = ', 'call_type(4)');
3419   ldbg_s('-----------------');
3420   l('    x_party_max_score := l_entered_max_score;');
3421   l('    x_ps_max_score := l_ps_entered_max_score;');
3422   l('    x_contact_max_score := l_ct_entered_max_score;');
3423   l('    x_cpt_max_score := l_cpt_entered_max_score;');
3424   ldbg_s('init_search returned with the following max scores at each level');
3425   ldbg_s('-----------------');
3426   ldbg_sv('entered party max score = ', 'l_entered_max_score',
3427           'entered paty site max score = ', 'l_ps_entered_max_score',
3428           'entered contact max score = ', 'l_ct_entered_max_score',
3429           'entered contact point max score = ', 'l_cpt_entered_max_score');
3430   ldbg_sv('entered total score = ', '(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score)');
3431   ldbg_s('-----------------');
3432   l('    RETURN (l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score);');
3433   l('  END;');
3434 
3435 
3436   l('  FUNCTION INIT_PARTY_QUERY(p_match_str VARCHAR2, ');
3437   l('              p_denorm_str VARCHAR2,');
3438   l('              p_party_max_score NUMBER,');
3439   l('              p_denorm_max_score NUMBER,');
3440   l('              p_non_denorm_max_score NUMBER,');
3441   l('              p_threshold NUMBER) RETURN VARCHAR2 IS');
3442   l('    l_party_contains_str VARCHAR2(32000); ');
3443   l('    l_party_filter VARCHAR2(1) := null;');
3444   l('    l_prim_temp VARCHAR2(4000);');
3445   l('    l_denorm_str VARCHAR2(4000);');
3446   l('  BEGIN');
3447   ldbg_s('-----------------','calling the function init_party_query');
3448   ldbg_sv('passed in p_match_str is ', 'p_match_str');
3449   ldbg_sv('passed in p_denorm_str is ', 'p_denorm_str');
3450   ldbg_sv('passed in p_denorm_max_score is ', 'p_denorm_max_score');
3451   ldbg_sv('passed in p_non_denorm_max_score is ', 'p_non_denorm_max_score');
3452   ldbg_sv('passed in p_threshold is ', 'p_threshold');
3453 
3454   l('    IF p_party_max_score<=p_threshold OR p_match_str='' AND '' THEN');
3455   l('      l_denorm_str := NULL;');
3456   ldbg_sv('calculated denorm string l_denorm_str is ', 'l_denorm_str' );
3457   l('    ELSE');
3458   l('      l_denorm_str := p_denorm_str;');
3459   ldbg_sv('calculated denorm string l_denorm_str is ', 'l_denorm_str');
3460   l('    END IF;');
3461 
3462   FIRST := TRUE;
3463   g_party_or_query := null;
3464   g_party_and_query := null;
3465   cnt := cnt+1;
3466   FOR PRIMATTRS IN (
3467     SELECT a.ATTRIBUTE_ID, PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME, nvl(SCORE,0) SCORE
3468     FROM HZ_TRANS_ATTRIBUTES_VL a,
3469          HZ_MATCH_RULE_PRIMARY p,
3470          HZ_MATCH_RULE_SECONDARY s
3471     WHERE p.match_rule_id = p_rule_id
3472     AND s.match_rule_id (+) = p_rule_id
3473     AND s.attribute_id (+) = a.attribute_id
3474     AND p.attribute_id = a.attribute_id
3475     AND a.ENTITY_NAME = 'PARTY'
3476     AND nvl(FILTER_FLAG,'N') <> 'Y'
3477     ORDER BY SCORE) LOOP
3478     FIRST1 := TRUE;
3479     l('');
3480     l('    -- Setup query string for '||PRIMATTRS.ATTRIBUTE_NAME);
3481     l('    l_prim_temp := null;');
3482     FOR PRIMTRANS IN (
3483       SELECT f.STAGED_ATTRIBUTE_COLUMN, f.TRANSFORMATION_NAME, nvl(f.PRIMARY_FLAG,'N') PRIMARY_FLAG, f.PROCEDURE_NAME
3484       FROM HZ_TRANS_FUNCTIONS_VL f,
3485          HZ_PRIMARY_TRANS pt
3486     WHERE pt.PRIMARY_ATTRIBUTE_ID = PRIMATTRS.PRIMARY_ATTRIBUTE_ID
3487     AND pt.FUNCTION_ID = f.FUNCTION_ID)
3488     LOOP
3489         IF FIRST1 THEN
3490           l_trans := '(g_party_stage_rec.'||
3491                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
3492                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
3493                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
3494           FIRST1 := FALSE;
3495         ELSE
3496           l_trans := l_trans||' OR (g_party_stage_rec.'||
3497                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
3498                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
3499                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
3500         END IF;
3501           IF PRIMTRANS.PRIMARY_FLAG = 'Y' THEN
3502             tmp := '''A'||PRIMATTRS.ATTRIBUTE_ID||'''';
3503           ELSE
3504             tmp := 'NULL';
3505           END IF;
3506         --- Modified for Bug 4016594
3507         IF PRIMATTRS.ATTRIBUTE_NAME = 'DUNS_NUMBER_C' AND upper(PRIMTRANS.PROCEDURE_NAME) = 'HZ_TRANS_PKG.EXACT' THEN
3508           l('    IF g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NOT NULL THEN');
3509 		  l('     IF ltrim(g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||',''0'') IS NOT NULL THEN');
3510           l('      FOR I in lengthb(ltrim(g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||',''0''))..9 LOOP');
3511           l('        HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
3512           l('          lpad(ltrim(g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
3513               ',''0''),I,chr('||ascii('0')||')),'||tmp||',l_prim_temp);');
3514           l('      END LOOP;');
3515           l('     END IF;');
3516           l('    END IF;');
3517         ELSE
3518           l('    HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
3519           l('          g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
3520             ','||tmp||',l_prim_temp);');
3521         END IF;
3522 
3523     END LOOP;
3524 
3525     IF FIRST THEN
3526       FIRST := FALSE;
3527       g_party_or_query := '('||l_trans||')';
3528       g_party_and_query := '('||l_trans||')';
3529     ELSE
3530       g_party_or_query := g_party_or_query || ' OR (' || l_trans||')';
3531       g_party_and_query := g_party_and_query || ' AND (' || l_trans||')';
3532     END IF;
3533 
3534     l('');
3535     IF PRIMATTRS.SCORE = 0 THEN
3536       l('    HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);');
3537     ELSE
3538       l('  IF l_denorm_str IS NOT NULL THEN');
3539       l('    IF (p_non_denorm_max_score+'||PRIMATTRS.SCORE||')>=p_threshold THEN');
3540       l('      l_denorm_str := NULL;');
3541       l('      HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);');
3542       l('    ELSIF (p_non_denorm_max_score+p_denorm_max_score+'||PRIMATTRS.SCORE||')>=p_threshold THEN');
3543       l('      HZ_DQM_SEARCH_UTIL.add_attribute_with_denorm(l_prim_temp, p_match_str, l_denorm_str, l_party_contains_str);');
3544       l('      l_denorm_str := NULL;');
3545       l('    END IF;');
3546       l('  ELSE');
3547       l('    HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);');
3548       l('  END IF;');
3549     END IF;
3550   END LOOP;
3551   l('    IF lengthb(l_party_contains_str) > 4000 THEN');
3552   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_SEARCH_CRIT_LARGE_ERROR'');');
3553   l('      FND_MESSAGE.SET_TOKEN(''ENTITY'',''PARTY'');');
3554   l('      FND_MSG_PUB.ADD;');
3555   l('      RAISE FND_API.G_EXC_ERROR;');
3556   l('    END IF;');
3557   l('    IF (p_match_str = '' AND '' OR p_party_max_score<p_threshold) AND l_party_contains_str IS NOT NULL AND p_denorm_str IS NOT NULL THEN');
3558   ldbg_s('party contains string returned by init_search is an AND between these strings ');
3559   ldbg_sv('l_party_contains_str = ', 'l_party_contains_str');
3560   ldbg_sv('p_denorm_str = ', 'p_denorm_str');
3561   l('      RETURN ''(''||l_party_contains_str||'') AND (''||p_denorm_str||'')'';');
3562   l('    ELSE');
3563   ldbg_s('party contains string returned by init_search is ', 'l_party_contains_str');
3564   l('      RETURN l_party_contains_str;');
3565   l('    END IF;');
3566   l('  END;');
3567 
3568   get_column_list(p_rule_id, 'PARTY',l_p_select_list,l_p_param_list, l_p_into_list);
3569   get_column_list(p_rule_id, 'PARTY_SITES',l_ps_select_list,l_ps_param_list, l_ps_into_list);
3570   get_column_list(p_rule_id, 'CONTACTS',l_c_select_list,l_c_param_list, l_c_into_list);
3571   get_column_list(p_rule_id, 'CONTACT_POINTS',l_cpt_select_list,l_cpt_param_list, l_cpt_into_list);
3572 
3573   l_party_filter_str := NULL;
3574   l_dyn_party_filter_str := NULL;
3575   FIRST := TRUE;
3576   cnt := 1;
3577   for PRIMTRANS IN (
3578         SELECT f.STAGED_ATTRIBUTE_COLUMN
3579         FROM HZ_TRANS_FUNCTIONS_VL f,
3580              HZ_TRANS_ATTRIBUTES_VL a,
3581              HZ_MATCH_RULE_PRIMARY pattr,
3582              HZ_PRIMARY_TRANS pfunc
3583         WHERE pattr.MATCH_RULE_ID = p_rule_id
3584         AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
3585         AND a.ENTITY_NAME = 'PARTY'
3586         AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
3587         AND pfunc.FUNCTION_ID = f.FUNCTION_ID
3588         AND FILTER_FLAG  = 'Y'
3589 
3590         UNION
3591 
3592         SELECT f.STAGED_ATTRIBUTE_COLUMN
3593         FROM HZ_TRANS_FUNCTIONS_VL f,
3594             HZ_TRANS_ATTRIBUTES_VL a
3595         WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
3596         AND a.entity_name = 'PARTY'
3597         AND a.attribute_name='PARTY_TYPE'
3598         AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
3599         AND nvl(f.active_flag,'Y')='Y'
3600         AND ROWNUM=1
3601   ) LOOP
3602 
3603         IF FIRST THEN
3604           l_party_filter_str := '(g_party_stage_rec.'||
3605                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3606                ' IS NULL OR g_party_stage_rec.'||
3607                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' =  p.' ||
3608                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3609           l_dyn_party_filter_str := '(:'||
3610                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3611                ' IS NULL OR :'||
3612                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' =  p.' ||
3613                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3614           FIRST := FALSE;
3615         ELSE
3616           l_dyn_party_filter_str := l_dyn_party_filter_str || ' AND ' ||
3617                '(:'||
3618                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3619                ' IS NULL OR :'||
3620                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' =  p.' ||
3621                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3622           l_party_filter_str := l_party_filter_str || ' AND ' ||
3623                '(g_party_stage_rec.'||
3624                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3625                ' IS NULL OR g_party_stage_rec.'||
3626                PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' =  p.' ||
3627                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3628         END IF;
3629         l_party_filt_bind(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3630         cnt:=cnt+1;
3631   END LOOP;
3632 
3633   add_query_gen_func('PARTY_SITES',p_rule_id);
3634   add_query_gen_func('CONTACTS',p_rule_id);
3635   add_query_gen_func('CONTACT_POINTS',p_rule_id);
3636 
3637    /*********************************************************************************
3638    * Match rule private procedures to open a cursor for performing intermedia queries.
3639    *   open_party_cursor - Intermedia query on HZ_STAGED_PARTIES
3640    *   open_party_site_cursor - Intermedia query on HZ_STAGED_PARTY_SITES
3641    *   open_contact_cursor - Intermedia query on HZ_STAGED_CONTACTS
3642    *   open_contact_pt_cursor - Intermedia query on HZ_STAGED_CONTACT_POINTS
3643    *
3644    * Input:
3645    * p_dup_party_id : Called in the duplicate identification case, to filter off
3646    *                  the party for which we are trying find duplicates.
3647    * p_restrict_sql : restrict_sql criteria passed to match rule
3648    * p_contains_str : Intermedia query string
3649    * p_search_ctx_id : Only to called from find_party_details, for filtering against
3650    *                  party_ids returned by the party query
3651    * p_party_id : USed in the get_matching_party_sites, get_matching_contacts and
3652    *              get_matching_cpts procedures, to only find records belonging to the specified
3653    *              party_id
3654    *********************************************************************************/
3655 
3656   IF l_purpose = 'S' THEN
3657     l_party_name_score:='decode(TX8,g_party_stage_rec.TX8||'' '',100,90)';
3658   ELSE
3659     BEGIN
3660       SELECT to_char(score) INTO l_party_name_score from HZ_MATCH_RULE_SECONDARY s, HZ_TRANS_ATTRIBUTES_VL a
3661       WHERE a.attribute_id = s.attribute_id
3662       AND s.match_rule_id = p_rule_id
3663       AND attribute_name = 'PARTY_NAME';
3664     EXCEPTION
3665       WHEN NO_DATA_FOUND THEN
3666         l_party_name_score := '0';
3667     END;
3668   END IF;
3669   l('  PROCEDURE open_party_cursor_direct (');
3670   l('            p_dup_party_id NUMBER, ');
3671   l('            p_restrict_sql VARCHAR2, ');
3672   l('            p_match_str VARCHAR2,');
3673   l('            p_search_merged VARCHAR2,');
3674   l('            p_party_contains_str VARCHAR2,');
3675   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
3676   l('    l_sqlstr VARCHAR2(4000);');
3677   l('    l_search_merged VARCHAR2(1);');
3678   l('  BEGIN');
3679   ldbg_s('-----------------','calling procedure open party cursor direct');
3680   l('    IF (p_search_merged is null) then ');
3681   l('       l_search_merged := ''N'';  ');
3682   l('    ELSE ');
3683   l('       l_search_merged := p_search_merged; ');
3684   l('    END IF; ');
3685   ldbg_sv('Search Merged Flag - ','l_search_merged');
3686   l('    IF p_restrict_sql IS NULL AND NOT g_other_party_level_attribs AND NOT (p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,''D_PS'')>0 AND g_party_site_stage_list.COUNT=1) THEN');
3687   ldbg_s('Restrict SQL is NULL and other conditions met to OPEN x_cursor');
3688   l('     OPEN x_cursor FOR ');
3689   l('      SELECT PARTY_ID '|| l_p_select_list);
3690   l('      FROM hz_staged_parties ');
3691   l('      WHERE TX8 LIKE g_party_stage_rec.TX8||'' %''');
3692   l('      AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||'' '' =  TX36))');
3693   l('      AND( (l_search_merged =''Y'' ) ');
3694   l('           OR (l_search_merged = ''I'' AND nvl(status, ''A'') in (''A'', ''I''))  ');
3695   l('           OR (l_search_merged = ''N'' AND nvl(status, ''A'') in (''A'')))  ');
3696   l('      AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id);');
3697   l('    ELSE');
3698   ldbg_s('Restrict SQL is NOT NULL OR other conditions not met, Else Part');
3699   l('      l_sqlstr := ''SELECT PARTY_ID '|| l_p_select_list||' FROM hz_staged_parties stage '';');
3700   l('      l_sqlstr := l_sqlstr || '' WHERE TX8 like :TX8||'''' %'''' '';');
3701   l('      l_sqlstr := l_sqlstr || '' AND (:TX36 IS NULL OR :TX36||'''' '''' =  TX36) '';');
3702   l('      IF l_search_merged = ''N'' THEN');
3703   l('        l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''')=''''A'''' '';');
3704   l('      ELSIF l_search_merged = ''I'' THEN');
3705   l('        l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''') in (''''A'''',''''I'''') '';');
3706   l('      END IF;');
3707   l('      l_sqlstr := l_sqlstr || '' AND (:p_dup IS NULL OR party_id <> :p_dup ) '';');
3708   l('      IF g_other_party_level_attribs THEN');
3709   FIRST := TRUE;
3710   cnt := 1;
3711   FOR PATTRS IN (
3712     SELECT PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME
3713     FROM HZ_TRANS_ATTRIBUTES_VL a,
3714          HZ_MATCH_RULE_PRIMARY p
3715     WHERE p.match_rule_id = p_rule_id
3716     AND p.attribute_id = a.attribute_id
3717     AND a.ENTITY_NAME = 'PARTY'
3718     AND a.attribute_name <> 'PARTY_NAME'
3719     AND nvl(FILTER_FLAG,'N') = 'N') LOOP
3720     IF FIRST THEN
3721       l('      l_sqlstr := l_sqlstr || '' AND ((:attr IS NULL OR '';');
3722       FIRST := FALSE;
3723     ELSE
3724       l('      l_sqlstr := l_sqlstr || ''     ''||p_match_str||'' (:attr IS NULL OR '';');
3725     END IF;
3726 
3727     FIRST1 := TRUE;
3728     FOR PRIMTRANS IN (
3729       SELECT f.STAGED_ATTRIBUTE_COLUMN
3730       FROM HZ_TRANS_FUNCTIONS_VL f,
3731          HZ_PRIMARY_TRANS pt
3732       WHERE pt.PRIMARY_ATTRIBUTE_ID = PATTRS.PRIMARY_ATTRIBUTE_ID
3733       AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
3734         IF FIRST1 THEN
3735            l('      l_sqlstr := l_sqlstr || ''     ('||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3736            FIRST1 :=  FALSE;
3737            party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3738            cnt := cnt+1;
3739          ELSE
3740            l('      l_sqlstr := l_sqlstr || ''      OR '||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3741          END IF;
3742          party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3743          cnt := cnt+1;
3744     END LOOP;
3745     l('     l_sqlstr := l_sqlstr || '' )) '';');
3746   END LOOP;
3747   IF NOT FIRST THEN
3748      l('     l_sqlstr := l_sqlstr || '' ) '';');
3749   END IF;
3750 
3751   FOR PATTRS IN (
3752     SELECT PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME
3753     FROM HZ_TRANS_ATTRIBUTES_VL a,
3754          HZ_MATCH_RULE_PRIMARY p
3755     WHERE p.match_rule_id = p_rule_id
3756     AND p.attribute_id = a.attribute_id
3757     AND a.ENTITY_NAME = 'PARTY'
3758     AND a.attribute_name <> 'PARTY_NAME'
3759     AND nvl(FILTER_FLAG,'N') = 'Y') LOOP
3760     l('      l_sqlstr := l_sqlstr || '' AND (:attr IS NULL OR '';');
3761 
3762     FIRST1 := TRUE;
3763     FOR PRIMTRANS IN (
3764       SELECT f.STAGED_ATTRIBUTE_COLUMN
3765       FROM HZ_TRANS_FUNCTIONS_VL f,
3766          HZ_PRIMARY_TRANS pt
3767       WHERE pt.PRIMARY_ATTRIBUTE_ID = PATTRS.PRIMARY_ATTRIBUTE_ID
3768       AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
3769          IF FIRST1 THEN
3770            l('      l_sqlstr := l_sqlstr || ''     ('||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3771            FIRST1 :=  FALSE;
3772            party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3773            cnt := cnt+1;
3774          ELSE
3775            l('      l_sqlstr := l_sqlstr || ''      OR '||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3776          END IF;
3777          party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3778          cnt := cnt+1;
3779     END LOOP;
3780     l('     l_sqlstr := l_sqlstr || '' )) '';');
3781   END LOOP;
3782   IF party_binds.COUNT=0 THEN
3783     l('     NULL;');
3784   END IF;
3785   l('     END IF;');
3786   l_party_level_cnt := cnt;
3787   l('     IF p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,''D_PS'')>0 AND g_party_site_stage_list.COUNT=1 THEN');
3788   ldbg_s('p_party_contains_str string is NOT NULL and other conditions met');
3789   FIRST := TRUE;
3790   FOR DENATTR IN (
3791     SELECT PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME
3792     FROM HZ_TRANS_ATTRIBUTES_VL a,
3793          HZ_MATCH_RULE_PRIMARY p
3794     WHERE p.match_rule_id = p_rule_id
3795     AND p.attribute_id = a.attribute_id
3796     AND a.ENTITY_NAME = 'PARTY_SITES'
3797     AND nvl(a.denorm_flag,'N') = 'Y') LOOP
3798     l('      l_sqlstr := l_sqlstr || '' AND (:attr IS NULL OR '';');
3799     FIRST1 := TRUE;
3800     FOR DENTRANS IN (
3801       SELECT f.STAGED_ATTRIBUTE_COLUMN
3802       FROM HZ_TRANS_FUNCTIONS_VL f,
3803          HZ_PRIMARY_TRANS pt
3804       WHERE pt.PRIMARY_ATTRIBUTE_ID = DENATTR.PRIMARY_ATTRIBUTE_ID
3805       AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
3806          IF FIRST1 THEN
3807            l('      l_sqlstr := l_sqlstr || ''     (D_PS like ''''% ''''||:'||DENTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3808            FIRST1 :=  FALSE;
3809            party_binds(cnt) := 'g_party_site_stage_list(1).'||DENTRANS.STAGED_ATTRIBUTE_COLUMN;
3810            cnt := cnt+1;
3811          ELSE
3812            l('      l_sqlstr := l_sqlstr || ''      OR D_PS like ''''% ''''||:'||DENTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3813          END IF;
3814          party_binds(cnt) := 'g_party_site_stage_list(1).'||DENTRANS.STAGED_ATTRIBUTE_COLUMN;
3815          cnt := cnt+1;
3816     END LOOP;
3817     l('     l_sqlstr := l_sqlstr || '' )) '';');
3818   END LOOP;
3819   IF l_party_level_cnt=cnt THEN
3820     l('       null;');
3821   END IF;
3822   l('     END IF;');
3823   ldbg_s('l_sqlstr before appending restrict_sql');
3824   ldbg_sv('l_sqlstr is - ','l_sqlstr');
3825 
3826   l('     IF p_restrict_sql IS NOT NULL THEN');
3827   l('       l_sqlstr := l_sqlstr || '' AND ''||p_restrict_sql||'' '';');
3828   l('     END IF;');
3829   ldbg_s('l_sqlstr after appending restrict_sql');
3830   ldbg_sv('l_sqlstr is - ','l_sqlstr');
3831   l('     IF g_other_party_level_attribs AND p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,''D_PS'')>0 AND g_party_site_stage_list.COUNT=1 THEN');
3832   ldbg_s('IF g_other_party_level_attribs AND p_party_contains_str IS NOT NULL AND ...');
3833   l('       OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id');
3834   FOR I in 1..party_binds.COUNT LOOP
3835     l('     ,'||party_binds(I));
3836   END LOOP;
3837   l('     ;');
3838   l('     ELSIF g_other_party_level_attribs THEN');
3839   ldbg_s('ELSIF g_other_party_level_attribs THEN');
3840   l('       OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id');
3841   FOR I in 1..(l_party_level_cnt-1)LOOP
3842     l('     ,'||party_binds(I));
3843   END LOOP;
3844   l('     ;');
3845   l('     ELSIF p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,''D_PS'')>0 AND g_party_site_stage_list.COUNT=1 THEN');
3846   ldbg_s('ELSIF p_party_contains_str IS NOT NULL AND ...');
3847   l('       OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id');
3848   FOR I in l_party_level_cnt..party_binds.COUNT LOOP
3849     l('     ,'||party_binds(I));
3850   END LOOP;
3851   l('     ;');
3852   l('     ELSE');
3853   ldbg_s('ELSE code fork');
3854   l('       OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id;');
3855   l('     END IF;');
3856   l('    END IF;');
3857   l('  END;');
3858 
3859   l('  PROCEDURE open_party_cursor(');
3860   l('            p_dup_party_id NUMBER, ');
3861   l('            p_restrict_sql VARCHAR2, ');
3862   l('            p_contains_str  VARCHAR2, ');
3863   l('            p_search_ctx_id NUMBER,');
3864   l('            p_match_str VARCHAR2,');
3865   l('            p_search_merged VARCHAR2,');
3866   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
3867   l('  l_sqlstr VARCHAR2(4000);');
3868   l('  l_hint VARCHAR2(100); ');
3869   l('  l_check NUMBER; ');
3870   l('  l_search_merged VARCHAR2(1); ');
3871   l('  BEGIN');
3872   ldbg_s('-----------------','calling procedure open party cursor');
3873   l('    IF (p_search_merged is null) then ');
3874   l('       l_search_merged := ''N'';  ');
3875   l('    ELSE ');
3876   l('       l_search_merged := p_search_merged; ');
3877   l('    END IF; ');
3878   l('    IF p_contains_str IS NULL THEN');
3879   ldbg_s('part contains string is null');
3880   /**** To query based on party_id .. from the get_score_details flow ***/
3881   l('      OPEN x_cursor FOR ');
3882   l('        SELECT PARTY_ID '|| l_p_select_list);
3883   l('        FROM HZ_STAGED_PARTIES stage');
3884   l('        WHERE PARTY_ID = p_dup_party_id;');
3885 
3886   /**** Static queries when restrict_sql is null OR if p_search_ctx_id IS NOT NULL *****/
3887   l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
3888   ldbg_s('Either restrict sql is null or search context id is not null');
3889   /**** When search context ID is null .. Retrieve rows using intermedia index ****/
3890   l('      IF p_search_ctx_id IS NULL THEN');
3891   ldbg_s('Search context id is null');
3892   l('        OPEN x_cursor FOR ');
3893   l('          SELECT PARTY_ID '|| l_p_select_list);
3894   l('          FROM HZ_STAGED_PARTIES stage');
3895   IF l_party_filter_str IS NOT NULL THEN
3896     l('          WHERE contains( concat_col, p_contains_str)>0');
3897     l('          AND ('||replace(l_party_filter_str,'p.','stage.')||')');
3898   ELSE
3899     l('          WHERE contains( concat_col, p_contains_str)>0');
3900   END IF;
3901   l('          AND( (l_search_merged =''Y'' ) ');
3902   l('          OR (l_search_merged = ''I'' AND nvl(stage.status, ''A'') in (''A'', ''I''))  ');
3903   l('          OR (l_search_merged = ''N'' AND nvl(stage.status, ''A'') in (''A''))       ) ');
3904   l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
3905 
3906 
3907   /**** When search context ID is not null .. Query using DQM_PARTIES_GT. Filter using
3908         intermedia index ****/
3909   l('      ELSE');
3910   ldbg_s('Search context id is not null');
3911   l('        OPEN x_cursor FOR ');
3912   l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTIES_U1) */ stage.PARTY_ID '|| l_p_select_list);
3913   l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTIES stage');
3914   l('            WHERE contains( concat_col, p_contains_str)>0');
3915   l('            AND d.SEARCH_CONTEXT_ID=p_search_ctx_id');
3916   l('            AND d.party_id = stage.party_id');
3917   IF l_party_filter_str IS NOT NULL THEN
3918     l('            AND ('||replace(l_party_filter_str,'p.','stage.')||')');
3919   END IF;
3920   l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
3921   l('            AND( (l_search_merged =''Y'' ) ');
3922   l('            OR (l_search_merged = ''I'' AND nvl(stage.status, ''A'') in (''A'', ''I''))  ');
3923   l('            OR (l_search_merged = ''N'' AND nvl(stage.status, ''A'') in (''A''))       ); ');
3924   l('      END IF;');
3925 
3926   /**** When restrict_sql is not null *****/
3927   l('    ELSE');
3928   ldbg_s('Restrict sql is not null');
3929   l('       l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
3930   l('       IF (l_check > 0 ) THEN ');
3931   ldbg_s('Restrict sql has a Selective Hint');
3932   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_PARTIES_U1) */''; ');
3933   l('       END IF; ');
3934   /**** When search context ID is null .. Access using intermedia index ***/
3935   l('     IF p_search_ctx_id IS NULL THEN');
3936   l('       l_sqlstr := ''SELECT   '' || l_hint || '' PARTY_ID '|| l_p_select_list||'''||');
3937   l('                   '' FROM HZ_STAGED_PARTIES stage''||');
3938   l('                   '' WHERE contains( concat_col, :cont)>0''||');
3939   IF l_dyn_party_filter_str IS NOT NULL THEN
3940     l('                   '' AND ('||replace(l_dyn_party_filter_str,'p.','stage.')||')''||');
3941   END IF;
3942   l('                   '' AND (''||p_restrict_sql||'')'' ||');
3943   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
3944   l('          IF l_search_merged = ''Y'' THEN  ');
3945   l('                  l_sqlstr := l_sqlstr ;  ');
3946   l('          ELSIF l_search_merged = ''I'' THEN  ');
3947   l('                  l_sqlstr := l_sqlstr ||'' AND nvl(stage.status,''''A'''') in (''''A'''', ''''I'''')'';  ');
3948   l('          ELSE  ');
3949   l('                  l_sqlstr := l_sqlstr ||'' AND nvl(stage.status,''''A'''') in (''''A'''')'';  ');
3950   l('          END IF;  ');
3951   l(' 	   output_long_strings(''----------------------------------------------------------'');');
3952   l('      output_long_strings(''Party Contains String = ''||p_contains_str);');
3953   l('		output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
3954   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
3955   FOR I in 1..l_party_filt_bind.COUNT LOOP
3956       l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
3957   END LOOP;
3958   l('                    ,p_dup_party_id, p_dup_party_id;');
3959   l('     END IF;');
3960   l('   END IF;');
3961   l('  exception');
3962   l('    when others then');
3963   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
3964   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
3965   l('        FND_MSG_PUB.ADD;');
3966   l('        RAISE FND_API.G_EXC_ERROR;');
3967    --Start Bug No: 3032742.
3968   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
3969   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
3970   l('        FND_MSG_PUB.ADD;');
3971   l('        RAISE FND_API.G_EXC_ERROR;');
3972   --Bug: 3392837
3973   l('      elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
3974   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
3975   l('        FND_MSG_PUB.ADD;');
3976   l('        RAISE FND_API.G_EXC_ERROR;');
3977   --End Bug No : 3032742.
3978   l('      else ');
3979   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
3980   l('    	 FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
3981   l('    	 FND_MSG_PUB.ADD;');
3982   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
3983   l('      end if;');
3984   l('  END;');
3985   l('');
3986 
3987   l('  PROCEDURE open_party_site_cursor(');
3988   l('            p_dup_party_id NUMBER, ');
3989   l('            p_party_id NUMBER, ');
3990   l('            p_restrict_sql VARCHAR2, ');
3991   l('            p_contains_str  VARCHAR2, ');
3992   l('            p_search_ctx_id  NUMBER, ');
3993   l('            p_search_merged  VARCHAR2, ');
3994   l('            p_search_rel_sites  VARCHAR2, ');
3995   l('            p_person_api  VARCHAR2, ');
3996   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
3997   l('  l_sqlstr VARCHAR2(4000);');
3998   l('  l_hint VARCHAR2(100); ');
3999   l('  l_check NUMBER; ');
4000   l('  l_check_dt NUMBER; ');
4001   l('  l_search_merged VARCHAR2(1); ');
4002   l('  l_status_sql VARCHAR2(100); ');
4003   l('  p_restrict_sql1 VARCHAR2(4000); ');
4004   l(' ');
4005   l('  BEGIN');
4006   ldbg_s('-----------------','calling the procedure open_party_site_cursor');
4007   l('     IF (p_search_merged is null) then ');
4008   l('        l_search_merged := ''N'';  ');
4009   l('     ELSE ');
4010   l('        l_search_merged := p_search_merged; ');
4011   l('     END IF; ');
4012   /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
4013   l('     IF p_party_id IS NOT NULL THEN');
4014   ldbg_s('Single Party Scenario');
4015   l('       IF p_search_rel_sites = ''N'' THEN');
4016   l('         OPEN x_cursor FOR ');
4017   l('          SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4018   l('          FROM HZ_STAGED_PARTY_SITES stage');
4019   l('          WHERE contains( concat_col, p_contains_str)>0');
4020   --Start of BugNo: 4299785
4021   l('          AND( (l_search_merged =''Y'' )  ');
4022   l('             OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4023   l('             OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4024   --End of BugNo: 4299785
4025   l('          AND stage.party_id = p_party_id; ');
4026   l('       ELSE');
4027   l('         OPEN x_cursor FOR ');
4028   l('          SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4029   l('          FROM HZ_STAGED_PARTY_SITES stage');
4030   l('          WHERE contains( concat_col, p_contains_str)>0');
4031   --Start of BugNo: 4299785
4032   l('          AND( (l_search_merged =''Y'' )  ');
4033   l('            OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4034   l('            OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4035   --End of BugNo: 4299785
4036   l('          AND stage.party_id = p_party_id ');
4037   l('          UNION');
4038   l('          SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'|| l_ps_select_list);
4039   l('          FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc');
4040   l('          WHERE contains( concat_col, p_contains_str)>0');
4041   --Start of BugNo: 4299785
4042   l('          AND( (l_search_merged =''Y'' )  ');
4043   l('            OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4044   l('            OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4045   --End of BugNo: 4299785
4046   l('          AND r.object_id = p_party_id ');
4047   l('          AND r.subject_id = stage.party_id ');
4048   l('          AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
4049   l('          AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
4050   l('          AND r.relationship_id = oc.party_relationship_id');
4051   l('          AND oc.org_contact_id = stage.org_contact_id; ');
4052   l('      END IF;');
4053   /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
4054   l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
4055   ldbg_s('Either restrict sql is null or search context id is not null');
4056   /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
4057   l('      IF p_search_ctx_id IS NULL THEN');
4058   ldbg_s('Search context id is null');
4059   l('        OPEN x_cursor FOR ');
4060   l('          SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4061   l('          FROM HZ_STAGED_PARTY_SITES stage');
4062   IF l_party_filter_str IS NOT NULL THEN
4063     l('        WHERE contains( concat_col, p_contains_str)>0');
4064     l('        AND EXISTS (');
4065     l('          SELECT 1 FROM HZ_STAGED_PARTIES p');
4066     l('          WHERE p.PARTY_ID = stage.PARTY_ID');
4067     l('          AND( (l_search_merged =''Y'' )  ');
4068     l('          OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I''))  ');
4069     l('          OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A''))       )  ');
4070     l('          AND ('||l_party_filter_str||'))');
4071   ELSE
4072     l('        WHERE contains( concat_col, p_contains_str)>0');
4073 
4074   END IF;
4075     --Start of BugNo: 4299785
4076     l('          AND( (l_search_merged =''Y'' )  ');
4077     l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4078     l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4079     --End of BugNo: 4299785
4080   l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4081 
4082   /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
4083   l('      ELSE');
4084   ldbg_s('Search context id is not null');
4085   l('        IF p_person_api = ''Y'' THEN');
4086   l('          OPEN x_cursor FOR ');
4087   l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4088   l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage');
4089   l('            WHERE contains( concat_col, p_contains_str)>0');
4090   --Start of BugNo: 4299785
4091   l('          AND( (l_search_merged =''Y'' )  ');
4092   l('          OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4093   l('          OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4094   --End of BugNo: 4299785
4095   l('            AND d.search_context_id = p_search_ctx_id');
4096   l('            AND d.party_id = stage.party_id');
4097   l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
4098   l('            UNION ');
4099   l('            SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, r.subject_id, stage.ORG_CONTACT_ID'|| l_ps_select_list);
4100   l('            FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage');
4101   l('            WHERE contains( concat_col, p_contains_str)>0');
4102   --Start of BugNo: 4299785
4103   l('          AND( (l_search_merged =''Y'' )  ');
4104   l('          OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4105   l('          OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4106   --End of BugNo: 4299785
4107   l('            AND d.search_context_id = p_search_ctx_id');
4108   l('            AND d.party_id = r.subject_id');
4109   l('            AND r.relationship_id = oc.party_relationship_id');
4110   l('            AND oc.org_contact_id = stage.org_contact_id');
4111   l('            AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);');
4112   l('        ELSE');
4113   l('          OPEN x_cursor FOR ');
4114   l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4115   l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage');
4116   l('            WHERE contains( concat_col, p_contains_str)>0');
4117   --Start of BugNo: 4299785
4118   l('            AND( (l_search_merged =''Y'' )  ');
4119   l('             OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4120   l('             OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4121   --End of BugNo: 4299785
4122   l('            AND d.search_context_id = p_search_ctx_id');
4123   l('            AND d.party_id = stage.party_id');
4124   l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4125   l('        END IF;');
4126 
4127   l('      END IF;');
4128 
4129   /**** Restrict_sql is not null. Retrieve using intermedia ****/
4130   l('    ELSE');
4131   ldbg_s('Restrict sql is not null');
4132   l('       l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
4133   l('       l_check_dt := instrb(p_restrict_sql, ''SELECTIVE_PS''); ');
4134   l('       IF (l_check_dt > 0 ) THEN ');
4135   ldbg_s('Restrict sql has the selective_ps  hint');
4136   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */''; ');
4137   l('       ELSIF (l_check > 0 ) THEN ');
4138   ldbg_s('Restrict sql has the selective hint');
4139   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */''; ');
4140   l('       END IF; ');
4141   l('       IF l_search_merged = ''Y'' THEN ');
4142   l('               l_status_sql := '' '' ;  ');
4143   l('       ELSIF l_search_merged = ''I'' THEN  ');
4144   l('               l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''', ''''I'''')''; ');
4145   l('       ELSE ');
4146   l('               l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''')''; ');
4147   l('       END IF; ');
4148   /* Performance fix for Bug:4643321*/
4149   l(' 		/*Performance fix for Bug:4589953*/ ');
4150   l(' 		IF(p_person_api=''Y'') THEN ');
4151   l('       IF (l_check > 0 ) THEN ');
4152      l('       IF instrb(p_restrict_sql, ''STAGE.'') > 0 THEN ');
4153      l('       	p_restrict_sql1 := replace( p_restrict_sql, ''STAGE.'', ''stage1.'');');
4154      l('       ELSIF instrb(p_restrict_sql, ''stage.'') > 0 THEN ');
4155      l('       	p_restrict_sql1 := replace( p_restrict_sql, ''stage.'', ''stage1.'');');
4156      l('       ELSE');
4157      l('		p_restrict_sql1 := ''stage1.''||p_restrict_sql;');
4158   l('       END IF; ');
4159   l('       l_sqlstr := ''SELECT  /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4160   l('                   '' FROM HZ_STAGED_PARTY_SITES stage''||');
4161   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4162   --Start of BugNo: 4299785
4163   l('                   ''  AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''|| ');
4164   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''|| ');
4165   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''|| ');
4166   --End of BugNo: 4299785
4167             l('         '' AND (ORG_CONTACT_ID IS NULL '' ||');
4168             l('       	'' AND (''||p_restrict_sql||''))'' ||');
4169             l('       	'' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '' ||');
4170             l('         '' UNION '' ||');
4171   l('       			 ''SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4172   l('                   '' FROM HZ_STAGED_PARTY_SITES stage''||');
4173   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4174   --Start of BugNo: 4299785
4175   l('                   ''  AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''|| ');
4176   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''|| ');
4177   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''|| ');
4178   --End of BugNo: 4299785
4179 
4180             l('         '' AND ORG_CONTACT_ID IN '' ||');
4181             l('         '' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships '' ||');
4182             l('         '' where subject_type = ''''PERSON'''' AND object_type = ''''ORGANIZATION'''') stage1 '' ||');
4183             l('         '' where stage1.relationship_id = oc.party_relationship_id '' || ');
4184             l('         '' and (''||p_restrict_sql1|| '') )'' ||') ;
4185             l('         '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4186   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str,');
4187   l('                    p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;');
4188 
4189   l('       ELSE ');
4190   l('       l_sqlstr := ''SELECT '' || l_hint ||'' PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4191   l('                   '' FROM HZ_STAGED_PARTY_SITES stage''||');
4192   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4193   --Start of BugNo: 4299785
4194   l('                   ''  AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''|| ');
4195   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''|| ');
4196   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''|| ');
4197   --End of BugNo: 4299785
4198   IF l_dyn_party_filter_str IS NOT NULL THEN
4199     l('                 '' AND EXISTS (''||');
4200     l('                 '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4201     l('                 '' WHERE p.party_id = stage.party_id '' || ');
4202     l('                 '' AND ('||l_dyn_party_filter_str||')  ''|| l_status_sql ||'' ) '' || ');
4203   END IF;
4204   l('                   '' AND (''||get_adjusted_restrict_sql(p_restrict_sql)||'')'' ||');
4205   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4206   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4207   FOR I in 1..l_party_filt_bind.COUNT LOOP
4208     l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4209   END LOOP;
4210   l('                    ,p_dup_party_id, p_dup_party_id;');
4211   l('       END IF; ');
4212 
4213   l('		ELSE ');
4214   l('       l_sqlstr := ''SELECT '' || l_hint ||'' PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4215   l('                   '' FROM HZ_STAGED_PARTY_SITES stage''||');
4216   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4217   --Start of BugNo: 4299785
4218   l('                   ''  AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''|| ');
4219   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''|| ');
4220   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''|| ');
4221   --End of BugNo: 4299785
4222 
4223   IF l_dyn_party_filter_str IS NOT NULL THEN
4224     l('                 '' AND EXISTS (''||');
4225     l('                 '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4226     l('                 '' WHERE p.party_id = stage.party_id '' || ');
4227     l('                 '' AND ('||l_dyn_party_filter_str||')  ''|| l_status_sql ||'' ) '' || ');
4228   END IF;
4229   l('                   '' AND (''||p_restrict_sql||'')'' ||');
4230   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4231   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4232   FOR I in 1..l_party_filt_bind.COUNT LOOP
4233     l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4234   END LOOP;
4235   l('                    ,p_dup_party_id, p_dup_party_id;');
4236   l('		  END IF; ');
4237   l('    END IF;');
4238   l(' 	    output_long_strings(''----------------------------------------------------------'');');
4239   l('       output_long_strings(''Party Site Contains String = ''||p_contains_str);');
4240   l('		output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
4241   l('  exception');
4242   l('    when others then');
4243   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
4244   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
4245   l('        FND_MSG_PUB.ADD;');
4246   l('        RAISE FND_API.G_EXC_ERROR;');
4247   --Start Bug No: 3032742.
4248   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
4249   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4250   l('        FND_MSG_PUB.ADD;');
4251   l('        RAISE FND_API.G_EXC_ERROR;');
4252   --Bug: 3392837
4253   l('      elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
4254   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4255   l('        FND_MSG_PUB.ADD;');
4256   l('        RAISE FND_API.G_EXC_ERROR;');
4257   --End Bug No : 3032742.
4258   l('      else ');
4259   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
4260   l('    	 FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4261   l('    	 FND_MSG_PUB.ADD;');
4262   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4263   l('      end if;');
4264   l('  END;');
4265   l('');
4266   l('  PROCEDURE open_contact_cursor(');
4267   l('            p_dup_party_id NUMBER, ');
4268   l('            p_party_id NUMBER, ');
4269   l('            p_restrict_sql VARCHAR2, ');
4270   l('            p_contains_str  VARCHAR2, ');
4271   l('            p_search_ctx_id  NUMBER, ');
4272   l('            p_search_merged  VARCHAR2, ');
4273   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
4274   l('  l_sqlstr VARCHAR2(4000);');
4275   l('  l_hint VARCHAR2(100); ');
4276   l('  l_check NUMBER; ');
4277   l('  l_check_dt NUMBER; ');
4278   l('  l_search_merged VARCHAR2(1); ');
4279   l('  l_status_sql VARCHAR2(100); ');
4280   l(' ');
4281   l('  BEGIN');
4282   ldbg_s('-----------------','calling the procedure open_contact_cursor');
4283   l('     IF (p_search_merged is null) then ');
4284   l('        l_search_merged := ''N'';  ');
4285   l('     ELSE ');
4286   l('        l_search_merged := p_search_merged; ');
4287   l('     END IF; ');
4288   /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
4289   l('     IF p_party_id IS NOT NULL THEN');
4290   ldbg_s('Single party scenario');
4291   l('       OPEN x_cursor FOR ');
4292   l('          SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
4293   l('          FROM HZ_STAGED_CONTACTS stage');
4294   IF l_party_filter_str IS NOT NULL THEN
4295     l('        WHERE contains( concat_col, p_contains_str)>0');
4296     l('        AND EXISTS (');
4297     l('          SELECT 1 FROM HZ_STAGED_PARTIES p');
4298     l('          WHERE p.PARTY_ID = stage.PARTY_ID');
4299     l('          AND( (l_search_merged =''Y'' )  ');
4300     l('          OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I''))  ');
4301     l('          OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A''))       )  ');
4302     l('          AND ('||l_party_filter_str||'))');
4303   ELSE
4304     l('        WHERE contains( concat_col, p_contains_str)>0');
4305   END IF;
4306   --Start of BugNo: 4299785
4307   l('          AND( (l_search_merged =''Y'' )  ');
4308   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4309   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4310   --End of BugNo: 4299785
4311   l('          AND stage.party_id = p_party_id;');
4312   /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
4313   l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
4314   ldbg_s('Either Restrict sql is null or Search Context Id is not null');
4315   /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
4316   l('      IF p_search_ctx_id IS NULL THEN');
4317   ldbg_s('Search Context id is null');
4318   l('        OPEN x_cursor FOR ');
4319   l('          SELECT ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
4320   l('          FROM HZ_STAGED_CONTACTS stage');
4321   IF l_party_filter_str IS NOT NULL THEN
4322     l('        WHERE contains( concat_col, p_contains_str)>0');
4323     l('        AND EXISTS (');
4324     l('          SELECT 1 FROM HZ_STAGED_PARTIES p');
4325     l('          WHERE p.PARTY_ID = stage.PARTY_ID');
4326     l('          AND( (l_search_merged =''Y'' )  ');
4327     l('          OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I''))  ');
4328     l('          OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A''))       )  ');
4329     l('          AND ('||l_party_filter_str||'))');
4330   ELSE
4331     l('        WHERE contains( concat_col, p_contains_str)>0');
4332   END IF;
4333   --Start of BugNo: 4299785
4334   l('          AND( (l_search_merged =''Y'' )  ');
4335   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4336   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4337   --End of BugNo: 4299785
4338   l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4339 
4340   /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
4341   l('      ELSE');
4342   ldbg_s('Search Context id is not null');
4343   l('          OPEN x_cursor FOR ');
4344   l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID'|| l_c_select_list);
4345   l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage');
4346   l('            WHERE contains( concat_col, p_contains_str)>0');
4347   l('            AND d.search_context_id = p_search_ctx_id');
4348   l('            AND d.party_id = stage.party_id');
4349 /*
4350   IF l_party_filter_str IS NOT NULL THEN
4351     l('          AND EXISTS (');
4352     l('            SELECT 1 FROM HZ_STAGED_PARTIES p');
4353     l('            WHERE p.PARTY_ID = stage.PARTY_ID');
4354     l('            AND ('||l_party_filter_str||'))');
4355   END IF;
4356 */
4357    --Start of BugNo: 4299785
4358    l('            AND( (l_search_merged =''Y'' )  ');
4359    l('             OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4360    l('             OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4361    --End of BugNo: 4299785
4362   l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4363   l('      END IF;');
4364 
4365   /**** Restrict_sql is not null. Retrieve using intermedia ****/
4366   l('    ELSE');
4367   ldbg_s('Restrict Sql is not null');
4368   l('       l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
4369   l('       l_check_dt := instrb(p_restrict_sql, ''SELECTIVE_CT''); ');
4370   l('       IF (l_check_dt > 0 ) THEN ');
4371   ldbg_s('Restrict sql has the selective_ct hint');
4372   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */''; ');
4373   l('       ELSIF (l_check > 0 ) THEN ');
4374   ldbg_s('Restrict sql has the selective hint');
4375   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */''; ');
4376   l('       END IF; ');
4377   l('       IF l_search_merged = ''Y'' THEN ');
4378   l('               l_status_sql := '' '' ;  ');
4379   l('       ELSIF l_search_merged = ''I'' THEN  ');
4380   l('               l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''', ''''I'''')''; ');
4381   l('       ELSE ');
4382   l('               l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''')''; ');
4383   l('       END IF; ');
4384   l('       l_sqlstr := ''SELECT   '' || l_hint || '' ORG_CONTACT_ID, PARTY_ID '|| l_c_select_list||'''||');
4385   l('                   '' FROM HZ_STAGED_CONTACTS stage''||');
4386   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4387   IF l_dyn_party_filter_str IS NOT NULL THEN
4388     l('                 '' AND EXISTS (''||');
4389     l('                 '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4390     l('                 '' WHERE p.party_id = stage.party_id '' || ');
4391     l('                 '' AND ('||l_dyn_party_filter_str||') ''|| l_status_sql ||'' ) '' || ');
4392   END IF;
4393   --Start of BugNo: 4299785
4394    l('                  '' AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''||');
4395    l('                  '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''||');
4396    l('                  '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''||');
4397   --End of BugNo: 4299785
4398   l('                   '' AND (''||p_restrict_sql||'')'' ||');
4399   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4400   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4401   FOR I in 1..l_party_filt_bind.COUNT LOOP
4402     l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4403   END LOOP;
4404   l('                    ,p_dup_party_id, p_dup_party_id;');
4405   l('    END IF;');
4406   l(' 	    output_long_strings(''----------------------------------------------------------'');');
4407   l('       output_long_strings(''Contacts Contains String = ''||p_contains_str);');
4408   l('		output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
4409   l('  exception');
4410   l('    when others then');
4411   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
4412   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
4413   l('        FND_MSG_PUB.ADD;');
4414   l('        RAISE FND_API.G_EXC_ERROR;');
4415   --Start Bug No: 3032742.
4416   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
4417   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4418   l('        FND_MSG_PUB.ADD;');
4419   l('        RAISE FND_API.G_EXC_ERROR;');
4420   --Bug: 3392837
4421   l('      elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
4422   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4423   l('        FND_MSG_PUB.ADD;');
4424   l('        RAISE FND_API.G_EXC_ERROR;');
4425   --End Bug No : 3032742.
4426   l('      else ');
4427   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
4428   l('    	 FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4429   l('    	 FND_MSG_PUB.ADD;');
4430   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4431   l('      end if;');
4432   l('  END;');
4433   l('');
4434   l('  PROCEDURE open_contact_pt_cursor(');
4435   l('            p_dup_party_id NUMBER, ');
4436   l('            p_party_id NUMBER, ');
4437   l('            p_restrict_sql VARCHAR2, ');
4438   l('            p_contains_str  VARCHAR2, ');
4439   l('            p_search_ctx_id  NUMBER, ');
4440   l('            p_search_merged  VARCHAR2, ');
4441   l('            p_search_rel_cpts  VARCHAR2, ');
4442   l('            p_person_api  VARCHAR2, ');
4443   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,');
4444   l('            p_restrict_entity VARCHAR2 DEFAULT NULL) IS');
4445   l('  l_sqlstr VARCHAR2(4000);');
4446   l('  l_hint VARCHAR2(100); ');
4447   l('  l_check NUMBER; ');
4448   l('  l_check_dt NUMBER; ');
4449   l('  l_search_merged VARCHAR2(1); ');
4450   l('  l_status_sql VARCHAR2(100); ');
4451   l('  p_restrict_sql1 VARCHAR2(4000); ');
4452   l(' ');
4453   l('  BEGIN');
4454   ldbg_s('-----------------','calling the procedure open_contact_pt_cursor');
4455   l('     IF (p_search_merged is null) then ');
4456   l('        l_search_merged := ''N'';  ');
4457   l('     ELSE ');
4458   l('        l_search_merged := p_search_merged; ');
4459   l('     END IF; ');
4460   l('  IF p_restrict_entity = ''CONTACTS''    ');
4461   l('  THEN');
4462   l('          OPEN x_cursor FOR ');
4463   l('          SELECT /*+ USE_NL(d stage) ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4464   l('          FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage ');
4465   l('          WHERE contains( concat_col, p_contains_str)>0 ');
4466   l('          AND d.search_context_id = p_search_ctx_id ');
4467   --Start of BugNo: 4299785
4468   l('          AND( (l_search_merged =''Y'' )  ');
4469   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4470   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4471   --End of BugNo: 4299785
4472   l('          AND d.party_id = stage.org_contact_id ; ');
4473   l('   END IF; ');
4474 
4475   l('  IF p_restrict_entity = ''PARTY_SITES''    ');
4476   l('  THEN');
4477   l('          OPEN x_cursor FOR ');
4478   l('          SELECT /*+ USE_NL(d stage) ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N3) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4479   l('          FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage ');
4480   l('          WHERE contains( concat_col, p_contains_str)>0 ');
4481   l('          AND d.search_context_id = p_search_ctx_id ');
4482   --Start of BugNo: 4299785
4483   l('          AND( (l_search_merged =''Y'' )  ');
4484   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4485   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4486   --End of BugNo: 4299785
4487   l('          AND d.party_id = stage.party_site_id ; ');
4488   l('   END IF; ');
4489 
4490   l(' IF p_restrict_entity IS NULL');
4491   l(' THEN');
4492 
4493   /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
4494   l('     IF p_party_id IS NOT NULL THEN');
4495   ldbg_s('Single Party Scenario');
4496   l('       IF p_search_rel_cpts = ''N'' THEN');
4497   l('         OPEN x_cursor FOR ');
4498   l('          SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4499   l('          FROM HZ_STAGED_CONTACT_POINTS stage');
4500   l('          WHERE contains( concat_col, p_contains_str)>0');
4501   --Start of BugNo: 4299785
4502   l('          AND( (l_search_merged =''Y'' )  ');
4503   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4504   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4505   --End of BugNo: 4299785
4506   l('          AND stage.party_id = p_party_id; ');
4507   l('       ELSE');
4508   l('         OPEN x_cursor FOR ');
4509   l('          SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4510   l('          FROM HZ_STAGED_CONTACT_POINTS stage');
4511   l('          WHERE contains( concat_col, p_contains_str)>0');
4512   --Start of BugNo: 4299785
4513   l('          AND( (l_search_merged =''Y'' )  ');
4514   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4515   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4516   --End of BugNo: 4299785
4517   l('          AND stage.party_id = p_party_id ');
4518   l('          UNION');
4519   l('          SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ stage.CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '|| l_cpt_select_list);
4520   l('          FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc');
4521   l('          WHERE contains( concat_col, p_contains_str)>0');
4522   l('          AND r.object_id = p_party_id ');
4523   --Start of BugNo: 4299785
4524   l('          AND( (l_search_merged =''Y'' )  ');
4525   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4526   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4527   --End of BugNo: 4299785
4528   l('                    AND r.subject_id = stage.party_id ');
4529   l('                    AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ' );
4530   l('                    AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
4531   l('                    AND r.relationship_id = oc.party_relationship_id');
4532   l('                    AND oc.org_contact_id = stage.org_contact_id; ');
4533   l('      END IF;');
4534 
4535   /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
4536   l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
4537   ldbg_s('Either Restrict sql is null or search_context_id is not null');
4538   /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
4539   l('      IF p_search_ctx_id IS NULL THEN');
4540   ldbg_s('Either Search context id is null');
4541   l('        OPEN x_cursor FOR ');
4542   l('          SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4543   l('          FROM HZ_STAGED_CONTACT_POINTS stage');
4544   IF l_party_filter_str IS NOT NULL THEN
4545     l('        WHERE contains( concat_col, p_contains_str)>0');
4546     l('        AND EXISTS (');
4547     l('          SELECT 1 FROM HZ_STAGED_PARTIES p');
4548     l('          WHERE p.PARTY_ID = stage.PARTY_ID');
4549     l('          AND( (l_search_merged =''Y'' )  ');
4550     l('          OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I''))  ');
4551     l('          OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A''))       )  ');
4552     l('          AND ('||l_party_filter_str||'))');
4553   ELSE
4554     l('        WHERE contains( concat_col, p_contains_str)>0');
4555   END IF;
4556   --Start of BugNo: 4299785
4557   l('          AND( (l_search_merged =''Y'' )  ');
4558   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4559   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4560   --End of BugNo: 4299785
4561   l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4562 
4563   /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
4564   l('      ELSE');
4565   ldbg_s('Search_context_id is not null');
4566   l('        IF p_person_api = ''Y'' THEN');
4567   l('          OPEN x_cursor FOR ');
4568   l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4569   l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage');
4570   l('            WHERE contains( concat_col, p_contains_str)>0');
4571   l('            AND d.search_context_id = p_search_ctx_id');
4572   l('            AND d.party_id = stage.party_id');
4573   --Start of BugNo: 4299785
4574   l('            AND( (l_search_merged =''Y'' )  ');
4575   l('             OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4576   l('             OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4577   --End of BugNo: 4299785
4578   l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
4579   l('            UNION ');
4580   l('            SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, r.subject_id, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '|| l_cpt_select_list);
4581   l('            FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage');
4582   l('            WHERE contains( concat_col, p_contains_str)>0');
4583   l('            AND d.search_context_id = p_search_ctx_id');
4584   l('            AND d.party_id = r.subject_id');
4585   l('            AND r.relationship_id = oc.party_relationship_id');
4586   l('            AND oc.org_contact_id = stage.org_contact_id');
4587   --Start of BugNo: 4299785
4588   l('            AND( (l_search_merged =''Y'' )  ');
4589   l('             OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4590   l('             OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4591   --End of BugNo: 4299785
4592   l('            AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);');
4593   l('        ELSE');
4594   l('          OPEN x_cursor FOR ');
4595   l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4596   l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage');
4597   l('            WHERE contains( concat_col, p_contains_str)>0');
4598   l('            AND d.search_context_id = p_search_ctx_id');
4599   l('            AND d.party_id = stage.party_id');
4600   --Start of BugNo: 4299785
4601   l('            AND( (l_search_merged =''Y'' )  ');
4602   l('             OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4603   l('             OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4604   --End of BugNo: 4299785
4605   l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4606   l('        END IF;');
4607 
4608   l('      END IF;');
4609 
4610   /**** Restrict_sql is not null. Retrieve using intermedia ****/
4611   l('    ELSE');
4612   ldbg_s('Restrict sql is not null');
4613   l('       l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
4614   l('       l_check_dt := instrb(p_restrict_sql, ''SELECTIVE_CPT''); ');
4615   l('       IF (l_check_dt > 0 ) THEN ');
4616   ldbg_s('Restrict Sql has the selective_cpt hint');
4617   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */''; ');
4618   l('       ELSIF (l_check > 0 ) THEN ');
4619   ldbg_s('Restrict Sql has the selective hint');
4620   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */''; ');
4621   l('       END IF; ');
4622   l('       IF l_search_merged = ''Y'' THEN ');
4623   l('               l_status_sql := '' '' ;  ');
4624   l('       ELSIF l_search_merged = ''I'' THEN  ');
4625   l('               l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''', ''''I'''')''; ');
4626   l('       ELSE ');
4627   l('               l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''')''; ');
4628   l('       END IF; ');
4629  /* IT Performance Bug:4589953, if person API then check for relationship contact points */
4630   l('       IF p_person_api = ''Y'' THEN');
4631   l(' 		/*Performance fix for Bug:4589953*/ ');
4632   l('       IF (l_check > 0 ) THEN ');
4633      l('       IF instrb(p_restrict_sql, ''STAGE.'') > 0 THEN ');
4634      l('       	p_restrict_sql1 := replace( p_restrict_sql, ''STAGE.'', ''stage1.'');');
4635      l('       ELSIF instrb(p_restrict_sql, ''stage.'') > 0 THEN ');
4636      l('       	p_restrict_sql1 := replace( p_restrict_sql, ''stage.'', ''stage1.'');');
4637      l('       ELSE');
4638      l('		p_restrict_sql1 := ''stage1.''||p_restrict_sql;');
4639   l('       END IF; ');
4640   l('       	l_sqlstr := '' SELECT   /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  '|| l_cpt_select_list||'''||');
4641   l('                   '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4642   l('                   '' WHERE contains( concat_col, :cont)>0  ''||');
4643   l('                   '' AND (stage.org_contact_id is null ''||');
4644   --Start of BugNo: 4299785
4645   l('                   '' AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''||');
4646   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''||');
4647   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''||');
4648   --End of BugNo: 4299785
4649   l('                   '' AND (''||p_restrict_sql||''))'' ||');
4650   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '' ||');
4651   l('                   '' UNION '' ||');
4652   l('                   '' SELECT   /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  '|| l_cpt_select_list||'''||');
4653   l('                   '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4654   l('                   '' WHERE contains( concat_col, :cont)>0  ''||');
4655   --Start of BugNo: 4299785
4656   l('                   '' AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''||');
4657   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''||');
4658   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''||');
4659   --End of BugNo: 4299785
4660     l('                 '' AND (stage.org_contact_id in '' || ');
4661     l('                 '' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r '' ||');
4662     l('                 '' where subject_type = ''''PERSON'''' AND object_type = ''''ORGANIZATION'''') stage1 '' || ');
4663     l('                 '' where stage1.relationship_id = oc.party_relationship_id '' || ');
4664 	l('                 '' and (''||p_restrict_sql1 || '') ) )'' ||') ;
4665     l('                 '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4666   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str,');
4667   l('                    p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;');
4668 
4669   l('       ELSE ');
4670   l('       	l_sqlstr := ''SELECT   '' || l_hint ||'' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  '|| l_cpt_select_list||'''||');
4671   l('                   '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4672   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4673   IF l_dyn_party_filter_str IS NOT NULL THEN
4674     l('                 '' AND EXISTS (''||');
4675     l('                 '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4676     l('                 '' WHERE p.party_id = stage.party_id '' || ');
4677     l('                 '' AND ('||l_dyn_party_filter_str||')  ''|| l_status_sql ||'' ) '' || ');
4678   END IF;
4679   --Start of BugNo: 4299785
4680   l('                   '' AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''||');
4681   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''||');
4682   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''||');
4683   --End of BugNo: 4299785
4684   l('                   '' AND (''||get_adjusted_restrict_sql(p_restrict_sql)||'')'' ||');
4685   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4686   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4687   FOR I in 1..l_party_filt_bind.COUNT LOOP
4688     l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4689   END LOOP;
4690   l('                    ,p_dup_party_id, p_dup_party_id;');
4691   l('       END IF; ');
4692 
4693   l('       ELSE ');
4694   l('       	l_sqlstr := ''SELECT   '' || l_hint ||'' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  '|| l_cpt_select_list||'''||');
4695   l('                   '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4696   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4697   IF l_dyn_party_filter_str IS NOT NULL THEN
4698     l('                 '' AND EXISTS (''||');
4699     l('                 '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4700     l('                 '' WHERE p.party_id = stage.party_id '' || ');
4701     l('                 '' AND ('||l_dyn_party_filter_str||')  ''|| l_status_sql ||'' ) '' || ');
4702   END IF;
4703   --Start of BugNo: 4299785
4704   l('                   '' AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''||');
4705   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''||');
4706   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''||');
4707   --End of BugNo: 4299785
4708   l('                   '' AND (''||p_restrict_sql||'')'' ||');
4709   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4710   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4711   FOR I in 1..l_party_filt_bind.COUNT LOOP
4712     l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4713   END LOOP;
4714   l('                    ,p_dup_party_id, p_dup_party_id;');
4715   l('       END IF; ');
4716   l('    END IF;');
4717   l('  END IF; ');
4718   l(' 	    output_long_strings(''----------------------------------------------------------'');');
4719   l('       output_long_strings(''Contact Points Contains String = ''||p_contains_str);');
4720   l('		output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
4721   l('  exception');
4722   l('    when others then');
4723   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
4724   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
4725   l('        FND_MSG_PUB.ADD;');
4726   l('        RAISE FND_API.G_EXC_ERROR;');
4727   --Start Bug No: 3032742.
4728   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
4729   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4730   l('        FND_MSG_PUB.ADD;');
4731   l('        RAISE FND_API.G_EXC_ERROR;');
4732   --Bug: 3392837
4733   l('      elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
4734   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4735   l('        FND_MSG_PUB.ADD;');
4736   l('        RAISE FND_API.G_EXC_ERROR;');
4737   --End Bug No : 3032742.
4738   l('      else ');
4739   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
4740   l('    	 FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4741   l('    	 FND_MSG_PUB.ADD;');
4742   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4743   l('      end if;');
4744   l('  END;');
4745   l('');
4746 
4747  l('');
4748  l('  PROCEDURE return_direct_matches(p_restrict_sql VARCHAR2, p_match_str VARCHAR2, p_thresh NUMBER, p_search_ctx_id NUMBER, p_search_merged VARCHAR2, p_dup_party_id NUMBER, x_num_matches OUT NUMBER) IS');
4749 
4750   l('    l_sqlstr VARCHAR2(4000);');
4751   l('    l_search_merged VARCHAR2(1);');
4752   l('  BEGIN');
4753   l('    IF (p_search_merged is null) then ');
4754   l('       l_search_merged := ''N'';  ');
4755   l('    ELSE ');
4756   l('       l_search_merged := p_search_merged; ');
4757   l('    END IF; ');
4758   l('    IF p_restrict_sql IS NULL THEN');
4759   l('      INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
4760   l('      SELECT p_search_ctx_id, PARTY_ID, '||l_party_name_score);
4761   l('      FROM hz_staged_parties ');
4762   l('      WHERE TX8 LIKE g_party_stage_rec.TX8||'' %''');
4763   l('      AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||'' '' =  TX36))');
4764   l('      AND( (l_search_merged =''Y'' ) ');
4765   l('           OR (l_search_merged = ''I'' AND nvl(status, ''A'') in (''A'', ''I''))  ');
4766   l('           OR (l_search_merged = ''N'' AND nvl(status, ''A'') in (''A'')))  ');
4767   l('      AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)');
4768   l('      AND rownum <= p_thresh;');
4769   l('    ELSE');
4770   l_party_name_score:=replace(replace(l_party_name_score,'g_party_stage_rec.TX8',':TX8'),'''','''''');
4771   l('      l_sqlstr := ''INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) SELECT :ctx_id, PARTY_ID, '||l_party_name_score||' FROM hz_staged_parties stage '';');
4772   l('      l_sqlstr := l_sqlstr || '' WHERE TX8 like :TX8||'''' %'''' '';');
4773   l('      l_sqlstr := l_sqlstr || '' AND (:TX36 IS NULL OR :TX36||'''' '''' =  TX36) '';');
4774   l('      IF l_search_merged = ''N'' THEN');
4775   l('        l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''')=''''A'''' '';');
4776   l('      ELSIF l_search_merged = ''Y'' THEN');
4777   l('        l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''') in (''''A'''',''''I'''') '';');
4778   l('      END IF;');
4779   l('      l_sqlstr := l_sqlstr || '' AND (:p_dup IS NULL OR party_id <> :p_dup ) '';');
4780   l('     l_sqlstr := l_sqlstr || '' AND ''||p_restrict_sql||'' '';');
4781   l('     l_sqlstr := l_sqlstr || '' AND ROWNUM <= :thresh '';');
4782 
4783   IF l_purpose = 'S' THEN
4784     l('     EXECUTE IMMEDIATE l_sqlstr USING p_search_ctx_id, g_party_stage_rec.TX8,g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id,p_thresh;');
4785   ELSE
4786     l('     EXECUTE IMMEDIATE l_sqlstr USING p_search_ctx_id, g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id,p_thresh;');
4787   END IF;
4788 
4789   l('    END IF;');
4790   l('    x_num_matches := SQL%ROWCOUNT;');
4791   l('  END;');
4792   l('');
4793   l('  FUNCTION get_new_score_rec (');
4794   l('    	 p_init_total_score NUMBER,');
4795   l('    	 p_init_party_score NUMBER,');
4796   l('    	 p_init_party_site_score NUMBER,');
4797   l('    	 p_init_contact_score NUMBER,');
4798   l('    	 p_init_contact_point_score NUMBER, ');
4799   l('    	 p_party_id NUMBER, ');
4800   l('    	 p_party_site_id NUMBER, ');
4801   l('    	 p_org_contact_id NUMBER, ');
4802   l('    	 p_contact_point_id NUMBER) ');
4803   l('     RETURN HZ_PARTY_SEARCH.score_rec IS');
4804   l('    l_score_rec HZ_PARTY_SEARCH.score_rec;');
4805   l('  BEGIN');
4806   ldbg_s('-----------------','calling the function get_new_score_rec to set the l_score_rec structure');
4807   l('    l_score_rec.TOTAL_SCORE := p_init_total_score;');
4808   l('    l_score_rec.PARTY_SCORE := p_init_party_score;');
4809   l('    l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;');
4810   l('    l_score_rec.CONTACT_SCORE := p_init_contact_score;');
4811   l('    l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;');
4812   l('    l_score_rec.PARTY_ID := p_party_id;');
4813   l('    l_score_rec.PARTY_SITE_ID := p_party_site_id;');
4814   l('    l_score_rec.ORG_CONTACT_ID := p_org_contact_id;');
4815   l('    l_score_rec.CONTACT_POINT_ID := p_contact_point_id;');
4816   l('    RETURN l_score_rec;');
4817   l('  END;');
4818 END IF; ---Code Change for Match Rule Set
4819   l('');
4820   l('   /**********************************************************');
4821   l('   This procedure finds the set of parties that match the search');
4822   l('   criteria and returns a scored set of parties');
4823   l('');
4824   l('   The steps in executing the search are as follows');
4825   l('    1. Initialization and error checks');
4826   l('    2. Setup of intermedia query strings for Acquisition query');
4827   l('    3. Execution of Acquisition query');
4828   l('    4. Execution of Secondary queries to score results');
4829   l('    5. Setup of data temporary table to return search results');
4830   l('   **********************************************************/');
4831   l('');
4832   -- Generated
4833   l('PROCEDURE find_parties (');
4834   l('      p_rule_id               IN      NUMBER,');
4835   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
4836   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
4837   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
4838   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
4839   l('      p_restrict_sql          IN      VARCHAR2,');
4840   l('      p_match_type            IN      VARCHAR2,');
4841   l('      p_search_merged         IN      VARCHAR2,');
4842   l('      p_dup_party_id          IN      NUMBER,');
4843   l('      p_dup_set_id            IN      NUMBER,');
4844   l('      p_dup_batch_id          IN      NUMBER,');
4845   l('      p_ins_details           IN      VARCHAR2,');
4846   l('      x_search_ctx_id         OUT     NUMBER,');
4847   l('      x_num_matches           OUT     NUMBER');
4848   l(') IS');
4849   l('');
4850 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
4851   l('  -- Strings to hold the generated Intermedia query strings');
4852   l('  l_party_contains_str VARCHAR2(32000); ');
4853   l('  l_party_site_contains_str VARCHAR2(32000);');
4854   l('  l_contact_contains_str VARCHAR2(32000);');
4855   l('  l_contact_pt_contains_str VARCHAR2(32000);');
4856   l('  l_denorm_str VARCHAR2(32000);');
4857   l('  l_ps_denorm_str VARCHAR2(32000);');
4858   l('  l_ct_denorm_str VARCHAR2(32000);');
4859   l('  l_cpt_denorm_str VARCHAR2(32000);');
4860 
4861   l('');
4862   l('  -- Other local variables');
4863   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
4864   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
4865   l('  -- For Score calculation');
4866   l('  l_max_score NUMBER;');
4867   l('  l_match_idx NUMBER;');
4868   l('  l_entered_max_score NUMBER;');
4869   l('  FIRST BOOLEAN;');
4870   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
4871   l('');
4872   FOR TX IN (
4873       SELECT distinct f.staged_attribute_column
4874       FROM hz_trans_functions_vl f, hz_secondary_trans st,
4875            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
4876       WHERE sa.match_rule_id = p_rule_id
4877       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
4878       AND st.function_id = f.function_id
4879       AND a.attribute_id = sa.attribute_id) LOOP
4880     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
4881   END LOOP;
4882   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
4883   l('  H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
4884   l('  H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
4885   l('');
4886   l('  l_score NUMBER;');
4887   l('  l_idx NUMBER;');
4888   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
4889   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
4890   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
4891   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
4892   l('  l_party_id NUMBER;');
4893   l('  l_ps_party_id NUMBER;');
4894   l('  l_ct_party_id NUMBER;');
4895   l('  l_cpt_party_id NUMBER;');
4896   l('  l_cpt_ps_id NUMBER;');
4897   l('  l_cpt_contact_id NUMBER;');
4898   l('  l_cpt_type VARCHAR2(100);');
4899   l('  l_party_site_id NUMBER;');
4900   l('  l_org_contact_id NUMBER;');
4901   l('  l_contact_pt_id NUMBER;');
4902   l('  l_ps_contact_id NUMBER;');
4903   l('  l_party_max_score NUMBER;');
4904   l('  l_ps_max_score NUMBER;');
4905   l('  l_contact_max_score NUMBER;');
4906   l('  l_cpt_max_score NUMBER;');
4907   l('  l_denorm_max_score NUMBER;');
4908   l('  l_non_denorm_max_score NUMBER;');
4909   l('');
4910   l('  defpt NUMBER :=0;');
4911   l('  defps NUMBER :=0;');
4912   l('  defct NUMBER :=0;');
4913   l('  defcpt NUMBER :=0;');
4914   l('  l_index NUMBER;');
4915   l('  l_max_thresh NUMBER;');
4916   l('  l_tmp NUMBER;');
4917   l('  l_merge_flag VARCHAR2(1);');
4918   l('  l_num_eval NUMBER:=0;');
4919   l('');
4920   l('  --Fix for bug 4417124 ');
4921   l('  l_use_contact_addr_info BOOLEAN := TRUE;');
4922   l('  l_use_contact_cpt_info BOOLEAN  := TRUE;');
4923   l('  l_use_contact_addr_flag VARCHAR2(1) := ''Y'';');
4924   l('  l_use_contact_cpt_flag  VARCHAR2(1) := ''Y'';');
4925   l('');
4926   l('  L_RETURN_IMM_EXC EXCEPTION;');
4927   l('');
4928   l('  ');
4929   l('  /********************* Find Parties private procedures *******/');
4930 
4931   l('  PROCEDURE push_eval IS');
4932   l('  BEGIN');
4933   ldbg_s('-----------------','calling the procedure push_eval');
4934   ldbg_s('Emptying the lists H_PARTY_ID, H_PARTY_ID_LIST and H_SCORES');
4935   l('    H_PARTY_ID.DELETE;');
4936   l('    H_PARTY_ID_LIST.DELETE;');
4937   l('    H_SCORES.DELETE;        ');
4938   l('    g_mappings.DELETE;');
4939   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
4940   l('    call_order(5) := call_order(1);');
4941   l('    call_type(5) := ''AND'';');
4942   l('    call_max_score(5) := call_max_score(1);');
4943   l('    call_type(2) := ''OR'';');
4944   l('  END;');
4945 
4946   l('');
4947   l('  /**  Private procedure to acquire and score at party level  ***/');
4948   l('  PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
4949   l('    l_party_id_idx NUMBER:=1;');
4950   l('    l_ctx_id NUMBER;');
4951   l('    l_precalc_score BOOLEAN := FALSE;');
4952   l('  BEGIN');
4953   ldbg_s('-----------------','calling the procedure eval_party_level');
4954   l('    SAVEPOINT eval_start;');
4955   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
4956   l('      l_ctx_id := l_search_ctx_id;');
4957   ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
4958   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
4959   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
4960   l('             l_search_ctx_id,H_PARTY_ID(I));');
4961   l('      H_PARTY_ID.DELETE;');
4962   l('      H_PARTY_ID_LIST.DELETE;');
4963   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
4964   ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
4965   l('      l_ctx_id := l_search_ctx_id;');
4966   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
4967   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
4968   l('             l_search_ctx_id,H_PARTY_ID(I));');
4969   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
4970   l('    ELSE');
4971   l('      IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
4972   l('         and check_estimate_hits(''PARTY'',p_party_contains_str)>l_max_thresh THEN');
4973   ldbg_s('In eval party level estimated hits exceed threshold');
4974   l('        IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' AND p_dup_batch_id IS NULL THEN');
4975   ldbg_s('In eval party level resolution options is set to SQL search.');
4976   l('          IF (l_party_site_contains_str IS NULL AND');
4977   l('             l_contact_contains_str IS NULL AND');
4978   l('             l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN');
4979   l('            return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,p_search_merged,p_dup_party_id, x_num_matches);');
4980   l('            RAISE L_RETURN_IMM_EXC;');
4981   l('          ELSE');
4982   l('            open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);');
4983   l('          END IF;');
4984   l('        ELSE');
4985   l('          IF p_index>1 THEN');
4986   ldbg_s('In eval party level number of matches found exceeded threshold');
4987   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
4988   l('            FND_MSG_PUB.ADD;');
4989   l('            RAISE FND_API.G_EXC_ERROR;');
4990   l('          ELSE');
4991   l('            push_eval;');
4992   l('            RETURN;');
4993   l('          END IF;');
4994   l('        END IF;');
4995   l('      END IF;');
4996   l('      l_ctx_id := NULL;');
4997   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
4998   l('    END IF;');
4999   ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_CURSOR ================');
5000   l('    IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN');
5001   l('      open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);');
5002   l('    END IF;');
5003   l('    LOOP ');
5004   l('      FETCH l_party_cur INTO');
5005   l('         l_party_id '||l_p_into_list||';');
5006   l('      EXIT WHEN l_party_cur%NOTFOUND;');
5007   l('      l_index := map_id(l_party_id);');
5008   l('      l_score := GET_PARTY_SCORE('||l_p_param_list||');');
5009 
5010   l('      IF NOT H_SCORES.EXISTS(l_index) THEN');
5011   l('        H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
5012   l('      ELSE');
5013   l('        H_SCORES(l_index).TOTAL_SCORE := ');
5014   l('                H_SCORES(l_index).TOTAL_SCORE+l_score;');
5015   l('        H_SCORES(l_index).PARTY_SCORE := l_score;');
5016   l('      END IF;');
5017   l('      IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5018   l('        H_PARTY_ID_LIST(l_index) := 1;');
5019   l('        H_PARTY_ID(l_party_id_idx) := l_party_id;');
5020   l('        l_party_id_idx:= l_party_id_idx+1;');
5021   l('      END IF;');
5022   l('      IF (l_party_id_idx-1)>l_max_thresh THEN');
5023   l('        IF p_index=1 AND call_order(2) = ''PARTY_SITE'' ');
5024   l('          AND call_type(2) = ''AND'' AND l_contact_contains_str IS NULL');
5025   l('          AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' ');
5026   l('          AND l_contact_pt_contains_str IS NULL THEN');
5027   l('            EXIT;');
5028   l('        END IF;');
5029   l('	      CLOSE l_party_cur;'); --Bug No: 3872745
5030   l('        IF p_index>1 THEN');
5031   ldbg_s('In eval party level estimated hits exceed threshold');
5032   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5033   l('          FND_MSG_PUB.ADD;');
5034   l('          RAISE FND_API.G_EXC_ERROR;');
5035   l('        ELSE');
5036   l('          push_eval;');
5037   l('          RETURN;');
5038   l('        END IF;');
5039   l('      END IF;');
5040   ds(fnd_log.level_statement);
5041   dc(fnd_log.level_statement,'In eval_party_level l_party_id = ','l_party_id');
5042   dc(fnd_log.level_statement,'In eval_party_level l_score = ','l_score');
5043   de;
5044   l('    END LOOP;');
5045   ldbg_s('===========END of LOOP=====================');
5046   l('    CLOSE l_party_cur;');
5047   l('    ROLLBACK to eval_start;');
5048   l('  END;');
5049   l('');
5050   l('  /**  Private procedure to acquire and score at party site level  ***/');
5051   l('  PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
5052   l('    l_party_id_idx NUMBER:=1;');
5053   l('    l_ctx_id NUMBER;');
5054   l('    h_ps_id HZ_PARTY_SEARCH.IDList;');
5055   l('    h_ps_party_id HZ_PARTY_SEARCH.IDList;');
5056   l('    h_ps_score HZ_PARTY_SEARCH.IDList;');
5057   l('    detcnt NUMBER := 1;');
5058   l('  BEGIN');
5059   ldbg_s('-----------------','calling the procedure eval_party_site_level');
5060   l('  IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,''D_PS'')>0');
5061   l('      AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and');
5062   l('      l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> ''Y'' THEN');
5063   l('    l_party_id := H_SCORES.FIRST;');
5064   l('    WHILE l_party_id IS NOT NULL LOOP');
5065   l('      H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;');
5066   l('      l_party_id:=H_SCORES.NEXT(l_party_id);');
5067   l('    END LOOP;');
5068   l('    RETURN;');
5069 
5070   l('  END IF;');
5071 
5072   l('    SAVEPOINT eval_start;');
5073   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
5074   ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5075   l('      l_ctx_id := l_search_ctx_id;');
5076   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5077   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5078   l('             l_search_ctx_id,H_PARTY_ID(I));');
5079   l('      H_PARTY_ID.DELETE;');
5080   l('      H_PARTY_ID_LIST.DELETE;');
5081   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5082   ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5083   l('      l_ctx_id := l_search_ctx_id;');
5084   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5085   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5086   l('             l_search_ctx_id,H_PARTY_ID(I));');
5087   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5088   l('    ELSE');
5089   l('      IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5090   l('         and check_estimate_hits(''PARTY_SITES'',p_party_site_contains_str)>l_max_thresh THEN');
5091   ldbg_s('In eval party site level estimated hits exceed threshold');
5092   l('        IF p_index>1 THEN');
5093   ldbg_s('In eval party site level number of matches found exceeded threshold');
5094   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5095   l('          FND_MSG_PUB.ADD;');
5096   l('          RAISE FND_API.G_EXC_ERROR;');
5097   l('        ELSE');
5098   l('          push_eval;');
5099   l('          RETURN;');
5100   l('        END IF;');
5101   l('      END IF;');
5102 
5103   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5104   l('      l_ctx_id := NULL;');
5105   l('    END IF;');
5106   ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_SITE_CURSOR ================');
5107   l('    open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id,  p_search_merged, ''N'',''N'',l_party_site_cur);');
5108   l('    LOOP ');
5109   l('      FETCH l_party_site_cur INTO');
5110   l('         l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
5111   l('      EXIT WHEN l_party_site_cur%NOTFOUND;');
5112   l('      --Fix for bug 4417124 ');
5113   l('      IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN');
5114   l('        l_index := map_id(l_ps_party_id);');
5115   l('        l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
5116 
5117   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
5118   l('          H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);');
5119   l('        ELSE');
5120   l('          IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
5121   l('            H_SCORES(l_index).TOTAL_SCORE := ');
5122   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
5123   l('            H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
5124   l('          END IF;');
5125   l('        END IF;');
5126   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5127   l('          H_PARTY_ID_LIST(l_index) := 1;');
5128   l('          H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
5129   l('          l_party_id_idx:= l_party_id_idx+1;');
5130   l('        END IF;');
5131   l('        IF p_ins_details = ''Y'' THEN');
5132   l('          h_ps_id(detcnt) := l_party_site_id;');
5133   l('          h_ps_party_id(detcnt) := l_ps_party_id;');
5134   l('          IF (p_emax_score > 0) THEN ');
5135   l('              h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
5136   l('          ELSE ');
5137   l('              h_ps_score(detcnt) := 0; ');
5138   l('          END IF; ');
5139   l('          detcnt := detcnt +1;');
5140   l('        END IF;');
5141   ds(fnd_log.level_statement);
5142   dc(fnd_log.level_statement,'In eval_party_site_level l_party_site_id = ','l_party_site_id');
5143   dc(fnd_log.level_statement,'In eval_paty_site_level l_ps_party_id = ','l_ps_party_id');
5144   dc(fnd_log.level_statement,'In eval_party_site_level l_score = ','l_score');
5145   de;
5146   l('      END IF;');
5147   l('    END LOOP;');
5148   ldbg_s('===========END of LOOP=====================');
5149   l('    CLOSE l_party_site_cur;');
5150   l('    ROLLBACK to eval_start;');
5151   l('    IF p_ins_details = ''Y'' THEN');
5152  ldbg_s('In eval_party_site_level inserting into HZ_MATCHED_PARTY_SITES_GT from the H_PS_ID list');
5153   l('      FORALL I in 1..h_ps_id.COUNT ');
5154   l('        INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
5155   l('          l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
5156   l('    END IF;');
5157   l('  END;');
5158   l('');
5159   l('  /**  Private procedure to acquire and score at contact point level  ***/');
5160   l('  PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
5161   l('    l_party_id_idx NUMBER:=1;');
5162   l('    l_ctx_id NUMBER;');
5163   l('    h_ct_id HZ_PARTY_SEARCH.IDList;');
5164   l('    h_ct_party_id HZ_PARTY_SEARCH.IDList;');
5165   l('    h_ct_score HZ_PARTY_SEARCH.IDList;');
5166   l('    detcnt NUMBER := 1;');
5167   l('  BEGIN');
5168   ldbg_s('-----------------','calling the procedure eval_contact_level');
5169   l('    SAVEPOINT eval_start;');
5170   l('    IF l_match_str = '' AND '' AND p_call_type=''AND'' THEN');
5171   ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5172   l('      l_ctx_id := l_search_ctx_id;');
5173   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5174   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5175   l('             l_search_ctx_id,H_PARTY_ID(I));');
5176   l('      H_PARTY_ID.DELETE;');
5177   l('      H_PARTY_ID_LIST.DELETE;');
5178   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5179   ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5180   l('      l_ctx_id := l_search_ctx_id;');
5181   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5182   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5183   l('             l_search_ctx_id,H_PARTY_ID(I));');
5184   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5185   l('    ELSE');
5186   l('      IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5187   l('         and check_estimate_hits(''CONTACTS'',p_contact_contains_str)>l_max_thresh THEN');
5188   ldbg_s('In eval contact level estimated hits exceed threshold');
5189   l('        IF p_index>1 THEN');
5190   ldbg_s('In eval contact level number of matches found exceeded threshold');
5191   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5192   l('          FND_MSG_PUB.ADD;');
5193   l('          RAISE FND_API.G_EXC_ERROR;');
5194   l('        ELSE');
5195   l('          push_eval;');
5196   l('          RETURN;');
5197   l('        END IF;');
5198   l('      END IF;');
5199   l('      l_ctx_id := NULL;');
5200   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5201   l('    END IF;');
5202   ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_CURSOR ================');
5203   l('    open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id,  p_search_merged, l_contact_cur);');
5204   l('    LOOP ');
5205   l('      FETCH l_contact_cur INTO');
5206   l('         l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
5207   l('      EXIT WHEN l_contact_cur%NOTFOUND;');
5208   l('      l_index := map_id(l_ct_party_id);');
5209   l('      l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
5210 
5211   l('      IF NOT H_SCORES.EXISTS(l_index) THEN');
5212   l('        H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id,null);');
5213   l('      ELSE');
5214   l('        IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
5215   l('          H_SCORES(l_index).TOTAL_SCORE := ');
5216   l('                H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
5217   l('          H_SCORES(l_index).CONTACT_SCORE := l_score;');
5218   l('        END IF;');
5219   l('      END IF;');
5220   l('      IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5221   l('        H_PARTY_ID_LIST(l_index) := 1;');
5222   l('        H_PARTY_ID(l_party_id_idx) := l_ct_party_id;');
5223   l('        l_party_id_idx:= l_party_id_idx+1;');
5224   l('      END IF;');
5225   l('      IF p_ins_details = ''Y'' THEN');
5226   l('        h_ct_id(detcnt) := l_org_contact_id;');
5227   l('        h_ct_party_id(detcnt) := l_ct_party_id;');
5228   l('        IF (p_emax_score > 0) THEN ');
5229   l('            h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
5230   l('        ELSE ');
5231   l('            h_ct_score(detcnt) := 0; ');
5232   l('        END IF; ');
5233   l('        detcnt := detcnt +1;');
5234   l('      END IF;');
5235   ds(fnd_log.level_statement);
5236   dc(fnd_log.level_statement,'In eval_contact_level l_org_contact_id = ','l_org_contact_id');
5237   dc(fnd_log.level_statement,'In eval_contact_level l_ct_party_id = ','l_ct_party_id');
5238   dc(fnd_log.level_statement,'In eval_contact_level l_score = ','l_score');
5239   de;
5240   l('    END LOOP;');
5241   ldbg_s('===========END of LOOP=====================');
5242   l('    CLOSE l_contact_cur;');
5243   l('    ROLLBACK to eval_start;');
5244   l('    IF p_ins_details = ''Y'' THEN');
5245   ldbg_s('In eval_contact_level inserting into HZ_MATCHED_CONTACTS_GT from the H_CT_ID list');
5246   l('      FORALL I in 1..h_ct_id.COUNT ');
5247   l('        INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
5248   l('          l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
5249   l('    END IF;');
5250   l('  END;');
5251   l('');
5252   l('  /**  Private procedure to acquire and score at contact point level  ***/');
5253   l('  PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
5254   l('    l_party_id_idx NUMBER:=1;');
5255   l('    l_ctx_id NUMBER;');
5256   l('    h_cpt_id HZ_PARTY_SEARCH.IDList;');
5257   l('    h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
5258   l('    h_cpt_score HZ_PARTY_SEARCH.IDList;');
5259   l('    detcnt NUMBER := 1;');
5260   l('    l_cpt_flag VARCHAR2(1) := ''N'';');
5261 
5262   --l('    l_continue VARCHAR2(1) := ''Y'';');
5263   l('    is_a_match VARCHAR2(1) := ''Y'';');
5264   l('  BEGIN');
5265   ldbg_s('-----------------','calling the procedure eval_cpt_level');
5266   l('    SAVEPOINT eval_start;');
5267   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
5268   ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5269   l('      l_ctx_id := l_search_ctx_id;');
5270   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5271   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5272   l('             l_search_ctx_id,H_PARTY_ID(I));');
5273   l('      H_PARTY_ID.DELETE;');
5274   l('      H_PARTY_ID_LIST.DELETE;');
5275   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5276   ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5277   l('      l_ctx_id := l_search_ctx_id;');
5278   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5279   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5280   l('             l_search_ctx_id,H_PARTY_ID(I));');
5281   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5282   l('    ELSE');
5283   l('      IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5284   l('         and check_estimate_hits(''CONTACT_POINTS'',p_contact_pt_contains_str)>l_max_thresh THEN');
5285   ldbg_s('In eval contact point level estimated hits exceed threshold');
5286   l('        IF p_index>1 THEN');
5287   ldbg_s('In eval contact point level number of matches found exceeded threshold');
5288   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5289   l('          FND_MSG_PUB.ADD;');
5290   l('          RAISE FND_API.G_EXC_ERROR;');
5291   l('        ELSE');
5292   l('          push_eval;');
5293   l('          RETURN;');
5294   l('        END IF;');
5295   l('      END IF;');
5296 
5297   l('      l_ctx_id := NULL;');
5298   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5299   l('    END IF;');
5300   ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR ================');
5301   l('    open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id,  p_search_merged, ''N'', ''N'',l_contact_pt_cur);');
5302   l('    LOOP ');
5303   l('      FETCH l_contact_pt_cur INTO');
5304   l('         l_contact_pt_id,  l_cpt_type, l_cpt_party_id,  l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
5305   l('      EXIT WHEN l_contact_pt_cur%NOTFOUND;');
5306   ldbg_s('----------------------------------------------------------------------------------');
5307   ldbg_sv('Processing party_id - ','l_cpt_party_id');
5308   ldbg_sv('Contact Point Type - ','l_cpt_type');
5309   l('      --Fix for bug 4417124 ');
5310   l('      IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN');
5311   l('        l_index := map_id(l_cpt_party_id);');
5312   l('        l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
5313 
5314   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
5315   l('          H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);');
5316   if l_purpose='S' then
5317     l('          H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
5318     ldbg_s('Processing second Time for this party');
5319   else
5320    	ldbg_s('Processing First Time for this party');
5321   end if;
5322   ldbg_sv('l_index is - ','l_index');
5323 
5324    l('        ELSE');
5325   if l_purpose='S' then
5326     l('          IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then');
5327     l('            IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then');
5328     l('              H_SCORES(l_index).TOTAL_SCORE :=');
5329     l('              H_SCORES(l_index).TOTAL_SCORE-(H_SCORES(l_index).CONTACT_POINT_SCORE-H_SCORES(l_index).cpt_type_match(l_cpt_type))+l_score;');
5330     l('              H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE-H_SCORES(l_index).cpt_type_match(l_cpt_type) + l_score;');
5331     l('              H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
5332     ldbg_s('Passed in score greater than existing score');
5333     ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ' , 'H_SCORES(l_index).TOTAL_SCORE' );
5334     ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ' , 'H_SCORES(l_index).CONTACT_POINT_SCORE' );
5335     ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ', 'H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
5336     l('            END IF;');
5337     l('          ELSE');
5338     ldbg_s('Passed in score less than or equal to the existing score ');
5339     l('            H_SCORES(l_index).TOTAL_SCORE :=');
5340     l('            		H_SCORES(l_index).TOTAL_SCORE+l_score;');
5341     l('            H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
5342     l('            H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
5343     ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ','H_SCORES(l_index).TOTAL_SCORE' );
5344     ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ','H_SCORES(l_index).CONTACT_POINT_SCORE' );
5345     ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
5346     l('          END IF;');
5347   else
5348 
5349   l('          IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
5350   l('            H_SCORES(l_index).TOTAL_SCORE := ');
5351   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
5352   l('            H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
5353   l('          END IF;');
5354  end if;
5355   l('        END IF;');
5356   ldbg_sv('call type is - ','p_call_type'  );
5357   ldbg_sv('match string is - ','l_match_str' );
5358   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5359   if l_purpose ='S' then
5360     l('          -- If rule is match all ');
5361     l('          IF l_match_str = '' AND '' THEN');
5362     ldbg_s('Match string is AND ');
5363     l('            IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
5364     l('              is_a_match := ''Y'';');
5365     ldbg_sv('is_a_match is ' , 'is_a_match');
5366     l('            ELSE');
5367     l('              is_a_match := ''N'';');
5368     ldbg_sv('is_a_match is ' , 'is_a_match');
5369     l('            END IF;');
5370     l('          -- Else it is construed to be a match anyway');
5371     l('          ELSE');
5372     l('            is_a_match := ''Y'';');
5373     ldbg_sv('is_a_match is ' , 'is_a_match');
5374     l('          END IF;');
5375     l('        IF (is_a_match=''Y'') then');
5376  end if;
5377 
5378   l('          H_PARTY_ID_LIST(l_index) := 1;');
5379   l('          H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;');
5380   l('          l_party_id_idx:= l_party_id_idx+1;');
5381   if l_purpose='S' then
5382   l('      end if;');
5383   end if;
5384   l('        END IF;');
5385   l('        IF p_ins_details = ''Y'' THEN');
5386  if l_purpose ='S' then
5387     l('          IF l_match_str = '' AND '' THEN');
5388     ldbg_s('Match string is AND ');
5389     l('            IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
5390     l('              is_a_match := ''Y'';');
5391     ldbg_sv('is_a_match is ' , 'is_a_match');
5392     l('            ELSE');
5393     l('              is_a_match := ''N'';');
5394     ldbg_sv('is_a_match is ' , 'is_a_match');
5395     l('            END IF;');
5396     l('          ELSE');
5397     l('            is_a_match := ''Y'';');
5398     ldbg_sv('is_a_match is ' , 'is_a_match');
5399     l('          END IF;');
5400     l('          IF (is_a_match=''Y'') THEN');
5401  end if;
5402   l('          FOR I IN 1..h_cpt_id.COUNT LOOP');
5403   l('          IF h_cpt_id(I)=l_contact_pt_id THEN');
5404   l('          	 l_cpt_flag := ''Y'';');
5405   l('          END IF;');
5406   l('          END LOOP;');
5407   l('          IF l_cpt_flag = ''Y'' THEN');
5408   l('          	 NULL;');
5409   l('          ELSE');
5410   l('         	 h_cpt_id(detcnt) := l_contact_pt_id;');
5411   l('          	 h_cpt_party_id(detcnt) := l_cpt_party_id;');
5412   l('          	 IF (p_emax_score > 0) THEN ');
5413   l('              h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
5414   l('            ELSE ');
5415   l('              h_cpt_score(detcnt) := 0; ');
5416   l('          	 END IF; ');
5417   l('            detcnt := detcnt +1;');
5418   l('          END IF;');
5419 
5420   if l_purpose='S' then
5421   l('      end if;');
5422   end if;
5423 
5424   l('        END IF;');
5425   ds(fnd_log.level_statement);
5426   dc(fnd_log.level_statement,'In eval_cpt_level l_contact_pt_id = ','l_contact_pt_id');
5427   dc(fnd_log.level_statement,'In eval_cpt_level l_cpt_party_id = ','l_cpt_party_id');
5428   dc(fnd_log.level_statement,'In eval_cpt_level l_score = ','l_score');
5429   de;
5430   l('      END IF;');
5431   l('    END LOOP;');
5432   ldbg_s('===========END of LOOP=====================');
5433   l('    CLOSE l_contact_pt_cur;');
5434   l('    ROLLBACK to eval_start;');
5435   l('    IF p_ins_details = ''Y'' THEN');
5436   ldbg_s('In eval_contact_point_level inserting into HZ_MATCHED_CPTS_GT from the H_CPT_ID list');
5437   l('      FORALL I in 1..h_cpt_id.COUNT ');
5438   l('        INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
5439   l('          l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
5440   l('    END IF;');
5441   l('  END eval_cpt_level;');
5442   l('');
5443   l('  /**  Private procedure to call the eval procedure at each entity in the correct order ***/');
5444   l('  PROCEDURE do_eval (p_index NUMBER) IS');
5445   l('    l_ctx_id NUMBER;');
5446   l('    l_threshold NUMBER;'); --Bug No: 4407425
5447   l('    other_acq_criteria_exists BOOLEAN; '); --Bug No: 4407425
5448   l('    acq_cnt NUMBER; '); --Bug No:5218095
5449   l('  BEGIN');
5450   ldbg_s('-----------------','calling the procedure do_eval');
5451   --Start of Bug No: 4407425
5452   l('    IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
5453   IF(l_purpose ='S') THEN
5454   l('     l_threshold :=  round(( l_entered_max_score / '|| l_max_score ||') * '|| l_match_threshold ||'); ');
5455   ELSE
5456   l('     l_threshold := '|| l_match_threshold ||';  ');
5457   END IF;
5458   l('    other_acq_criteria_exists := TRUE ;');
5459   --Start of Bug No:5218095
5460   /*l('    IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
5461   l('     other_criteria_exists := FALSE; ');
5462   l('    END IF ; ');*/
5463   l('    --check if acquisition criteria exists for any other entity');
5464   l('    IF l_party_contains_str IS NOT NULL THEN ');
5465   l('    	acq_cnt := 1; ');
5466   l('    END IF; ');
5467   l('    IF l_party_site_contains_str IS NOT NULL THEN ');
5468   l('    	acq_cnt := acq_cnt+1; ');
5469   l('    END IF; ');
5470   l('    IF l_contact_contains_str IS NOT NULL THEN ');
5471   l('    	acq_cnt := acq_cnt+1; ');
5472   l('    END IF;');
5473   l('    IF l_contact_pt_contains_str IS NOT NULL THEN ');
5474   l('    	acq_cnt := acq_cnt+1; ');
5475   l('    END IF;  ');
5476 
5477   l('    IF acq_cnt>1 THEN ');
5478   l('    	other_acq_criteria_exists := TRUE; ');
5479   l('    ELSE');
5480   l('    	other_acq_criteria_exists := FALSE; ');
5481   l('    END IF;  ');
5482   dc(fnd_log.level_statement,'count of entities having acquisition attributes = ','acq_cnt');
5483   dc(fnd_log.level_statement,'call_max_score(p_index) = ','call_max_score(p_index)');
5484   dc(fnd_log.level_statement,'l_threshold = ','l_threshold');
5485   --End of Bug No:5218095
5486   l('    IF(l_match_str = '' AND '' AND other_acq_criteria_exists) THEN');
5487   --start of Bug No:5218095
5488   l('    	IF ( call_max_score(p_index) < l_threshold) THEN ');
5489   ldbg_s('When max score of entity level<l_threshold, do not evaluate ');
5490   l('	     	RETURN;	');
5491   l('    	ELSE ');
5492   ldbg_s('In do eval number of matches found exceeded threshold');
5493   l('	     	FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED''); ');
5494   l('	     	FND_MSG_PUB.ADD; ');
5495   l('	     	RAISE FND_API.G_EXC_ERROR; ');
5496   l('    	END IF; ');
5497   --end of Bug No:5218095
5498   l('    ELSE');
5499   ldbg_s('In do eval number of matches found exceeded threshold');
5500   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5501   l('      FND_MSG_PUB.ADD;');
5502   l('      RAISE FND_API.G_EXC_ERROR;');
5503   l('     END IF; ');
5504   l('    END IF;');
5505   --End of Bug No: 4407425
5506   /*l('    IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
5507   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5508   l('      FND_MSG_PUB.ADD;');
5509   l('      RAISE FND_API.G_EXC_ERROR;');
5510   l('    END IF;');
5511   */
5512   l('    IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
5513   l('      eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
5514   l('    ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
5515   l('      eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
5516   l('    ELSIF call_order(p_index) = ''CONTACT'' AND l_contact_contains_str IS NOT NULL THEN');
5517   l('      eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
5518   l('    ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
5519   l('      eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
5520   l('    END IF;');
5521   l('  END;');
5522   l('  /************ End of find_parties private procedures **********/ ');
5523   l('');
5524   l('  BEGIN');
5525   l('');
5526 
5527   ldbg_s('--------------------------------');
5528   ldbg_s('Entering Procedure find_parties');
5529   ds(fnd_log.level_statement);
5530   dc(fnd_log.level_statement,'Input Parameters are :');
5531   dc(fnd_log.level_statement,'p_match_type = ','p_match_type');
5532   dc(fnd_log.level_statement,'p_restrict_sql = ','p_restrict_sql');
5533   dc(fnd_log.level_statement,'p_dup_set_id = ','p_dup_set_id');
5534   dc(fnd_log.level_statement,'p_search_merged = ','p_search_merged');
5535   dc(fnd_log.level_statement,'p_dup_party_id = ','p_dup_party_id');
5536   de;
5537 
5538   l('    -- ************************************');
5539   l('    -- STEP 1. Initialization and error checks');
5540   l('');
5541 
5542   l('    l_match_str := ''' || l_match_str || ''';');
5543   l('    IF p_match_type = ''AND'' THEN');
5544   l('      l_match_str := '' AND '';');
5545   l('    ELSIF p_match_type = ''OR'' THEN');
5546   l('      l_match_str := '' OR '';');
5547   l('    END IF;');
5548   l('    l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
5549   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
5550   l('');
5551   IF l_purpose = 'D' THEN
5552     ldbg_s('This is Duplicate Identification match rule');
5553     l('  IF l_entered_max_score < '||l_match_threshold||' THEN');
5554     l('    x_num_matches:=0;');
5555     l('    x_search_ctx_id:=0;');
5556     ldbg_s('Returning since maximum obtainable score of input search criteria < threshold');
5557     l('    RETURN;');
5558     l('  END IF;');
5559   END IF;
5560   l('');
5561   l('    --Fix for bug 4417124 ');
5562   l('');
5563   l('    SELECT use_contact_addr_flag, use_contact_cpt_flag ');
5564   l('    INTO l_use_contact_addr_flag, l_use_contact_cpt_flag ');
5565   l('    FROM hz_match_rules_b ');
5566   l('    WHERE match_rule_id = '||p_rule_id||'; ');
5567   l('');
5568   l('    IF NVL(l_use_contact_addr_flag, ''Y'') = ''N'' THEN');
5569   l('      l_use_contact_addr_info := FALSE; ');
5570   l('    END IF; ');
5571   l('');
5572   l('    IF NVL(l_use_contact_cpt_flag, ''Y'') = ''N'' THEN');
5573   l('      l_use_contact_cpt_info := FALSE; ');
5574   l('    END IF; ');
5575   l('');
5576   l('   --End fix for bug 4417124');
5577   l('');
5578   l('    IF p_dup_batch_id IS NOT NULL THEN');
5579   l('      l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH_BATCH''),10000);');
5580   l('    ELSE');
5581   l('      l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
5582   l('    END IF;');
5583 
5584   l('    IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
5585   l('      g_score_until_thresh := true;');
5586   ldbg_s('g_score_until_thresh is true');
5587   l('    ELSE');
5588   l('      g_score_until_thresh := false;');
5589   ldbg_s('g_score_until_thresh is false');
5590   l('    END IF;');
5591   ldbg_sv('Maximum records that will be evaluated is ', 'l_max_thresh');
5592 
5593   l('    -- ************************************************************');
5594   l('    -- STEP 2. Setup of intermedia query strings for Acquisition query');
5595 
5596   l('    l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);');
5597   l('    l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);');
5598   l('    l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);');
5599   ldbg_s('Commencing the DENORM LOGIC in find_parties');
5600   l('    l_denorm_max_score:=0;');
5601   l('    l_non_denorm_max_score:=0;');
5602   l('    IF l_ps_denorm_str IS NOT NULL THEN');
5603   l('      l_denorm_max_score := l_denorm_max_score+l_ps_max_score;');
5604   l('      l_denorm_str := l_ps_denorm_str;');
5605   l('    ELSE');
5606   l('      l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;');
5607   l('    END IF;');
5608 
5609   l('    IF l_ct_denorm_str IS NOT NULL THEN');
5610   l('      l_denorm_max_score := l_denorm_max_score+l_contact_max_score;');
5611   l('      IF l_denorm_str IS NOT NULL THEN');
5612   l('        l_denorm_str := l_denorm_str || '' OR '' ||l_ct_denorm_str;');
5613   l('      ELSE');
5614   l('        l_denorm_str := l_ct_denorm_str;');
5615   l('      END IF;');
5616   l('    ELSE');
5617   l('      l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;');
5618   l('    END IF;');
5619 
5620   l('    IF l_cpt_denorm_str IS NOT NULL THEN');
5621   l('      l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;');
5622   l('      IF l_denorm_str IS NOT NULL THEN');
5623   l('        l_denorm_str := l_denorm_str || '' OR '' ||l_cpt_denorm_str;');
5624   l('      ELSE');
5625   l('        l_denorm_str := l_cpt_denorm_str;');
5626   l('      END IF;');
5627   l('    ELSE');
5628   l('      l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;');
5629   l('    END IF;');
5630 
5631   l('    l_party_contains_str := INIT_PARTY_QUERY(l_match_str, l_denorm_str, l_party_max_score, l_denorm_max_score, l_non_denorm_max_score, round(('||l_match_threshold||'/'||l_max_score||')*l_entered_max_score));');
5632 
5633   l('    init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
5634   l('');
5635   l('    -- Setup Search Context ID');
5636   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
5637   l('    x_search_ctx_id := l_search_ctx_id;');
5638   l('');
5639   ldbg_sv('Search context id in find_parties is ', 'x_search_ctx_id');
5640   l('    IF l_party_contains_str IS NULL THEN');
5641   l('      defpt := 1;');
5642   l('    END IF;');
5643   l('    IF l_party_site_contains_str IS NULL THEN');
5644   l('      defps := 1;');
5645   l('    END IF;');
5646   l('    IF l_contact_contains_str IS NULL THEN');
5647   l('      defct := 1;');
5648   l('    END IF;');
5649   l('    IF l_contact_pt_contains_str IS NULL THEN');
5650   l('      defcpt := 1;');
5651   l('    END IF;');
5652   l('');
5653 
5654   ds(fnd_log.level_statement);
5655   ldbg_s('------------------------');
5656   dc(fnd_log.level_statement,'In find_parties l_match_str =  ','l_match_str');
5657   dc(fnd_log.level_statement,'In find_parties l_party_contains_str = ','l_party_contains_str');
5658   dc(fnd_log.level_statement,'In find_parties l_party_site_contains_str = ','l_party_site_contains_str');
5659   dc(fnd_log.level_statement,'In find_parties l_contact_contains_str = ','l_contact_contains_str');
5660   dc(fnd_log.level_statement,'In find_parties l_contact_pt_contains_str = ','l_contact_pt_contains_str');
5661   dc(fnd_log.level_statement,'In find_parties l_search_ctx_id = ','l_search_ctx_id');
5662   de;
5663 
5664   IF l_max_score=1 THEN
5665     ldbg_s('In find_parties l_max_score = 1');
5666     l('    FOR I in 1..3 LOOP');
5667     l('      IF (call_order(I) = ''PARTY'' AND l_party_contains_str IS NULL)');
5668     l('         OR (call_order(I) = ''PARTY_SITE'' AND l_party_site_contains_str IS NULL)');
5669     l('         OR (call_order(I) = ''CONTACT'' AND l_contact_contains_str IS NULL)');
5670     l('         OR (call_order(I) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NULL) THEN');
5671     l('        IF call_type(I)=''OR'' THEN');
5672     l('          call_type(I+1):=''OR'';');
5673     l('        END IF;');
5674     l('      END IF;');
5675     l('    END LOOP;');
5676   END IF;
5677 
5678   /**** Call all 4 evaluation procedures ***********/
5679   l('    FOR I in 1..5 LOOP');
5680   l('      do_eval(I);');
5681   l('    END LOOP;');
5682 
5683   IF l_purpose = 'S' THEN
5684     d(fnd_log.level_statement,'In find_parties. This is a Search Rule. Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
5685   ELSE
5686     d(fnd_log.level_statement,'In find_parties. This is a Duplicate Identification Rule. Evaluating Matches. Threshold : '||l_match_threshold);
5687   END IF;
5688 
5689   l('    x_num_matches := 0;');
5690   l('    l_num_eval := 0;');
5691   l('    IF l_match_str = '' OR '' THEN');
5692   l('      l_party_id := H_SCORES.FIRST;');
5693   l('    ELSE');
5694   l('      l_party_id := H_PARTY_ID_LIST.FIRST;');
5695   l('    END IF;');
5696 
5697   l('    WHILE l_party_id IS NOT NULL LOOP');
5698   l('      l_num_eval:= l_num_eval+1;');
5699   ds(fnd_log.level_statement);
5700   ldbg_s('----------------------');
5701   dc(fnd_log.level_statement,'In find_parties Match Party ID = ','H_SCORES(l_party_id).PARTY_ID');
5702   IF l_purpose = 'S' THEN
5703     dc(fnd_log.level_statement,'In find_parties Score = ','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
5704   ELSE
5705     dc(fnd_log.level_statement,'In find_parties Score = ','H_SCORES(l_party_id).TOTAL_SCORE');
5706   END IF;
5707   de;
5708   IF l_purpose = 'S' THEN
5709   ldbg_s('In find_parties inserting Search Rule results into HZ_MATCHED_PARTIES_GT');
5710     l('      IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
5711     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
5712     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100));');
5713     l('            x_num_matches := x_num_matches+1;');
5714     ldbg_s('----------------------');
5715   ELSE
5716     ldbg_s('In find_parties inserting Duplicate Identification results into HZ_MATCHED_PARTIES_GT');
5717     l('      IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
5718     l('          IF p_dup_set_id IS NULL THEN');
5719     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
5720     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);');
5721     l('             x_num_matches := x_num_matches+1;');
5722     l('          ELSE');
5723     ldbg_s('Before Inserting Duplicate Identification results into HZ_DUP_SET_PARTIES, if dup party already exists');
5724     l('            BEGIN');
5725     l('              SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES'); --Bug No: 4244529
5726     l('              WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID');
5727     l('              AND DUP_SET_BATCH_ID = p_dup_batch_id '); --Bug No: 4244529
5728     l('              AND ROWNUM=1;');
5729     l('            EXCEPTION ');
5730     l('              WHEN NO_DATA_FOUND THEN');
5731     l('                IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_auto_merge_score||' THEN');
5732     l('                  l_merge_flag := ''Y'';');
5733     l('                ELSE');
5734     l('                  l_merge_flag := ''N'';');
5735     l('                END IF;');
5736     ldbg_s('In find_parties inserting Duplicate Identification results into HZ_DUP_SET_PARTIES');
5737     ldbg_s('----------------------');
5738     l('                INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
5739     l('                    MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
5740     l('                    LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
5741     l('                VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,');
5742     l('                    H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,');
5743     l('                    hz_utility_pub.created_by,hz_utility_pub.creation_date,');
5744     l('                    hz_utility_pub.last_update_login,');
5745     l('                    hz_utility_pub.last_update_date,');
5746     l('                    hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
5747     l('                x_num_matches := x_num_matches+1;');
5748     l('            END;');
5749     l('          END IF;');
5750   END IF;
5751   l('      END IF;');
5752   l('      IF l_match_str = '' OR '' THEN');
5753   l('        l_party_id:=H_SCORES.NEXT(l_party_id);');
5754   l('      ELSE');
5755   l('        l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
5756   l('      END IF;');
5757   l('    END LOOP;');
5758   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
5759   ldbg_s('Exiting Procedure find_parties');
5760   ldbg_s('--------------------------------');
5761   l('EXCEPTION');
5762   l('  WHEN L_RETURN_IMM_EXC THEN');
5763   l('    RETURN;');
5764 ELSE ---Start of Code Change for Match Rule Set
5765   l('  BEGIN');
5766   l('');
5767 
5768   d(fnd_log.level_procedure,'find_parties(+)');
5769   ds(fnd_log.level_statement);
5770   dc(fnd_log.level_statement,'Input Parameters:');
5771   dc(fnd_log.level_statement,'p_match_type','p_match_type');
5772   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
5773   dc(fnd_log.level_statement,'p_dup_set_id','p_dup_set_id');
5774   dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
5775   dc(fnd_log.level_statement,'p_dup_party_id','p_dup_party_id');
5776   de;
5777   pop_conditions(p_rule_id,'find_parties','p_rule_id,p_party_search_rec,p_party_site_list,
5778   p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,p_dup_party_id,
5779   p_dup_set_id,p_dup_batch_id,p_ins_details,x_search_ctx_id,x_num_matches','PARTY');
5780 
5781   d(fnd_log.level_procedure,'find_parties(-)');
5782   l('EXCEPTION');
5783 
5784 END IF; ---End of Code Change for Match Rule Set
5785 
5786   l('  WHEN FND_API.G_EXC_ERROR THEN');
5787   l('    RAISE FND_API.G_EXC_ERROR;');
5788   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
5789   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
5790   l('  WHEN OTHERS THEN');
5791   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
5792   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_parties'');');
5793   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
5794   l('    FND_MSG_PUB.ADD;');
5795   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
5796   l('END find_parties;');
5797   l('');
5798 
5799   l('PROCEDURE find_persons (');
5800   l('      p_rule_id               IN      NUMBER,');
5801   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
5802   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
5803   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
5804   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
5805   l('      p_restrict_sql          IN      VARCHAR2,');
5806   l('      p_match_type            IN      VARCHAR2,');
5807   l('      p_search_merged         IN      VARCHAR2,');
5808   l('      p_dup_party_id          IN      NUMBER,');
5809   l('      p_dup_set_id            IN      NUMBER,');
5810   l('      p_dup_batch_id          IN      NUMBER,');
5811   l('      p_ins_details           IN      VARCHAR2,');
5812   l('      x_search_ctx_id         OUT     NUMBER,');
5813   l('      x_num_matches           OUT     NUMBER');
5814   l(') IS');
5815 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
5816   l('');
5817   l('  -- Strings to hold the generated Intermedia query strings');
5818   l('  l_party_contains_str VARCHAR2(32000); ');
5819   l('  l_party_site_contains_str VARCHAR2(32000);');
5820   l('  l_contact_contains_str VARCHAR2(32000);');
5821   l('  l_contact_pt_contains_str VARCHAR2(32000);');
5822   l('  l_denorm_str VARCHAR2(32000);');
5823   l('  l_ps_denorm_str VARCHAR2(32000);');
5824   l('  l_ct_denorm_str VARCHAR2(32000);');
5825   l('  l_cpt_denorm_str VARCHAR2(32000);');
5826 
5827   l('');
5828   l('  -- Other local variables');
5829   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
5830   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
5831   l('  -- For Score calculation');
5832   l('  l_max_score NUMBER;');
5833   l('  l_match_idx NUMBER;');
5834   l('  l_entered_max_score NUMBER;');
5835   l('  FIRST BOOLEAN;');
5836   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
5837   l('');
5838   FOR TX IN (
5839       SELECT distinct f.staged_attribute_column
5840       FROM hz_trans_functions_vl f, hz_secondary_trans st,
5841            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
5842       WHERE sa.match_rule_id = p_rule_id
5843       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
5844       AND st.function_id = f.function_id
5845       AND a.attribute_id = sa.attribute_id) LOOP
5846     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
5847   END LOOP;
5848   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
5849   l('  H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
5850   l('  H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
5851   l('');
5852   l('  l_score NUMBER;');
5853   l('  l_idx NUMBER;');
5854   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
5855   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
5856   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
5857   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
5858   l('  l_party_id NUMBER;');
5859   l('  l_ps_party_id NUMBER;');
5860   l('  l_ct_party_id NUMBER;');
5861   l('  l_cpt_party_id NUMBER;');
5862   l('  l_cpt_ps_id NUMBER;');
5863   l('  l_cpt_contact_id NUMBER;');
5864   l('  l_cpt_type VARCHAR2(100);');
5865   l('  l_party_site_id NUMBER;');
5866   l('  l_org_contact_id NUMBER;');
5867   l('  l_contact_pt_id NUMBER;');
5868   l('  l_cpt_level VARCHAR2(100);');
5869   l('  l_ps_contact_id NUMBER;');
5870   l('  l_party_max_score NUMBER;');
5871   l('  l_ps_max_score NUMBER;');
5872   l('  l_contact_max_score NUMBER;');
5873   l('  l_cpt_max_score NUMBER;');
5874   l('  l_denorm_max_score NUMBER;');
5875   l('  l_non_denorm_max_score NUMBER;');
5876   l('');
5877   l('  defpt NUMBER :=0;');
5878   l('  defps NUMBER :=0;');
5879   l('  defct NUMBER :=0;');
5880   l('  defcpt NUMBER :=0;');
5881   l('  l_index NUMBER;');
5882   l('  l_max_thresh NUMBER;');
5883   l('  l_tmp NUMBER;');
5884   l('  l_merge_flag VARCHAR2(1);');
5885   l('  l_num_eval NUMBER:=0;');
5886   l('');
5887   l('  L_RETURN_IMM_EXC Exception;');
5888   l('');
5889   l('  ');
5890   l('  /********************* Find Parties private procedures *******/');
5891   FOR TX IN (
5892     SELECT a.attribute_name,
5893                f.PROCEDURE_NAME,
5894                f.STAGED_ATTRIBUTE_COLUMN
5895         FROM HZ_TRANS_FUNCTIONS_VL f,
5896             HZ_TRANS_ATTRIBUTES_VL a
5897         WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
5898         AND a.entity_name = 'PARTY'
5899         AND a.attribute_name='PARTY_TYPE'
5900         AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
5901         AND nvl(f.active_flag,'Y')='Y'
5902         AND ROWNUM=1
5903   ) LOOP
5904     l('  PROCEDURE set_person_party_type IS');
5905     l('  BEGIN');
5906     l('    g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||':= ');
5907     l('        HZ_TRANS_PKG.EXACT(');
5908     l('             ''PERSON''');
5909     l('             ,null,''PARTY_TYPE''');
5910     l('             ,''PARTY'');');
5911     l('  END;');
5912     l('    ');
5913     l('  PROCEDURE unset_person_party_type IS');
5914     l('  BEGIN');
5915     l('    g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||' := '''';');
5916     l('  END;');
5917   END LOOP;
5918   l('  ');
5919   l('  FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) ');
5920   l('  RETURN NUMBER IS');
5921   l('    l_party_type VARCHAR2(255);');
5922   l('    l_person_id NUMBER(15);');
5923   l('  BEGIN');
5924   l('    SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;');
5925   l('    IF l_party_type = ''PERSON'' THEN');
5926   l('      RETURN p_party_id;');
5927   l('    ELSIF p_contact_id IS NULL THEN');
5928   l('      RETURN NULL;');
5929   l('    ELSE');
5930   l('      BEGIN ');
5931   l('        SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p');
5932   l('        WHERE oc.org_contact_id = p_contact_id');
5933   l('        AND r.relationship_id = oc.party_relationship_id ');
5934   l('        AND r.object_id = p_party_id');
5935   l('        AND p.party_id = r.subject_id ');
5936   l('        AND p.party_type = ''PERSON''');
5937   l('        AND ROWNUM=1;');
5938   l('        ');
5939   l('        RETURN l_person_id;');
5940   l('      EXCEPTION');
5941   l('        WHEN NO_DATA_FOUND THEN');
5942   l('          RETURN NULL;');
5943   l('      END;      ');
5944   l('    END IF;');
5945   l('  END;  ');
5946   l('');
5947   l('  PROCEDURE push_eval IS');
5948   l('  BEGIN');
5949   l('    H_PARTY_ID.DELETE;');
5950   l('    H_PARTY_ID_LIST.DELETE;');
5951   l('    H_SCORES.DELETE;        ');
5952   l('    g_mappings.DELETE;');
5953   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
5954   l('    call_order(5) := call_order(1);');
5955   l('    call_type(5) := ''AND'';');
5956   l('    call_max_score(5) := call_max_score(1);');
5957   l('    call_type(2) := ''OR'';');
5958   l('  END;');
5959   l('');
5960   l('  /**  Private procedure to acquire and score at party level  ***/');
5961   l('  PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
5962   l('    l_party_id_idx NUMBER:=1;');
5963   l('    l_ctx_id NUMBER;');
5964   l('  BEGIN');
5965   l('    SAVEPOINT eval_start;');
5966   l('    set_person_party_type;');
5967   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
5968   l('      l_ctx_id := l_search_ctx_id;');
5969   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5970   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5971   l('             l_search_ctx_id,H_PARTY_ID(I));');
5972   l('      H_PARTY_ID.DELETE;');
5973   l('      H_PARTY_ID_LIST.DELETE;');
5974   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5975   l('      l_ctx_id := l_search_ctx_id;');
5976   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5977   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5978   l('             l_search_ctx_id,H_PARTY_ID(I));');
5979   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5980   l('    ELSE');
5981   l('      IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5982   l('         and check_estimate_hits(''PARTY'',p_party_contains_str)>l_max_thresh THEN');
5983   ldbg_s('In eval party level estimated hits exceed threshold');
5984   l('        IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' THEN');
5985   ldbg_s('In eval party level resolution option is set to SQL search.');
5986   l('          IF (l_party_site_contains_str IS NULL AND');
5987   l('             l_contact_contains_str IS NULL AND');
5988   l('             l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN');
5989   l('            return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);');
5990   l('            RAISE L_RETURN_IMM_EXC;');
5991   l('          ELSE');
5992   l('            open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);');
5993   l('          END IF;');
5994   l('        ELSE');
5995   l('          IF p_index>1 THEN');
5996   ldbg_s('In eval party level number of matches found exceeded threshold');
5997   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5998   l('            FND_MSG_PUB.ADD;');
5999   l('            RAISE FND_API.G_EXC_ERROR;');
6000   l('          ELSE');
6001   l('            push_eval;');
6002   l('            RETURN;');
6003   l('          END IF;');
6004   l('        END IF;');
6005   l('      END IF;');
6006   l('      l_ctx_id := NULL;');
6007   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6008   l('    END IF;');
6009   l('    IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN');
6010   l('      open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);');
6011   l('    END IF;');
6012   l('    LOOP ');
6013   l('      FETCH l_party_cur INTO');
6014   l('         l_party_id '||l_p_into_list||';');
6015   l('      EXIT WHEN l_party_cur%NOTFOUND;');
6016   l('      l_index := map_id(l_party_id);');
6017   l('      l_score := GET_PARTY_SCORE('||l_p_param_list||');');
6018 
6019   l('      IF NOT H_SCORES.EXISTS(l_index) THEN');
6020   l('        H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
6021   l('      ELSE');
6022   l('        H_SCORES(l_index).TOTAL_SCORE := ');
6023   l('                H_SCORES(l_index).TOTAL_SCORE+l_score;');
6024   l('        H_SCORES(l_index).PARTY_SCORE := l_score;');
6025   l('      END IF;');
6026   l('      IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
6027   l('        H_PARTY_ID_LIST(l_index) := 1;');
6028   l('        H_PARTY_ID(l_party_id_idx) := l_party_id;');
6029   l('        l_party_id_idx:= l_party_id_idx+1;');
6030   l('      END IF;');
6031   l('      IF (l_party_id_idx-1)>l_max_thresh THEN');
6032   l('         IF p_index=1 AND call_order(2) = ''PARTY_SITE'' ');
6033   l('          AND call_type(2) = ''AND'' AND l_contact_contains_str IS NULL');
6034   l('          AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' ');
6035   l('          AND l_contact_pt_contains_str IS NULL THEN');
6036   l('          H_PARTY_ID.DELETE(l_party_id_idx-1);');
6037   l('          H_PARTY_ID_LIST.DELETE(l_index);');
6038   l('          H_SCORES.DELETE(l_index);');
6039   l('          EXIT;');
6040   l('        END IF;');
6041 
6042   l('        CLOSE l_party_cur;'); --Bug No: 3872745
6043   l('        IF p_index>1 THEN');
6044   ldbg_s('In eval party level number of matches found exceeded threshold');
6045   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6046   l('          FND_MSG_PUB.ADD;');
6047   l('          RAISE FND_API.G_EXC_ERROR;');
6048   l('        ELSE');
6049   l('          push_eval;');
6050   l('          RETURN;');
6051   l('        END IF;');
6052   l('      END IF;');
6053   ds(fnd_log.level_statement);
6054   dc(fnd_log.level_statement,'Party Level Matches');
6055   dc(fnd_log.level_statement,'l_party_id','l_party_id');
6056   dc(fnd_log.level_statement,'l_score','l_score');
6057   de;
6058   l('    END LOOP;');
6059   l('    CLOSE l_party_cur;');
6060   l('    ROLLBACK to eval_start;');
6061   l('  END;');
6062   l('  PROCEDURE open_person_contact_cursor(');
6063   l('            p_contains_str  VARCHAR2, ');
6064   l('            p_search_ctx_id  NUMBER, ');
6065   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
6066   l('  BEGIN');
6067   l('    OPEN x_cursor FOR ');
6068   l('      SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
6069   l('      FROM HZ_STAGED_CONTACTS stage');
6070   l('      WHERE contains( concat_col, p_contains_str)>0');
6071   l('      AND ORG_CONTACT_ID in (');
6072   l('            SELECT  /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ ');
6073   l('            org_contact_id');
6074   l('            from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc');
6075   l('            where d.party_id = r.subject_id');
6076   l('            and oc.party_relationship_id = r.relationship_id');
6077   l('            and d.search_context_id = p_search_ctx_id);   ');
6078 --bug 4959719 start
6079   l('  exception');
6080   l('    when others then');
6081   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
6082   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
6083   l('        FND_MSG_PUB.ADD;');
6084   l('        RAISE FND_API.G_EXC_ERROR;');
6085    --Start Bug No: 3032742.
6086   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
6087   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
6088   l('        FND_MSG_PUB.ADD;');
6089   l('        RAISE FND_API.G_EXC_ERROR;');
6090   --End Bug No : 3032742.
6091   l('      else ');
6092   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6093   l('      end if;');
6094 --bug 4959719 end
6095   l('  END;');
6096 
6097   l('');
6098   l('  /**  Private procedure to acquire and score at party site level  ***/');
6099   l('  PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
6100   l('    l_party_id_idx NUMBER:=1;');
6101   l('    l_ctx_id NUMBER;');
6102   l('    h_ps_id HZ_PARTY_SEARCH.IDList;');
6103   l('    h_ps_party_id HZ_PARTY_SEARCH.IDList;');
6104   l('    h_ps_score HZ_PARTY_SEARCH.IDList;');
6105   l('    detcnt NUMBER := 1;');
6106   l('    l_person_id NUMBER;');
6107   l('  BEGIN');
6108   l('    SAVEPOINT eval_start;');
6109   l('    unset_person_party_type;');
6110   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
6111   l('      l_ctx_id := l_search_ctx_id;');
6112   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
6113   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6114   l('             l_search_ctx_id,H_PARTY_ID(I));');
6115   l('      H_PARTY_ID.DELETE;');
6116   l('      H_PARTY_ID_LIST.DELETE;');
6117   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
6118   l('      l_ctx_id := l_search_ctx_id;');
6119   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
6120   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6121   l('             l_search_ctx_id,H_PARTY_ID(I));');
6122   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6123   l('    ELSE');
6124   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6125   l('      l_ctx_id := NULL;');
6126   l('    END IF;');
6127   l('    open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, p_search_merged,''N'', ''Y'',l_party_site_cur);');
6128   l('    LOOP ');
6129   l('      FETCH l_party_site_cur INTO');
6130   l('         l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
6131   l('      EXIT WHEN l_party_site_cur%NOTFOUND;');
6132   l('      IF l_ctx_id IS NULL THEN');
6133   l('        l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);');
6134   l('      ELSE');
6135   l('        l_person_id := l_ps_party_id;');
6136   l('      END IF;');
6137 
6138   l('      IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN');
6139   l('        l_index := map_id(l_person_id);');
6140   l('        l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
6141 
6142   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
6143   l('          IF l_ctx_id IS NULL THEN');
6144   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);');
6145   l('          END IF;');
6146   l('        ELSE');
6147   l('          IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
6148   l('            H_SCORES(l_index).TOTAL_SCORE := ');
6149   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
6150   l('            H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
6151   l('          END IF;');
6152   l('        END IF;');
6153   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
6154   l('          H_PARTY_ID_LIST(l_index) := 1;');
6155   --l('          H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
6156   --Bug:4995382: SDIB BATCH W/ RULE DL ORG/PERSON DUPLICATES' ERRORS OUT
6157   l('          H_PARTY_ID(l_party_id_idx) := l_person_id;');
6158   l('          l_party_id_idx:= l_party_id_idx+1;');
6159   l('        END IF;');
6160   l('        IF (l_party_id_idx-1)>l_max_thresh THEN');
6161   l('          CLOSE l_party_site_cur;'); --Bug No: 3872745
6162   l('          IF p_index>1 THEN');
6163   ldbg_s('In eval party site level number of matches found exceeded threshold');
6164   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6165   l('            FND_MSG_PUB.ADD;');
6166   l('            RAISE FND_API.G_EXC_ERROR;');
6167   l('          ELSE');
6168   l('            push_eval;');
6169   l('            RETURN;');
6170   l('          END IF;');
6171   l('        END IF;');
6172   l('        IF p_ins_details = ''Y'' THEN');
6173   l('          h_ps_id(detcnt) := l_party_site_id;');
6174   l('          h_ps_party_id(detcnt) := l_person_id;');
6175   l('          IF (p_emax_score > 0) THEN ');
6176   l('              h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
6177   l('          ELSE ');
6178   l('              h_ps_score(detcnt) := 0; ');
6179   l('          END IF; ');
6180   l('          detcnt := detcnt +1;');
6181   l('        END IF;');
6182   ds(fnd_log.level_statement);
6183   dc(fnd_log.level_statement,'Party Site Level Matches');
6184   dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
6185   dc(fnd_log.level_statement,'l_ps_party_id','l_person_id');
6186   dc(fnd_log.level_statement,'l_score','l_score');
6187   de;
6188   l('      END IF;');
6189   l('    END LOOP;');
6190   l('    CLOSE l_party_site_cur;');
6191   l('    ROLLBACK to eval_start;');
6192   l('    IF p_ins_details = ''Y'' THEN');
6193   l('      FORALL I in 1..h_ps_id.COUNT ');
6194   l('        INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
6195   l('          l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
6196   l('    END IF;');
6197   l('  END;');
6198   l('');
6199   l('  /**  Private procedure to acquire and score at party site level  ***/');
6200   l('  PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
6201   l('    l_party_id_idx NUMBER:=1;');
6202   l('    l_ctx_id NUMBER;');
6203   l('    h_ct_id HZ_PARTY_SEARCH.IDList;');
6204   l('    h_ct_party_id HZ_PARTY_SEARCH.IDList;');
6205   l('    h_ct_score HZ_PARTY_SEARCH.IDList;');
6206   l('    detcnt NUMBER := 1;');
6207   l('    l_person_id NUMBER;');
6208   l('  BEGIN');
6209   l('    SAVEPOINT eval_start;');
6210   l('    l_ctx_id := l_search_ctx_id;');
6211   l('    unset_person_party_type;');
6212   l('    FORALL I in 1..H_PARTY_ID.COUNT ');
6213   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6214   l('             l_search_ctx_id,H_PARTY_ID(I));');
6215   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6216   l('    open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);');
6217   l('    LOOP ');
6218   l('      FETCH l_contact_cur INTO');
6219   l('         l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
6220   l('      EXIT WHEN l_contact_cur%NOTFOUND;');
6221   l('      l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);');
6222   l('      l_index := map_id(l_person_id);');
6223   l('      IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN');
6224   l('        l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
6225   l('        IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
6226   l('          H_SCORES(l_index).TOTAL_SCORE := ');
6227   l('                H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
6228   l('          H_SCORES(l_index).CONTACT_SCORE := l_score;');
6229   l('        END IF;');
6230   l('      END IF;');
6231   l('      IF p_ins_details = ''Y'' THEN');
6232   l('        h_ct_id(detcnt) := l_org_contact_id;');
6233   l('        h_ct_party_id(detcnt) := l_person_id;');
6234   l('        IF (p_emax_score > 0) THEN ');
6235   l('            h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
6236   l('        ELSE ');
6237   l('            h_ct_score(detcnt) := 0; ');
6238   l('        END IF; ');
6239   l('        detcnt := detcnt +1;');
6240   l('      END IF;');
6241   ds(fnd_log.level_statement);
6242   dc(fnd_log.level_statement,'Contact Level Matches');
6243   dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
6244   dc(fnd_log.level_statement,'l_ct_party_id','l_person_id');
6245   dc(fnd_log.level_statement,'l_score','l_score');
6246   de;
6247   l('    END LOOP;');
6248   l('    CLOSE l_contact_cur;');
6249   l('    ROLLBACK to eval_start;');
6250   l('    IF p_ins_details = ''Y'' THEN');
6251   l('      FORALL I in 1..h_ct_id.COUNT ');
6252   l('        INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
6253   l('          l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
6254   l('    END IF;');
6255   l('  END;');
6256   l('');
6257   l('  /**  Private procedure to acquire and score at contact point level  ***/');
6258   l('  PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
6259   l('    l_party_id_idx NUMBER:=1;');
6260   l('    l_ctx_id NUMBER;');
6261   l('    h_cpt_id HZ_PARTY_SEARCH.IDList;');
6262   l('    h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
6263   l('    h_cpt_score HZ_PARTY_SEARCH.IDList;');
6264   l('    detcnt NUMBER := 1;');
6265   l('    l_person_id NUMBER;');
6266   --l('    l_continue VARCHAR2(1) := ''Y'';');
6267   l('    is_a_match VARCHAR2(1) := ''Y'';');
6268   l('    l_cpt_flag VARCHAR2(1) := ''N'';');
6269   l('  BEGIN');
6270   ldbg_s('-----------------');
6271   ldbg_s('calling the procedure eval_cpt_level - from find_persons');
6272   l('    SAVEPOINT eval_start;');
6273   l('    unset_person_party_type;');
6274   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
6275   l('      l_ctx_id := l_search_ctx_id;');
6276   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
6277   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6278   l('             l_search_ctx_id,H_PARTY_ID(I));');
6279   l('      H_PARTY_ID.DELETE;');
6280   l('      H_PARTY_ID_LIST.DELETE;');
6281   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
6282   ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
6283   l('      l_ctx_id := l_search_ctx_id;');
6284   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
6285   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6286   l('             l_search_ctx_id,H_PARTY_ID(I));');
6287   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6288   l('    ELSE');
6289   ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
6290   l('      l_ctx_id := NULL;');
6291   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6292   l('    END IF;');
6293   ldbg_s('====== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR =======');
6294   l('    open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, p_search_merged,''N'', ''Y'',l_contact_pt_cur);');
6295   l('    LOOP ');
6296   l('      FETCH l_contact_pt_cur INTO');
6297   l('         l_contact_pt_id, l_cpt_type, l_cpt_party_id,  l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
6298   l('      EXIT WHEN l_contact_pt_cur%NOTFOUND;');
6299   ldbg_s(' ------------------------------------' );
6300   ldbg_sv('Processing party_id - ','l_cpt_party_id' );
6301   ldbg_sv('contact point type - ','l_cpt_type' );
6302   l('      IF l_ctx_id IS NULL THEN');
6303   l('        l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);');
6304   l('      ELSE');
6305   l('        l_person_id := l_cpt_party_id;');
6306   l('      END IF;');
6307 
6308   l('      IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN');
6309   l('        l_index := map_id(l_person_id);');
6310   l('        l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
6311 
6312   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
6313   l('          IF l_ctx_id IS NULL THEN');
6314   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_person_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);');
6315   if l_purpose='S' then
6316     l('           H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
6317     ldbg_s('Processing first time for this party');
6318     ldbg_sv('l_index is - ','l_index' );
6319     ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
6320   end if;
6321   l('          END IF;');
6322   l('        ELSE');
6323   if l_purpose='S' then
6324 	ldbg_s('Processing Second time for this party');
6325     l('          IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then');
6326     l('            IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then');
6327     l('              H_SCORES(l_index).TOTAL_SCORE :=');
6328     l('              H_SCORES(l_index).TOTAL_SCORE-(H_SCORES(l_index).CONTACT_POINT_SCORE - H_SCORES(l_index).cpt_type_match(l_cpt_type) )+l_score;');
6329     l('              H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE - H_SCORES(l_index).cpt_type_match(l_cpt_type) + l_score;');
6330     l('              H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
6331     ldbg_s('Passed in score greater than existing score');
6332     ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ','H_SCORES(l_index).TOTAL_SCORE' );
6333     ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ','H_SCORES(l_index).CONTACT_POINT_SCORE' );
6334     ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
6335     l('            END IF;');
6336     l('          ELSE');
6337     ldbg_s('Passed in score less than or equal to the existing score ');
6338     l('            H_SCORES(l_index).TOTAL_SCORE :=');
6339     l('            H_SCORES(l_index).TOTAL_SCORE+l_score;');
6340     l('            H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
6341     l('            H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
6342     ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ','H_SCORES(l_index).TOTAL_SCORE' );
6343     ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ','H_SCORES(l_index).CONTACT_POINT_SCORE' );
6344     ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
6345     l('          END IF;');
6346   else
6347   	l('          IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
6348   	l('            H_SCORES(l_index).TOTAL_SCORE := ');
6349   	l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
6350   	l('            H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
6351   	l('          END IF;');
6352   end if;
6353   l('        END IF;');
6354   ldbg_sv('call type is - ','p_call_type'  );
6355   ldbg_sv('match string is - ','l_match_str' );
6356   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
6357   if l_purpose ='S' then
6358     l('          -- If rule is match all ');
6359     l('          IF l_match_str = '' AND '' THEN');
6360     ldbg_s('Match String is - AND ');
6361     l('            IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
6362     l('              is_a_match := ''Y'';');
6363     ldbg_sv('is_a_match is ', 'is_a_match');
6364     l('            ELSE');
6365     l('              is_a_match := ''N'';');
6366     ldbg_sv('is_a_match is ', 'is_a_match');
6367     l('            END IF;');
6368     l('          -- Else it is construed as a match anyway ');
6369     l('          ELSE');
6370     l('            is_a_match := ''Y'';');
6371     ldbg_sv('is_a_match is ', 'is_a_match');
6372     l('          END IF;');
6373     l('          IF (is_a_match=''Y'') THEN');
6374  end if;
6375   l('          H_PARTY_ID_LIST(l_index) := 1;');
6376   l('          H_PARTY_ID(l_party_id_idx) := l_person_id;');
6377   l('          l_party_id_idx:= l_party_id_idx+1;');
6378   if l_purpose='S' then
6379     l('      end if;');
6380   end if;
6381   l('        END IF;');
6382   l('        IF (l_party_id_idx-1)>l_max_thresh THEN');
6383   l('          CLOSE l_contact_pt_cur;'); --Bug No: 3872745
6384   l('          IF p_index>1 THEN');
6385   ldbg_s('In eval contact point level number of matches found exceeded threshold');
6386   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6387   l('            FND_MSG_PUB.ADD;');
6388   l('            RAISE FND_API.G_EXC_ERROR;');
6389   l('          ELSE');
6390   l('            push_eval;');
6391   l('            RETURN;');
6392   l('          END IF;');
6393   l('        END IF;');
6394   l('        IF p_ins_details = ''Y'' THEN');
6395  if l_purpose ='S' then
6396     l('          -- If rule is match all ');
6397     l('          IF l_match_str = '' AND '' THEN');
6398     ldbg_s('Match String is - AND ');
6399     l('            IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
6400     l('              is_a_match := ''Y'';');
6401     ldbg_sv('is_a_match is ', 'is_a_match');
6402     l('            ELSE');
6403     l('              is_a_match := ''N'';');
6404     ldbg_sv('is_a_match is ', 'is_a_match');
6405     l('            END IF;');
6406 	l('          -- Else it is construed as a match anyway ');
6407     l('          ELSE');
6408     l('            is_a_match := ''Y'';');
6409     ldbg_sv('is_a_match is ', 'is_a_match');
6410     l('          END IF;');
6411     l('          IF (is_a_match=''Y'') THEN');
6412  end if;
6413   ldbg_sv('Inserting into the final array, the person_id - ','l_person_id');
6414   l('          FOR I IN 1..h_cpt_id.COUNT LOOP');
6415   l('          IF h_cpt_id(I)=l_contact_pt_id THEN');
6416   l('          	 l_cpt_flag := ''Y'';');
6417   l('          END IF;');
6418   l('          END LOOP;');
6419   l('          IF l_cpt_flag = ''Y'' THEN');
6420   l('          	 NULL;');
6421   l('          ELSE ');
6422   l('         	 h_cpt_id(detcnt) := l_contact_pt_id;');
6423   l('          h_cpt_party_id(detcnt) := l_person_id;');
6424   l('          	 IF (p_emax_score > 0) THEN ');
6425   l('              h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
6426   l('            ELSE ');
6427   l('              h_cpt_score(detcnt) := 0; ');
6428   l('          	 END IF; ');
6429   l('            detcnt := detcnt +1;');
6430   l('          END IF;');
6431   if l_purpose='S' then
6432   l('      end if;');
6433   end if;
6434 
6435   l('        END IF;');
6436   ds(fnd_log.level_statement);
6437   dc(fnd_log.level_statement,'Contact pt Level Matches');
6438   dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
6439   dc(fnd_log.level_statement,'l_cpt_party_id','l_person_id');
6440   dc(fnd_log.level_statement,'l_score','l_score');
6441   de;
6442   l('      END IF;');
6443   l('    END LOOP;');
6444   l('    CLOSE l_contact_pt_cur;');
6445   l('    ROLLBACK to eval_start;');
6446   l('    IF p_ins_details = ''Y'' THEN');
6447   l('      FORALL I in 1..h_cpt_id.COUNT ');
6448   l('        INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
6449   l('          l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
6450   l('    END IF;');
6451   l('  END;');
6452   l('');
6453   l('  /**  Private procedure to call the eval procedure at each entity in the correct order ***/');
6454   l('  PROCEDURE do_eval (p_index NUMBER) IS');
6455   l('    l_ctx_id NUMBER;');
6456   l('    l_threshold NUMBER;'); --Bug No: 4407425
6457   l('    other_acq_criteria_exists BOOLEAN; '); --Bug No: 4407425
6458   l('    acq_cnt NUMBER; '); --Bug No:5218095
6459   l('  BEGIN');
6460   --Start of Bug No: 4407425
6461   l('    IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
6462   IF(l_purpose ='S') THEN
6463   l('     l_threshold :=  round(( l_entered_max_score / '|| l_max_score ||') * '|| l_match_threshold ||'); ');
6464   ELSE
6465   l('     l_threshold := '|| l_match_threshold ||';  ');
6466   END IF;
6467   l('    other_acq_criteria_exists := TRUE ;');
6468   --Start of Bug No:5218095
6469   /*l('    IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
6470   l('     other_criteria_exists := FALSE; ');
6471   l('    END IF ; ');*/
6472   l('    --check if acquisition criteria exists for any other entity');
6473   l('    IF l_party_contains_str IS NOT NULL THEN ');
6474   l('    	acq_cnt := 1; ');
6475   l('    END IF; ');
6476   l('    IF l_party_site_contains_str IS NOT NULL THEN ');
6477   l('    	acq_cnt := acq_cnt+1; ');
6478   l('    END IF; ');
6479   l('    IF l_contact_contains_str IS NOT NULL THEN ');
6480   l('    	acq_cnt := acq_cnt+1; ');
6481   l('    END IF;');
6482   l('    IF l_contact_pt_contains_str IS NOT NULL THEN ');
6483   l('    	acq_cnt := acq_cnt+1; ');
6484   l('    END IF;  ');
6485 
6486   l('    IF acq_cnt>1 THEN ');
6487   l('    	other_acq_criteria_exists := TRUE; ');
6488   l('    ELSE');
6489   l('    	other_acq_criteria_exists := FALSE; ');
6490   l('    END IF;  ');
6491   dc(fnd_log.level_statement,'count of entities having acquisition attributes = ','acq_cnt');
6492   dc(fnd_log.level_statement,'call_max_score(p_index) = ','call_max_score(p_index)');
6493   dc(fnd_log.level_statement,'l_threshold = ','l_threshold');
6494   --End of Bug No:5218095
6495   l('    IF(l_match_str = '' AND '' AND other_acq_criteria_exists) THEN');
6496   --start of Bug No:5218095
6497   l('    	IF ( call_max_score(p_index) < l_threshold) THEN ');
6498   ldbg_s('When max score of entity level<l_threshold, do not evaluate ');
6499   l('	     	RETURN;	');
6500   l('    	ELSE ');
6501   ldbg_s('In do eval number of matches found exceeded threshold');
6502   l('	     	FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED''); ');
6503   l('	     	FND_MSG_PUB.ADD; ');
6504   l('	     	RAISE FND_API.G_EXC_ERROR; ');
6505   l('    	END IF; ');
6506   --end of Bug No:5218095
6507   l('	  ELSE');
6508   ldbg_s('In do eval number of matches found exceeded threshold');
6509   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6510   l('      FND_MSG_PUB.ADD;');
6511   l('      RAISE FND_API.G_EXC_ERROR;');
6512   l('     END IF; ');
6513   l('    END IF;');
6514   --End of Bug No: 4407425
6515   /*l('    IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
6516   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6517   l('      FND_MSG_PUB.ADD;');
6518   l('      RAISE FND_API.G_EXC_ERROR;');
6519   l('    END IF;');
6520   */
6521   l('    IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
6522   l('      eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
6523   l('    ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
6524   l('      eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
6525   l('    ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
6526   l('      eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
6527   l('    END IF;');
6528   l('  END;');
6529   l('  /************ End of find_persons private procedures **********/ ');
6530   l('');
6531   l('  BEGIN');
6532   l('');
6533 
6534 
6535   d(fnd_log.level_procedure,'find_persons(+)');
6536   ds(fnd_log.level_statement);
6537   dc(fnd_log.level_statement,'Input Parameters:');
6538   dc(fnd_log.level_statement,'p_match_type','p_match_type');
6539   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6540   de;
6541 
6542   l('    -- ************************************');
6543   l('    -- STEP 1. Initialization and error checks');
6544   l('');
6545 
6546   l('    l_match_str := ''' || l_match_str || ''';');
6547   l('    IF p_match_type = ''AND'' THEN');
6548   l('      l_match_str := '' AND '';');
6549   l('    ELSIF p_match_type = ''OR'' THEN');
6550   l('      l_match_str := '' OR '';');
6551   l('    END IF;');
6552   l('    l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
6553   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
6554   l('');
6555   l('    l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
6556   l('    IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
6557   l('      g_score_until_thresh := true;');
6558   l('    ELSE');
6559   l('      g_score_until_thresh := false;');
6560   l('    END IF;');
6561 
6562 
6563   l('    -- ************************************************************');
6564   l('    -- STEP 2. Setup of intermedia query strings for Acquisition query');
6565 
6566   l('    l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);');
6567   l('    l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);');
6568   l('    l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);');
6569   l('    l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);');
6570   l('    init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
6571   l('');
6572   l('    -- Setup Search Context ID');
6573   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
6574   l('    x_search_ctx_id := l_search_ctx_id;');
6575   l('');
6576 
6577   l('    IF l_party_contains_str IS NULL THEN');
6578   l('      defpt := 1;');
6579   l('    END IF;');
6580   l('    IF l_party_site_contains_str IS NULL THEN');
6581   l('      defps := 1;');
6582   l('    END IF;');
6583   l('    IF l_contact_contains_str IS NULL THEN');
6584   l('      defct := 1;');
6585   l('    END IF;');
6586   l('    IF l_contact_pt_contains_str IS NULL THEN');
6587   l('      defcpt := 1;');
6588   l('    END IF;');
6589   l('');
6590 
6591   ds(fnd_log.level_statement);
6592   dc(fnd_log.level_statement,'l_match_str','l_match_str');
6593   dc(fnd_log.level_statement,'l_party_contains_str','l_party_contains_str');
6594   dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
6595   dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
6596   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
6597   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
6598   de;
6599 
6600   /**** Call all 4 evaluation procedures ***********/
6601   l('    FOR I in 1..5 LOOP');
6602   l('      do_eval(I);');
6603   l('    END LOOP;');
6604   l('    IF l_contact_contains_str IS NOT NULL THEN');
6605   l('      eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);');
6606   l('    END IF;');
6607   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
6608 
6609   l('    x_num_matches := 0;');
6610   l('    l_num_eval := 0;');
6611   l('    IF l_match_str = '' OR '' THEN');
6612   l('      l_party_id := H_SCORES.FIRST;');
6613   l('    ELSE');
6614   l('      l_party_id := H_PARTY_ID_LIST.FIRST;');
6615   l('    END IF;');
6616 
6617 
6618   l('    WHILE l_party_id IS NOT NULL LOOP');
6619   l('      l_num_eval:= l_num_eval+1;');
6620   ds(fnd_log.level_statement);
6621   dc(fnd_log.level_statement,'Match Party ID','H_SCORES(l_party_id).PARTY_ID');
6622   IF l_purpose = 'S' THEN
6623     dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
6624   ELSE
6625     dc(fnd_log.level_statement,'Score','H_SCORES(l_party_id).TOTAL_SCORE');
6626   END IF;
6627   de;
6628   IF l_purpose = 'S' THEN
6629     l('      IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
6630     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
6631     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100));');
6632     l('            x_num_matches := x_num_matches+1;');
6633   ELSE
6634     l('      IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
6635     l('          IF p_dup_set_id IS NULL THEN');
6636     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
6637     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);');
6638     l('             x_num_matches := x_num_matches+1;');
6639     l('          ELSE');
6640     l('            BEGIN');
6641     l('              SELECT  1 INTO l_tmp FROM HZ_DUP_SET_PARTIES');  --Bug No: 4244529
6642     l('              WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID');
6643     l('              AND DUP_SET_BATCH_ID = p_dup_batch_id ');  --Bug No: 4244529
6644     l('              AND ROWNUM=1;');
6645     l('            EXCEPTION ');
6646     l('              WHEN NO_DATA_FOUND THEN');
6647     l('                IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_auto_merge_score||' THEN');
6648     l('                  l_merge_flag := ''Y'';');
6649     l('                ELSE');
6650     l('                  l_merge_flag := ''N'';');
6651     l('                END IF;');
6652     l('                INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
6653     l('                    MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
6654     l('                    LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
6655     l('                VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,');
6656     l('                    H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,');
6657     l('                    hz_utility_pub.created_by,hz_utility_pub.creation_date,');
6658     l('                    hz_utility_pub.last_update_login,');
6659     l('                    hz_utility_pub.last_update_date,');
6660     l('                    hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
6661     l('                x_num_matches := x_num_matches+1;');
6662     l('            END;');
6663     l('          END IF;');
6664   END IF;
6665   l('      END IF;');
6666   l('      IF l_match_str = '' OR '' THEN');
6667   l('        l_party_id:=H_SCORES.NEXT(l_party_id);');
6668   l('      ELSE');
6669   l('        l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
6670   l('      END IF;');
6671   l('    END LOOP;');
6672 
6673   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
6674   d(fnd_log.level_procedure,'find_persons(-)');
6675 
6676 
6677   l('EXCEPTION');
6678   l('  WHEN L_RETURN_IMM_EXC THEN');
6679   l('    RETURN;');
6680   l('  WHEN FND_API.G_EXC_ERROR THEN');
6681   l('    RAISE FND_API.G_EXC_ERROR;');
6682   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6683   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6684   l('  WHEN OTHERS THEN');
6685   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6686   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_persons'');');
6687   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6688   l('    FND_MSG_PUB.ADD;');
6689   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6690   l('END find_persons;');
6691   l('');
6692 ELSE ---Start of Code Change for Match Rule Set
6693   l('BEGIN');
6694   d(fnd_log.level_procedure,'find_persons(+)');
6695   ds(fnd_log.level_statement);
6696   dc(fnd_log.level_statement,'Input Parameters:');
6697   dc(fnd_log.level_statement,'p_match_type','p_match_type');
6698   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6699   de;
6700   pop_conditions(p_rule_id,'find_persons','p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,p_ins_details,x_search_ctx_id,x_num_matches','PARTY');
6701   d(fnd_log.level_procedure,'find_persons(-)');
6702    l('EXCEPTION');
6703   l('  WHEN FND_API.G_EXC_ERROR THEN');
6704   l('    RAISE FND_API.G_EXC_ERROR;');
6705   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6706   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6707   l('  WHEN OTHERS THEN');
6708   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6709   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_persons'');');
6710   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6711   l('    FND_MSG_PUB.ADD;');
6712   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6713   l('END find_persons;');
6714 END IF; ---End of Code Change for Match Rule Set
6715 
6716 l('PROCEDURE find_persons (');
6717   l('      p_rule_id               IN      NUMBER,');
6718   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
6719   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
6720   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
6721   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
6722   l('      p_restrict_sql          IN      VARCHAR2,');
6723   l('      p_match_type            IN      VARCHAR2,');
6724   l('      p_search_merged         IN      VARCHAR2,');
6725   l('      p_ins_details           IN      VARCHAR2,');
6726   l('      x_search_ctx_id         OUT     NUMBER,');
6727   l('      x_num_matches           OUT     NUMBER');
6728   l(') IS');
6729   l('');
6730   l('  BEGIN');
6731   l('     find_persons(p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,null,null,null,p_ins_details,x_search_ctx_id,x_num_matches);');
6732   l('  END;');
6733 
6734 
6735   /************** find_party_details API ***************/
6736   l('PROCEDURE find_party_details (');
6737   l('      p_rule_id               IN      NUMBER,');
6738   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
6739   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
6740   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
6741   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
6742   l('      p_restrict_sql          IN      VARCHAR2,');
6743   l('      p_match_type            IN      VARCHAR2,');
6744   l('      p_search_merged         IN      VARCHAR2,');
6745   l('      x_search_ctx_id         OUT     NUMBER,');
6746   l('      x_num_matches           OUT     NUMBER');
6747   l(') IS');
6748   l('');
6749   l('  BEGIN');
6750 
6751 
6752   d(fnd_log.level_procedure,'find_party_details(+)');
6753   ds(fnd_log.level_statement);
6754   dc(fnd_log.level_statement,'Input Parameters:');
6755   dc(fnd_log.level_statement,'p_match_type','p_match_type');
6756   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6757   dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
6758   de;
6759 
6760   l('  find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,');
6761   l('               p_restrict_sql,p_match_type,p_search_merged,null,null, null,''Y'',');
6762   l('               x_search_ctx_id,x_num_matches);');
6763   l('  DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
6764   l('  AND NOT EXISTS ');
6765   l('       (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);');
6766   l('  DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
6767   l('  AND NOT EXISTS ');
6768   l('       (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);');
6769   l('  DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
6770   l('  AND NOT EXISTS ');
6771   l('       (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);');
6772 
6773   d(fnd_log.level_procedure,'find_party_details(-)');
6774 
6775 
6776   l('EXCEPTION');
6777   l('  WHEN FND_API.G_EXC_ERROR THEN');
6778   l('    RAISE FND_API.G_EXC_ERROR;');
6779   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6780   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6781   l('  WHEN OTHERS THEN');
6782   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6783   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_party_details'');');
6784   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6785   l('    FND_MSG_PUB.ADD;');
6786   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6787   l('END find_party_details;');
6788   l('');
6789   /************** find_duplicate_parties API ***************/
6790   l('PROCEDURE find_duplicate_parties (');
6791   l('      p_rule_id               IN      NUMBER,');
6792   l('      p_party_id              IN      NUMBER,');
6793   l('      p_restrict_sql          IN      VARCHAR2,');
6794   l('      p_match_type            IN      VARCHAR2,');
6795   l('      p_dup_batch_id          IN      NUMBER,');
6796   l('      p_search_merged         IN      VARCHAR2,');
6797   l('      x_dup_set_id            OUT     NUMBER,');
6798   l('      x_search_ctx_id         OUT     NUMBER,');
6799   l('      x_num_matches           OUT     NUMBER');
6800   l(') IS');
6801   l('  l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
6802   l('  l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
6803   l('  l_contact_list HZ_PARTY_SEARCH.contact_list;');
6804   l('  l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
6805   l('  l_match_idx NUMBER;');
6806   l('');
6807   l('  --Fix for bug 4417124');
6808   l('  l_use_contact_addr_info BOOLEAN := TRUE;');
6809   l('  l_use_contact_cpt_info BOOLEAN  := TRUE;');
6810   l('  l_use_contact_addr_flag VARCHAR2(1) := ''Y'';');
6811   l('  l_use_contact_cpt_flag  VARCHAR2(1) := ''Y'';');
6812   l('');
6813   l('BEGIN');
6814   l('');
6815   d(fnd_log.level_procedure,'find_duplicate_parties(+)');
6816   ds(fnd_log.level_statement);
6817   dc(fnd_log.level_statement,'Input Parameters:');
6818   dc(fnd_log.level_statement,'p_party_id','p_party_id');
6819   dc(fnd_log.level_statement,'p_match_type','p_match_type');
6820   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6821   dc(fnd_log.level_statement,'p_dup_batch_id','p_dup_batch_id');
6822   dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
6823   de;
6824   l('');
6825   l('  --Fix for bug 4417124 ');
6826   l('');
6827   l('  SELECT use_contact_addr_flag, use_contact_cpt_flag ');
6828   l('  INTO l_use_contact_addr_flag, l_use_contact_cpt_flag ');
6829   l('  FROM hz_match_rules_b ');
6830   l('  WHERE match_rule_id = '||p_rule_id||'; ');
6831   l('');
6832   l('  IF NVL(l_use_contact_addr_flag, ''Y'') = ''N'' THEN');
6833   l('    l_use_contact_addr_info := FALSE; ');
6834   l('  END IF; ');
6835   l('');
6836   l('  IF NVL(l_use_contact_cpt_flag, ''Y'') = ''N'' THEN');
6837   l('    l_use_contact_cpt_info := FALSE; ');
6838   l('  END IF; ');
6839   l('');
6840   l(' --End fix for bug 4417124');
6841   l('');
6842 
6843   l('  get_party_for_search(');
6844   l('              p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);');
6845   l('');
6846   l('    IF NOT check_prim_cond (l_party_rec,');
6847   l('                            l_party_site_list,');
6848   l('                            l_contact_list,');
6849   l('                            l_cpt_list) THEN');
6850   l('      x_dup_set_id:=NULL;');
6851   l('      x_search_ctx_id:=NULL;');
6852   l('      x_num_matches:=0;');
6853   l('      RETURN;');
6854   l('    END IF;');
6855 
6856   l('  x_dup_set_id := NULL;');
6857   l('  IF p_dup_batch_id IS NOT NULL THEN');
6858   l('    SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;');
6859   l('  END IF;');
6860   l('');
6861   l('  --Fix for bug 4417124 ');
6862   l('  IF l_party_rec.PARTY_TYPE = ''PERSON'' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN');
6863   l('    find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
6864   l('               p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,''N'',');
6865   l('               x_search_ctx_id,x_num_matches);');
6866   l('  ELSE');
6867   l('    find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
6868   l('               p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,''N'',');
6869   l('               x_search_ctx_id,x_num_matches);');
6870   l('  END IF;');
6871   l('');
6872   l('  IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN');
6873   l('    INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,');
6874   l('      STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,');
6875   l('      LAST_UPDATE_DATE, LAST_UPDATED_BY) ');
6876   l('    VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, ''SYSBATCH'',');
6877   l('      ''PARTY_MERGE'', hz_utility_pub.created_by, hz_utility_pub.creation_date,');
6878   l('      hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,');
6879   l('      hz_utility_pub.user_id);');
6880   l('');
6881   l('    INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
6882   l('      MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
6883   l('      LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
6884   l('    VALUES (p_party_id,x_dup_set_id,0,0,');
6885   l('      ''Y'',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,');
6886   l('      hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,');
6887   l('      hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
6888   l('  ELSE');
6889   l('    x_dup_set_id := NULL;');
6890   l('  END IF;');
6891   d(fnd_log.level_procedure,'find_duplicate_parties(-)');
6892 
6893 
6894   l('EXCEPTION');
6895   l('  WHEN FND_API.G_EXC_ERROR THEN');
6896   l('    RAISE FND_API.G_EXC_ERROR;');
6897   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6898   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6899   l('  WHEN OTHERS THEN');
6900   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6901   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_parties'');');
6902   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6903   l('    FND_MSG_PUB.ADD;');
6904   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6905   l('END find_duplicate_parties;');
6906 
6907 
6908   l('');
6909   /************** find_duplicate_party_sites API ***************/
6910   l('PROCEDURE find_duplicate_party_sites (');
6911   l('      p_rule_id               IN      NUMBER,');
6912   l('      p_party_site_id         IN      NUMBER,');
6913   l('      p_party_id              IN      NUMBER,');
6914   l('      p_restrict_sql          IN      VARCHAR2,');
6915   l('      p_match_type            IN      VARCHAR2,');
6916   l('      x_search_ctx_id         OUT     NUMBER,');
6917   l('      x_num_matches           OUT     NUMBER');
6918   l(') IS');
6919   l('');
6920 
6921 
6922   l('   l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
6923   l('   l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
6924   l('   l_contact_list HZ_PARTY_SEARCH.contact_list; ');
6925   l('   l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
6926   l('   contact_point_ids HZ_PARTY_SEARCH.IDList; ');
6927   l('   p_party_site_list HZ_PARTY_SEARCH.IDList;  ');
6928   l('   p_contact_ids HZ_PARTY_SEARCH.IDList; ');
6929   l('  l_match_idx NUMBER;');
6930 
6931   l('   cursor get_cpts_for_party_sites is select contact_point_id  ');
6932   l('                         from hz_contact_points ');
6933   l('                         where owner_table_name = ''HZ_PARTY_SITES'' ');
6934   l('                         and primary_flag=''Y''');
6935   l('                         and owner_table_id = p_party_site_id; ');
6936 
6937   l('   BEGIN ');
6938 
6939 
6940   d(fnd_log.level_procedure,'find_duplicate_party_sites(+)');
6941   ds(fnd_log.level_statement);
6942   dc(fnd_log.level_statement,'Input Parameters:');
6943   dc(fnd_log.level_statement,'p_party_site_id','p_party_site_id');
6944   dc(fnd_log.level_statement,'p_party_id','p_party_id');
6945   dc(fnd_log.level_statement,'p_match_type','p_match_type');
6946   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6947   de;
6948 
6949   l('     p_party_site_list(1) := p_party_site_id; ');
6950   l('     OPEN get_cpts_for_party_sites;');
6951   l('     LOOP       ');
6952   l('     FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; ');
6953   l('         EXIT WHEN get_cpts_for_party_sites%NOTFOUND; ');
6954   l('     END LOOP;  ');
6955   l('     CLOSE get_cpts_for_party_sites; ');
6956   l('  ');
6957   l('     get_search_criteria (');
6958   l('         null,');
6959   l('         p_party_site_list,');
6960   l('         HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
6961   l('         contact_point_ids, ');
6962   l('         l_party_search_rec,');
6963   l('         l_party_site_list,');
6964   l('         l_contact_list,');
6965   l('         l_contact_point_list) ;');
6966   l('    IF NOT check_prim_cond (l_party_search_rec,');
6967   l('                            l_party_site_list,');
6968   l('                            l_contact_list,');
6969   l('                            l_contact_point_list) THEN');
6970   l('      x_search_ctx_id:=NULL;');
6971   l('      x_num_matches:=0;');
6972   l('      RETURN;');
6973   l('    END IF;');
6974   l(' ');
6975   l('     get_matching_party_sites (p_rule_id, ');
6976   l('         p_party_id, ');
6977   l('         l_party_site_list, ');
6978   l('         l_contact_point_list,');
6979   l('         p_restrict_sql, ');
6980   l('         p_match_type, ');
6981   l('         p_party_site_id, ');
6982   l('         x_search_ctx_id,');
6983   l('         x_num_matches);');
6984   d(fnd_log.level_procedure,'find_duplicate_party_sites(-)');
6985 
6986 
6987   l('EXCEPTION');
6988   l('  WHEN FND_API.G_EXC_ERROR THEN');
6989   l('    RAISE FND_API.G_EXC_ERROR;');
6990   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6991   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6992   l('  WHEN OTHERS THEN');
6993   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6994   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_party_sites'');');
6995   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6996   l('    FND_MSG_PUB.ADD;');
6997   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6998   l('END find_duplicate_party_sites; ');
6999   l(' ');
7000 
7001   /************** find_duplicate_contacts API ***************/
7002   l('PROCEDURE find_duplicate_contacts (');
7003   l('      p_rule_id               IN      NUMBER,');
7004   l('      p_org_contact_id        IN      NUMBER,');
7005   l('      p_party_id              IN      NUMBER,');
7006   l('      p_restrict_sql          IN      VARCHAR2,');
7007   l('      p_match_type            IN      VARCHAR2,');
7008   l('      x_search_ctx_id         OUT     NUMBER,');
7009   l('      x_num_matches           OUT     NUMBER');
7010   l(') IS');
7011   l('');
7012 
7013   l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;');
7014   l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
7015   l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
7016   l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
7017   l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
7018   l(' p_party_site_list HZ_PARTY_SEARCH.IDList;   ');
7019   l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
7020   l('  l_match_idx NUMBER;');
7021 
7022   l(' cursor get_cpt_for_contact_id is select  contact_point_id ');
7023   l('   from hz_org_contacts a, hz_relationships b, hz_contact_points c ');
7024   l('   where a.party_relationship_id = b.relationship_id ');
7025   l('     and c.owner_table_name = ''HZ_PARTIES'' ');
7026   l('     and c.primary_flag=''Y''');
7027   l('     and c.owner_table_id = b.party_id ');
7028   l('     and b.directional_flag = ''F''  ');
7029   l('     and a.org_contact_id = p_org_contact_id; ');
7030 
7031   l('BEGIN ');
7032 
7033 
7034   d(fnd_log.level_procedure,'find_duplicate_contacts(+)');
7035   ds(fnd_log.level_statement);
7036   dc(fnd_log.level_statement,'Input Parameters:');
7037   dc(fnd_log.level_statement,'p_org_contact_id','p_org_contact_id');
7038   dc(fnd_log.level_statement,'p_party_id','p_party_id');
7039   dc(fnd_log.level_statement,'p_match_type','p_match_type');
7040   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7041   de;
7042 
7043 
7044   l('    p_contact_ids(1) := p_org_contact_id; ');
7045   l('    OPEN get_cpt_for_contact_id; ');
7046   l('    LOOP ');
7047   l('    FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; ');
7048   l('        EXIT WHEN get_cpt_for_contact_id%NOTFOUND; ');
7049   l('    END LOOP;  ');
7050   l('    CLOSE get_cpt_for_contact_id; ');
7051   l(' ');
7052   l('    get_search_criteria (');
7053   l('        null,');
7054   l('        HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
7055   l('        p_contact_ids,');
7056   l('        contact_point_ids, ');
7057   l('        l_party_search_rec,');
7058   l('        l_party_site_list, ');
7059   l('        l_contact_list,');
7060   l('        l_contact_point_list) ;');
7061   l('    IF NOT check_prim_cond (l_party_search_rec,');
7062   l('                            l_party_site_list,');
7063   l('                            l_contact_list,');
7064   l('                            l_contact_point_list) THEN');
7065   l('      x_search_ctx_id:=NULL;');
7066   l('      x_num_matches:=0;');
7067   l('      RETURN;');
7068   l('    END IF;');
7069   l(' ');
7070   l('    get_matching_contacts (p_rule_id, ');
7071   l('        p_party_id, ');
7072   l('        l_contact_list, ');
7073   l('        l_contact_point_list, ');
7074   l('        p_restrict_sql, ');
7075   l('        p_match_type, ');
7076   l('        p_org_contact_id, ');
7077   l('        x_search_ctx_id, ');
7078   l('        x_num_matches);');
7079   l(' ');
7080   d(fnd_log.level_procedure,'find_duplicate_contacts(-)');
7081 
7082 
7083   l('EXCEPTION');
7084   l('  WHEN FND_API.G_EXC_ERROR THEN');
7085   l('    RAISE FND_API.G_EXC_ERROR;');
7086   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7087   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7088   l('  WHEN OTHERS THEN');
7089   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7090   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contacts'');');
7091   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7092   l('    FND_MSG_PUB.ADD;');
7093   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7094   l('END find_duplicate_contacts; ');
7095   l('');
7096   /************** find_duplicate_contact_points API ***************/
7097   l('PROCEDURE find_duplicate_contact_points (');
7098   l('      p_rule_id               IN      NUMBER,');
7099   l('      p_contact_point_id      IN      NUMBER,');
7100   l('      p_party_id              IN      NUMBER,');
7101   l('      p_restrict_sql          IN      VARCHAR2,');
7102   l('      p_match_type            IN      VARCHAR2,');
7103   l('      x_search_ctx_id         OUT     NUMBER,');
7104   l('      x_num_matches           OUT     NUMBER');
7105   l(') IS');
7106   l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
7107   l('  l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
7108   l('   l_contact_list HZ_PARTY_SEARCH.contact_list;  ');
7109   l('   l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;  ');
7110   l('   contact_point_ids HZ_PARTY_SEARCH.IDList;  ');
7111   l('  p_party_site_list HZ_PARTY_SEARCH.IDList;   ');
7112   l('  p_contact_ids HZ_PARTY_SEARCH.IDList;  ');
7113   l('  l_match_idx NUMBER;');
7114 
7115   l('');
7116   l('BEGIN');
7117 
7118 
7119   d(fnd_log.level_procedure,'find_duplicate_contact_points(+)');
7120   ds(fnd_log.level_statement);
7121   dc(fnd_log.level_statement,'Input Parameters:');
7122   dc(fnd_log.level_statement,'p_contact_point_id','p_contact_point_id');
7123   dc(fnd_log.level_statement,'p_party_id','p_party_id');
7124   dc(fnd_log.level_statement,'p_match_type','p_match_type');
7125   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7126   de;
7127 
7128   l('  contact_point_ids(1) := p_contact_point_id;   ');
7129   l('  get_search_criteria (   ');
7130   l('      null, ');
7131   l('      HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
7132   l('      HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
7133   l('      contact_point_ids,   ');
7134   l('      l_party_search_rec, ');
7135   l('      l_party_site_list, ');
7136   l('      l_contact_list, ');
7137   l('      l_contact_point_list ); ');
7138   l('    ');
7139   l('    IF NOT check_prim_cond (l_party_search_rec,');
7140   l('                            l_party_site_list,');
7141   l('                            l_contact_list,');
7142   l('                            l_contact_point_list) THEN');
7143   l('      x_search_ctx_id:=NULL;');
7144   l('      x_num_matches:=0;');
7145   l('      RETURN;');
7146   l('    END IF;');
7147   l('   get_matching_contact_points ( ');
7148   l('      p_rule_id, ');
7149   l('      p_party_id, ');
7150   l('     l_contact_point_list, ');
7151   l('      p_restrict_sql, ');
7152   l('      p_match_type, ');
7153   l('      p_contact_point_id, ');
7154   l('      x_search_ctx_id, ');
7155   l('      x_num_matches );  ');
7156   d(fnd_log.level_procedure,'find_duplicate_contact_points(-)');
7157 
7158 
7159   l('EXCEPTION');
7160   l('  WHEN FND_API.G_EXC_ERROR THEN');
7161   l('    RAISE FND_API.G_EXC_ERROR;');
7162   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7163   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7164   l('  WHEN OTHERS THEN');
7165   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7166   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contact_points'');');
7167   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7168   l('    FND_MSG_PUB.ADD;');
7169   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7170   l('END find_duplicate_contact_points;');
7171   l('');
7172   l('PROCEDURE find_parties_dynamic (');
7173   l('        p_rule_id               IN      NUMBER,');
7174   l('        p_attrib_id1            IN      NUMBER,');
7175   l('        p_attrib_id2            IN      NUMBER,');
7176   l('        p_attrib_id3            IN      NUMBER,');
7177   l('        p_attrib_id4            IN      NUMBER,');
7178   l('        p_attrib_id5            IN      NUMBER,');
7179   l('        p_attrib_id6            IN      NUMBER,');
7180   l('        p_attrib_id7            IN      NUMBER,');
7181   l('        p_attrib_id8            IN      NUMBER,');
7182   l('        p_attrib_id9            IN      NUMBER,');
7183   l('        p_attrib_id10           IN      NUMBER,');
7184   l('        p_attrib_id11           IN      NUMBER,');
7185   l('        p_attrib_id12           IN      NUMBER,');
7186   l('        p_attrib_id13           IN      NUMBER,');
7187   l('        p_attrib_id14           IN      NUMBER,');
7188   l('        p_attrib_id15           IN      NUMBER,');
7189   l('        p_attrib_id16           IN      NUMBER,');
7190   l('        p_attrib_id17           IN      NUMBER,');
7191   l('        p_attrib_id18           IN      NUMBER,');
7192   l('        p_attrib_id19           IN      NUMBER,');
7193   l('        p_attrib_id20           IN      NUMBER,');
7194   l('        p_attrib_val1           IN      VARCHAR2,');
7195   l('        p_attrib_val2           IN      VARCHAR2,');
7196   l('        p_attrib_val3           IN      VARCHAR2,');
7197   l('        p_attrib_val4           IN      VARCHAR2,');
7198   l('        p_attrib_val5           IN      VARCHAR2,');
7199   l('        p_attrib_val6           IN      VARCHAR2,');
7200   l('        p_attrib_val7           IN      VARCHAR2,');
7201   l('        p_attrib_val8           IN      VARCHAR2,');
7202   l('        p_attrib_val9           IN      VARCHAR2,');
7203   l('        p_attrib_val10          IN      VARCHAR2,');
7204   l('        p_attrib_val11          IN      VARCHAR2,');
7205   l('        p_attrib_val12          IN      VARCHAR2,');
7206   l('        p_attrib_val13          IN      VARCHAR2,');
7207   l('        p_attrib_val14          IN      VARCHAR2,');
7208   l('        p_attrib_val15          IN      VARCHAR2,');
7209   l('        p_attrib_val16          IN      VARCHAR2,');
7210   l('        p_attrib_val17          IN      VARCHAR2,');
7211   l('        p_attrib_val18          IN      VARCHAR2,');
7212   l('        p_attrib_val19          IN      VARCHAR2,');
7213   l('        p_attrib_val20          IN      VARCHAR2,');
7214   l('        p_restrict_sql          IN      VARCHAR2,');
7215   l('        p_match_type            IN      VARCHAR2,');
7216   l('        p_search_merged         IN      VARCHAR2,');
7217   l('        x_search_ctx_id         OUT     NUMBER,');
7218   l('        x_num_matches           OUT     NUMBER');
7219   l(') IS');
7220   l('  BEGIN');
7221   l('    call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
7222   l('                     p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
7223   l('                     p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
7224   l('                     p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
7225   l('                     p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
7226   l('                     p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
7227   l('                     p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
7228   l('                     p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
7229   l('                     p_restrict_sql,''FIND_PARTIES'',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);');
7230   l(' END;');
7231 
7232   l('');
7233   /************** call_api_dynamic API ***************/
7234   l('PROCEDURE call_api_dynamic (');
7235   l('        p_rule_id               IN      NUMBER,');
7236   l('        p_attrib_id1            IN      NUMBER,');
7237   l('        p_attrib_id2            IN      NUMBER,');
7238   l('        p_attrib_id3            IN      NUMBER,');
7239   l('        p_attrib_id4            IN      NUMBER,');
7240   l('        p_attrib_id5            IN      NUMBER,');
7241   l('        p_attrib_id6            IN      NUMBER,');
7242   l('        p_attrib_id7            IN      NUMBER,');
7243   l('        p_attrib_id8            IN      NUMBER,');
7244   l('        p_attrib_id9            IN      NUMBER,');
7245   l('        p_attrib_id10           IN      NUMBER,');
7246   l('        p_attrib_id11           IN      NUMBER,');
7247   l('        p_attrib_id12           IN      NUMBER,');
7248   l('        p_attrib_id13           IN      NUMBER,');
7249   l('        p_attrib_id14           IN      NUMBER,');
7250   l('        p_attrib_id15           IN      NUMBER,');
7251   l('        p_attrib_id16           IN      NUMBER,');
7252   l('        p_attrib_id17           IN      NUMBER,');
7253   l('        p_attrib_id18           IN      NUMBER,');
7254   l('        p_attrib_id19           IN      NUMBER,');
7255   l('        p_attrib_id20           IN      NUMBER,');
7256   l('        p_attrib_val1           IN      VARCHAR2,');
7257   l('        p_attrib_val2           IN      VARCHAR2,');
7258   l('        p_attrib_val3           IN      VARCHAR2,');
7259   l('        p_attrib_val4           IN      VARCHAR2,');
7260   l('        p_attrib_val5           IN      VARCHAR2,');
7261   l('        p_attrib_val6           IN      VARCHAR2,');
7262   l('        p_attrib_val7           IN      VARCHAR2,');
7263   l('        p_attrib_val8           IN      VARCHAR2,');
7264   l('        p_attrib_val9           IN      VARCHAR2,');
7265   l('        p_attrib_val10          IN      VARCHAR2,');
7266   l('        p_attrib_val11          IN      VARCHAR2,');
7267   l('        p_attrib_val12          IN      VARCHAR2,');
7268   l('        p_attrib_val13          IN      VARCHAR2,');
7269   l('        p_attrib_val14          IN      VARCHAR2,');
7270   l('        p_attrib_val15          IN      VARCHAR2,');
7271   l('        p_attrib_val16          IN      VARCHAR2,');
7272   l('        p_attrib_val17          IN      VARCHAR2,');
7273   l('        p_attrib_val18          IN      VARCHAR2,');
7274   l('        p_attrib_val19          IN      VARCHAR2,');
7275   l('        p_attrib_val20          IN      VARCHAR2,');
7276   l('        p_restrict_sql          IN      VARCHAR2,');
7277   l('        p_api_name              IN      VARCHAR2,');
7278   l('        p_match_type            IN      VARCHAR2,');
7279   l('        p_party_id              IN      NUMBER,');
7280   l('        p_search_merged         IN      VARCHAR2,');
7281   l('        x_search_ctx_id         OUT     NUMBER,');
7282   l('        x_num_matches           OUT     NUMBER');
7283   l(') IS');
7284   l('  TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;');
7285   l('  l_match_idx NUMBER;');
7286   l('  AttrVals AttrList;');
7287   l('  l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
7288   l('  l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
7289   l('  l_contact_list HZ_PARTY_SEARCH.contact_list;');
7290   l('  l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
7291   l('  l_dup_set_id NUMBER;');
7292   l('  l_idx NUMBER;');
7293   l('  l_cpt_type VARCHAR2(255);');
7294   l('  FIRST BOOLEAN := TRUE; ');
7295   l('');
7296   l('BEGIN');
7297 
7298   d(fnd_log.level_procedure,'call_api_dynamic(+)');
7299   l('');
7300   FOR I in 1..20 LOOP
7301     l('  IF p_attrib_id'||I||' IS NOT NULL THEN');
7302     l('    AttrVals(p_attrib_id'||I||'):=p_attrib_val'||I||';');
7303     l('  END IF;');
7304   END LOOP;
7305 
7306   FIRST := TRUE;
7307   FOR ATTRS IN (
7308       SELECT a.attribute_id, a.attribute_name, a.entity_name
7309       FROM HZ_TRANS_ATTRIBUTES_VL a,
7310          HZ_MATCH_RULE_PRIMARY p
7311       WHERE p.match_rule_id = p_rule_id
7312       AND p.attribute_id = a.attribute_id
7313 
7314       UNION
7315 
7316       SELECT a.attribute_id, a.attribute_name, a.entity_name
7317       FROM HZ_TRANS_ATTRIBUTES_VL a,
7318          HZ_MATCH_RULE_SECONDARY s
7319       WHERE s.match_rule_id = p_rule_id
7320       AND s.attribute_id = a.attribute_id) LOOP
7321     l('  IF AttrVals.EXISTS('||ATTRS.attribute_id||') THEN');
7322     IF ATTRS.entity_name='PARTY' THEN
7323         l('    l_party_rec.'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7324         d(fnd_log.level_statement,'l_party_rec.'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7325     ELSIF ATTRS.entity_name='PARTY_SITES' THEN
7326         l('    l_party_site_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7327         d(fnd_log.level_statement,'l_party_site_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7328     ELSIF ATTRS.entity_name='CONTACTS' THEN
7329         l('    l_contact_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7330         d(fnd_log.level_statement,'l_contact_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7331     ELSIF ATTRS.entity_name='CONTACT_POINTS' THEN
7332       BEGIN
7333         SELECT tag INTO l_cpt_type FROM fnd_lookup_values
7334         WHERE lookup_type = 'HZ_DQM_CPT_ATTR_TYPE'
7335         AND lookup_code = ATTRS.attribute_name
7336         AND ROWNUM=1;
7337       EXCEPTION
7338         WHEN NO_DATA_FOUND THEN
7339           l_cpt_type:='PHONE';
7340       END;
7341 
7342       l('    l_cpt_type := '''||l_cpt_type||''';');
7343       l('    FIRST := FALSE;');
7344       l('    FOR I in 1..l_cpt_list.COUNT LOOP');
7345       l('      IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN');
7346       l('        l_cpt_list(I).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7347       l('        FIRST := TRUE;');
7348       ds(fnd_log.level_statement);
7349       dc(fnd_log.level_statement,'l_cpt_list(''||I||'').CONTACT_POINT_TYPE','l_cpt_type');
7350       dc(fnd_log.level_statement,'l_cpt_list(''||I||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7351       de;
7352       l('      END IF;');
7353       l('    END LOOP;');
7354       l('    IF not FIRST THEN');
7355       l('      l_idx := l_cpt_list.COUNT+1;');
7356       l('      l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;');
7357       l('      l_cpt_list(l_idx).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7358       ds(fnd_log.level_statement);
7359       dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').CONTACT_POINT_TYPE','l_cpt_type');
7360       dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7361       de;
7362       l('    END IF;');
7363     END IF;
7364     l('  END IF;');
7365     l('');
7366   END LOOP;
7367   l('');
7368 
7369   l('  IF AttrVals.EXISTS(14) THEN');
7370   l('     l_party_rec.PARTY_TYPE:= AttrVals(14); ');
7371   l('  END IF; ');
7372 
7373   l('  IF upper(p_api_name) = ''FIND_PARTIES'' THEN');
7374   l('    find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
7375   l('               p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,''N'',');
7376   l('               x_search_ctx_id,x_num_matches);');
7377   l('  ELSIF upper(p_api_name) = ''FIND_PARTY_DETAILS'' THEN');
7378   l('    find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
7379   l('               p_restrict_sql,p_match_type,p_search_merged,');
7380   l('               x_search_ctx_id,x_num_matches);');
7381   l('  ELSIF upper(p_api_name) = ''FIND_PERSONS'' THEN');
7382   l('    find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
7383   l('               p_restrict_sql,p_match_type,p_search_merged,''N'',');
7384   l('               x_search_ctx_id,x_num_matches);');
7385   l('  ELSIF upper(p_api_name) = ''GET_MATCHING_PARTY_SITES'' THEN');
7386   l('    get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,');
7387   l('               p_restrict_sql,p_match_type,NULL,');
7388   l('               x_search_ctx_id,x_num_matches);');
7389   l('  ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACTS'' THEN');
7390   l('    get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,');
7391   l('               p_restrict_sql,p_match_type,NULL,');
7392   l('               x_search_ctx_id,x_num_matches);');
7393   l('  ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACT_POINTS'' THEN');
7394   l('    get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,');
7395   l('               p_restrict_sql,p_match_type,NULL,');
7396   l('               x_search_ctx_id,x_num_matches);');
7397   l('  END IF;');
7398   d(fnd_log.level_procedure,'call_api_dynamic(-)');
7399 
7400 
7401   l('EXCEPTION');
7402   l('  WHEN FND_API.G_EXC_ERROR THEN');
7403   l('    RAISE FND_API.G_EXC_ERROR;');
7404   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7405   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7406   l('  WHEN OTHERS THEN');
7407   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7408   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.call_api_dynamic'');');
7409   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7410   l('    FND_MSG_PUB.ADD;');
7411   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7412 
7413 
7414   l('END call_api_dynamic; ');
7415   l('');
7416 
7417   /************** get_matching_party_sites API ***************/
7418   l('');
7419   l('PROCEDURE get_matching_party_sites (');
7420   l('        p_rule_id               IN      NUMBER,');
7421   l('        p_party_id              IN      NUMBER,');
7422   l('        p_party_site_list       IN      HZ_PARTY_SEARCH.PARTY_SITE_LIST,');
7423   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
7424   l('        p_restrict_sql          IN      VARCHAR2,');
7425   l('        p_match_type            IN      VARCHAR2,');
7426   l('        p_dup_party_site_id     IN      NUMBER, ');
7427   l('        x_search_ctx_id         OUT     NUMBER,');
7428   l('        x_num_matches           OUT     NUMBER');
7429   l(') IS');
7430   l('  ');
7431 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
7432   l('  -- Strings to hold the generated Intermedia query strings');
7433   l('  l_party_contains_str VARCHAR2(32000); ');
7434   l('  l_match_idx NUMBER;');
7435   l('  l_party_site_contains_str VARCHAR2(32000);');
7436   l('  l_contact_contains_str VARCHAR2(32000);');
7437   l('  l_contact_pt_contains_str VARCHAR2(32000);');
7438   l('  l_tmp VARCHAR2(32000);');
7439   l('');
7440   l('  -- Other local variables');
7441   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
7442   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
7443   l('  -- For Score calculation');
7444   l('  l_max_score NUMBER;');
7445   l('  l_entered_max_score NUMBER;');
7446   l('  FIRST BOOLEAN;');
7447   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
7448   l('');
7449   FOR TX IN (
7450       SELECT distinct f.staged_attribute_column
7451       FROM hz_trans_functions_vl f, hz_secondary_trans st,
7452            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
7453       WHERE sa.match_rule_id = p_rule_id
7454       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
7455       AND st.function_id = f.function_id
7456       AND (a.ENTITY_NAME='PARTY_SITES' OR a.ENTITY_NAME='CONTACT_POINTS')
7457       AND a.attribute_id = sa.attribute_id) LOOP
7458     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
7459   END LOOP;
7460   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
7461   l('');
7462   l('  l_score NUMBER;');
7463   l('  l_idx NUMBER;');
7464   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
7465   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
7466   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
7467   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
7468   l('  l_party_id NUMBER;');
7469   l('  l_ps_party_id NUMBER;');
7470   l('  l_ct_party_id NUMBER;');
7471   l('  l_cpt_party_id NUMBER;');
7472   l('  l_cpt_ps_id NUMBER;');
7473   l('  l_cpt_contact_id NUMBER;');
7474   l('  l_cpt_type VARCHAR2(100);');
7475   l('  l_cpt_level VARCHAR2(100);');
7476   l('  l_party_site_id NUMBER;');
7477   l('  l_org_contact_id NUMBER;');
7478   l('  l_contact_pt_id NUMBER;');
7479   l('  l_cpt_level VARCHAR2(100);');
7480   l('  l_ps_contact_id NUMBER;');
7481   l('  l_party_max_score NUMBER;');
7482   l('  l_ps_max_score NUMBER;');
7483   l('  l_contact_max_score NUMBER;');
7484   l('  l_cpt_max_score NUMBER;');
7485   l('');
7486   l('  defpt NUMBER :=0;');
7487   l('  defps NUMBER :=0;');
7488   l('  defct NUMBER :=0;');
7489   l('  defcpt NUMBER :=0;');
7490   l('  l_index NUMBER;');
7491   l('  l_match_ps_list HZ_PARTY_SEARCH.IDList;');
7492   l('  l_cnt NUMBER:=1;');
7493   l('');
7494   l('  ');
7495   l('  BEGIN');
7496 
7497 
7498   d(fnd_log.level_procedure,'get_matching_party_sites(+)');
7499   ds(fnd_log.level_statement);
7500   dc(fnd_log.level_statement,'Input Parameters:');
7501   dc(fnd_log.level_statement,'p_match_type','p_match_type');
7502   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7503   dc(fnd_log.level_statement,'p_dup_party_site_id','p_dup_party_site_id');
7504   de;
7505   l('');
7506   l('    -- ************************************');
7507   l('    -- STEP 1. Initialization and error checks');
7508   l('');
7509   l('    l_match_str := ''' || l_match_str || ''';');
7510   l('    IF p_match_type = ''AND'' THEN');
7511   l('      l_match_str := '' AND '';');
7512   l('    ELSIF p_match_type = ''OR'' THEN');
7513   l('      l_match_str := '' OR '';');
7514   l('    END IF;');
7515   l('    l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, p_party_site_list, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
7516   l('    g_score_until_thresh := false;');
7517   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
7518 
7519   l('');
7520 
7521   l('    -- ************************************************************');
7522   l('    -- STEP 2. Setup of intermedia query strings for Acquisition query');
7523   l('    l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);');
7524   l('    l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
7525   l('    init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,p_party_site_list,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);');
7526   l('');
7527   l('    -- Setup Search Context ID');
7528   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
7529   l('    x_search_ctx_id := l_search_ctx_id;');
7530   l('');
7531 
7532   ds(fnd_log.level_statement);
7533   dc(fnd_log.level_statement,'l_match_str','l_match_str');
7534   dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
7535   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
7536   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
7537   de;
7538 
7539   l('    IF l_party_site_contains_str IS NULL THEN');
7540   l('      defps := 1;');
7541   l('    END IF;');
7542   l('    IF l_contact_pt_contains_str IS NULL THEN');
7543   l('      defcpt := 1;');
7544   l('    END IF;');
7545   l('');
7546   l('    IF l_party_site_contains_str IS NOT NULL THEN');
7547   l('      open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,''N'', ''N'',l_party_site_cur);');
7548   l('      LOOP');
7549   l('        FETCH l_party_site_cur INTO ');
7550   l('            l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
7551   l('        EXIT WHEN l_party_site_cur%NOTFOUND;');
7552   l('      IF (p_dup_party_site_id IS NULL OR (');
7553   l('                p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND ');
7554   l('                l_party_site_id <> p_dup_party_site_id)) THEN  ');
7555   l('            l_index := map_id(l_party_site_id);');
7556   l('            l_match_ps_list(l_cnt):= l_party_site_id ;');
7557   l('            l_cnt:=l_cnt+1;');
7558   l('            l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
7559   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);');
7560   ds(fnd_log.level_statement);
7561   dc(fnd_log.level_statement,'Party Site Level Matches');
7562   dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
7563   dc(fnd_log.level_statement,'l_score','l_score');
7564   de;
7565 
7566   l('      END IF; ');
7567   l('      END LOOP;');
7568   l('      CLOSE l_party_site_cur;');
7569   l('    END IF;');
7570   l('');
7571   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
7572   l('    SAVEPOINT eval_start;');
7573   l('    IF l_match_str = '' AND '' OR (');
7574   l('        ((l_cpt_max_score/l_entered_max_score)<' ||'('||l_match_threshold||'/'||l_max_score || '))' );
7575   l('        ) THEN');
7576   l('      FORALL I in 1..l_match_ps_list.COUNT');
7577   l('           INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)');
7578   l('           values (l_search_ctx_id,l_match_ps_list(I));');
7579   l('        open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur,''PARTY_SITES'');');
7580   l('    ELSE');
7581   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur);');
7582   l('    END IF;');
7583   l('      LOOP');
7584   l('        FETCH l_contact_pt_cur INTO ');
7585   l('            l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
7586   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
7587   l('      IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (');
7588   l('         p_dup_party_site_id IS NOT NULL AND l_cpt_contact_id IS NULL AND p_dup_party_site_id <> l_cpt_ps_id))) THEN   ');
7589   l('        l_index := map_id(l_cpt_ps_id);');
7590   l('        IF l_match_str = '' OR '' THEN');
7591   l('          l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7592   l('          IF NOT H_SCORES.EXISTS(l_index) THEN');
7593   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
7594   l('          ELSE');
7595   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7596   l('               H_SCORES(l_index).TOTAL_SCORE := ');
7597   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7598   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7599   l('            END IF;');
7600   l('          END IF;');
7601   l('        ELSE');
7602   l('          IF H_SCORES.EXISTS(l_index) THEN');
7603   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7604   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7605   l('               H_SCORES(l_index).TOTAL_SCORE := ');
7606   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7607   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7608   l('            END IF;');
7609   l('          ELSIF defps=1 THEN');
7610   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7611   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
7612   l('          END IF;');
7613   l('        END IF;');
7614   l('      END IF; ');
7615   ds(fnd_log.level_statement);
7616   dc(fnd_log.level_statement,'Contact_point Level Matches');
7617   dc(fnd_log.level_statement,'l_party_site_id','l_cpt_ps_id');
7618   dc(fnd_log.level_statement,'l_score','l_score');
7619   de;
7620   l('      END LOOP;');
7621   l('      CLOSE l_contact_pt_cur;');
7622   l('    ROLLBACK TO eval_start;');
7623   l('    END IF;');
7624   l('    x_num_matches := 0;');
7625   l('    l_party_site_id := H_SCORES.FIRST;');
7626   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
7627   l('    WHILE l_party_site_id IS NOT NULL LOOP');
7628   ds(fnd_log.level_statement);
7629   dc(fnd_log.level_statement,'Match Party Site ID','H_SCORES(l_party_site_id).PARTY_SITE_ID');
7630   dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100)');
7631   de;
7632 l(' IF l_match_str = '' OR '' THEN');
7633   --Start of Bug No: 4162385
7634   IF l_purpose = 'D' THEN
7635     l_entity_score_lh := 'H_SCORES(l_party_site_id).TOTAL_SCORE';
7636     l_entity_score_rh := 'ROUND(('||get_entity_level_score(p_rule_id,'PARTY_SITES')||'/'||l_max_score||') * '|| l_match_threshold || ')';
7637   ELSE
7638     l_entity_score_lh := 'H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score';
7639     l_entity_score_rh := l_match_threshold||'/'||l_max_score;
7640   END IF;
7641   --End of Bug No: 4162385
7642     l('IF ('||l_entity_score_lh||')>=( '||l_entity_score_rh||' ) THEN'); --Bug No: 4162385
7643     l('    INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
7644     l('    VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100);');
7645   l('      x_num_matches := x_num_matches+1;');
7646   l(' END IF;');
7647 l(' ELSE');
7648     l('    IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND');
7649     l('       H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND');
7650     l('       ('||l_entity_score_lh||')>=('||l_entity_score_rh||') THEN'); --Bug No: 4162385
7651     l('      INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
7652     l('      VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100));');
7653   l('       x_num_matches := x_num_matches+1;');
7654   l('      END IF;');
7655 l(' END IF;');
7656   l('      l_party_site_id:=H_SCORES.NEXT(l_party_site_id);');
7657   l('    END LOOP;');
7658 ELSE ---Start of Code Change for Match Rule Set
7659   l('  ');
7660   l('  BEGIN');
7661   d(fnd_log.level_procedure,'get_matching_party_sites(+)');
7662   ds(fnd_log.level_statement);
7663   dc(fnd_log.level_statement,'Input Parameters:');
7664   dc(fnd_log.level_statement,'p_match_type','p_match_type');
7665   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7666   dc(fnd_log.level_statement,'p_dup_party_site_id','p_dup_party_site_id');
7667   de;
7668   l('');
7669   pop_conditions(p_rule_id,'get_matching_party_sites','p_rule_id,p_party_id,p_party_site_list,p_contact_point_list,p_restrict_sql,p_match_type,p_dup_party_site_id,x_search_ctx_id,x_num_matches','PARTY_SITES');
7670 
7671 END IF; ---End of Code Change for Match Rule Set
7672   d(fnd_log.level_procedure,'get_matching_party_sites(-)');
7673 
7674   l('EXCEPTION');
7675   l('  WHEN FND_API.G_EXC_ERROR THEN');
7676   l('    RAISE FND_API.G_EXC_ERROR;');
7677   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7678   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7679   l('  WHEN OTHERS THEN');
7680   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7681   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_party_sites'');');
7682   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7683   l('    FND_MSG_PUB.ADD;');
7684   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7685   l('END get_matching_party_sites;');
7686   l('');
7687 
7688 --  l('  NULL;');
7689 --  l('END;');
7690 
7691   /************** get_matching_contacts API ***************/
7692   l('');
7693   l('PROCEDURE get_matching_contacts (');
7694   l('        p_rule_id               IN      NUMBER,');
7695   l('        p_party_id              IN      NUMBER,');
7696   l('        p_contact_list          IN      HZ_PARTY_SEARCH.CONTACT_LIST,');
7697   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
7698   l('        p_restrict_sql          IN      VARCHAR2,');
7699   l('        p_match_type            IN      VARCHAR2,');
7700   l('        p_dup_contact_id        IN      NUMBER, ');
7701   l('        x_search_ctx_id         OUT     NUMBER,');
7702   l('        x_num_matches           OUT     NUMBER');
7703   l(') IS');
7704   l('  ');
7705 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
7706   l('  -- Strings to hold the generated Intermedia query strings');
7707   l('  l_party_contains_str VARCHAR2(32000); ');
7708   l('  l_party_site_contains_str VARCHAR2(32000);');
7709   l('  l_contact_contains_str VARCHAR2(32000);');
7710   l('  l_contact_pt_contains_str VARCHAR2(32000);');
7711   l('  l_tmp VARCHAR2(32000);');
7712   l('');
7713   l('  -- Other local variables');
7714   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
7715   l('  l_match_idx NUMBER;');
7716   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
7717   l('  -- For Score calculation');
7718   l('  l_max_score NUMBER;');
7719   l('  l_entered_max_score NUMBER;');
7720   l('  FIRST BOOLEAN;');
7721   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
7722   l('');
7723   FOR TX IN (
7724       SELECT distinct f.staged_attribute_column
7725       FROM hz_trans_functions_vl f, hz_secondary_trans st,
7726            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
7727       WHERE sa.match_rule_id = p_rule_id
7728       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
7729       AND st.function_id = f.function_id
7730       AND (a.ENTITY_NAME='CONTACTS' OR a.ENTITY_NAME='CONTACT_POINTS')
7731       AND a.attribute_id = sa.attribute_id) LOOP
7732     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
7733   END LOOP;
7734   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
7735   l('');
7736   l('  l_score NUMBER;');
7737   l('  l_idx NUMBER;');
7738   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
7739   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
7740   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
7741   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
7742   l('  l_party_id NUMBER;');
7743   l('  l_ps_party_id NUMBER;');
7744   l('  l_ct_party_id NUMBER;');
7745   l('  l_cpt_party_id NUMBER;');
7746   l('  l_cpt_ps_id NUMBER;');
7747   l('  l_cpt_contact_id NUMBER;');
7748   l('  l_cpt_type VARCHAR2(100);');
7749   l('  l_party_site_id NUMBER;');
7750   l('  l_org_contact_id NUMBER;');
7751   l('  l_contact_pt_id NUMBER;');
7752   l('');
7753   l('  defpt NUMBER :=0;');
7754   l('  defps NUMBER :=0;');
7755   l('  defct NUMBER :=0;');
7756   l('  defcpt NUMBER :=0;');
7757   l('  l_index NUMBER;');
7758   l('  l_party_max_score NUMBER;');
7759   l('  l_ps_max_score NUMBER;');
7760   l('  l_contact_max_score NUMBER;');
7761   l('  l_cpt_max_score NUMBER;');
7762   l('  l_match_contact_list HZ_PARTY_SEARCH.IDList;');
7763   l('  l_cnt NUMBER:=1;');
7764   l('');
7765   l('  ');
7766   l('  BEGIN');
7767 
7768 
7769   d(fnd_log.level_procedure,'get_matching_contacts(+)');
7770   ds(fnd_log.level_statement);
7771   dc(fnd_log.level_statement,'Input Parameters:');
7772   dc(fnd_log.level_statement,'p_match_type','p_match_type');
7773   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7774   dc(fnd_log.level_statement,'p_dup_contact_id','p_dup_contact_id');
7775   de;
7776 
7777   l('');
7778   l('    -- ************************************');
7779   l('    -- STEP 1. Initialization and error checks');
7780   l('');
7781   l('    l_match_str := ''' || l_match_str || ''';');
7782   l('    IF p_match_type = ''AND'' THEN');
7783   l('      l_match_str := '' AND '';');
7784   l('    ELSIF p_match_type = ''OR'' THEN');
7785   l('      l_match_str := '' OR '';');
7786   l('    END IF;');
7787   l('    l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, p_contact_list, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
7788   l('    g_score_until_thresh := false;');
7789   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
7790   l('');
7791 
7792   l('    -- ************************************************************');
7793   l('    -- STEP 2. Setup of intermedia query strings for Acquisition query');
7794   l('    l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);');
7795   l('    l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
7796   l('    init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,p_contact_list,p_contact_point_list);');
7797 
7798   l('');
7799   l('    -- Setup Search Context ID');
7800   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
7801   l('    x_search_ctx_id := l_search_ctx_id;');
7802   l('');
7803 
7804   ds(fnd_log.level_statement);
7805   dc(fnd_log.level_statement,'l_match_str','l_match_str');
7806   dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
7807   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
7808   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
7809   de;
7810 
7811   l('    IF l_contact_contains_str IS NULL THEN');
7812   l('      defct := 1;');
7813   l('    END IF;');
7814   l('    IF l_contact_pt_contains_str IS NULL THEN');
7815   l('      defcpt := 1;');
7816   l('    END IF;');
7817   l('');
7818   l('    IF l_contact_contains_str IS NOT NULL THEN');
7819   l('      open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);');
7820   l('      LOOP');
7821   l('        FETCH l_contact_cur INTO ');
7822   l('            l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
7823   l('        EXIT WHEN l_contact_cur%NOTFOUND;');
7824   l('      IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN ');
7825   l('        l_index := map_id(l_org_contact_id);');
7826   l('        l_match_contact_list(l_cnt):=l_org_contact_id;');
7827   l('        l_cnt:=l_cnt+1;');
7828 
7829   l('          l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
7830   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id, null);');
7831 
7832   ds(fnd_log.level_statement);
7833   dc(fnd_log.level_statement,'Contact Level Matches');
7834   dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
7835   dc(fnd_log.level_statement,'l_score','l_score');
7836   de;
7837 
7838   l('      END IF; ');
7839   l('      END LOOP;');
7840   l('      CLOSE l_contact_cur;');
7841   l('    END IF;');
7842 
7843   l('');
7844   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
7845   l('    SAVEPOINT eval_start;');
7846   l('    IF l_match_str = '' AND '' OR (');
7847   l('        ((l_cpt_max_score/l_entered_max_score)<' ||'('||l_match_threshold||'/'||l_max_score || '))' );
7848   l('        ) THEN');
7849   l('      FORALL I in 1..l_match_contact_list.COUNT');
7850   l('           INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)');
7851   l('           values (l_search_ctx_id,l_match_contact_list(I));');
7852   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur,''CONTACTS'');');
7853   l('    ELSE');
7854   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur);');
7855   l('    END IF;');
7856   l('      LOOP');
7857   l('        FETCH l_contact_pt_cur INTO ');
7858   l('            l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
7859   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
7860   l('      IF (l_cpt_contact_id IS NOT NULL AND (p_dup_contact_id IS NULL OR l_cpt_contact_id <>  p_dup_contact_id)) THEN ');
7861   l('        l_index := map_id(l_cpt_contact_id);');
7862   l('        IF l_match_str = '' OR '' THEN');
7863   l('          l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7864   l('          IF NOT H_SCORES.EXISTS(l_index) THEN');
7865   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
7866   l('          ELSE');
7867   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7868   l('               H_SCORES(l_index).TOTAL_SCORE := ');
7869   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7870   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7871   l('            END IF;');
7872   l('          END IF;');
7873   l('        ELSE');
7874   l('          IF H_SCORES.EXISTS(l_index) THEN');
7875   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7876   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7877   l('               H_SCORES(l_index).TOTAL_SCORE := ');
7878   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7879   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7880   l('            END IF;');
7881   l('          ELSIF defps=1 THEN');
7882   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7883   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
7884   l('          END IF;');
7885   l('        END IF;');
7886   l('        END IF; ');
7887   l('      END LOOP;');
7888   ds(fnd_log.level_statement);
7889   dc(fnd_log.level_statement,'Contact_point Level Matches');
7890   dc(fnd_log.level_statement,'l_org_contact_id','l_cpt_contact_id');
7891   dc(fnd_log.level_statement,'l_score','l_score');
7892   de;
7893   l('      CLOSE l_contact_pt_cur;');
7894   l('    END IF;');
7895   l('    x_num_matches := 0;');
7896   l('    l_org_contact_id := H_SCORES.FIRST;');
7897   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
7898   l('    WHILE l_org_contact_id IS NOT NULL LOOP');
7899   l('      IF l_match_str = '' OR '' THEN');
7900   ds(fnd_log.level_statement);
7901   dc(fnd_log.level_statement,'Match Contact ID','H_SCORES(l_org_contact_id).ORG_CONTACT_ID');
7902   dc(fnd_log.level_statement,'Score','round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100)');
7903   de;
7904    --Start of Bug No: 4162385
7905   IF l_purpose = 'D' THEN
7906     l_entity_score_lh := 'H_SCORES(l_org_contact_id).TOTAL_SCORE';
7907     l_entity_score_rh := 'ROUND(('||get_entity_level_score(p_rule_id,'CONTACTS')||'/'||l_max_score||') * '|| l_match_threshold || ')';
7908   ELSE
7909     l_entity_score_lh := 'H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score';
7910     l_entity_score_rh := l_match_threshold||'/'||l_max_score;
7911   END IF;
7912   --End of Bug No: 4162385
7913 --  IF l_purpose = 'S' THEN
7914     l('        IF (' || l_entity_score_lh ||')>=('|| l_entity_score_rh ||') THEN'); --Bug No: 4162385
7915     l('            INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
7916     l('            VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100);');
7917 --  ELSE
7918 --  END IF;
7919   l('          x_num_matches := x_num_matches+1;');
7920   l('        END IF;');
7921   l('      ELSE');
7922 --  IF l_purpose = 'S' THEN
7923     l('           IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND');
7924     l('           H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND');
7925     l('           (' || l_entity_score_lh ||')>=('|| l_entity_score_rh ||') THEN');  --Bug No: 4162385
7926     l('          INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
7927     l('          VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100));');
7928 --  ELSE
7929 --  END IF;
7930   l('          x_num_matches := x_num_matches+1;');
7931   l('        END IF;');
7932   l('      END IF;');
7933   l('      l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);');
7934   l('    END LOOP;');
7935 ELSE ---Start of Code Change for Match Rule Set
7936   l('  ');
7937   l('  BEGIN');
7938   d(fnd_log.level_procedure,'get_matching_contacts(+)');
7939   ds(fnd_log.level_statement);
7940   dc(fnd_log.level_statement,'Input Parameters:');
7941   dc(fnd_log.level_statement,'p_match_type','p_match_type');
7942   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7943   dc(fnd_log.level_statement,'p_dup_contact_id','p_dup_contact_id');
7944   de;
7945   pop_conditions(p_rule_id,'get_matching_contacts','p_rule_id,p_party_id,p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_dup_contact_id,x_search_ctx_id,x_num_matches','CONTACTS');
7946 END IF; ---End of Code Change for Match Rule Set
7947 
7948   d(fnd_log.level_procedure,'get_matching_contacts(-)');
7949 
7950   l('EXCEPTION');
7951   l('  WHEN FND_API.G_EXC_ERROR THEN');
7952   l('    RAISE FND_API.G_EXC_ERROR;');
7953   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7954   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7955   l('  WHEN OTHERS THEN');
7956   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7957   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contacts'');');
7958   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7959   l('    FND_MSG_PUB.ADD;');
7960   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7961   l('END get_matching_contacts;');
7962   l('');
7963 
7964 
7965   /************** get_matching_contact_points API ***************/
7966   l('');
7967   l('PROCEDURE get_matching_contact_points (');
7968   l('        p_rule_id               IN      NUMBER,');
7969   l('        p_party_id              IN      NUMBER,');
7970   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
7971   l('        p_restrict_sql          IN      VARCHAR2,');
7972   l('        p_match_type            IN      VARCHAR2,');
7973   l('        p_dup_contact_point_id  IN      NUMBER, ');
7974   l('        x_search_ctx_id         OUT     NUMBER,');
7975   l('        x_num_matches           OUT     NUMBER');
7976   l(') IS');
7977   l('');
7978 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
7979   l('');
7980   l('  -- Strings to hold the generated Intermedia query strings');
7981   l('  l_contact_pt_contains_str VARCHAR2(32000);');
7982   l('  l_tmp VARCHAR2(32000);');
7983   l('');
7984   l('  -- Other local variables');
7985   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
7986   l('  l_match_idx NUMBER;');
7987   l('  -- For Score calculation');
7988   l('  l_entered_max_score NUMBER;');
7989   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
7990   l('');
7991   FOR TX IN (
7992       SELECT distinct f.staged_attribute_column
7993       FROM hz_trans_functions_vl f, hz_secondary_trans st,
7994            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
7995       WHERE sa.match_rule_id = p_rule_id
7996       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
7997       AND st.function_id = f.function_id
7998       AND a.ENTITY_NAME='CONTACT_POINTS'
7999       AND a.attribute_id = sa.attribute_id) LOOP
8000     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
8001   END LOOP;
8002   l('');
8003   l('  l_score NUMBER;');
8004   l('  l_idx NUMBER;');
8005   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
8006   l('  l_cpt_party_id NUMBER;');
8007   l('  l_cpt_ps_id NUMBER;');
8008   l('  l_cpt_contact_id NUMBER;');
8009   l('  l_contact_pt_id NUMBER;');
8010   l('  l_cpt_type VARCHAR2(100);');
8011   l('  H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
8012   l('  H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;');
8013   l('  H_SCORE  HZ_PARTY_SEARCH.IDList;');
8014   l('');
8015   l('  cnt NUMBER :=0;');
8016   l('  l_party_max_score NUMBER;');
8017   l('  l_ps_max_score NUMBER;');
8018   l('  l_contact_max_score NUMBER;');
8019   l('  l_cpt_max_score NUMBER;');
8020   l('');
8021   l('  ');
8022   l('  BEGIN');
8023 
8024 
8025 
8026   d(fnd_log.level_procedure,'get_matching_contact_points(+)');
8027   ds(fnd_log.level_statement);
8028   dc(fnd_log.level_statement,'Input Parameters:');
8029   dc(fnd_log.level_statement,'p_match_type','p_match_type');
8030   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
8031   dc(fnd_log.level_statement,'p_dup_contact_point_id','p_dup_contact_point_id');
8032   de;
8033 
8034   l('');
8035   l('    -- ************************************');
8036   l('    -- STEP 1. Initialization and error checks');
8037   l('');
8038 
8039   l('    l_match_str := ''' || l_match_str || ''';');
8040   l('    IF p_match_type = ''AND'' THEN');
8041   l('      l_match_str := '' AND '';');
8042   l('    ELSIF p_match_type = ''OR'' THEN');
8043   l('      l_match_str := '' OR '';');
8044   l('    END IF;');
8045   l('    l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, ');
8046   l('       HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
8047   l('       p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
8048   l('    g_score_until_thresh := false;');
8049   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
8050   l('');
8051 
8052   l('    -- ************************************************************');
8053   l('    -- STEP 2. Setup of intermedia query strings for Acquisition query');
8054   l('    l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
8055   l('    init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);');
8056 
8057   l('');
8058   l('    -- Setup Search Context ID');
8059   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
8060   l('    x_search_ctx_id := l_search_ctx_id;');
8061 
8062   ds(fnd_log.level_statement);
8063   dc(fnd_log.level_statement,'l_match_str','l_match_str');
8064   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
8065   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
8066   de;
8067 
8068   l('');
8069   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
8070   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur);');
8071   l('      cnt := 1;');
8072   l('      LOOP');
8073   l('        FETCH l_contact_pt_cur INTO ');
8074   l('            l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
8075   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
8076   l('        IF (p_dup_contact_point_id IS NULL OR (');
8077   l('               p_dup_contact_point_id IS NOT NULL AND ');
8078   l('               l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND ');
8079   l('               p_dup_contact_point_id <>  l_contact_pt_id)) THEN   ');
8080   l('            H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;');
8081   l('            H_PARTY_ID(cnt) := l_cpt_party_id;');
8082   l('            H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
8083   l('            cnt := cnt+1;');
8084   ds(fnd_log.level_statement);
8085   dc(fnd_log.level_statement,'Contact Point Matches');
8086   dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
8087   dc(fnd_log.level_statement,'l_score','l_score');
8088   de;
8089 
8090   l('        END IF; ');
8091   l('      END LOOP;');
8092   l('      CLOSE l_contact_pt_cur;');
8093 
8094   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
8095   l('      x_num_matches := 0; ');
8096   l('      FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP');
8097   ds(fnd_log.level_statement);
8098   dc(fnd_log.level_statement,'Match Contact Point ID','H_CONTACT_POINT_ID(I)');
8099   dc(fnd_log.level_statement,'Score','round((H_SCORE(I)/l_entered_max_score)*100)');
8100   de;
8101   --Start of Bug No: 4162385
8102    IF l_purpose = 'D' THEN
8103     l_entity_score_lh := 'H_SCORE(I)';
8104     l_entity_score_rh := 'ROUND(('||get_entity_level_score(p_rule_id,'CONTACT_POINTS')||'/'||l_max_score||') * '|| l_match_threshold || ')';
8105   ELSE
8106     l_entity_score_lh := 'H_SCORE(I)/l_entered_max_score';
8107     l_entity_score_rh := l_match_threshold||'/'||l_max_score;
8108   END IF;
8109   --End of Bug No: 4162385
8110 
8111   l('        IF ('|| l_entity_score_lh ||') >= ('|| l_entity_score_rh ||') THEN'); --Bug No: 4162385
8112   l('        INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
8113   l('            l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);');
8114   l('            x_num_matches := x_num_matches + 1; ');
8115   l('        END IF;');
8116   l('      END LOOP; ');
8117   l('    END IF;');
8118 ELSE ---Start of Code Change for Match Rule Set
8119   l('  BEGIN');
8120   d(fnd_log.level_procedure,'get_matching_contact_points(+)');
8121   ds(fnd_log.level_statement);
8122   dc(fnd_log.level_statement,'Input Parameters:');
8123   dc(fnd_log.level_statement,'p_match_type','p_match_type');
8124   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
8125   dc(fnd_log.level_statement,'p_dup_contact_point_id','p_dup_contact_point_id');
8126   de;
8127   pop_conditions(p_rule_id,'get_matching_contact_points','p_rule_id,p_party_id,p_contact_point_list,p_restrict_sql,p_match_type,p_dup_contact_point_id,x_search_ctx_id,x_num_matches','CONTACT_POINTS');
8128 
8129 END IF; ---End of Code Change for Match Rule Set
8130   d(fnd_log.level_procedure,'get_matching_contact_points(-)');
8131 
8132   l('EXCEPTION');
8133   l('  WHEN FND_API.G_EXC_ERROR THEN');
8134   l('    RAISE FND_API.G_EXC_ERROR;');
8135   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
8136   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8137   l('  WHEN OTHERS THEN');
8138   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8139   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contact_points'');');
8140   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8141   l('    FND_MSG_PUB.ADD;');
8142   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8143   l('END get_matching_contact_points;');
8144 
8145   l('');
8146   l('   /**********************************************************');
8147   l('   This procedure finds the score details for a specific party that ');
8148   l('   matched ');
8149   l('');
8150   l('   **********************************************************/');
8151   l('');
8152   l('PROCEDURE get_score_details (');
8153   l('        p_rule_id               IN      NUMBER,');
8154   l('        p_party_id              IN      NUMBER,');
8155   l('        p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
8156   l('        p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
8157   l('        p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
8158   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
8159   l('        x_search_ctx_id         IN OUT  NUMBER');
8160   l(') IS');
8161   l('');
8162 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
8163   l('  -- Strings to hold the generated Intermedia query strings');
8164   l('  l_party_contains_str VARCHAR2(32000); ');
8165   l('  l_party_site_contains_str VARCHAR2(32000);');
8166   l('  l_contact_contains_str VARCHAR2(32000);');
8167   l('  l_contact_pt_contains_str VARCHAR2(32000);');
8168   l('  l_tmp VARCHAR2(32000);');
8169   l('');
8170   l('  -- Other local variables');
8171   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
8172   l('  -- For Score calculation');
8173   l('  l_max_score NUMBER;');
8174   l('  l_entered_max_score NUMBER;');
8175   l('  FIRST BOOLEAN;');
8176   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
8177   l('');
8178   FOR TX IN (
8179       SELECT distinct f.staged_attribute_column
8180       FROM hz_trans_functions_vl f, hz_secondary_trans st,
8181            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8182       WHERE sa.match_rule_id = p_rule_id
8183       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8184       AND st.function_id = f.function_id
8185       AND a.attribute_id = sa.attribute_id) LOOP
8186     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
8187     l('  l_max_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
8188   END LOOP;
8189   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
8190   l('');
8191   l('  l_score NUMBER;');
8192   l('  l_match_idx NUMBER;');
8193   l('  l_idx NUMBER;');
8194   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
8195   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
8196   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
8197   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
8198   l('  l_party_id NUMBER;');
8199   l('  l_ps_party_id NUMBER;');
8200   l('  l_ct_party_id NUMBER;');
8201   l('  l_cpt_party_id NUMBER;');
8202   l('  l_cpt_ps_id NUMBER;');
8203   l('  l_cpt_contact_id NUMBER;');
8204   l('  l_cpt_type VARCHAR2(100);');
8205   l('  l_party_site_id NUMBER;');
8206   l('  l_org_contact_id NUMBER;');
8207   l('  l_contact_pt_id NUMBER;');
8208   l('  l_ps_contact_id NUMBER;');
8209   l('  l_max_id NUMBER;');
8210   l('  l_max_idx NUMBER;');
8211   l('');
8212   l('  l_index NUMBER;');
8213   l('  l_party_max_score NUMBER;');
8214   l('  l_ps_max_score NUMBER;');
8215   l('  l_contact_max_score NUMBER;');
8216   l('  l_cpt_max_score NUMBER;');
8217   l('');
8218   l('  --Fix for bug 4417124 ');
8219   l('  l_use_contact_addr_info BOOLEAN:=TRUE;');
8220   l('  l_use_contact_cpt_info  BOOLEAN:=TRUE;');
8221   l('');
8222   l('  BEGIN');
8223   l('');
8224   d(fnd_log.level_statement,'get_score_details(+)');
8225   l('    -- ************************************');
8226   l('    -- STEP 1. Initialization and error checks');
8227   l('');
8228   l('    l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,'' OR '', l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
8229   l('    g_score_until_thresh := false;');
8230   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
8231 
8232   l('    -- ************************************************************');
8233   l('    -- STEP 2. Setup of intermedia query strings for Acquisition query');
8234 
8235   l('    l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);');
8236   l('    l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);');
8237   l('    l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
8238 
8239   l('    init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
8240   l('');
8241   l('    -- Setup Search Context ID');
8242   l('    IF x_search_ctx_id IS NULL THEN');
8243   l('      SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
8244   l('      x_search_ctx_id := l_search_ctx_id;');
8245   l('    ELSE');
8246   l('      l_search_ctx_id := x_search_ctx_id;');
8247   l('    END IF;');
8248   l('');
8249   l('    open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);');
8250   l('    LOOP ');
8251   l('        FETCH l_party_cur INTO');
8252   l('           l_party_id '||l_p_into_list||';');
8253   l('        EXIT WHEN l_party_cur%NOTFOUND;');
8254   IF l_p_param_list IS NOT NULL THEN
8255     l('          INSERT_PARTY_SCORE(p_party_id, p_party_id, l_search_ctx_id, p_party_search_rec, g_party_stage_rec, '||l_p_param_list||',1);');
8256   END IF;
8257   l('    END LOOP;');
8258   l('    CLOSE l_party_cur;');
8259   l('');
8260   l('    IF l_party_site_contains_str IS NOT NULL THEN');
8261   l('      l_max_score := 0;');
8262   l('      l_max_id := 0;');
8263   l('      l_max_idx := 0;');
8264   l('      IF p_party_search_rec.PARTY_TYPE = ''PERSON'' AND l_use_contact_addr_info THEN');
8265   l('        open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, ''Y'',''N'',l_party_site_cur);');
8266   l('      ELSE');
8267   l('        open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, ''N'',''N'',l_party_site_cur);');
8268   l('      END IF;');
8269   l('      LOOP');
8270   l('        FETCH l_party_site_cur INTO ');
8271   l('            l_party_site_id, l_ps_party_id,l_ps_contact_id '||l_ps_into_list||';');
8272   l('        EXIT WHEN l_party_site_cur%NOTFOUND;');
8273   l('        l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
8274   l('        IF l_score > l_max_score THEN');
8275   l('          l_max_score := l_score;');
8276   l('          l_max_id := l_party_site_id;');
8277   l('          l_max_idx := l_match_idx;');
8278   FOR TX IN (
8279       SELECT distinct f.staged_attribute_column
8280       FROM hz_trans_functions_vl f, hz_secondary_trans st,
8281            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8282       WHERE sa.match_rule_id = p_rule_id
8283       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8284       AND st.function_id = f.function_id
8285       AND a.entity_name = 'PARTY_SITES'
8286       AND a.attribute_id = sa.attribute_id) LOOP
8287     l('          l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
8288   END LOOP;
8289   l('        END IF;');
8290   l('      END LOOP;');
8291   l('      CLOSE l_party_site_cur;');
8292   l('      IF l_max_score>0 THEN');
8293   l('        INSERT_PARTY_SITES_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_party_site_list(l_max_idx), g_party_site_stage_list(l_max_idx) '||replace(l_ps_param_list,'l_TX','l_max_TX')||',l_max_idx);');
8294   l('      END IF;');
8295   l('    END IF;');
8296   l('');
8297   l('    IF l_contact_contains_str IS NOT NULL THEN');
8298   l('      l_max_score := 0;');
8299   l('      l_max_id := 0;');
8300   l('      l_max_idx := 0;');
8301   l('      open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);');
8302   l('      LOOP');
8303   l('        FETCH l_contact_cur INTO ');
8304   l('            l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
8305   l('        EXIT WHEN l_contact_cur%NOTFOUND;');
8306   l('        l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
8307   l('        IF l_score > l_max_score THEN');
8308   l('          l_max_score := l_score;');
8309   l('          l_max_id := l_org_contact_id;');
8310   l('          l_max_idx := l_match_idx;');
8311   FOR TX IN (
8312       SELECT distinct f.staged_attribute_column
8313       FROM hz_trans_functions_vl f, hz_secondary_trans st,
8314            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8315       WHERE sa.match_rule_id = p_rule_id
8316       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8317       AND st.function_id = f.function_id
8318       AND a.entity_name = 'CONTACTS'
8319       AND a.attribute_id = sa.attribute_id) LOOP
8320     l('          l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
8321   END LOOP;
8322   l('        END IF;');
8323   l('      END LOOP;');
8324   l('      CLOSE l_contact_cur;');
8325   l('      IF l_max_score>0 THEN');
8326   l('        INSERT_CONTACTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_list(l_max_idx), g_contact_stage_list(l_max_idx) '||replace(l_c_param_list,'l_TX','l_max_TX')||',l_max_idx);');
8327   l('      END IF;');
8328   l('    END IF;');
8329   l('');
8330   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
8331   l('      l_max_score := 0;');
8332   l('      l_max_id := 0;');
8333   l('      l_max_idx := 0;');
8334   l('      IF p_party_search_rec.PARTY_TYPE = ''PERSON'' AND l_use_contact_cpt_info THEN');
8335   l('        open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, ''Y'',''N'',l_contact_pt_cur);');
8336   l('      ELSE');
8337   l('        open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, ''N'',''N'',l_contact_pt_cur);');
8338   l('      END IF;');
8339   l('      LOOP');
8340   l('        FETCH l_contact_pt_cur INTO ');
8341   l('            l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
8342   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
8343   l('        l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
8344   l('        IF l_score > l_max_score THEN');
8345   l('          l_max_score := l_score;');
8346   l('          l_max_id := l_contact_pt_id;');
8347   l('          l_max_idx := l_match_idx;');
8348   FOR TX IN (
8349       SELECT distinct f.staged_attribute_column
8350       FROM hz_trans_functions_vl f, hz_secondary_trans st,
8351            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8352       WHERE sa.match_rule_id = p_rule_id
8353       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8354       AND st.function_id = f.function_id
8355       AND a.entity_name = 'CONTACT_POINTS'
8356       AND a.attribute_id = sa.attribute_id) LOOP
8357     l('          l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
8358   END LOOP;
8359   l('        END IF;');
8360   l('      END LOOP;');
8361   l('      IF l_max_score>0 THEN');
8362   l('        INSERT_CONTACT_POINTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_point_list(l_max_idx), g_contact_pt_stage_list(l_max_idx) '||replace(l_cpt_param_list,'l_TX','l_max_TX')||',l_max_idx);');
8363   l('      END IF;');
8364   l('      CLOSE l_contact_pt_cur;');
8365   l('    END IF;');
8366   d(fnd_log.level_procedure,'get_score_details(-)');
8367 ELSE ---Start of Code Change for Match Rule Set
8368   l('  BEGIN');
8369   l('');
8370   d(fnd_log.level_statement,'get_score_details(+)');
8371     pop_conditions(p_rule_id,'get_score_details','p_rule_id,p_party_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,x_search_ctx_id','PARTY');
8372   d(fnd_log.level_procedure,'get_score_details(-)');
8373 END IF; ---End of Code Change for Match Rule Set
8374 
8375   l('EXCEPTION');
8376   l('  WHEN FND_API.G_EXC_ERROR THEN');
8377   l('    RAISE FND_API.G_EXC_ERROR;');
8378   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
8379   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8380   l('  WHEN OTHERS THEN');
8381   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8382   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_score_details'');');
8383   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8384   l('    FND_MSG_PUB.ADD;');
8385   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8386   l('END get_score_details;');
8387   l('');
8388 
8389   generate_acquire_proc(p_rule_id, NULL);
8390 
8391 
8392   generate_party_map_proc('MAP_PARTY_REC', p_rule_id);
8393   l('');
8394   generate_map_proc('PARTY_SITES', 'MAP_PARTY_SITE_REC', p_rule_id);
8395   l('');
8396   generate_map_proc('CONTACTS', 'MAP_CONTACT_REC', p_rule_id);
8397   l('');
8398   generate_map_proc('CONTACT_POINTS', 'MAP_CONTACT_POINT_REC', p_rule_id);
8399   l('');
8400   generate_check_proc(p_rule_id);
8401   generate_check_staged (p_rule_id);
8402   /*l('  PROCEDURE enable_debug IS');
8403 
8404   l('  BEGIN');
8405   l('    g_debug_count := g_debug_count + 1;');
8406 
8407   l('    IF g_debug_count = 1 THEN');
8408   l('      IF fnd_profile.value(''HZ_API_FILE_DEBUG_ON'') = ''Y'' OR');
8409   l('         fnd_profile.value(''HZ_API_DBMS_DEBUG_ON'') = ''Y''');
8410   l('      THEN');
8411   l('        hz_utility_v2pub.enable_debug;');
8412   l('        g_debug := TRUE;');
8413   d('PKG: '||p_pkg_name||' (+)');
8414   l('      END IF;');
8415   l('    END IF;');
8416   l('  END enable_debug;');
8417 
8418   l('  PROCEDURE disable_debug IS');
8419 
8420   l('  BEGIN');
8421 
8422   l('    IF g_debug THEN');
8423   l('      g_debug_count := g_debug_count - 1;');
8424 
8425   l('      IF g_debug_count = 0 THEN');
8426   d('PKG: '||p_pkg_name||' (-)');
8427   l('        hz_utility_v2pub.disable_debug;');
8428   l('        g_debug := FALSE;');
8429   l('      END IF;');
8430   l('    END IF;');
8431 
8432   l('  END disable_debug;');
8433   */
8434 
8435   l('END;');
8436   l('');
8437 END;
8438 
8439 
8440 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8441 -- which would essentially return a 'Y' or null to signify the corresponding
8442 -- XXX_contains_string contains user passed information or not.
8443 
8444 PROCEDURE generate_check_parties_bulk (
8445 	p_rule_id	NUMBER) IS
8446 FIRST BOOLEAN;
8447 BEGIN
8448   l('');
8449   l('/************************************************');
8450   l('  This procedure checks if the input search criteria ');
8451   l('  is valid. It checks if : ');
8452   l('   1. At least one primary condition is passed');
8453   l('************************************************/');
8454   l('');
8455 
8456   l('FUNCTION check_parties_bulk(');
8457   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type)');
8458   l('RETURN VARCHAR2 IS');
8459   l('  BEGIN');
8460 
8461   FIRST := TRUE;
8462   FOR PRIMATTRS IN (
8463        SELECT ATTRIBUTE_NAME
8464        FROM HZ_TRANS_ATTRIBUTES_VL a,
8465             HZ_MATCH_RULE_PRIMARY p
8466        WHERE p.match_rule_id = p_rule_id
8467        AND p.attribute_id = a.attribute_id
8468        AND a.ENTITY_NAME = 'PARTY'
8469        AND nvl(p.FILTER_FLAG,'N') = 'N') LOOP
8470     l('    IF p_party_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
8471     l('      RETURN ''Y'' ;');
8472     l('    END IF;');
8473   END LOOP;
8474 
8475   l('RETURN null;');
8476 
8477   l('EXCEPTION');
8478   l('  WHEN OTHERS THEN');
8479   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8480   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_parties_bulk'');');
8481   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8482   l('    FND_MSG_PUB.ADD;');
8483   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8484   l('  END check_parties_bulk ;');
8485   l('');
8486 END generate_check_parties_bulk ;
8487 
8488 
8489 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8490 -- which would essentially return a 'Y' or null to signify the corresponding
8491 -- XXX_contains_string contains user passed information or not.
8492 
8493 PROCEDURE generate_check_partysites_bulk (
8494 	p_rule_id	NUMBER) IS
8495 FIRST BOOLEAN;
8496 BEGIN
8497   l('/************************************************');
8498   l('  This procedure checks if the input search condition ');
8499   l('  has party site criteria. ');
8500   l('************************************************/');
8501 
8502   l('');
8503   l('FUNCTION check_party_sites_bulk(');
8504   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list');
8505   l(')');
8506   l('RETURN VARCHAR2 IS');
8507   l('    x_primary boolean := FALSE;');
8508   l('  BEGIN');
8509   l('    FOR I IN 1..p_party_site_list.COUNT LOOP');
8510   FIRST := TRUE;
8511   FOR PRIMATTRS IN (
8512        SELECT ATTRIBUTE_NAME
8513        FROM HZ_TRANS_ATTRIBUTES_VL a,
8514             HZ_MATCH_RULE_PRIMARY p
8515        WHERE p.match_rule_id = p_rule_id
8516        AND a.ENTITY_NAME = 'PARTY_SITES'
8517        AND p.attribute_id = a.attribute_id)
8518   LOOP
8519     IF FIRST THEN
8520       l('      IF p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
8521       FIRST := FALSE;
8522     ELSE
8523       l('         OR p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
8524     END IF;
8525   END LOOP;
8526   IF NOT FIRST THEN
8527     l('      THEN');
8528     l('        x_primary := TRUE;');
8529     l('      END IF;');
8530     l('      EXIT WHEN x_primary;');
8531   ELSE
8532     l('      NULL;');
8533   END IF;
8534   l('    END LOOP;');
8535 
8536   l('');
8537 
8538   l(' IF x_primary = TRUE THEN RETURN ''Y''; ELSE RETURN null; END IF; ');
8539   l('EXCEPTION');
8540   l('  WHEN OTHERS THEN');
8541   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8542   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_party_sites_bulk'');');
8543   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8544   l('    FND_MSG_PUB.ADD;');
8545   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8546   l('  END check_party_sites_bulk ;');
8547   l('');
8548 
8549 END generate_check_partysites_bulk ;
8550 
8551 
8552 
8553 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8554 -- which would essentially return a 'Y' or null to signify the corresponding
8555 -- XXX_contains_string contains user passed information or not.
8556 
8557 PROCEDURE generate_check_contacts_bulk (
8558 	p_rule_id	NUMBER) IS
8559 FIRST BOOLEAN;
8560 BEGIN
8561   l('/************************************************');
8562   l('  This procedure checks if the input search condition ');
8563   l('  has contact criteria. ');
8564   l('************************************************/');
8565 
8566   l('');
8567   l('FUNCTION check_contacts_bulk (');
8568   l('      p_contact_list       IN      HZ_PARTY_SEARCH.contact_list');
8569   l(')');
8570   l('RETURN VARCHAR2 IS');
8571   l('    x_primary boolean := FALSE;');
8572   l('  BEGIN');
8573   l('    FOR I IN 1..p_contact_list.COUNT LOOP');
8574   FIRST := TRUE;
8575   FOR PRIMATTRS IN (
8576        SELECT ATTRIBUTE_NAME
8577        FROM HZ_TRANS_ATTRIBUTES_VL a,
8578             HZ_MATCH_RULE_PRIMARY p
8579        WHERE p.match_rule_id = p_rule_id
8580        AND a.ENTITY_NAME = 'CONTACTS'
8581        AND p.attribute_id = a.attribute_id)
8582   LOOP
8583     IF FIRST THEN
8584       l('      IF p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
8585       FIRST := FALSE;
8586     ELSE
8587       l('         OR p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
8588     END IF;
8589   END LOOP;
8590   IF NOT FIRST THEN
8591     l('      THEN');
8592     l('        x_primary := TRUE;');
8593     l('      END IF;');
8594     l('      EXIT WHEN x_primary;');
8595   ELSE
8596     l('      NULL;');
8597   END IF;
8598   l('    END LOOP;');
8599 
8600   l('');
8601 
8602   l(' IF x_primary = TRUE THEN RETURN ''Y''; ELSE RETURN null; END IF; ');
8603   l('EXCEPTION');
8604   l('  WHEN OTHERS THEN');
8605   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8606   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_contacts_bulk'');');
8607   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8608   l('    FND_MSG_PUB.ADD;');
8609   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8610   l('  END check_contacts_bulk ;');
8611   l('');
8612 
8613 END generate_check_contacts_bulk ;
8614 
8615 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8616 -- which would essentially return a 'Y' or null to signify the corresponding
8617 -- XXX_contains_string contains user passed information or not.
8618 
8619 PROCEDURE generate_check_cpts_bulk (
8620 	p_rule_id	NUMBER) IS
8621 FIRST BOOLEAN;
8622 BEGIN
8623   l('/************************************************');
8624   l('  This procedure checks if the input search condition ');
8625   l('  has contact criteria. ');
8626   l('************************************************/');
8627 
8628   l('');
8629   l('FUNCTION check_cpts_bulk (');
8630   l('      p_contact_point_list       IN      HZ_PARTY_SEARCH.contact_point_list');
8631   l(')');
8632   l('RETURN VARCHAR2 IS');
8633   l('    x_primary boolean := FALSE;');
8634   l('  BEGIN');
8635   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
8636   FIRST := TRUE;
8637   FOR PRIMATTRS IN (
8638        SELECT ATTRIBUTE_NAME
8639        FROM HZ_TRANS_ATTRIBUTES_VL a,
8640             HZ_MATCH_RULE_PRIMARY p
8641        WHERE p.match_rule_id = p_rule_id
8642        AND a.ENTITY_NAME = 'CONTACT_POINTS'
8643        AND p.attribute_id = a.attribute_id)
8644   LOOP
8645     IF FIRST THEN
8646       l('      IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
8647       FIRST := FALSE;
8648     ELSE
8649       l('         OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
8650     END IF;
8651   END LOOP;
8652   IF NOT FIRST THEN
8653     l('      THEN');
8654     l('        x_primary := TRUE;');
8655     l('      END IF;');
8656     l('      EXIT WHEN x_primary;');
8657   ELSE
8658     l('      NULL;');
8659   END IF;
8660   l('    END LOOP;');
8661 
8662   l('');
8663 
8664   l(' IF x_primary = TRUE THEN RETURN ''Y''; ELSE RETURN null; END IF; ');
8665   l('EXCEPTION');
8666   l('  WHEN OTHERS THEN');
8667   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8668   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_cpts_bulk'');');
8669   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8670   l('    FND_MSG_PUB.ADD;');
8671   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8672   l('  END check_cpts_bulk  ;');
8673   l('');
8674 
8675 END generate_check_cpts_bulk ;
8676 
8677 
8678 
8679 /**
8680 * VJN introduced Private procedure to generate the body of the Public Match Rule API
8681 * for a bulk match rule. This will generate Package Body for the following kind of Match rules:
8682 *    HZ_IMP_MATCH_RULE_<p_rule_id>
8683 *
8684 *
8685 **/
8686 PROCEDURE gen_pkg_body_bulk (
8687         p_pkg_name      IN      VARCHAR2,
8688         p_rule_id	IN	NUMBER
8689 ) IS
8690 
8691   -- Local Variables
8692   FIRST boolean;
8693   FIRST1 boolean;
8694   UPSTMT boolean;
8695   l_match_str VARCHAR2(255);
8696   l_attrib_cnt NUMBER;
8697   l_party_filter VARCHAR2(1) := null;
8698   l_ps_filter VARCHAR2(1) := null;
8699   l_contact_filter VARCHAR2(1) := null;
8700   l_cpt_filter VARCHAR2(1) := null;
8701   l_num_primary NUMBER;
8702   l_num_secondary NUMBER;
8703   l_ent VARCHAR2(30);
8704   l_max_score NUMBER;
8705   l_match_threshold NUMBER;
8706 
8707   l_purpose VARCHAR2(30);
8708   TYPE NumberList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
8709   TYPE CharList IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
8710   attribList NumberList;
8711 
8712   l_party_filter_str VARCHAR2(2000);
8713   l_dyn_party_filter_str VARCHAR2(2000);
8714   l_p_select_list VARCHAR2(1000);
8715   l_p_param_list VARCHAR2(1000);
8716   l_p_into_list VARCHAR2(1000);
8717   l_ps_select_list VARCHAR2(1000);
8718   l_ps_param_list VARCHAR2(1000);
8719   l_ps_into_list VARCHAR2(1000);
8720   l_c_select_list VARCHAR2(1000);
8721   l_c_param_list VARCHAR2(1000);
8722   l_c_into_list VARCHAR2(1000);
8723   l_cpt_select_list VARCHAR2(1000);
8724   l_cpt_param_list VARCHAR2(1000);
8725   l_cpt_into_list VARCHAR2(1000);
8726   cnt NUMBER;
8727   l_party_filt_bind CharList;
8728   l_cpt_type VARCHAR2(255);
8729   l_trans VARCHAR2(4000);
8730   l_auto_merge_score NUMBER;
8731   tmp VARCHAR2(30);
8732   attrib_count NUMBER;
8733 BEGIN
8734 
8735   -- Query match thresholds and search type
8736   SELECT RULE_PURPOSE, MATCH_SCORE, nvl(AUTO_MERGE_SCORE,99999), decode(MATCH_ALL_FLAG,'Y',' AND ',' OR ')
8737   INTO l_purpose, l_match_threshold, l_auto_merge_score, l_match_str
8738   FROM HZ_MATCH_RULES_VL
8739   WHERE match_rule_id = p_rule_id;
8740 
8741   SELECT nvl(SUM(SCORE),1) INTO l_max_score
8742   FROM HZ_MATCH_RULE_SECONDARY
8743   WHERE match_rule_id = p_rule_id;
8744 
8745   l('CREATE or REPLACE PACKAGE BODY ' || p_pkg_name || ' AS');
8746   l('/*=======================================================================+');
8747   l(' |  Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|');
8748   l(' |                          All rights reserved.                         |');
8749   l(' +=======================================================================+');
8750   l(' | NAME');
8751   l(' |      ' || p_pkg_name);
8752   l(' |');
8753   l(' | DESCRIPTION');
8754   l(' |');
8755   l(' | Compiled by the HZ Match Rule Compiler');
8756   l(' | -- Do Not Modify --');
8757   l(' |');
8758   l(' | PUBLIC PROCEDURES');
8759   l(' |    find_parties');
8760   l(' |    get_matching_party_sites');
8761   l(' |    get_matching_contacts');
8762   l(' |    get_matching_contact_points');
8763   l(' |    get_score_details');
8764   l(' |    ');
8765   l(' | HISTORY');
8766   l(' |      '||TO_CHAR(SYSDATE,'DD-MON-YYYY') || ' Generated by HZ Match Rule Compiler');
8767   l(' |');
8768   l(' *=======================================================================*/');
8769   l('');
8770   l('-- ==========================================================================================');
8771   l('-- ============MATCH RULE COMPILER GENERATED CODE FOR BULK MATCH RULES ======================');
8772   l('-- ==========================================================================================');
8773   l('');
8774   l('  TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;');
8775   l('  call_order vlisttype;');
8776   l('  call_max_score HZ_PARTY_SEARCH.IDList;');
8777   l('  call_type vlisttype;');
8778   l('  g_party_stage_rec  HZ_PARTY_STAGE.party_stage_rec_type;');
8779   l('  g_party_site_stage_list  HZ_PARTY_STAGE.party_site_stage_list;');
8780   l('  g_contact_stage_list  HZ_PARTY_STAGE.contact_stage_list;');
8781   l('  g_contact_pt_stage_list  HZ_PARTY_STAGE.contact_pt_stage_list;');
8782   l('  g_mappings  HZ_PARTY_SEARCH.IDList;');
8783   l('  g_max_id NUMBER:=2000000000;');
8784   l('');
8785   l('  g_debug_count                        NUMBER := 0;');
8786   --l('  g_debug                              BOOLEAN := FALSE;');
8787   l('  g_score_until_thresh BOOLEAN:=false;');
8788   l(' ');
8789   l('  g_thres_score NUMBER:=1000;');
8790   --l('  PROCEDURE enable_debug;');
8791   --l('  PROCEDURE disable_debug;');
8792 
8793   -- VJN introduced for bulk_match_rule
8794   generate_check_parties_bulk(p_rule_id);
8795   generate_check_partysites_bulk(p_rule_id);
8796   generate_check_contacts_bulk(p_rule_id);
8797   generate_check_cpts_bulk(p_rule_id);
8798 
8799   /***********************************************************************
8800   * Private procedure to map IDs greater than the max allowed by PLSQL
8801   * Index-by tables.
8802   ************************************************************************/
8803   l('  FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS');
8804   l('    l_newidx NUMBER;');
8805   l('  BEGIN ');
8806   l('    IF in_id<g_max_id THEN ');
8807   l('      RETURN in_id;');
8808   l('    ELSE');
8809   l('      FOR I in 1..g_mappings.COUNT LOOP');
8810   l('        IF in_id = g_mappings(I) THEN');
8811   l('          RETURN (g_max_id+I);');
8812   l('        END IF;');
8813   l('      END LOOP;');
8814   l('      l_newidx := g_mappings.COUNT+1;');
8815   l('      g_mappings(l_newidx) := in_id;');
8816   l('      RETURN (g_max_id+l_newidx);');
8817   l('    END IF;');
8818   l('  END;');
8819 
8820   l('  FUNCTION GET_PARTY_SCORE ');
8821   FIRST := TRUE;
8822   FOR TX IN (
8823       SELECT f.staged_attribute_column
8824       FROM hz_trans_functions_vl f, hz_secondary_trans st,
8825            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8826       WHERE sa.match_rule_id = p_rule_id
8827       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8828       AND st.function_id = f.function_id
8829       AND a.attribute_id = sa.attribute_id
8830       AND a.entity_name= 'PARTY'
8831       ORDER BY sa.attribute_id) LOOP
8832      IF FIRST THEN
8833        l('       (');
8834        l('       p_table_'||TX.staged_attribute_column||' VARCHAR2');
8835        FIRST := FALSE;
8836      ELSE
8837        l('      ,p_table_'||TX.staged_attribute_column||' VARCHAR2');
8838      END IF;
8839   END LOOP;
8840   IF FIRST THEN
8841     l('   RETURN NUMBER IS');
8842   ELSE
8843     l('  ) RETURN NUMBER IS');
8844   END IF;
8845   l('    total NUMBER := 0;');
8846   l('  BEGIN');
8847   d(fnd_log.level_procedure,'GET_PARTY_SCORE  ');
8848   l('    IF g_score_until_thresh AND (total)>=g_thres_score THEN');
8849   l('      RETURN total;');
8850   l('    END IF;');
8851   FOR SECATTRS IN (
8852         SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id
8853         FROM HZ_TRANS_ATTRIBUTES_VL a,
8854              HZ_MATCH_RULE_SECONDARY s
8855         WHERE s.match_rule_id = p_rule_id
8856         AND s.attribute_id = a.attribute_id
8857         AND a.entity_name = 'PARTY') LOOP
8858       FIRST := TRUE;
8859       FOR SECTRANS IN (
8860           SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
8861                  TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
8862           FROM HZ_SECONDARY_TRANS s,
8863                HZ_TRANS_FUNCTIONS_VL f
8864           WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
8865           AND s.FUNCTION_ID = f.FUNCTION_ID
8866           ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
8867         IF FIRST THEN
8868            FIRST := FALSE;
8869            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
8870              l('    IF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8871                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
8872            ELSE
8873              l('    IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8874                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
8875            END IF;
8876         ELSE
8877            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
8878              l('    ELSIF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8879                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
8880            ELSE
8881              l('    ELSIF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8882                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
8883            END IF;
8884         END IF;
8885         l('      total := total+'||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
8886         l('      IF g_score_until_thresh AND (total)>=g_thres_score THEN ');
8887         l('        RETURN total;');
8888         l('      END IF;');
8889       END LOOP;
8890       l('    END IF;');
8891   END LOOP;
8892   l('    RETURN total;');
8893   l('  END;');
8894 
8895   add_score_function('PARTY_SITES',p_rule_id);
8896   add_score_function('CONTACTS',p_rule_id);
8897   add_score_function('CONTACT_POINTS',p_rule_id);
8898   add_get_attrib_func(p_rule_id);
8899   add_insert_function('PARTY',p_rule_id);
8900   add_insert_function('PARTY_SITES',p_rule_id);
8901   add_insert_function('CONTACTS',p_rule_id);
8902   add_insert_function('CONTACT_POINTS',p_rule_id);
8903 
8904   --- VJN Introduced for conditional Word Replacements
8905   --- Populate the global condition record before doing the mapping
8906   --- so that mapping takes into account conditional word replacements if any
8907   generate_ent_cond_pop_rec_proc('PARTY', p_rule_id);
8908   l('');
8909   generate_ent_cond_pop_rec_proc('PARTY_SITES', p_rule_id);
8910   l('');
8911   generate_ent_cond_pop_rec_proc('CONTACTS', p_rule_id);
8912   l('');
8913   generate_ent_cond_pop_rec_proc('CONTACT_POINTS', p_rule_id);
8914   l('');
8915 
8916 
8917   l('  PROCEDURE init_score_context (');
8918   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type:=');
8919   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
8920   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list:=');
8921   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
8922   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list:= ');
8923   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
8924   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list:=');
8925   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST');
8926   l('  ) IS');
8927   l('   l_dummy NUMBER;');
8928   l('  BEGIN');
8929   l('    -- Transform search criteria');
8930   l('    HZ_TRANS_PKG.clear_globals;');
8931   l('    MAP_PARTY_REC(FALSE,p_party_search_rec, l_dummy, g_party_stage_rec);');
8932   l('    MAP_PARTY_SITE_REC(FALSE,p_party_site_list, l_dummy, g_party_site_stage_list);');
8933   l('    MAP_CONTACT_REC(FALSE,p_contact_list, l_dummy, g_contact_stage_list);');
8934   l('    MAP_CONTACT_POINT_REC(FALSE,p_contact_point_list, l_dummy, g_contact_pt_stage_list);');
8935   l('');
8936   l('  END;');
8937 
8938 
8939   l('  FUNCTION init_search(');
8940   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type:=');
8941   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
8942   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list:=');
8943   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
8944   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list:= ');
8945   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
8946   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list:=');
8947   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,');
8948   l('      p_match_type            IN  VARCHAR2,');
8949   l('      x_party_max_score       OUT NUMBER,');
8950   l('      x_ps_max_score       OUT NUMBER,');
8951   l('      x_contact_max_score       OUT NUMBER,');
8952   l('      x_cpt_max_score       OUT NUMBER');
8953   l('  ) RETURN NUMBER IS ');
8954   l('  l_entered_max_score NUMBER:=0;');
8955   l('  l_ps_entered_max_score NUMBER:=0;');
8956   l('  l_ct_entered_max_score NUMBER:=0;');
8957   l('  l_cpt_entered_max_score NUMBER:=0;');
8958   l('  vlist vlisttype;');
8959   l('  maxscore HZ_PARTY_SEARCH.IDList;');
8960   l('  l_name VARCHAR2(200);');
8961   l('  l_idx NUMBER; ');
8962   l('  l_num NUMBER; ');
8963   l('  total NUMBER; ');
8964   l('  threshold NUMBER; ');
8965   l('  BEGIN');
8966   l('    IF NOT check_prim_cond (p_party_search_rec,');
8967   l('                            p_party_site_list,');
8968   l('                            p_contact_list,');
8969   l('                            p_contact_point_list) THEN');
8970   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_PRIMARY_COND'');');
8971   l('      FND_MSG_PUB.ADD;');
8972   l('      RAISE FND_API.G_EXC_ERROR;');
8973   l('    END IF;');
8974   IF l_max_score=1 THEN
8975     l('    HZ_DQM_SEARCH_UTIL.set_no_score;');
8976   ELSE
8977     l('    HZ_DQM_SEARCH_UTIL.set_score;');
8978   END IF;
8979   l('    g_mappings.DELETE;');
8980   l('    g_party_site_stage_list.DELETE;');
8981   l('    g_contact_stage_list.DELETE;');
8982   l('    g_contact_pt_stage_list.DELETE;');
8983   l('    call_order.DELETE;');
8984   l('    call_max_score.DELETE;');
8985   l('    HZ_DQM_SEARCH_UTIL.new_search;');
8986   l('    HZ_TRANS_PKG.set_party_type(p_party_search_rec.PARTY_TYPE);');
8987   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
8988   l('');
8989   l('    -- Transform search criteria');
8990   l('    MAP_PARTY_REC(TRUE,p_party_search_rec, l_entered_max_score, g_party_stage_rec);');
8991   l('    MAP_PARTY_SITE_REC(TRUE,p_party_site_list, l_ps_entered_max_score, g_party_site_stage_list);');
8992   l('    MAP_CONTACT_REC(TRUE,p_contact_list, l_ct_entered_max_score, g_contact_stage_list);');
8993   l('    MAP_CONTACT_POINT_REC(TRUE,p_contact_point_list, l_cpt_entered_max_score, g_contact_pt_stage_list);');
8994   l('');
8995   l('      ');
8996   l('    l_idx := l_entered_max_score+1;');
8997   l('    vlist (l_idx) := ''PARTY'';');
8998   l('    maxscore (l_idx) := l_entered_max_score;');
8999 
9000   l('    l_idx := l_ps_entered_max_score+1;');
9001   l('    WHILE vlist.EXISTS(l_idx) LOOP');
9002   l('      l_idx := l_idx+1;');
9003   l('    END LOOP;');
9004   l('    vlist (l_idx) := ''PARTY_SITE'';');
9005   l('    maxscore (l_idx) := l_ps_entered_max_score;');
9006   l('');
9007   l('    l_idx := l_ct_entered_max_score+1;');
9008   l('    WHILE vlist.EXISTS(l_idx) LOOP');
9009   l('      l_idx := l_idx+1;');
9010   l('    END LOOP;');
9011   l('    vlist (l_idx) := ''CONTACT'';');
9012   l('    maxscore (l_idx) := l_ct_entered_max_score;');
9013   l('');
9014   l('    l_idx := l_cpt_entered_max_score+1;');
9015   l('    WHILE vlist.EXISTS(l_idx) LOOP');
9016   l('      l_idx := l_idx+1;');
9017   l('    END LOOP;');
9018   l('    vlist (l_idx) := ''CONTACT_POINT'';');
9019   l('    maxscore (l_idx) := l_cpt_entered_max_score;');
9020   l('');
9021   l('    l_num := 1;');
9022   l('    l_idx := vlist.LAST;');
9023   l('    WHILE l_idx IS NOT NULL LOOP');
9024   l('      call_order(l_num) := vlist(l_idx);');
9025   l('      call_max_score(l_num) := maxscore(l_idx);');
9026   l('      l_idx := vlist.PRIOR(l_idx);');
9027   l('      l_num := l_num+1;');
9028   l('    END LOOP;  ');
9029   l('    call_order(5):=''NONE'';');
9030   l('    IF p_match_type = '' OR '' THEN');
9031   IF l_purpose = 'S' THEN
9032     l('      threshold := round(('||l_match_threshold||'/'||l_max_score||')*(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score));');
9033   ELSE
9034     l('      threshold := '||l_match_threshold||';');
9035   END IF;
9036 
9037   l('      l_idx := vlist.FIRST;');
9038   l('      total := 0;');
9039   l('      l_num := 4;');
9040   l('      WHILE l_idx IS NOT NULL LOOP');
9041   l('        total := total+maxscore(l_idx);');
9042   l('        IF total<threshold THEN');
9043   l('          call_type(l_num) := ''AND'';');
9044   l('        ELSE');
9045   l('          call_type(l_num) := ''OR'';');
9046   l('        END IF;');
9047   l('        l_idx := vlist.NEXT(l_idx);');
9048   l('        l_num := l_num-1;');
9049   l('      END LOOP;');
9050   l('    ELSE');
9051   l('      call_type(1) := ''OR'';');
9052   l('      call_type(2) := ''AND'';');
9053   l('      call_type(3) := ''AND'';');
9054   l('      call_type(4) := ''AND'';');
9055   l('    END IF;');
9056   l('    x_party_max_score := l_entered_max_score;');
9057   l('    x_ps_max_score := l_ps_entered_max_score;');
9058   l('    x_contact_max_score := l_ct_entered_max_score;');
9059   l('    x_cpt_max_score := l_cpt_entered_max_score;');
9060 
9061   l('    RETURN (l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score);');
9062   l('  END;');
9063 
9064 
9065 
9066                 FIRST := TRUE;
9067                 g_party_or_query := null;
9068                 g_party_and_query := null;
9069                 cnt := cnt+1;
9070                 FOR PRIMATTRS IN (
9071                   SELECT a.ATTRIBUTE_ID, PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME, nvl(SCORE,0) SCORE
9072                   FROM HZ_TRANS_ATTRIBUTES_VL a,
9073                        HZ_MATCH_RULE_PRIMARY p,
9074                        HZ_MATCH_RULE_SECONDARY s
9075                   WHERE p.match_rule_id = p_rule_id
9076                   AND s.match_rule_id (+) = p_rule_id
9077                   AND s.attribute_id (+) = a.attribute_id
9078                   AND p.attribute_id = a.attribute_id
9079                   AND a.ENTITY_NAME = 'PARTY'
9080                   AND nvl(FILTER_FLAG,'N') <> 'Y'
9081                   ORDER BY SCORE) LOOP
9082                   FIRST1 := TRUE;
9083                   FOR PRIMTRANS IN (
9084                     SELECT f.STAGED_ATTRIBUTE_COLUMN, f.TRANSFORMATION_NAME, nvl(f.PRIMARY_FLAG,'N') PRIMARY_FLAG
9085                     FROM HZ_TRANS_FUNCTIONS_VL f,
9086                        HZ_PRIMARY_TRANS pt
9087                   WHERE pt.PRIMARY_ATTRIBUTE_ID = PRIMATTRS.PRIMARY_ATTRIBUTE_ID
9088                   AND pt.FUNCTION_ID = f.FUNCTION_ID)
9089                   LOOP
9090                       IF FIRST1 THEN
9091                         l_trans := '(g_party_stage_rec.'||
9092                                    PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
9093                                    PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
9094                                    PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
9095                         FIRST1 := FALSE;
9096                       ELSE
9097                         l_trans := l_trans||' OR (g_party_stage_rec.'||
9098                                    PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
9099                                    PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
9100                                    PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
9101                       END IF;
9102                         IF PRIMTRANS.PRIMARY_FLAG = 'Y' THEN
9103                           tmp := '''A'||PRIMATTRS.ATTRIBUTE_ID||'''';
9104                         ELSE
9105                           tmp := 'NULL';
9106                         END IF;
9107 
9108                   END LOOP;
9109 
9110                  l('');
9111 
9112 
9113 
9114                 END LOOP;
9115 
9116                 get_column_list(p_rule_id, 'PARTY',l_p_select_list,l_p_param_list, l_p_into_list);
9117                 get_column_list(p_rule_id, 'PARTY_SITES',l_ps_select_list,l_ps_param_list, l_ps_into_list);
9118                 get_column_list(p_rule_id, 'CONTACTS',l_c_select_list,l_c_param_list, l_c_into_list);
9119                 get_column_list(p_rule_id, 'CONTACT_POINTS',l_cpt_select_list,l_cpt_param_list, l_cpt_into_list);
9120 
9121                 l_party_filter_str := NULL;
9122                 l_dyn_party_filter_str := NULL;
9123                 FIRST := TRUE;
9124                 cnt := 1;
9125                 for PRIMTRANS IN (
9126                       SELECT f.STAGED_ATTRIBUTE_COLUMN
9127                       FROM HZ_TRANS_FUNCTIONS_VL f,
9128                            HZ_TRANS_ATTRIBUTES_VL a,
9129                            HZ_MATCH_RULE_PRIMARY pattr,
9130                            HZ_PRIMARY_TRANS pfunc
9131                       WHERE pattr.MATCH_RULE_ID = p_rule_id
9132                       AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9133                       AND a.ENTITY_NAME = 'PARTY'
9134                       AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
9135                       AND pfunc.FUNCTION_ID = f.FUNCTION_ID
9136                       AND nvl(FILTER_FLAG,'N')  = 'Y'
9137 
9138                       UNION
9139 
9140                       SELECT f.STAGED_ATTRIBUTE_COLUMN
9141                       FROM HZ_TRANS_FUNCTIONS_VL f,
9142                           HZ_TRANS_ATTRIBUTES_VL a
9143                       WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9144                       AND a.entity_name = 'PARTY'
9145                       AND a.attribute_name='PARTY_TYPE'
9146                       AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
9147                       AND nvl(f.active_flag,'Y')='Y'
9148                       AND ROWNUM=1
9149                 ) LOOP
9150 
9151                       IF FIRST THEN
9152                         l_party_filter_str := '(g_party_stage_rec.'||
9153                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9154                              ' IS NULL OR g_party_stage_rec.'||
9155                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' =  p.' ||
9156                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9157                         l_dyn_party_filter_str := '(:'||
9158                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9159                              ' IS NULL OR :'||
9160                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' =  p.' ||
9161                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9162                         FIRST := FALSE;
9163                       ELSE
9164                         l_dyn_party_filter_str := l_dyn_party_filter_str || ' AND ' ||
9165                              '(:'||
9166                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9167                              ' IS NULL OR :'||
9168                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' =  p.' ||
9169                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9170                         l_party_filter_str := l_party_filter_str || ' AND ' ||
9171                              '(g_party_stage_rec.'||
9172                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9173                              ' IS NULL OR g_party_stage_rec.'||
9174                              PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' =  p.' ||
9175                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9176                       END IF;
9177                       l_party_filt_bind(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
9178                       cnt:=cnt+1;
9179                 END LOOP;
9180 
9181 
9182 
9183 
9184    /*********************************************************************************
9185    * Match rule private procedures to open a cursor for performing B-tree index queries.
9186    *   open_party_cursor - B-tree index query on HZ_STAGED_PARTIES
9187    *   open_party_site_cursor - B-tree index query on HZ_STAGED_PARTY_SITES
9188    *   open_contact_cursor - B-tree index query on HZ_STAGED_CONTACTS
9189    *   open_contact_pt_cursor - B-tree index query on HZ_STAGED_CONTACT_POINTS
9190    *
9191    * Input:
9192    * p_dup_party_id : Called in the duplicate identification case, to filter off
9193    *                  the party for which we are trying find duplicates.
9194    * p_restrict_sql : restrict_sql criteria passed to match rule
9195    * p_contains_str : null or 'Y'
9196    * p_search_ctx_id : Only to called from find_party_details, for filtering against
9197    *                  party_ids returned by the party query
9198    * p_party_id : USed in the get_matching_party_sites, get_matching_contacts and
9199    *              get_matching_cpts procedures, to only find records belonging to the specified
9200    *              party_id
9201    *********************************************************************************/
9202 
9203   -- VJN: Introduced the code generation of match rules based on rule purpose
9204   --      so that Expanded Duplicate Identification Match rules uses intermedia indexes
9205   --      where as the bulk duplicate identification match rules use the conventional
9206   --      B-tree indexes.
9207         l('  PROCEDURE open_party_cursor(');
9208         l('            p_dup_party_id NUMBER, ');
9209         l('            p_restrict_sql VARCHAR2, ');
9210         l('            p_contains_str  VARCHAR2, ');
9211         l('            p_search_ctx_id NUMBER,');
9212         l('            p_match_str VARCHAR2,');
9213         l('            p_search_merged VARCHAR2,');
9214         l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9215         l('  l_sqlstr VARCHAR2(4000);');
9216         l('  BEGIN');
9217         IF has_acquisition_attribs (p_rule_id, 'PARTY')
9218         THEN
9219         l('    IF p_contains_str IS NULL THEN');
9220         /**** To query based on party_id .. from the get_score_details flow ***/
9221         l('      OPEN x_cursor FOR ');
9222         l('        SELECT PARTY_ID '|| l_p_select_list);
9223         l('        FROM HZ_STAGED_PARTIES stage');
9224         l('        WHERE PARTY_ID = p_dup_party_id;');
9225 
9226         /**** Static queries when restrict_sql is null OR if p_search_ctx_id IS NOT NULL *****/
9227         l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9228 
9229         /**** When search context ID is null .. Retrieve rows using B-tree indexes ****/
9230         l('      IF p_search_ctx_id IS NULL THEN');
9231         l('        OPEN x_cursor FOR ');
9232         l('          SELECT /*+ ORDERED */ stage.PARTY_ID '|| replace(l_p_select_list,'T','stage.T'));
9233         l('          FROM HZ_SRCH_PARTIES srch, HZ_STAGED_PARTIES stage');
9234         l('          WHERE');
9235 
9236         generate_bulk_predicate(p_rule_id,'N',l_match_str,'PARTY');
9237 
9238              IF l_party_filter_str IS NOT NULL THEN
9239           l('          AND ('||replace(l_party_filter_str,'p.','stage.')||')');
9240         END IF;
9241         l('          AND (nvl(p_search_merged,''N'')=''Y'' OR nvl(stage.status,''A'') in (''A''))');
9242         l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9243 
9244 
9245         /**** When search context ID is not null .. Query using DQM_PARTIES_GT. Filter using
9246               B-tree index ****/
9247         l('      ELSE');
9248         l('        OPEN x_cursor FOR ');
9249         l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTIES_U1) */ stage.PARTY_ID '|| replace(l_p_select_list,'T','stage.T'));
9250         l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTIES stage, HZ_SRCH_PARTIES srch');
9251         l('            WHERE');
9252 
9253         generate_bulk_predicate(p_rule_id,'N',l_match_str,'PARTY');
9254 
9255         l('            AND d.SEARCH_CONTEXT_ID=p_search_ctx_id');
9256         l('            AND d.party_id = stage.party_id');
9257         IF l_party_filter_str IS NOT NULL THEN
9258           l('            AND ('||replace(l_party_filter_str,'p.','stage.')||')');
9259         END IF;
9260         l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
9261         l('            AND (nvl(p_search_merged,''N'')=''Y'' OR nvl(stage.status,''A'') in (''A''));');
9262         l('      END IF;');
9263 
9264         /**** When restrict_sql is not null *****/
9265         l('    ELSE');
9266 
9267         /**** When search context ID is null .. Access using B-tree index ***/
9268         l('     IF p_search_ctx_id IS NULL THEN');
9269         l('       l_sqlstr := ''SELECT /*+ ORDERED */ stage.PARTY_ID '|| replace(l_p_select_list,'T','stage.T')||'''||');
9270         l('                   '' FROM HZ_SRCH_PARTIES srch, HZ_STAGED_PARTIES stage''||');
9271         l('                   '' WHERE''||');
9272 
9273         generate_bulk_predicate(p_rule_id,'Y',l_match_str,'PARTY');
9274 
9275         IF l_dyn_party_filter_str IS NOT NULL THEN
9276           l('                   '' AND ('||replace(l_dyn_party_filter_str,'p.','stage.')||')''||');
9277         END IF;
9278         l('                   '' AND (''||p_restrict_sql||'')'' ||');
9279         l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9280         l('       IF p_search_merged IS NULL OR p_search_merged <> ''Y'' THEN');
9281         l('         l_sqlstr := l_sqlstr ||'' AND nvl(stage.status,''''A'''') in (''''A'''')'';');
9282         l('       END IF;');
9283         l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9284         FOR I in 1..l_party_filt_bind.COUNT LOOP
9285             l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9286         END LOOP;
9287         l('                    ,p_dup_party_id, p_dup_party_id;');
9288         l('     END IF;');
9289         l('   END IF;');
9290         l('  exception');
9291         l('    when others then');
9292         l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9293         l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9294         l('        FND_MSG_PUB.ADD;');
9295         l('        RAISE FND_API.G_EXC_ERROR;');
9296         l('      else ');
9297         l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9298         l('      end if;');
9299         ELSE
9300            l('NULL ;');
9301         END IF;
9302         l('  END;');
9303         l('');
9304 
9305 
9306   l('  PROCEDURE open_party_site_cursor(');
9307   l('            p_dup_party_id NUMBER, ');
9308   l('            p_party_id NUMBER, ');
9309   l('            p_restrict_sql VARCHAR2, ');
9310   l('            p_contains_str  VARCHAR2, ');
9311   l('            p_search_ctx_id  NUMBER, ');
9312   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9313   l('  l_sqlstr VARCHAR2(4000);');
9314   l('  BEGIN');
9315   IF has_acquisition_attribs (p_rule_id, 'PARTY_SITES')
9316   THEN
9317 
9318                       /**** For a single party_id scenario. Retrieve using party_id ****/
9319             l('     IF p_party_id IS NOT NULL THEN');
9320             l('       OPEN x_cursor FOR ');
9321             l('          SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'||
9322                                                        replace(l_ps_select_list,'T','stage.T') );
9323             l('          FROM HZ_STAGED_PARTY_SITES stage,HZ_SRCH_PSITES srch');
9324             l('WHERE');
9325             generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9326             IF l_party_filter_str IS NOT NULL THEN
9327               l('        AND EXISTS (');
9328               l('          SELECT  /*+ INDEX(p HZ_STAGED_PARTIES_U1) */  1 FROM HZ_STAGED_PARTIES p');
9329               l('          WHERE p.PARTY_ID = stage.PARTY_ID');
9330               l('          AND ('||l_party_filter_str||'))');
9331             END IF;
9332             l('          AND stage.party_id = p_party_id;');
9333             /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
9334             l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9335 
9336             -- VJN new hints introduced for performance
9337             IF l_party_filter_str IS NOT NULL THEN
9338                    /**** When p_search_ctx_id IS NULL, retreive using B-tree index ***/
9339                   l('      IF p_search_ctx_id IS NULL THEN');
9340                   l('        OPEN x_cursor FOR ');
9341                   l('          SELECT /*+ ORDERED USE_NL(srch stage p) */  stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'||
9342                                                           replace(l_ps_select_list,'T','stage.T'));
9343                   l('          FROM  HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage, HZ_STAGED_PARTIES p');
9344                   l('WHERE');
9345                   generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9346                   l('    AND  p.PARTY_ID = stage.PARTY_ID');
9347                   l('    AND ('||l_party_filter_str||')');
9348             ELSE
9349                    /**** When p_search_ctx_id IS NULL, retreive using B-tree index ***/
9350                   l('      IF p_search_ctx_id IS NULL THEN');
9351                   l('        OPEN x_cursor FOR ');
9352                   l('          SELECT /*+ USE_NL(srch stage)  */  stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'||
9353                                                           replace(l_ps_select_list,'T','stage.T'));
9354                   l('          FROM  HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage');
9355                   l('WHERE');
9356                   generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9357             END IF;
9358 
9359 
9360             l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9361 
9362             /***** Search_ctx_id is not null. Retreive using HZ_DQM_PARTIES_GT ****/
9363             l('      ELSE');
9364             l('          OPEN x_cursor FOR ');
9365             l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'
9366                                || replace(l_ps_select_list,'T','stage.T'));
9367             l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage, HZ_SRCH_PSITES srch');
9368             l('WHERE');
9369             generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9370             l('            AND d.search_context_id = p_search_ctx_id');
9371             l('            AND d.party_id = stage.party_id');
9372             l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9373             l('      END IF;');
9374 
9375              -- VJN new hints introduced for performance
9376             IF l_dyn_party_filter_str IS NOT NULL THEN
9377                    /**** Restrict_sql is not null  ****/
9378                   l('    ELSE');
9379                   l('       l_sqlstr := ''SELECT /*+ ORDERED USE_NL(srch stage p) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID ' ||
9380                                     replace(l_ps_select_list,'T','stage.T')||'''||');
9381                   l('                   '' FROM HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage, HZ_STAGED_PARTIES p''||');
9382                   l('                   '' WHERE'' ||');
9383                   generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'PARTY_SITES');
9384                   l('                 '' AND p.party_id = stage.party_id '' || ');
9385                   l('                 '' AND ('||l_dyn_party_filter_str||')) '' || ');
9386             ELSE
9387                    /**** Restrict_sql is not null  ****/
9388                   l('    ELSE');
9389                   l('       l_sqlstr := ''SELECT /*+ USE_NL(srch stage)  */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID ' ||
9390                                     replace(l_ps_select_list,'T','stage.T')||'''||');
9391                   l('                   '' FROM HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage''||');
9392                   l('                   '' WHERE'' ||');
9393                   generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'PARTY_SITES');
9394             END IF;
9395             l('                   '' AND (''||p_restrict_sql||'')'' ||');
9396             l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9397             l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9398             FOR I in 1..l_party_filt_bind.COUNT LOOP
9399               l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9400             END LOOP;
9401             l('                    ,p_dup_party_id, p_dup_party_id;');
9402             l('    END IF;');
9403             l('  exception');
9404             l('    when others then');
9405             l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9406             l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9407             l('        FND_MSG_PUB.ADD;');
9408             l('        RAISE FND_API.G_EXC_ERROR;');
9409             l('      else ');
9410             l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9411             l('      end if;');
9412      ELSE
9413           l('NULL ;');
9414      END IF;
9415           l('  END;');
9416 
9417   l('');
9418   l('  PROCEDURE open_contact_cursor(');
9419   l('            p_dup_party_id NUMBER, ');
9420   l('            p_party_id NUMBER, ');
9421   l('            p_restrict_sql VARCHAR2, ');
9422   l('            p_contains_str  VARCHAR2, ');
9423   l('            p_search_ctx_id  NUMBER, ');
9424   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9425   l('  l_sqlstr VARCHAR2(4000);');
9426   l('  BEGIN');
9427   IF has_acquisition_attribs (p_rule_id, 'CONTACTS')
9428   THEN
9429                   /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
9430           l('     IF p_party_id IS NOT NULL THEN');
9431           l('       OPEN x_cursor FOR ');
9432           l('          SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ stage.ORG_CONTACT_ID, stage.PARTY_ID'||
9433                                                        replace(l_c_select_list,'T' , 'stage.T') );
9434           l('          FROM HZ_STAGED_CONTACTS stage, HZ_SRCH_CONTACTS srch');
9435           l('          WHERE');
9436           generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACTS');
9437           IF l_party_filter_str IS NOT NULL THEN
9438             l('        AND EXISTS (');
9439             l('          SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */  1 FROM HZ_STAGED_PARTIES p');
9440             l('          WHERE p.PARTY_ID = stage.PARTY_ID');
9441             l('          AND ('||l_party_filter_str||'))');
9442           END IF;
9443           l('          AND stage.party_id = p_party_id;');
9444           /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
9445           l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9446 
9447           /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
9448           l('      IF p_search_ctx_id IS NULL THEN');
9449           l('        OPEN x_cursor FOR ');
9450           l('          SELECT /*+ USE_NL(srch stage)  */ stage.ORG_CONTACT_ID, stage.PARTY_ID'|| replace(l_c_select_list,'T','stage.T') );
9451           l('          FROM  HZ_SRCH_CONTACTS srch, HZ_STAGED_CONTACTS stage');
9452           l('          WHERE');
9453           generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACTS');
9454           IF l_party_filter_str IS NOT NULL THEN
9455             l('        AND EXISTS (');
9456             l('          SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9457             l('          WHERE p.PARTY_ID = stage.PARTY_ID');
9458             l('          AND ('||l_party_filter_str||'))');
9459           END IF;
9460           l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9461 
9462           /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
9463           l('      ELSE');
9464           l('          OPEN x_cursor FOR ');
9465           l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ stage.ORG_CONTACT_ID, stage.PARTY_ID'
9466                                       || replace(l_c_select_list,'T' , 'stage.T') );
9467           l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage, HZ_SRCH_CONTACTS srch');
9468           l('            WHERE');
9469           generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACTS');
9470           l('            AND d.search_context_id = p_search_ctx_id');
9471           l('            AND d.party_id = stage.party_id');
9472         /*
9473           IF l_party_filter_str IS NOT NULL THEN
9474             l('          AND EXISTS (');
9475             l('            SELECT 1 FROM HZ_STAGED_PARTIES p');
9476             l('            WHERE p.PARTY_ID = stage.PARTY_ID');
9477             l('            AND ('||l_party_filter_str||'))');
9478           END IF;
9479         */
9480           l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9481           l('      END IF;');
9482 
9483           /**** Restrict_sql is not null. Retrieve using intermedia ****/
9484           l('    ELSE');
9485           l('       l_sqlstr := ''SELECT /*+ USE_NL(srch stage)  */  stage.ORG_CONTACT_ID, stage.PARTY_ID '||
9486                                                  replace(l_c_select_list,'T','stage.T')||'''||');
9487           l('                   '' FROM HZ_SRCH_CONTACTS srch, HZ_STAGED_CONTACTS stage''||');
9488           l('                   '' WHERE ''||');
9489           generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'CONTACTS');
9490           IF l_dyn_party_filter_str IS NOT NULL THEN
9491             l('                 '' AND EXISTS (''||');
9492             l('                 '' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p '' || ');
9493             l('                 '' WHERE p.party_id = stage.party_id '' || ');
9494             l('                 '' AND ('||l_dyn_party_filter_str||')) '' || ');
9495           END IF;
9496           l('                   '' AND (''||p_restrict_sql||'')'' ||');
9497           l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9498           l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9499           FOR I in 1..l_party_filt_bind.COUNT LOOP
9500             l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9501           END LOOP;
9502           l('                    ,p_dup_party_id, p_dup_party_id;');
9503           l('    END IF;');
9504           l('  exception');
9505           l('    when others then');
9506           l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9507           l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9508           l('        FND_MSG_PUB.ADD;');
9509           l('        RAISE FND_API.G_EXC_ERROR;');
9510           l('      else ');
9511           l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9512           l('      end if;');
9513    ELSE
9514          l('NULL ;');
9515    END IF;
9516           l('  END;');
9517   l('');
9518 
9519 
9520   l('  PROCEDURE open_contact_pt_cursor(');
9521   l('            p_dup_party_id NUMBER, ');
9522   l('            p_party_id NUMBER, ');
9523   l('            p_restrict_sql VARCHAR2, ');
9524   l('            p_contains_str  VARCHAR2, ');
9525   l('            p_search_ctx_id  NUMBER, ');
9526   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9527   l('  l_sqlstr VARCHAR2(4000);');
9528   l('  BEGIN');
9529 
9530   IF has_acquisition_attribs (p_rule_id, 'CONTACT_POINTS')
9531   THEN
9532 
9533             /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
9534             l('     IF p_party_id IS NOT NULL THEN');
9535             l('       OPEN x_cursor FOR ');
9536             l('          SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ stage.CONTACT_POINT_ID, stage.PARTY_ID,'
9537                                   ||   'stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9538                                   || replace(l_cpt_select_list,'T','stage.T') );
9539             l('          FROM HZ_STAGED_CONTACT_POINTS stage, HZ_SRCH_CPTS srch');
9540             l('            WHERE');
9541             generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACT_POINTS');
9542             IF l_party_filter_str IS NOT NULL THEN
9543 
9544               l('        AND EXISTS (');
9545               l('          SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9546               l('          WHERE p.PARTY_ID = stage.PARTY_ID');
9547               l('          AND ('||l_party_filter_str||'))');
9548             END IF;
9549             l('          AND stage.party_id = p_party_id;');
9550             /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
9551             l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9552 
9553             /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
9554             l('      IF p_search_ctx_id IS NULL THEN');
9555             l('        OPEN x_cursor FOR ');
9556             l('          SELECT /*+ USE_NL(srch stage)  */  stage.CONTACT_POINT_ID, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9557                                           || replace(l_cpt_select_list,'T','stage.T') );
9558             l('          FROM  HZ_SRCH_CPTS srch, HZ_STAGED_CONTACT_POINTS stage');
9559             l('            WHERE');
9560             generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACT_POINTS');
9561             IF l_party_filter_str IS NOT NULL THEN
9562               l('        AND EXISTS (');
9563               l('          SELECT  /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9564               l('          WHERE p.PARTY_ID = stage.PARTY_ID');
9565               l('          AND ('||l_party_filter_str||'))');
9566             END IF;
9567             l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9568 
9569             /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
9570             l('      ELSE');
9571             l('          OPEN x_cursor FOR ');
9572             l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ stage.CONTACT_POINT_ID, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9573                                           || replace(l_cpt_select_list,'T','stage.T') );
9574             l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage, HZ_SRCH_CPTS srch');
9575             l('            WHERE');
9576             generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACT_POINTS');
9577             l('            AND d.search_context_id = p_search_ctx_id');
9578             l('            AND d.party_id = stage.party_id');
9579           /*
9580             IF l_party_filter_str IS NOT NULL THEN
9581               l('          AND EXISTS (');
9582               l('            SELECT 1 FROM HZ_STAGED_PARTIES p');
9583               l('            WHERE p.PARTY_ID = stage.PARTY_ID');
9584               l('            AND ('||l_party_filter_str||'))');
9585             END IF;
9586           */
9587             l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9588             l('      END IF;');
9589 
9590             /**** Restrict_sql is not null. Retrieve using intermedia ****/
9591             l('    ELSE');
9592             l('       l_sqlstr := ''SELECT /*+ USE_NL(srch stage)  */ stage.CONTACT_POINT_ID, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID  '
9593                                                          || replace(l_cpt_select_list,'T','stage.T')||'''||');
9594             l('                   '' FROM HZ_SRCH_CPTS srch, HZ_STAGED_CONTACT_POINTS stage''||');
9595             l('                   '' WHERE''||');
9596             generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'CONTACT_POINTS');
9597             IF l_dyn_party_filter_str IS NOT NULL THEN
9598               l('                 '' AND EXISTS (''||');
9599               l('                 '' SELECT  /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p '' || ');
9600               l('                 '' WHERE p.party_id = stage.party_id '' || ');
9601               l('                 '' AND ('||l_dyn_party_filter_str||')) '' || ');
9602             END IF;
9603             l('                   '' AND (''||p_restrict_sql||'')'' ||');
9604             l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9605             l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9606             FOR I in 1..l_party_filt_bind.COUNT LOOP
9607               l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9608             END LOOP;
9609             l('                    ,p_dup_party_id, p_dup_party_id;');
9610             l('    END IF;');
9611             l('  exception');
9612             l('    when others then');
9613             l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9614             l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9615             l('        FND_MSG_PUB.ADD;');
9616             l('        RAISE FND_API.G_EXC_ERROR;');
9617             l('      else ');
9618             l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9619             l('      end if;');
9620      ELSE
9621           l('NULL ;');
9622      END IF;
9623           l('  END;');
9624 
9625   l('');
9626   l('  FUNCTION get_new_score_rec (');
9627   l('    	 p_init_total_score NUMBER,');
9628   l('    	 p_init_party_score NUMBER,');
9629   l('    	 p_init_party_site_score NUMBER,');
9630   l('    	 p_init_contact_score NUMBER,');
9631   l('    	 p_init_contact_point_score NUMBER, ');
9632   l('    	 p_party_id NUMBER, ');
9633   l('    	 p_party_site_id NUMBER, ');
9634   l('    	 p_org_contact_id NUMBER, ');
9635   l('    	 p_contact_point_id NUMBER) ');
9636   l('     RETURN HZ_PARTY_SEARCH.score_rec IS');
9637   l('    l_score_rec HZ_PARTY_SEARCH.score_rec;');
9638   l('  BEGIN');
9639   l('    l_score_rec.TOTAL_SCORE := p_init_total_score;');
9640   l('    l_score_rec.PARTY_SCORE := p_init_party_score;');
9641   l('    l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;');
9642   l('    l_score_rec.CONTACT_SCORE := p_init_contact_score;');
9643   l('    l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;');
9644   l('    l_score_rec.PARTY_ID := p_party_id;');
9645   l('    l_score_rec.PARTY_SITE_ID := p_party_site_id;');
9646   l('    l_score_rec.ORG_CONTACT_ID := p_org_contact_id;');
9647   l('    l_score_rec.CONTACT_POINT_ID := p_contact_point_id;');
9648   l('    RETURN l_score_rec;');
9649   l('  END;');
9650 
9651   l('');
9652   l('   /**********************************************************');
9653   l('   This procedure finds the set of parties that match the search');
9654   l('   criteria and returns a scored set of parties');
9655   l('');
9656   l('   The steps in executing the search are as follows');
9657   l('    1. Initialization and error checks');
9658   l('    2. Setup of intermedia query strings for Acquisition query');
9659   l('    3. Execution of Acquisition query');
9660   l('    4. Execution of Secondary queries to score results');
9661   l('    5. Setup of data temporary table to return search results');
9662   l('   **********************************************************/');
9663   l('');
9664   l('-------------------------------------------------------------------------------------');
9665   l('--------------------  BULK MATCH RULE ::: find_parties ------------------------------');
9666   l('-------------------------------------------------------------------------------------');
9667   l('PROCEDURE find_parties (');
9668   l('      p_rule_id               IN      NUMBER,');
9669   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
9670   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
9671   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
9672   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
9673   l('      p_restrict_sql          IN      VARCHAR2,');
9674   l('      p_match_type            IN      VARCHAR2,');
9675   l('      p_search_merged         IN      VARCHAR2,');
9676   l('      p_dup_party_id          IN      NUMBER,');
9677   l('      p_dup_set_id            IN      NUMBER,');
9678   l('      p_dup_batch_id          IN      NUMBER,');
9679   l('      p_ins_details           IN      VARCHAR2,');
9680   l('      x_search_ctx_id         OUT     NUMBER,');
9681   l('      x_num_matches           OUT     NUMBER');
9682   l(') IS');
9683   l('');
9684   l('  -- Strings to hold the generated Intermedia query strings');
9685   l('  l_party_contains_str VARCHAR2(32000); ');
9686   l('  l_party_site_contains_str VARCHAR2(32000);');
9687   l('  l_contact_contains_str VARCHAR2(32000);');
9688   l('  l_contact_pt_contains_str VARCHAR2(32000);');
9689   l('  l_denorm_str VARCHAR2(32000);');
9690   l('  l_ps_denorm_str VARCHAR2(32000);');
9691   l('  l_ct_denorm_str VARCHAR2(32000);');
9692   l('  l_cpt_denorm_str VARCHAR2(32000);');
9693 
9694   l('');
9695   l('  -- Other local variables');
9696   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
9697   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
9698   l('  -- For Score calculation');
9699   l('  l_max_score NUMBER;');
9700   l('  l_match_idx NUMBER;');
9701   l('  l_entered_max_score NUMBER;');
9702   l('  FIRST BOOLEAN;');
9703   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
9704   l('');
9705   FOR TX IN (
9706       SELECT distinct f.staged_attribute_column
9707       FROM hz_trans_functions_vl f, hz_secondary_trans st,
9708            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
9709       WHERE sa.match_rule_id = p_rule_id
9710       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
9711       AND st.function_id = f.function_id
9712       AND a.attribute_id = sa.attribute_id) LOOP
9713     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
9714   END LOOP;
9715   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
9716   l('  H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
9717   l('  H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
9718   l('');
9719   l('  l_score NUMBER;');
9720   l('  l_idx NUMBER;');
9721   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
9722   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
9723   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
9724   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
9725   l('  l_party_id NUMBER;');
9726   l('  l_ps_party_id NUMBER;');
9727   l('  l_ct_party_id NUMBER;');
9728   l('  l_cpt_party_id NUMBER;');
9729   l('  l_cpt_ps_id NUMBER;');
9730   l('  l_cpt_contact_id NUMBER;');
9731   l('  l_party_site_id NUMBER;');
9732   l('  l_org_contact_id NUMBER;');
9733   l('  l_contact_pt_id NUMBER;');
9734   l('  l_ps_contact_id NUMBER;');
9735   l('  l_party_max_score NUMBER;');
9736   l('  l_ps_max_score NUMBER;');
9737   l('  l_contact_max_score NUMBER;');
9738   l('  l_cpt_max_score NUMBER;');
9739   l('  l_denorm_max_score NUMBER;');
9740   l('  l_non_denorm_max_score NUMBER;');
9741   l('');
9742   l('  defpt NUMBER :=0;');
9743   l('  defps NUMBER :=0;');
9744   l('  defct NUMBER :=0;');
9745   l('  defcpt NUMBER :=0;');
9746   l('  l_index NUMBER;');
9747   l('  l_max_thresh NUMBER;');
9748   l('  l_tmp NUMBER;');
9749   l('  l_merge_flag VARCHAR2(1);');
9750   l('  l_num_eval NUMBER:=0;');
9751   l('');
9752   l('  --Fix for bug 4417124 ');
9753   l('  l_use_contact_addr_info BOOLEAN := TRUE;');
9754   l('  l_use_contact_cpt_info BOOLEAN  := TRUE;');
9755   l('  l_use_contact_addr_flag VARCHAR2(1) := ''Y'';');
9756   l('  l_use_contact_cpt_flag  VARCHAR2(1) := ''Y'';');
9757   l('');
9758   l('    h_ps_id HZ_PARTY_SEARCH.IDList;');
9759   l('    h_ps_party_id HZ_PARTY_SEARCH.IDList;');
9760   l('    h_ps_score HZ_PARTY_SEARCH.IDList;');
9761   l('    h_ct_id HZ_PARTY_SEARCH.IDList;');
9762   l('    h_ct_party_id HZ_PARTY_SEARCH.IDList;');
9763   l('    h_ct_score HZ_PARTY_SEARCH.IDList;');
9764   l('    h_cpt_id HZ_PARTY_SEARCH.IDList;');
9765   l('    h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
9766   l('    h_cpt_score HZ_PARTY_SEARCH.IDList;');
9767   l('    detcnt NUMBER := 1;');
9768   l('');
9769   l('  ');
9770   l('  /********************* Find Parties private procedures *******/');
9771 
9772   l('  PROCEDURE push_eval IS');
9773   l('  BEGIN');
9774   l('    H_PARTY_ID.DELETE;');
9775   l('    H_PARTY_ID_LIST.DELETE;');
9776   l('    H_SCORES.DELETE;        ');
9777   l('    g_mappings.DELETE;');
9778   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
9779   l('    call_order(5) := call_order(1);');
9780   l('    call_type(5) := ''AND'';');
9781   l('    call_max_score(5) := call_max_score(1);');
9782   l('    call_type(2) := ''OR'';');
9783   l('  END;');
9784 
9785   l('');
9786   l('  /**  Private procedure to acquire and score at party level  ***/');
9787   l('  PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
9788   l('    l_party_id_idx NUMBER:=1;');
9789   l('    l_ctx_id NUMBER;');
9790   l('  BEGIN');
9791   l('    SAVEPOINT eval_start;');
9792   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
9793   l('      l_ctx_id := l_search_ctx_id;');
9794   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
9795   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9796   l('             l_search_ctx_id,H_PARTY_ID(I));');
9797   l('      H_PARTY_ID.DELETE;');
9798   l('      H_PARTY_ID_LIST.DELETE;');
9799   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
9800   l('      l_ctx_id := l_search_ctx_id;');
9801   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
9802   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9803   l('             l_search_ctx_id,H_PARTY_ID(I));');
9804   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
9805   l('    ELSE');
9806   l('      l_ctx_id := NULL;');
9807   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
9808   l('    END IF;');
9809   l('    open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);');
9810   l('    LOOP ');
9811   l('      FETCH l_party_cur INTO');
9812   l('         l_party_id '||l_p_into_list||';');
9813   l('      EXIT WHEN l_party_cur%NOTFOUND;');
9814   l('      l_index := map_id(l_party_id);');
9815   l('      l_score := GET_PARTY_SCORE('||l_p_param_list||');');
9816 
9817   l('      IF NOT H_SCORES.EXISTS(l_index) THEN');
9818   l('        H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
9819   l('      ELSE');
9820   l('        H_SCORES(l_index).TOTAL_SCORE := ');
9821   l('                H_SCORES(l_index).TOTAL_SCORE+l_score;');
9822   l('        H_SCORES(l_index).PARTY_SCORE := l_score;');
9823   l('      END IF;');
9824   l('      IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
9825   l('        H_PARTY_ID_LIST(l_index) := 1;');
9826   l('        H_PARTY_ID(l_party_id_idx) := l_party_id;');
9827   l('        l_party_id_idx:= l_party_id_idx+1;');
9828   l('      END IF;');
9829   l('      IF l_party_id_idx>l_max_thresh THEN');
9830   l('        CLOSE l_party_cur;'); --Bug No: 3872745
9831   l('        IF p_index>1 THEN');
9832   ldbg_s('In eval party level number of matches found exceeded threshold');
9833   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
9834   l('          FND_MSG_PUB.ADD;');
9835   l('          RAISE FND_API.G_EXC_ERROR;');
9836   l('        ELSE');
9837   l('          push_eval;');
9838   l('          RETURN;');
9839   l('        END IF;');
9840   l('      END IF;');
9841   ds(fnd_log.level_statement);
9842   dc(fnd_log.level_statement,'Party Level Matches');
9843   dc(fnd_log.level_statement,'l_party_id','l_party_id');
9844   dc(fnd_log.level_statement,'l_score','l_score');
9845   de;
9846   l('    END LOOP;');
9847   l('    CLOSE l_party_cur;');
9848   l('    ROLLBACK to eval_start;');
9849   l('  END;');
9850   l('');
9851   l('  /**  Private procedure to acquire and score at party site level  ***/');
9852   l('  PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
9853   l('    l_party_id_idx NUMBER:=1;');
9854   l('    l_ctx_id NUMBER;');
9855   --l('    h_ps_id HZ_PARTY_SEARCH.IDList;');
9856   --l('    h_ps_party_id HZ_PARTY_SEARCH.IDList;');
9857   --l('    h_ps_score HZ_PARTY_SEARCH.IDList;');
9858   --l('    detcnt NUMBER := 1;');
9859   l('  BEGIN');
9860   l('    SAVEPOINT eval_start;');
9861   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
9862   l('      l_ctx_id := l_search_ctx_id;');
9863   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
9864   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9865   l('             l_search_ctx_id,H_PARTY_ID(I));');
9866   l('      H_PARTY_ID.DELETE;');
9867   l('      H_PARTY_ID_LIST.DELETE;');
9868   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
9869   l('      l_ctx_id := l_search_ctx_id;');
9870   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
9871   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9872   l('             l_search_ctx_id,H_PARTY_ID(I));');
9873   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
9874   l('    ELSE');
9875   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
9876   l('      l_ctx_id := NULL;');
9877   l('    END IF;');
9878   l('    open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, l_party_site_cur);');
9879   l('    LOOP ');
9880   l('      FETCH l_party_site_cur INTO');
9881   l('         l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
9882   l('      EXIT WHEN l_party_site_cur%NOTFOUND;');
9883   l('      IF l_use_contact_addr_info OR l_ps_contact_id IS NOT NULL THEN');
9884   l('        l_index := map_id(l_ps_party_id);');
9885   l('        l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
9886 
9887   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
9888   l('          H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);');
9889   l('        ELSE');
9890   l('          IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
9891   l('            H_SCORES(l_index).TOTAL_SCORE := ');
9892   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
9893   l('            H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
9894   l('          END IF;');
9895   l('        END IF;');
9896   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
9897   l('          H_PARTY_ID_LIST(l_index) := 1;');
9898   l('          H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
9899   l('          l_party_id_idx:= l_party_id_idx+1;');
9900   l('        END IF;');
9901   l('        IF l_party_id_idx>l_max_thresh THEN');
9902   l('        CLOSE l_party_site_cur;'); --Bug No: 3872745
9903   l('          IF p_index>1 THEN');
9904   ldbg_s('In eval party site level number of matches found exceeded threshold');
9905   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
9906   l('            FND_MSG_PUB.ADD;');
9907   l('            RAISE FND_API.G_EXC_ERROR;');
9908   l('          ELSE');
9909   l('            push_eval;');
9910   l('            RETURN;');
9911   l('          END IF;');
9912   l('        END IF;');
9913   l('        IF p_ins_details = ''Y'' THEN');
9914   l('          h_ps_id(detcnt) := l_party_site_id;');
9915   l('          h_ps_party_id(detcnt) := l_ps_party_id;');
9916   l('          h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
9917   l('          detcnt := detcnt +1;');
9918   l('        END IF;');
9919   ds(fnd_log.level_statement);
9920   dc(fnd_log.level_statement,'Party Site Level Matches');
9921   dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
9922   dc(fnd_log.level_statement,'l_ps_party_id','l_ps_party_id');
9923   dc(fnd_log.level_statement,'l_score','l_score');
9924   de;
9925   l('      END IF;');
9926   l('    END LOOP;');
9927   l('    CLOSE l_party_site_cur;');
9928   l('    ROLLBACK to eval_start;');
9929   -- l('    IF p_ins_details = ''Y'' THEN');
9930   -- l('      FORALL I in 1..h_ps_id.COUNT ');
9931   -- l('        INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
9932   -- l('          l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
9933   -- l('    END IF;');
9934   l('  END;');
9935   l('');
9936   l('  /**  Private procedure to acquire and score at party site level  ***/');
9937   l('  PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
9938   l('    l_party_id_idx NUMBER:=1;');
9939   l('    l_ctx_id NUMBER;');
9940  -- l('    h_ct_id HZ_PARTY_SEARCH.IDList;');
9941  -- l('    h_ct_party_id HZ_PARTY_SEARCH.IDList;');
9942  -- l('    h_ct_score HZ_PARTY_SEARCH.IDList;');
9943  -- l('    detcnt NUMBER := 1;');
9944   l('  BEGIN');
9945   l('    SAVEPOINT eval_start;');
9946   l('    IF l_match_str = '' AND '' AND p_call_type=''AND'' THEN');
9947   l('      l_ctx_id := l_search_ctx_id;');
9948   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
9949   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9950   l('             l_search_ctx_id,H_PARTY_ID(I));');
9951   l('      H_PARTY_ID.DELETE;');
9952   l('      H_PARTY_ID_LIST.DELETE;');
9953   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
9954   l('      l_ctx_id := l_search_ctx_id;');
9955   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
9956   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9957   l('             l_search_ctx_id,H_PARTY_ID(I));');
9958   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
9959   l('    ELSE');
9960   l('      l_ctx_id := NULL;');
9961   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
9962   l('    END IF;');
9963   l('    open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id, l_contact_cur);');
9964   l('    LOOP ');
9965   l('      FETCH l_contact_cur INTO');
9966   l('         l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
9967   l('      EXIT WHEN l_contact_cur%NOTFOUND;');
9968   l('      l_index := map_id(l_ct_party_id);');
9969   l('      l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
9970 
9971   l('      IF NOT H_SCORES.EXISTS(l_index) THEN');
9972   l('        H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id,null);');
9973   l('      ELSE');
9974   l('        IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
9975   l('          H_SCORES(l_index).TOTAL_SCORE := ');
9976   l('                H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
9977   l('          H_SCORES(l_index).CONTACT_SCORE := l_score;');
9978   l('        END IF;');
9979   l('      END IF;');
9980   l('      IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
9981   l('        H_PARTY_ID_LIST(l_index) := 1;');
9982   l('        H_PARTY_ID(l_party_id_idx) := l_ct_party_id;');
9983   l('        l_party_id_idx:= l_party_id_idx+1;');
9984   l('      END IF;');
9985   l('      IF l_party_id_idx>l_max_thresh THEN');
9986   l('        CLOSE l_contact_cur;'); --Bug No: 3872745
9987   l('        IF p_index>1 THEN');
9988   ldbg_s('In eval contact level number of matches found exceeded threshold');
9989   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
9990   l('          FND_MSG_PUB.ADD;');
9991   l('          RAISE FND_API.G_EXC_ERROR;');
9992   l('        ELSE');
9993   l('          push_eval;');
9994   l('          RETURN;');
9995   l('        END IF;');
9996   l('      END IF;');
9997   l('      IF p_ins_details = ''Y'' THEN');
9998   l('        h_ct_id(detcnt) := l_org_contact_id;');
9999   l('        h_ct_party_id(detcnt) := l_ct_party_id;');
10000   l('        h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
10001   l('        detcnt := detcnt +1;');
10002   l('      END IF;');
10003   ds(fnd_log.level_statement);
10004   dc(fnd_log.level_statement,'Contact Level Matches');
10005   dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
10006   dc(fnd_log.level_statement,'l_ct_party_id','l_ct_party_id');
10007   dc(fnd_log.level_statement,'l_score','l_score');
10008   de;
10009   l('    END LOOP;');
10010   l('    CLOSE l_contact_cur;');
10011   l('    ROLLBACK to eval_start;');
10012   -- l('    IF p_ins_details = ''Y'' THEN');
10013   -- l('      FORALL I in 1..h_ct_id.COUNT ');
10014   -- l('        INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
10015   -- l('          l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
10016   -- l('    END IF;');
10017   l('  END;');
10018   l('');
10019   l('  /**  Private procedure to acquire and score at contact point level  ***/');
10020   l('  PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10021   l('    l_party_id_idx NUMBER:=1;');
10022   l('    l_ctx_id NUMBER;');
10023   -- l('    h_cpt_id HZ_PARTY_SEARCH.IDList;');
10024   -- l('    h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
10025   -- l('    h_cpt_score HZ_PARTY_SEARCH.IDList;');
10026   -- l('    detcnt NUMBER := 1;');
10027   l('  BEGIN');
10028   l('    SAVEPOINT eval_start;');
10029   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10030   l('      l_ctx_id := l_search_ctx_id;');
10031   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10032   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10033   l('             l_search_ctx_id,H_PARTY_ID(I));');
10034   l('      H_PARTY_ID.DELETE;');
10035   l('      H_PARTY_ID_LIST.DELETE;');
10036   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10037   l('      l_ctx_id := l_search_ctx_id;');
10038   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10039   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10040   l('             l_search_ctx_id,H_PARTY_ID(I));');
10041   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10042   l('    ELSE');
10043   l('      l_ctx_id := NULL;');
10044   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10045   l('    END IF;');
10046   l('    open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, l_contact_pt_cur);');
10047   l('    LOOP ');
10048   l('      FETCH l_contact_pt_cur INTO');
10049   l('         l_contact_pt_id, l_cpt_party_id,  l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
10050   l('      EXIT WHEN l_contact_pt_cur%NOTFOUND;');
10051   l('      IF l_use_contact_cpt_info OR l_ps_contact_id IS NOT NULL THEN');
10052   l('        l_index := map_id(l_cpt_party_id);');
10053   l('        l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
10054 
10055   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
10056   l('          H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);');
10057   l('        ELSE');
10058   l('          IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
10059   l('            H_SCORES(l_index).TOTAL_SCORE := ');
10060   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
10061   l('            H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
10062   l('          END IF;');
10063   l('        END IF;');
10064   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
10065   l('          H_PARTY_ID_LIST(l_index) := 1;');
10066   l('          H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;');
10067   l('          l_party_id_idx:= l_party_id_idx+1;');
10068   l('        END IF;');
10069   l('        IF l_party_id_idx>l_max_thresh THEN');
10070   l('        CLOSE l_contact_pt_cur;'); --Bug No: 3872745
10071   l('          IF p_index>1 THEN');
10072   ldbg_s('In eval contact point level number of matches found exceeded threshold');
10073   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10074   l('            FND_MSG_PUB.ADD;');
10075   l('            RAISE FND_API.G_EXC_ERROR;');
10076   l('          ELSE');
10077   l('            push_eval;');
10078   l('            RETURN;');
10079   l('          END IF;');
10080   l('        END IF;');
10081   l('        IF p_ins_details = ''Y'' THEN');
10082   l('          h_cpt_id(detcnt) := l_contact_pt_id;');
10083   l('          h_cpt_party_id(detcnt) := l_cpt_party_id;');
10084   l('          h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
10085   l('          detcnt := detcnt +1;');
10086   l('        END IF;');
10087   ds(fnd_log.level_statement);
10088   dc(fnd_log.level_statement,'Contact pt Level Matches');
10089   dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
10090   dc(fnd_log.level_statement,'l_cpt_party_id','l_cpt_party_id');
10091   dc(fnd_log.level_statement,'l_score','l_score');
10092   de;
10093   l('      END IF;');
10094   l('    END LOOP;');
10095   l('    CLOSE l_contact_pt_cur;');
10096   l('    ROLLBACK to eval_start;');
10097   -- l('    IF p_ins_details = ''Y'' THEN');
10098   -- l('      FORALL I in 1..h_cpt_id.COUNT ');
10099   -- l('        INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
10100   -- l('          l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
10101   -- l('    END IF;');
10102   l('  END;');
10103   l('');
10104   l('  /**  Private procedure to call the eval procedure at each entity in the correct order ***/');
10105   l('  PROCEDURE do_eval (p_index NUMBER) IS');
10106   l('    l_ctx_id NUMBER;');
10107   l('    l_threshold NUMBER;'); --Bug No: 4407425
10108   l('    other_criteria_exists BOOLEAN; '); --Bug No: 4407425
10109   l('  BEGIN');
10110   --Start of Bug No: 4407425
10111   l('    IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
10112   l('     l_threshold := '|| l_match_threshold ||';  ');
10113   l('     other_criteria_exists := TRUE ;');
10114   l('     IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
10115   l('      other_criteria_exists := FALSE; ');
10116   l('     END IF ; ');
10117   l('    IF( (l_match_str = '' AND '' AND other_criteria_exists) OR ( call_max_score(p_index) < l_threshold) )THEN');
10118   l('	     RETURN;	');
10119   l('	  ELSE');
10120   ldbg_s('In do eval number of matches found exceeded threshold');
10121   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10122   l('      FND_MSG_PUB.ADD;');
10123   l('      RAISE FND_API.G_EXC_ERROR;');
10124   l('     END IF; ');
10125   l('    END IF;');
10126   --End of Bug No: 4407425
10127   /*l('    IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
10128   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10129   l('      FND_MSG_PUB.ADD;');
10130   l('      RAISE FND_API.G_EXC_ERROR;');
10131   l('    END IF;');
10132   */
10133   l('    IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
10134   l('      eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
10135   l('    ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
10136   l('      eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10137   l('    ELSIF call_order(p_index) = ''CONTACT'' AND l_contact_contains_str IS NOT NULL THEN');
10138   l('      eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10139   l('    ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
10140   l('      eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10141   l('    END IF;');
10142   l('  END;');
10143   l('  /************ End of find_parties private procedures **********/ ');
10144   l('');
10145   l('  BEGIN');
10146   l('');
10147 
10148 
10149   d(fnd_log.level_procedure,'find_parties(+)');
10150   ds(fnd_log.level_statement);
10151   dc(fnd_log.level_statement,'Input Parameters:');
10152   dc(fnd_log.level_statement,'p_match_type','p_match_type');
10153   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
10154   dc(fnd_log.level_statement,'p_dup_set_id','p_dup_set_id');
10155   dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
10156   dc(fnd_log.level_statement,'p_dup_party_id','p_dup_party_id');
10157   de;
10158 
10159   l('    -- ************************************');
10160   l('    -- STEP 1. Initialization and error checks');
10161   l('');
10162 
10163   l('    l_match_str := ''' || l_match_str || ''';');
10164   l('    IF p_match_type = ''AND'' THEN');
10165   l('      l_match_str := '' AND '';');
10166   l('    ELSIF p_match_type = ''OR'' THEN');
10167   l('      l_match_str := '' OR '';');
10168   l('    END IF;');
10169   l('    SAVEPOINT find_parties;');
10170   l('    l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
10171   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
10172   l('');
10173   IF l_purpose = 'D' THEN
10174   l('');
10175     l('    IF l_entered_max_score < '||l_match_threshold||' THEN');
10176     l('      x_num_matches:=0;');
10177     l('      x_search_ctx_id:=0;');
10178     l('      RETURN;');
10179     l('    END IF;');
10180   l('');
10181   END IF;
10182   l('');
10183   l('    --Fix for bug 4417124 ');
10184   l('');
10185   l('    SELECT use_contact_addr_flag, use_contact_cpt_flag ');
10186   l('    INTO l_use_contact_addr_flag, l_use_contact_cpt_flag ');
10187   l('    FROM hz_match_rules_b ');
10188   l('    WHERE match_rule_id = '||p_rule_id||'; ');
10189   l('');
10190   l('    IF p_dup_batch_id IS NOT NULL AND NVL(l_use_contact_addr_flag, ''Y'') = ''N'' THEN');
10191   l('      l_use_contact_addr_info := FALSE; ');
10192   l('    END IF; ');
10193   l('');
10194   l('    IF p_dup_batch_id IS NOT NULL AND NVL(l_use_contact_cpt_flag, ''Y'') = ''N'' THEN');
10195   l('      l_use_contact_cpt_info := FALSE; ');
10196   l('    END IF; ');
10197   l('');
10198   l('   --End fix for bug 4417124');
10199   l('');
10200   l('    l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
10201   l('    IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
10202   l('      g_score_until_thresh := true;');
10203   l('    ELSE');
10204   l('      g_score_until_thresh := false;');
10205   l('    END IF;');
10206 
10207   l('    l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
10208   l('    l_contact_contains_str := check_contacts_bulk (p_contact_list);');
10209   l('    l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
10210   /*
10211   l('    l_denorm_max_score:=0;');
10212   l('    l_non_denorm_max_score:=0;');
10213   l('    IF l_ps_denorm_str IS NOT NULL THEN');
10214   l('      l_denorm_max_score := l_denorm_max_score+l_ps_max_score;');
10215   l('      l_denorm_str := l_ps_denorm_str;');
10216   l('    ELSE');
10217   l('      l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;');
10218   l('    END IF;');
10219 
10220   l('    IF l_ct_denorm_str IS NOT NULL THEN');
10221   l('      l_denorm_max_score := l_denorm_max_score+l_contact_max_score;');
10222   l('      IF l_denorm_str IS NOT NULL THEN');
10223   l('        l_denorm_str := l_denorm_str || '' OR '' ||l_ct_denorm_str;');
10224   l('      ELSE');
10225   l('        l_denorm_str := l_ct_denorm_str;');
10226   l('      END IF;');
10227   l('    ELSE');
10228   l('      l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;');
10229   l('    END IF;');
10230 
10231   l('    IF l_cpt_denorm_str IS NOT NULL THEN');
10232   l('      l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;');
10233   l('      IF l_denorm_str IS NOT NULL THEN');
10234   l('        l_denorm_str := l_denorm_str || '' OR '' ||l_cpt_denorm_str;');
10235   l('      ELSE');
10236   l('        l_denorm_str := l_cpt_denorm_str;');
10237   l('      END IF;');
10238   l('    ELSE');
10239   l('      l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;');
10240   l('    END IF;');
10241   */
10242   l('    l_party_contains_str := check_parties_bulk (p_party_search_rec) ;');
10243   l('    init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
10244   l('');
10245   l('    -- Setup Search Context ID');
10246   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
10247   l('    x_search_ctx_id := l_search_ctx_id;');
10248   l('');
10249 
10250   l('    IF l_party_contains_str IS NULL THEN');
10251   l('      defpt := 1;');
10252   l('    END IF;');
10253   l('    IF l_party_site_contains_str IS NULL THEN');
10254   l('      defps := 1;');
10255   l('    END IF;');
10256   l('    IF l_contact_contains_str IS NULL THEN');
10257   l('      defct := 1;');
10258   l('    END IF;');
10259   l('    IF l_contact_pt_contains_str IS NULL THEN');
10260   l('      defcpt := 1;');
10261   l('    END IF;');
10262   l('');
10263 
10264   ds(fnd_log.level_statement);
10265   dc(fnd_log.level_statement,'l_match_str','l_match_str');
10266   dc(fnd_log.level_statement,'l_party_contains_str','l_party_contains_str');
10267   dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
10268   dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
10269   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
10270   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
10271   de;
10272 
10273   IF l_max_score=1 THEN
10274     l('    FOR I in 1..3 LOOP');
10275     l('      IF (call_order(I) = ''PARTY'' AND l_party_contains_str IS NULL)');
10276     l('         OR (call_order(I) = ''PARTY_SITE'' AND l_party_site_contains_str IS NULL)');
10277     l('         OR (call_order(I) = ''CONTACT'' AND l_contact_contains_str IS NULL)');
10278     l('         OR (call_order(I) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NULL) THEN');
10279     l('        IF call_type(I)=''OR'' THEN');
10280     l('          call_type(I+1):=''OR'';');
10281     l('        END IF;');
10282     l('      END IF;');
10283     l('    END LOOP;');
10284   END IF;
10285 
10286   /**** Call all 4 evaluation procedures ***********/
10287   l('    FOR I in 1..5 LOOP');
10288   l('      do_eval(I);');
10289   l('    END LOOP;');
10290   l('ROLLBACK to find_parties;');
10291   IF l_purpose = 'S' THEN
10292     d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
10293   ELSE
10294     d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||l_match_threshold);
10295   END IF;
10296 
10297   l('    x_num_matches := 0;');
10298   l('    l_num_eval := 0;');
10299   l('    IF l_match_str = '' OR '' THEN');
10300   l('      l_party_id := H_SCORES.FIRST;');
10301   l('    ELSE');
10302   l('      l_party_id := H_PARTY_ID_LIST.FIRST;');
10303   l('    END IF;');
10304 
10305   l('    WHILE l_party_id IS NOT NULL LOOP');
10306   l('      l_num_eval:= l_num_eval+1;');
10307   ds(fnd_log.level_statement);
10308   dc(fnd_log.level_statement,'Match Party ID','H_SCORES(l_party_id).PARTY_ID');
10309   IF l_purpose = 'S' THEN
10310     dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
10311   ELSE
10312     dc(fnd_log.level_statement,'Score','H_SCORES(l_party_id).TOTAL_SCORE');
10313   END IF;
10314   de;
10315   IF l_purpose = 'S' THEN
10316     l('      IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
10317     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
10318     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100));');
10319     l('            x_num_matches := x_num_matches+1;');
10320   ELSE
10321     l('      IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
10322     l('          IF p_dup_set_id IS NULL THEN');
10323     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
10324     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);');
10325     l('             x_num_matches := x_num_matches+1;');
10326     l('          ELSE');
10327     l('            BEGIN');
10328     l('              SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES'); --Bug No: 4244529
10329     l('              WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID');
10330     l('              AND DUP_SET_BATCH_ID = p_dup_batch_id '); --Bug No: 4244529
10331     l('              AND ROWNUM=1;');
10332     l('            EXCEPTION ');
10333     l('              WHEN NO_DATA_FOUND THEN');
10334     l('                IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_auto_merge_score||' THEN');
10335     l('                  l_merge_flag := ''Y'';');
10336     l('                ELSE');
10337     l('                  l_merge_flag := ''N'';');
10338     l('                END IF;');
10339     l('                INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
10340     l('                    MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
10341     l('                    LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
10342     l('                VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,');
10343     l('                    H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,');
10344     l('                    hz_utility_pub.created_by,hz_utility_pub.creation_date,');
10345     l('                    hz_utility_pub.last_update_login,');
10346     l('                    hz_utility_pub.last_update_date,');
10347     l('                    hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
10348     l('                x_num_matches := x_num_matches+1;');
10349     l('            END;');
10350     l('          END IF;');
10351   END IF;
10352   l('      END IF;');
10353   l('      IF l_match_str = '' OR '' THEN');
10354   l('        l_party_id:=H_SCORES.NEXT(l_party_id);');
10355   l('      ELSE');
10356   l('        l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
10357   l('      END IF;');
10358   l('    END LOOP;');
10359   l('');
10360     l('----------INSERT INTO HZ_MATCHED_PARTY_SITES -----');
10361     l('    IF p_ins_details = ''Y'' THEN');
10362     l('      FORALL I in 1..h_ps_id.COUNT ');
10363     l('        INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
10364     l('          l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
10365     l('    END IF;');
10366     l('----------INSERT INTO HZ_MATCHED_CONTACTS-----');
10367     l('    IF p_ins_details = ''Y'' THEN');
10368     l('      FORALL I in 1..h_ct_id.COUNT ');
10369     l('        INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
10370     l('          l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
10371     l('    END IF;');
10372     l('----------INSERT INTO HZ_MATCHED_CPTS-----');
10373     l('    IF p_ins_details = ''Y'' THEN');
10374     l('      FORALL I in 1..h_cpt_id.COUNT ');
10375     l('        INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
10376     l('          l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
10377     l('    END IF;');
10378   l('');
10379   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
10380   d(fnd_log.level_procedure,'find_parties(-)');
10381 
10382 
10383   l('EXCEPTION');
10384   l('  WHEN FND_API.G_EXC_ERROR THEN');
10385   l('    ROLLBACK to find_parties;');
10386   l('    RAISE FND_API.G_EXC_ERROR;');
10387   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
10388   l('    ROLLBACK to find_parties;');
10389   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
10390   l('  WHEN OTHERS THEN');
10391   l('    ROLLBACK to find_parties;');
10392   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
10393   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_parties'');');
10394   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
10395   l('    FND_MSG_PUB.ADD;');
10396   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
10397   l('END find_parties;');
10398   l('');
10399 
10400   l('-------------------------------------------------------------------------------------');
10401   l('--------------------  BULK MATCH RULE ::: find_persons ------------------------------');
10402   l('-------------------------------------------------------------------------------------');
10403 
10404   l('PROCEDURE find_persons (');
10405   l('      p_rule_id               IN      NUMBER,');
10406   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
10407   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
10408   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
10409   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
10410   l('      p_restrict_sql          IN      VARCHAR2,');
10411   l('      p_match_type            IN      VARCHAR2,');
10412   l('      p_search_merged         IN      VARCHAR2,');
10413   l('      p_ins_details           IN      VARCHAR2,');
10414   l('      x_search_ctx_id         OUT     NUMBER,');
10415   l('      x_num_matches           OUT     NUMBER');
10416   l(') IS');
10417   l('');
10418   IF l_purpose <> 'D' THEN
10419   l('  -- Strings to hold the generated Intermedia query strings');
10420   l('  l_party_contains_str VARCHAR2(32000); ');
10421   l('  l_party_site_contains_str VARCHAR2(32000);');
10422   l('  l_contact_contains_str VARCHAR2(32000);');
10423   l('  l_contact_pt_contains_str VARCHAR2(32000);');
10424   l('  l_denorm_str VARCHAR2(32000);');
10425   l('  l_ps_denorm_str VARCHAR2(32000);');
10426   l('  l_ct_denorm_str VARCHAR2(32000);');
10427   l('  l_cpt_denorm_str VARCHAR2(32000);');
10428 
10429   l('');
10430   l('  -- Other local variables');
10431   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
10432   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
10433   l('  -- For Score calculation');
10434   l('  l_max_score NUMBER;');
10435   l('  l_match_idx NUMBER;');
10436   l('  l_entered_max_score NUMBER;');
10437   l('  FIRST BOOLEAN;');
10438   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
10439   l('');
10440   FOR TX IN (
10441       SELECT distinct f.staged_attribute_column
10442       FROM hz_trans_functions_vl f, hz_secondary_trans st,
10443            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
10444       WHERE sa.match_rule_id = p_rule_id
10445       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
10446       AND st.function_id = f.function_id
10447       AND a.attribute_id = sa.attribute_id) LOOP
10448     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
10449   END LOOP;
10450   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
10451   l('  H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
10452   l('  H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
10453   l('');
10454   l('  l_score NUMBER;');
10455   l('  l_idx NUMBER;');
10456   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
10457   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
10458   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
10459   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
10460   l('  l_party_id NUMBER;');
10461   l('  l_ps_party_id NUMBER;');
10462   l('  l_ct_party_id NUMBER;');
10463   l('  l_cpt_party_id NUMBER;');
10464   l('  l_cpt_ps_id NUMBER;');
10465   l('  l_cpt_contact_id NUMBER;');
10466   l('  l_party_site_id NUMBER;');
10467   l('  l_org_contact_id NUMBER;');
10468   l('  l_contact_pt_id NUMBER;');
10469   l('  l_ps_contact_id NUMBER;');
10470   l('  l_party_max_score NUMBER;');
10471   l('  l_ps_max_score NUMBER;');
10472   l('  l_contact_max_score NUMBER;');
10473   l('  l_cpt_max_score NUMBER;');
10474   l('  l_denorm_max_score NUMBER;');
10475   l('  l_non_denorm_max_score NUMBER;');
10476   l('');
10477   l('  defpt NUMBER :=0;');
10478   l('  defps NUMBER :=0;');
10479   l('  defct NUMBER :=0;');
10480   l('  defcpt NUMBER :=0;');
10481   l('  l_index NUMBER;');
10482   l('  l_max_thresh NUMBER;');
10483   l('  l_tmp NUMBER;');
10484   l('  l_merge_flag VARCHAR2(1);');
10485   l('  l_num_eval NUMBER:=0;');
10486   l('');
10487   l('    h_ps_id HZ_PARTY_SEARCH.IDList;');
10488   l('    h_ps_party_id HZ_PARTY_SEARCH.IDList;');
10489   l('    h_ps_score HZ_PARTY_SEARCH.IDList;');
10490   l('    h_ct_id HZ_PARTY_SEARCH.IDList;');
10491   l('    h_ct_party_id HZ_PARTY_SEARCH.IDList;');
10492   l('    h_ct_score HZ_PARTY_SEARCH.IDList;');
10493   l('    h_cpt_id HZ_PARTY_SEARCH.IDList;');
10494   l('    h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
10495   l('    h_cpt_score HZ_PARTY_SEARCH.IDList;');
10496   l('    detcnt NUMBER := 1;');
10497   l('    l_person_id NUMBER;');
10498 
10499   l('  ');
10500   l('  /********************* Find Parties private procedures *******/');
10501   FOR TX IN (
10502     SELECT a.attribute_name,
10503                f.PROCEDURE_NAME,
10504                f.STAGED_ATTRIBUTE_COLUMN
10505         FROM HZ_TRANS_FUNCTIONS_VL f,
10506             HZ_TRANS_ATTRIBUTES_VL a
10507         WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10508         AND a.entity_name = 'PARTY'
10509         AND a.attribute_name='PARTY_TYPE'
10510         AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
10511         AND nvl(f.active_flag,'Y')='Y'
10512         AND ROWNUM=1
10513   ) LOOP
10514     l('  PROCEDURE set_person_party_type IS');
10515     l('  BEGIN');
10516     l('    g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||':= ');
10517     l('        HZ_TRANS_PKG.EXACT(');
10518     l('             ''PERSON''');
10519     l('             ,null,''PARTY_TYPE''');
10520     l('             ,''PARTY'');');
10521     l('  END;');
10522     l('    ');
10523     l('  PROCEDURE unset_person_party_type IS');
10524     l('  BEGIN');
10525     l('    g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||' := '''';');
10526     l('  END;');
10527   END LOOP;
10528   l('  ');
10529   l('  FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) ');
10530   l('  RETURN NUMBER IS');
10531   l('    l_party_type VARCHAR2(255);');
10532   l('    l_person_id NUMBER(15);');
10533   l('  BEGIN');
10534   l('    SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;');
10535   l('    IF l_party_type = ''PERSON'' THEN');
10536   l('      RETURN p_party_id;');
10537   l('    ELSIF p_contact_id IS NULL THEN');
10538   l('      RETURN NULL;');
10539   l('    ELSE');
10540   l('      BEGIN ');
10541   l('        SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p');
10542   l('        WHERE oc.org_contact_id = p_contact_id');
10543   l('        AND r.relationship_id = oc.party_relationship_id ');
10544   l('        AND r.object_id = p_party_id');
10545   l('        AND p.party_id = r.subject_id ');
10546   l('        AND p.party_type = ''PERSON''');
10547   l('        AND ROWNUM=1;');
10548   l('        ');
10549   l('        RETURN l_person_id;');
10550   l('      EXCEPTION');
10551   l('        WHEN NO_DATA_FOUND THEN');
10552   l('          RETURN NULL;');
10553   l('      END;      ');
10554   l('    END IF;');
10555   l('  END;  ');
10556   l('');
10557   l('  PROCEDURE push_eval IS');
10558   l('  BEGIN');
10559   l('    H_PARTY_ID.DELETE;');
10560   l('    H_PARTY_ID_LIST.DELETE;');
10561   l('    H_SCORES.DELETE;        ');
10562   l('    g_mappings.DELETE;');
10563   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
10564   l('    call_order(5) := call_order(1);');
10565   l('    call_type(5) := ''AND'';');
10566   l('    call_max_score(5) := call_max_score(1);');
10567   l('    call_type(2) := ''OR'';');
10568   l('  END;');
10569   l('');
10570   l('  /**  Private procedure to acquire and score at party level  ***/');
10571   l('  PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
10572   l('    l_party_id_idx NUMBER:=1;');
10573   l('    l_ctx_id NUMBER;');
10574   l('  BEGIN');
10575   l('    SAVEPOINT eval_start;');
10576   l('    set_person_party_type;');
10577   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10578   l('      l_ctx_id := l_search_ctx_id;');
10579   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10580   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10581   l('             l_search_ctx_id,H_PARTY_ID(I));');
10582   l('      H_PARTY_ID.DELETE;');
10583   l('      H_PARTY_ID_LIST.DELETE;');
10584   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10585   l('      l_ctx_id := l_search_ctx_id;');
10586   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10587   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10588   l('             l_search_ctx_id,H_PARTY_ID(I));');
10589   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10590   l('    ELSE');
10591   l('      l_ctx_id := NULL;');
10592   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10593   l('    END IF;');
10594   l('    open_party_cursor(null, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,null,l_party_cur);');
10595   l('    LOOP ');
10596   l('      FETCH l_party_cur INTO');
10597   l('         l_party_id '||l_p_into_list||';');
10598   l('      EXIT WHEN l_party_cur%NOTFOUND;');
10599   l('      l_index := map_id(l_party_id);');
10600   l('      l_score := GET_PARTY_SCORE('||l_p_param_list||');');
10601 
10602   l('      IF NOT H_SCORES.EXISTS(l_index) THEN');
10603   l('        H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
10604   l('      ELSE');
10605   l('        H_SCORES(l_index).TOTAL_SCORE := ');
10606   l('                H_SCORES(l_index).TOTAL_SCORE+l_score;');
10607   l('        H_SCORES(l_index).PARTY_SCORE := l_score;');
10608   l('      END IF;');
10609   l('      IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
10610   l('        H_PARTY_ID_LIST(l_index) := 1;');
10611   l('        H_PARTY_ID(l_party_id_idx) := l_party_id;');
10612   l('        l_party_id_idx:= l_party_id_idx+1;');
10613   l('      END IF;');
10614   l('      IF l_party_id_idx>l_max_thresh THEN');
10615   l('        CLOSE l_party_cur;'); --Bug No: 3872745
10616   l('        IF p_index>1 THEN');
10617   ldbg_s('In eval party level number of matches found exceeded threshold');
10618   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10619   l('          FND_MSG_PUB.ADD;');
10620   l('          RAISE FND_API.G_EXC_ERROR;');
10621   l('        ELSE');
10622   l('          push_eval;');
10623   l('          RETURN;');
10624   l('        END IF;');
10625   l('      END IF;');
10626   ds(fnd_log.level_statement);
10627   dc(fnd_log.level_statement,'Party Level Matches');
10628   dc(fnd_log.level_statement,'l_party_id','l_party_id');
10629   dc(fnd_log.level_statement,'l_score','l_score');
10630   de;
10631   l('    END LOOP;');
10632   l('    CLOSE l_party_cur;');
10633   l('    ROLLBACK to eval_start;');
10634   l('  END;');
10635   l('  PROCEDURE open_person_contact_cursor(');
10636   l('            p_contains_str  VARCHAR2, ');
10637   l('            p_search_ctx_id  NUMBER, ');
10638   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
10639   l('  BEGIN');
10640   l('    OPEN x_cursor FOR ');
10641   l('      SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
10642   l('      FROM HZ_STAGED_CONTACTS stage');
10643   l('      WHERE contains( concat_col, p_contains_str)>0');
10644   l('      AND ORG_CONTACT_ID in (');
10645   l('            SELECT  /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ ');
10646   l('            org_contact_id');
10647   l('            from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc');
10648   l('            where d.party_id = r.subject_id');
10649   l('            and oc.party_relationship_id = r.relationship_id');
10650   l('            and d.search_context_id = p_search_ctx_id);   ');
10651 --bug 4959719 start
10652   l('  exception');
10653   l('    when others then');
10654   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
10655   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
10656   l('        FND_MSG_PUB.ADD;');
10657   l('        RAISE FND_API.G_EXC_ERROR;');
10658    --Start Bug No: 3032742.
10659   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
10660   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
10661   l('        FND_MSG_PUB.ADD;');
10662   l('        RAISE FND_API.G_EXC_ERROR;');
10663   --End Bug No : 3032742.
10664   l('      else ');
10665   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
10666   l('      end if;');
10667 --bug 4959719 end
10668   l('  END;');
10669 
10670   l('');
10671   l('  /**  Private procedure to acquire and score at party site level  ***/');
10672   l('  PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10673   l('    l_party_id_idx NUMBER:=1;');
10674   l('    l_ctx_id NUMBER;');
10675  -- l('    h_ps_id HZ_PARTY_SEARCH.IDList;');
10676  -- l('    h_ps_party_id HZ_PARTY_SEARCH.IDList;');
10677  -- l('    h_ps_score HZ_PARTY_SEARCH.IDList;');
10678  -- l('    detcnt NUMBER := 1;');
10679   l('    l_person_id NUMBER;');
10680   l('  BEGIN');
10681   l('    SAVEPOINT eval_start;');
10682   l('    unset_person_party_type;');
10683   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10684   l('      l_ctx_id := l_search_ctx_id;');
10685   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10686   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10687   l('             l_search_ctx_id,H_PARTY_ID(I));');
10688   l('      INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10689   l('      SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10690   l('                               HZ_RELATIONSHIPS r');
10691   l('      WHERE oc.party_relationship_id = r.relationship_id');
10692   l('      AND r.object_id = d.party_id');
10693   l('      AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10694   l('      H_PARTY_ID.DELETE;');
10695   l('      H_PARTY_ID_LIST.DELETE;');
10696   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10697   l('      l_ctx_id := l_search_ctx_id;');
10698   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10699   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10700   l('             l_search_ctx_id,H_PARTY_ID(I));');
10701   l('      INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10702   l('      SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10703   l('                               HZ_RELATIONSHIPS r');
10704   l('      WHERE oc.party_relationship_id = r.relationship_id');
10705   l('      AND r.object_id = d.party_id');
10706   l('      AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10707   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10708   l('    ELSE');
10709   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10710   l('      l_ctx_id := NULL;');
10711   l('    END IF;');
10712   l('    open_party_site_cursor(null,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, l_party_site_cur);');
10713   l('    LOOP ');
10714   l('      FETCH l_party_site_cur INTO');
10715   l('         l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
10716   l('      EXIT WHEN l_party_site_cur%NOTFOUND;');
10717   l('      l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);');
10718   l('      IF l_person_id IS NOT NULL THEN');
10719   l('        l_index := map_id(l_person_id);');
10720   l('        l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
10721 
10722   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
10723   l('          IF l_ctx_id IS NULL THEN');
10724   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);');
10725   l('          END IF;');
10726   l('        ELSE');
10727   l('          IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
10728   l('            H_SCORES(l_index).TOTAL_SCORE := ');
10729   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
10730   l('            H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
10731   l('          END IF;');
10732   l('        END IF;');
10733   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
10734   l('          H_PARTY_ID_LIST(l_index) := 1;');
10735   l('          H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
10736   l('          l_party_id_idx:= l_party_id_idx+1;');
10737   l('        END IF;');
10738   l('        IF l_party_id_idx>l_max_thresh THEN');
10739   l('        CLOSE l_party_site_cur;'); --Bug No: 3872745
10740   l('          IF p_index>1 THEN');
10741   ldbg_s('In eval party site level number of matches found exceeded threshold');
10742   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10743   l('            FND_MSG_PUB.ADD;');
10744   l('            RAISE FND_API.G_EXC_ERROR;');
10745   l('          ELSE');
10746   l('            push_eval;');
10747   l('            RETURN;');
10748   l('          END IF;');
10749   l('        END IF;');
10750   l('        IF p_ins_details = ''Y'' THEN');
10751   l('          h_ps_id(detcnt) := l_party_site_id;');
10752   l('          h_ps_party_id(detcnt) := l_person_id;');
10753   l('          h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
10754   l('          detcnt := detcnt +1;');
10755   l('        END IF;');
10756   ds(fnd_log.level_statement);
10757   dc(fnd_log.level_statement,'Party Site Level Matches');
10758   dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
10759   dc(fnd_log.level_statement,'l_ps_party_id','l_person_id');
10760   dc(fnd_log.level_statement,'l_score','l_score');
10761   de;
10762   l('      END IF;');
10763   l('    END LOOP;');
10764   l('    CLOSE l_party_site_cur;');
10765   l('    ROLLBACK to eval_start;');
10766   --l('    IF p_ins_details = ''Y'' THEN');
10767   --l('      FORALL I in 1..h_ps_id.COUNT ');
10768   --l('        INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
10769   --l('          l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
10770   --l('    END IF;');
10771   l('  END;');
10772   l('');
10773   l('  /**  Private procedure to acquire and score at party site level  ***/');
10774   l('  PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10775   l('    l_party_id_idx NUMBER:=1;');
10776   l('    l_ctx_id NUMBER;');
10777   -- l('    h_ct_id HZ_PARTY_SEARCH.IDList;');
10778   -- l('    h_ct_party_id HZ_PARTY_SEARCH.IDList;');
10779   -- l('    h_ct_score HZ_PARTY_SEARCH.IDList;');
10780   -- l('    detcnt NUMBER := 1;');
10781   -- l('    l_person_id NUMBER;');
10782   l('  BEGIN');
10783   l('    SAVEPOINT eval_start;');
10784   l('    l_ctx_id := l_search_ctx_id;');
10785   l('    unset_person_party_type;');
10786   l('    FORALL I in 1..H_PARTY_ID.COUNT ');
10787   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10788   l('             l_search_ctx_id,H_PARTY_ID(I));');
10789   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10790   l('    open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);');
10791   l('    LOOP ');
10792   l('      FETCH l_contact_cur INTO');
10793   l('         l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
10794   l('      EXIT WHEN l_contact_cur%NOTFOUND;');
10795   l('      l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);');
10796   l('      l_index := map_id(l_person_id);');
10797   l('      IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) THEN');
10798   l('        l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
10799   l('        IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
10800   l('          H_SCORES(l_index).TOTAL_SCORE := ');
10801   l('                H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
10802   l('          H_SCORES(l_index).CONTACT_SCORE := l_score;');
10803   l('        END IF;');
10804   l('      END IF;');
10805   l('      IF p_ins_details = ''Y'' THEN');
10806   l('        h_ct_id(detcnt) := l_org_contact_id;');
10807   l('        h_ct_party_id(detcnt) := l_person_id;');
10808   l('        h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
10809   l('        detcnt := detcnt +1;');
10810   l('      END IF;');
10811   ds(fnd_log.level_statement);
10812   dc(fnd_log.level_statement,'Contact Level Matches');
10813   dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
10814   dc(fnd_log.level_statement,'l_ct_party_id','l_person_id');
10815   dc(fnd_log.level_statement,'l_score','l_score');
10816   de;
10817   l('    END LOOP;');
10818   l('    CLOSE l_contact_cur;');
10819   l('    ROLLBACK to eval_start;');
10820   -- l('    IF p_ins_details = ''Y'' THEN');
10821   -- l('      FORALL I in 1..h_ct_id.COUNT ');
10822   -- l('        INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
10823   -- l('          l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
10824   -- l('    END IF;');
10825   l('  END;');
10826   l('');
10827   l('  /**  Private procedure to acquire and score at contact point level  ***/');
10828   l('  PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10829   l('    l_party_id_idx NUMBER:=1;');
10830   l('    l_ctx_id NUMBER;');
10831 --  l('    h_cpt_id HZ_PARTY_SEARCH.IDList;');
10832 --  l('    h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
10833 --  l('    h_cpt_score HZ_PARTY_SEARCH.IDList;');
10834 --  l('    detcnt NUMBER := 1;');
10835 --  l('    l_person_id NUMBER;');
10836   l('  BEGIN');
10837   l('    SAVEPOINT eval_start;');
10838   l('    unset_person_party_type;');
10839   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10840   l('      l_ctx_id := l_search_ctx_id;');
10841   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10842   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10843   l('             l_search_ctx_id,H_PARTY_ID(I));');
10844   l('      INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10845   l('      SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10846   l('                               HZ_RELATIONSHIPS r');
10847   l('      WHERE oc.party_relationship_id = r.relationship_id');
10848   l('      AND r.object_id = d.party_id');
10849   l('      AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10850   l('      H_PARTY_ID.DELETE;');
10851   l('      H_PARTY_ID_LIST.DELETE;');
10852   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10853   l('      l_ctx_id := l_search_ctx_id;');
10854   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10855   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10856   l('             l_search_ctx_id,H_PARTY_ID(I));');
10857   l('      INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10858   l('      SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10859   l('                               HZ_RELATIONSHIPS r');
10860   l('      WHERE oc.party_relationship_id = r.relationship_id');
10861   l('      AND r.object_id = d.party_id');
10862   l('      AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10863   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10864   l('    ELSE');
10865   l('      l_ctx_id := NULL;');
10866   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10867   l('    END IF;');
10868   l('    open_contact_pt_cursor(null,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, l_contact_pt_cur);');
10869   l('    LOOP ');
10870   l('      FETCH l_contact_pt_cur INTO');
10871   l('         l_contact_pt_id, l_cpt_party_id,  l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
10872   l('      EXIT WHEN l_contact_pt_cur%NOTFOUND;');
10873   l('      l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);');
10874   l('      IF l_person_id IS NOT NULL THEN');
10875   l('        l_index := map_id(l_person_id);');
10876   l('        l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
10877 
10878   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
10879   l('          IF l_ctx_id IS NULL THEN');
10880   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_person_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);');
10881   l('          END IF;');
10882   l('        ELSE');
10883   l('          IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
10884   l('            H_SCORES(l_index).TOTAL_SCORE := ');
10885   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
10886   l('            H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
10887   l('          END IF;');
10888   l('        END IF;');
10889   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
10890   l('          H_PARTY_ID_LIST(l_index) := 1;');
10891   l('          H_PARTY_ID(l_party_id_idx) := l_person_id;');
10892   l('          l_party_id_idx:= l_party_id_idx+1;');
10893   l('        END IF;');
10894   l('        IF l_party_id_idx>l_max_thresh THEN');
10895   l('        CLOSE l_contact_pt_cur;'); --Bug No: 3872745
10896   l('          IF p_index>1 THEN');
10897   ldbg_s('In eval contact point level number of matches found exceeded threshold');
10898   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10899   l('            FND_MSG_PUB.ADD;');
10900   l('            RAISE FND_API.G_EXC_ERROR;');
10901   l('          ELSE');
10902   l('            push_eval;');
10903   l('            RETURN;');
10904   l('          END IF;');
10905   l('        END IF;');
10906   l('        IF p_ins_details = ''Y'' THEN');
10907   l('          h_cpt_id(detcnt) := l_contact_pt_id;');
10908   l('          h_cpt_party_id(detcnt) := l_person_id;');
10909   l('          h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
10910   l('          detcnt := detcnt +1;');
10911   l('        END IF;');
10912   ds(fnd_log.level_statement);
10913   dc(fnd_log.level_statement,'Contact pt Level Matches');
10914   dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
10915   dc(fnd_log.level_statement,'l_cpt_party_id','l_person_id');
10916   dc(fnd_log.level_statement,'l_score','l_score');
10917   de;
10918   l('      END IF;');
10919   l('    END LOOP;');
10920   l('    CLOSE l_contact_pt_cur;');
10921   l('    ROLLBACK to eval_start;');
10922   l('    IF p_ins_details = ''Y'' THEN');
10923   l('      FORALL I in 1..h_cpt_id.COUNT ');
10924   l('        INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
10925   l('          l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
10926   l('    END IF;');
10927   l('  END;');
10928   l('');
10929   l('  /**  Private procedure to call the eval procedure at each entity in the correct order ***/');
10930   l('  PROCEDURE do_eval (p_index NUMBER) IS');
10931   l('    l_ctx_id NUMBER;');
10932   l('    l_threshold NUMBER;'); --Bug No: 4407425
10933   l('    other_criteria_exists BOOLEAN; '); --Bug No: 4407425
10934   l('  BEGIN');
10935   --Start of Bug No: 4407425
10936   l('    IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
10937   l('     l_threshold := '|| l_match_threshold ||';  ');
10938   l('     other_criteria_exists := TRUE ;');
10939   l('     IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
10940   l('      other_criteria_exists := FALSE; ');
10941   l('     END IF ; ');
10942   l('    IF( (l_match_str = '' AND '' AND other_criteria_exists) OR ( call_max_score(p_index) < l_threshold) )THEN');
10943   l('	     RETURN;	');
10944   l('	  ELSE');
10945   ldbg_s('In do eval number of matches found exceeded threshold');
10946   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10947   l('      FND_MSG_PUB.ADD;');
10948   l('      RAISE FND_API.G_EXC_ERROR;');
10949   l('     END IF; ');
10950   l('    END IF;');
10951   --End of Bug No: 4407425
10952   /*
10953   l('    IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
10954   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10955   l('      FND_MSG_PUB.ADD;');
10956   l('      RAISE FND_API.G_EXC_ERROR;');
10957   l('    END IF;');
10958   */
10959   l('    IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
10960   l('      eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
10961   l('    ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
10962   l('      eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10963   l('    ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
10964   l('      eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10965   l('    END IF;');
10966   l('  END;');
10967   l('  /************ End of find_persons private procedures **********/ ');
10968   l('');
10969   l('  BEGIN');
10970   l('');
10971 
10972 
10973   d(fnd_log.level_procedure,'find_persons(+)');
10974   ds(fnd_log.level_statement);
10975   dc(fnd_log.level_statement,'Input Parameters:');
10976   dc(fnd_log.level_statement,'p_match_type','p_match_type');
10977   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
10978   de;
10979 
10980   l('    -- ************************************');
10981   l('    -- STEP 1. Initialization and error checks');
10982   l('');
10983 
10984   l('    l_match_str := ''' || l_match_str || ''';');
10985   l('    IF p_match_type = ''AND'' THEN');
10986   l('      l_match_str := '' AND '';');
10987   l('    ELSIF p_match_type = ''OR'' THEN');
10988   l('      l_match_str := '' OR '';');
10989   l('    END IF;');
10990   l('    SAVEPOINT find_persons;');
10991   l('    l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
10992   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
10993   l('');
10994   l('    l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
10995   l('    IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
10996   l('      g_score_until_thresh := true;');
10997   l('    ELSE');
10998   l('      g_score_until_thresh := false;');
10999   l('    END IF;');
11000 
11001   l('    l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
11002   l('    l_contact_contains_str := check_contacts_bulk (p_contact_list);');
11003   l('    l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
11004   l('    l_party_contains_str := check_parties_bulk (p_party_search_rec) ;');
11005 
11006   l('    init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
11007   l('');
11008   l('    -- Setup Search Context ID');
11009   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
11010   l('    x_search_ctx_id := l_search_ctx_id;');
11011   l('');
11012 
11013   l('    IF l_party_contains_str IS NULL THEN');
11014   l('      defpt := 1;');
11015   l('    END IF;');
11016   l('    IF l_party_site_contains_str IS NULL THEN');
11017   l('      defps := 1;');
11018   l('    END IF;');
11019   l('    IF l_contact_contains_str IS NULL THEN');
11020   l('      defct := 1;');
11021   l('    END IF;');
11022   l('    IF l_contact_pt_contains_str IS NULL THEN');
11023   l('      defcpt := 1;');
11024   l('    END IF;');
11025   l('');
11026 
11027   ds(fnd_log.level_statement);
11028   dc(fnd_log.level_statement,'l_match_str','l_match_str');
11029   dc(fnd_log.level_statement,'l_party_contains_str','l_party_contains_str');
11030   dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
11031   dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
11032   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
11033   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
11034   de;
11035 
11036   /**** Call all 4 evaluation procedures ***********/
11037   l('    FOR I in 1..5 LOOP');
11038   l('      do_eval(I);');
11039   l('    END LOOP;');
11040   l('    ROLLBACK to find_persons;');
11041   l('    IF l_contact_contains_str IS NOT NULL THEN');
11042   l('      eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);');
11043   l('    END IF;');
11044   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
11045 
11046   l('    x_num_matches := 0;');
11047   l('    l_num_eval := 0;');
11048   l('    IF l_match_str = '' OR '' THEN');
11049   l('      l_party_id := H_SCORES.FIRST;');
11050   l('    ELSE');
11051   l('      l_party_id := H_PARTY_ID_LIST.FIRST;');
11052   l('    END IF;');
11053 
11054   l('    WHILE l_party_id IS NOT NULL LOOP');
11055   l('      l_num_eval:= l_num_eval+1;');
11056   ds(fnd_log.level_statement);
11057   dc(fnd_log.level_statement,'Match Party ID','H_SCORES(l_party_id).PARTY_ID');
11058   dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
11059   de;
11060   l('      IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
11061   l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
11062   l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100));');
11063   l('            x_num_matches := x_num_matches+1;');
11064   l('      END IF;');
11065   l('      IF l_match_str = '' OR '' THEN');
11066   l('        l_party_id:=H_SCORES.NEXT(l_party_id);');
11067   l('      ELSE');
11068   l('        l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
11069   l('      END IF;');
11070   l('    END LOOP;');
11071   l('');
11072   l('----------INSERT INTO HZ_MATCHED_PARTY_SITES -----');
11073   l('    IF p_ins_details = ''Y'' THEN');
11074   l('      FORALL I in 1..h_ps_id.COUNT ');
11075   l('        INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
11076   l('          l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
11077   l('    END IF;');
11078 
11079   l('----------INSERT INTO HZ_MATCHED_CONTACTS-----');
11080   l('    IF p_ins_details = ''Y'' THEN');
11081   l('      FORALL I in 1..h_ct_id.COUNT ');
11082   l('        INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
11083   l('          l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
11084   l('    END IF;');
11085   l('----------INSERT INTO HZ_MATCHED_CPTS-----');
11086   l('    IF p_ins_details = ''Y'' THEN');
11087   l('      FORALL I in 1..h_cpt_id.COUNT ');
11088   l('        INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
11089   l('          l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
11090   l('    END IF;');
11091   l('');
11092   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
11093   d(fnd_log.level_procedure,'find_persons(-)');
11094 
11095 
11096   l('EXCEPTION');
11097   l('  WHEN FND_API.G_EXC_ERROR THEN');
11098   l('    ROLLBACK to find_persons;');
11099   l('    RAISE FND_API.G_EXC_ERROR;');
11100   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11101   l('    ROLLBACK to find_persons;');
11102   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11103   l('  WHEN OTHERS THEN');
11104   l('    ROLLBACK to find_persons;');
11105   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11106   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_persons'');');
11107   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11108   l('    FND_MSG_PUB.ADD;');
11109   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11110   l('END find_persons;');
11111   ELSE
11112   l('BEGIN');
11113   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
11114   l('      FND_MSG_PUB.ADD;');
11115   l('      RAISE FND_API.G_EXC_ERROR;');
11116   l('END find_persons;');
11117   l('');
11118   END IF;
11119   l('PROCEDURE find_persons (');
11120   l('      p_rule_id               IN      NUMBER,');
11121   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
11122   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
11123   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
11124   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
11125   l('      p_restrict_sql          IN      VARCHAR2,');
11126   l('      p_match_type            IN      VARCHAR2,');
11127   l('      p_ins_details           IN      VARCHAR2,');
11128   l('      x_search_ctx_id         OUT     NUMBER,');
11129   l('      x_num_matches           OUT     NUMBER');
11130   l(')  IS');
11131   l('  BEGIN');
11132   l('      find_persons(p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,');
11133   l('      	p_restrict_sql,p_match_type,NULL,p_ins_details,x_search_ctx_id,x_num_matches);');
11134   l('	END find_persons;');
11135   l('');
11136   l('-------------------------------------------------------------------------------------');
11137   l('--------------------  BULK MATCH RULE ::: find_party_details ------------------------');
11138   l('-------------------------------------------------------------------------------------');
11139   l('PROCEDURE find_party_details (');
11140   l('      p_rule_id               IN      NUMBER,');
11141   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
11142   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
11143   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
11144   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
11145   l('      p_restrict_sql          IN      VARCHAR2,');
11146   l('      p_match_type            IN      VARCHAR2,');
11147   l('      p_search_merged         IN      VARCHAR2,');
11148   l('      x_search_ctx_id         OUT     NUMBER,');
11149   l('      x_num_matches           OUT     NUMBER');
11150   l(') IS');
11151   l('');
11152   l('  BEGIN');
11153 
11154 
11155   d(fnd_log.level_procedure,'find_party_details(+)');
11156   ds(fnd_log.level_statement);
11157   dc(fnd_log.level_statement,'Input Parameters:');
11158   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11159   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11160   dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
11161   de;
11162 
11163   l('  find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,');
11164   l('               p_restrict_sql,p_match_type,p_search_merged,null,null, null,''Y'',');
11165   l('               x_search_ctx_id,x_num_matches);');
11166   l('  DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
11167   l('  AND NOT EXISTS ');
11168   l('       (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);');
11169   l('  DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
11170   l('  AND NOT EXISTS ');
11171   l('       (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);');
11172   l('  DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
11173   l('  AND NOT EXISTS ');
11174   l('       (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);');
11175 
11176   d(fnd_log.level_procedure,'find_party_details(-)');
11177 
11178 
11179   l('EXCEPTION');
11180   l('  WHEN FND_API.G_EXC_ERROR THEN');
11181   l('    RAISE FND_API.G_EXC_ERROR;');
11182   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11183   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11184   l('  WHEN OTHERS THEN');
11185   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11186   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_party_details'');');
11187   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11188   l('    FND_MSG_PUB.ADD;');
11189   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11190   l('END find_party_details;');
11191   l('');
11192   l('-------------------------------------------------------------------------------------');
11193   l('--------------------  BULK MATCH RULE ::: find_duplicate_parties -------------------');
11194   l('-------------------------------------------------------------------------------------');
11195   l('PROCEDURE find_duplicate_parties (');
11196   l('      p_rule_id               IN      NUMBER,');
11197   l('      p_party_id              IN      NUMBER,');
11198   l('      p_restrict_sql          IN      VARCHAR2,');
11199   l('      p_match_type            IN      VARCHAR2,');
11200   l('      p_dup_batch_id          IN      NUMBER,');
11201   l('      p_search_merged         IN      VARCHAR2,');
11202   l('      x_dup_set_id            OUT     NUMBER,');
11203   l('      x_search_ctx_id         OUT     NUMBER,');
11204   l('      x_num_matches           OUT     NUMBER');
11205   l(') IS');
11206   l('  l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
11207   l('  l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
11208   l('  l_contact_list HZ_PARTY_SEARCH.contact_list;');
11209   l('  l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
11210   l('  l_match_idx NUMBER;');
11211 
11212   l('');
11213   l('BEGIN');
11214 
11215 
11216   d(fnd_log.level_procedure,'find_duplicate_parties(+)');
11217   ds(fnd_log.level_statement);
11218   dc(fnd_log.level_statement,'Input Parameters:');
11219   dc(fnd_log.level_statement,'p_party_id','p_party_id');
11220   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11221   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11222   dc(fnd_log.level_statement,'p_dup_batch_id','p_dup_batch_id');
11223   dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
11224   de;
11225 
11226   l('');
11227   l('  get_party_for_search(');
11228   l('              p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);');
11229   l('');
11230   l('    IF NOT check_prim_cond (l_party_rec,');
11231   l('                            l_party_site_list,');
11232   l('                            l_contact_list,');
11233   l('                            l_cpt_list) THEN');
11234   l('      x_dup_set_id:=NULL;');
11235   l('      x_search_ctx_id:=NULL;');
11236   l('      x_num_matches:=0;');
11237   l('      RETURN;');
11238   l('    END IF;');
11239 
11240   l('  x_dup_set_id := NULL;');
11241   l('  IF p_dup_batch_id IS NOT NULL THEN');
11242   l('    SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;');
11243   l('  END IF;');
11244   l('');
11245 
11246   l('  find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11247   l('               p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,''N'',');
11248   l('               x_search_ctx_id,x_num_matches);');
11249   l('  IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN');
11250   l('    INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,');
11251   l('      STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,');
11252   l('      LAST_UPDATE_DATE, LAST_UPDATED_BY) ');
11253   l('    VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, ''SYSBATCH'',');
11254   l('      ''PARTY_MERGE'', hz_utility_pub.created_by, hz_utility_pub.creation_date,');
11255   l('      hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,');
11256   l('      hz_utility_pub.user_id);');
11257   l('');
11258   l('    INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
11259   l('      MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
11260   l('      LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
11261   l('    VALUES (p_party_id,x_dup_set_id,0,0,');
11262   l('      ''Y'',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,');
11263   l('      hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,');
11264   l('      hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
11265   l('  ELSE');
11266   l('    x_dup_set_id := NULL;');
11267   l('  END IF;');
11268   d(fnd_log.level_procedure,'find_duplicate_parties(-)');
11269 
11270 
11271   l('EXCEPTION');
11272   l('  WHEN FND_API.G_EXC_ERROR THEN');
11273   l('    RAISE FND_API.G_EXC_ERROR;');
11274   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11275   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11276   l('  WHEN OTHERS THEN');
11277   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11278   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_parties'');');
11279   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11280   l('    FND_MSG_PUB.ADD;');
11281   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11282   l('END find_duplicate_parties;');
11283 
11284 
11285   l('');
11286   l('-------------------------------------------------------------------------------------');
11287   l('--------------------  BULK MATCH RULE ::: find_duplicate_party_sites-----------------');
11288   l('-------------------------------------------------------------------------------------');
11289   l('PROCEDURE find_duplicate_party_sites (');
11290   l('      p_rule_id               IN      NUMBER,');
11291   l('      p_party_site_id         IN      NUMBER,');
11292   l('      p_party_id              IN      NUMBER,');
11293   l('      p_restrict_sql          IN      VARCHAR2,');
11294   l('      p_match_type            IN      VARCHAR2,');
11295   l('      x_search_ctx_id         OUT     NUMBER,');
11296   l('      x_num_matches           OUT     NUMBER');
11297   l(') IS');
11298   l('');
11299 
11300 
11301   l('   l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
11302   l('   l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
11303   l('   l_contact_list HZ_PARTY_SEARCH.contact_list; ');
11304   l('   l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
11305   l('   contact_point_ids HZ_PARTY_SEARCH.IDList; ');
11306   l('   p_party_site_list HZ_PARTY_SEARCH.IDList;  ');
11307   l('   p_contact_ids HZ_PARTY_SEARCH.IDList; ');
11308   l('  l_match_idx NUMBER;');
11309 
11310   l('   cursor get_cpts_for_party_sites is select contact_point_id  ');
11311   l('                         from hz_contact_points ');
11312   l('                         where owner_table_name = ''HZ_PARTY_SITES'' ');
11313   l('                         and primary_flag=''Y''');
11314   l('                         and owner_table_id = p_party_site_id; ');
11315 
11316   l('   BEGIN ');
11317 
11318 
11319   d(fnd_log.level_procedure,'find_duplicate_party_sites(+)');
11320   ds(fnd_log.level_statement);
11321   dc(fnd_log.level_statement,'Input Parameters:');
11322   dc(fnd_log.level_statement,'p_party_site_id','p_party_site_id');
11323   dc(fnd_log.level_statement,'p_party_id','p_party_id');
11324   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11325   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11326   de;
11327 
11328   l('     p_party_site_list(1) := p_party_site_id; ');
11329   l('     OPEN get_cpts_for_party_sites;');
11330   l('     LOOP       ');
11331   l('     FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; ');
11332   l('         EXIT WHEN get_cpts_for_party_sites%NOTFOUND; ');
11333   l('     END LOOP;  ');
11334   l('     CLOSE get_cpts_for_party_sites; ');
11335   l('  ');
11336   l('     get_search_criteria (');
11337   l('         null,');
11338   l('         p_party_site_list,');
11339   l('         HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
11340   l('         contact_point_ids, ');
11341   l('         l_party_search_rec,');
11342   l('         l_party_site_list,');
11343   l('         l_contact_list,');
11344   l('         l_contact_point_list) ;');
11345   l('    IF NOT check_prim_cond (l_party_search_rec,');
11346   l('                            l_party_site_list,');
11347   l('                            l_contact_list,');
11348   l('                            l_contact_point_list) THEN');
11349   l('      x_search_ctx_id:=NULL;');
11350   l('      x_num_matches:=0;');
11351   l('      RETURN;');
11352   l('    END IF;');
11353   l(' ');
11354   l('     get_matching_party_sites (p_rule_id, ');
11355   l('         p_party_id, ');
11356   l('         l_party_site_list, ');
11357   l('         l_contact_point_list,');
11358   l('         p_restrict_sql, ');
11359   l('         p_match_type, ');
11360   l('         p_party_site_id, ');
11361   l('         x_search_ctx_id,');
11362   l('         x_num_matches);');
11363   d(fnd_log.level_procedure,'find_duplicate_party_sites(-)');
11364 
11365 
11366   l('EXCEPTION');
11367   l('  WHEN FND_API.G_EXC_ERROR THEN');
11368   l('    RAISE FND_API.G_EXC_ERROR;');
11369   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11370   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11371   l('  WHEN OTHERS THEN');
11372   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11373   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_party_sites'');');
11374   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11375   l('    FND_MSG_PUB.ADD;');
11376   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11377   l('END find_duplicate_party_sites; ');
11378   l(' ');
11379 
11380   l('-------------------------------------------------------------------------------------');
11381   l('--------------------  BULK MATCH RULE ::: find_duplicate_contacts--------------------');
11382   l('-------------------------------------------------------------------------------------');
11383   l('PROCEDURE find_duplicate_contacts (');
11384   l('      p_rule_id               IN      NUMBER,');
11385   l('      p_org_contact_id        IN      NUMBER,');
11386   l('      p_party_id              IN      NUMBER,');
11387   l('      p_restrict_sql          IN      VARCHAR2,');
11388   l('      p_match_type            IN      VARCHAR2,');
11389   l('      x_search_ctx_id         OUT     NUMBER,');
11390   l('      x_num_matches           OUT     NUMBER');
11391   l(') IS');
11392   l('');
11393 
11394   l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;');
11395   l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
11396   l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
11397   l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
11398   l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
11399   l(' p_party_site_list HZ_PARTY_SEARCH.IDList;   ');
11400   l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
11401   l('  l_match_idx NUMBER;');
11402 
11403   l(' cursor get_cpt_for_contact_id is select  contact_point_id ');
11404   l('   from hz_org_contacts a, hz_relationships b, hz_contact_points c ');
11405   l('   where a.party_relationship_id = b.relationship_id ');
11406   l('     and c.owner_table_name = ''HZ_PARTIES'' ');
11407   l('     and c.primary_flag=''Y''');
11408   l('     and c.owner_table_id = b.party_id ');
11409   l('     and b.directional_flag = ''F''  ');
11410   l('     and a.org_contact_id = p_org_contact_id; ');
11411 
11412   l('BEGIN ');
11413 
11414 
11415   d(fnd_log.level_procedure,'find_duplicate_contacts(+)');
11416   ds(fnd_log.level_statement);
11417   dc(fnd_log.level_statement,'Input Parameters:');
11418   dc(fnd_log.level_statement,'p_org_contact_id','p_org_contact_id');
11419   dc(fnd_log.level_statement,'p_party_id','p_party_id');
11420   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11421   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11422   de;
11423 
11424 
11425   l('    p_contact_ids(1) := p_org_contact_id; ');
11426   l('    OPEN get_cpt_for_contact_id; ');
11427   l('    LOOP ');
11428   l('    FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; ');
11429   l('        EXIT WHEN get_cpt_for_contact_id%NOTFOUND; ');
11430   l('    END LOOP;  ');
11431   l('    CLOSE get_cpt_for_contact_id; ');
11432   l(' ');
11433   l('    get_search_criteria (');
11434   l('        null,');
11435   l('        HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
11436   l('        p_contact_ids,');
11437   l('        contact_point_ids, ');
11438   l('        l_party_search_rec,');
11439   l('        l_party_site_list, ');
11440   l('        l_contact_list,');
11441   l('        l_contact_point_list) ;');
11442   l('    IF NOT check_prim_cond (l_party_search_rec,');
11443   l('                            l_party_site_list,');
11444   l('                            l_contact_list,');
11445   l('                            l_contact_point_list) THEN');
11446   l('      x_search_ctx_id:=NULL;');
11447   l('      x_num_matches:=0;');
11448   l('      RETURN;');
11449   l('    END IF;');
11450   l(' ');
11451   l('    get_matching_contacts (p_rule_id, ');
11452   l('        p_party_id, ');
11453   l('        l_contact_list, ');
11454   l('        l_contact_point_list, ');
11455   l('        p_restrict_sql, ');
11456   l('        p_match_type, ');
11457   l('        p_org_contact_id, ');
11458   l('        x_search_ctx_id, ');
11459   l('        x_num_matches);');
11460   l(' ');
11461   d(fnd_log.level_procedure,'find_duplicate_contacts(-)');
11462 
11463 
11464   l('EXCEPTION');
11465   l('  WHEN FND_API.G_EXC_ERROR THEN');
11466   l('    RAISE FND_API.G_EXC_ERROR;');
11467   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11468   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11469   l('  WHEN OTHERS THEN');
11470   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11471   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contacts'');');
11472   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11473   l('    FND_MSG_PUB.ADD;');
11474   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11475   l('END find_duplicate_contacts; ');
11476   l('');
11477   l('-------------------------------------------------------------------------------------');
11478   l('--------------------  BULK MATCH RULE ::: find_duplicate_contact_points -------------');
11479   l('-------------------------------------------------------------------------------------');
11480   l('PROCEDURE find_duplicate_contact_points (');
11481   l('      p_rule_id               IN      NUMBER,');
11482   l('      p_contact_point_id      IN      NUMBER,');
11483   l('      p_party_id              IN      NUMBER,');
11484   l('      p_restrict_sql          IN      VARCHAR2,');
11485   l('      p_match_type            IN      VARCHAR2,');
11486   l('      x_search_ctx_id         OUT     NUMBER,');
11487   l('      x_num_matches           OUT     NUMBER');
11488   l(') IS');
11489   l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
11490   l('  l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
11491   l('   l_contact_list HZ_PARTY_SEARCH.contact_list;  ');
11492   l('   l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;  ');
11493   l('   contact_point_ids HZ_PARTY_SEARCH.IDList;  ');
11494   l('  p_party_site_list HZ_PARTY_SEARCH.IDList;   ');
11495   l('  p_contact_ids HZ_PARTY_SEARCH.IDList;  ');
11496   l('  l_match_idx NUMBER;');
11497 
11498   l('');
11499   l('BEGIN');
11500 
11501 
11502   d(fnd_log.level_procedure,'find_duplicate_contact_points(+)');
11503   ds(fnd_log.level_statement);
11504   dc(fnd_log.level_statement,'Input Parameters:');
11505   dc(fnd_log.level_statement,'p_contact_point_id','p_contact_point_id');
11506   dc(fnd_log.level_statement,'p_party_id','p_party_id');
11507   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11508   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11509   de;
11510 
11511   l('  contact_point_ids(1) := p_contact_point_id;   ');
11512   l('  get_search_criteria (   ');
11513   l('      null, ');
11514   l('      HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
11515   l('      HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
11516   l('      contact_point_ids,   ');
11517   l('      l_party_search_rec, ');
11518   l('      l_party_site_list, ');
11519   l('      l_contact_list, ');
11520   l('      l_contact_point_list ); ');
11521   l('    ');
11522   l('    IF NOT check_prim_cond (l_party_search_rec,');
11523   l('                            l_party_site_list,');
11524   l('                            l_contact_list,');
11525   l('                            l_contact_point_list) THEN');
11526   l('      x_search_ctx_id:=NULL;');
11527   l('      x_num_matches:=0;');
11528   l('      RETURN;');
11529   l('    END IF;');
11530   l('   get_matching_contact_points ( ');
11531   l('      p_rule_id, ');
11532   l('      p_party_id, ');
11533   l('     l_contact_point_list, ');
11534   l('      p_restrict_sql, ');
11535   l('      p_match_type, ');
11536   l('      p_contact_point_id, ');
11537   l('      x_search_ctx_id, ');
11538   l('      x_num_matches );  ');
11539   d(fnd_log.level_procedure,'find_duplicate_contact_points(-)');
11540 
11541 
11542   l('EXCEPTION');
11543   l('  WHEN FND_API.G_EXC_ERROR THEN');
11544   l('    RAISE FND_API.G_EXC_ERROR;');
11545   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11546   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11547   l('  WHEN OTHERS THEN');
11548   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11549   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contact_points'');');
11550   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11551   l('    FND_MSG_PUB.ADD;');
11552   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11553   l('END find_duplicate_contact_points;');
11554   l('');
11555 
11556   l('-------------------------------------------------------------------------------------');
11557   l('--------------------  BULK MATCH RULE ::: find_parties_dynamic-----------------------');
11558   l('-------------------------------------------------------------------------------------');
11559   l('PROCEDURE find_parties_dynamic (');
11560   l('        p_rule_id               IN      NUMBER,');
11561   l('        p_attrib_id1            IN      NUMBER,');
11562   l('        p_attrib_id2            IN      NUMBER,');
11563   l('        p_attrib_id3            IN      NUMBER,');
11564   l('        p_attrib_id4            IN      NUMBER,');
11565   l('        p_attrib_id5            IN      NUMBER,');
11566   l('        p_attrib_id6            IN      NUMBER,');
11567   l('        p_attrib_id7            IN      NUMBER,');
11568   l('        p_attrib_id8            IN      NUMBER,');
11569   l('        p_attrib_id9            IN      NUMBER,');
11570   l('        p_attrib_id10           IN      NUMBER,');
11571   l('        p_attrib_id11           IN      NUMBER,');
11572   l('        p_attrib_id12           IN      NUMBER,');
11573   l('        p_attrib_id13           IN      NUMBER,');
11574   l('        p_attrib_id14           IN      NUMBER,');
11575   l('        p_attrib_id15           IN      NUMBER,');
11576   l('        p_attrib_id16           IN      NUMBER,');
11577   l('        p_attrib_id17           IN      NUMBER,');
11578   l('        p_attrib_id18           IN      NUMBER,');
11579   l('        p_attrib_id19           IN      NUMBER,');
11580   l('        p_attrib_id20           IN      NUMBER,');
11581   l('        p_attrib_val1           IN      VARCHAR2,');
11582   l('        p_attrib_val2           IN      VARCHAR2,');
11583   l('        p_attrib_val3           IN      VARCHAR2,');
11584   l('        p_attrib_val4           IN      VARCHAR2,');
11585   l('        p_attrib_val5           IN      VARCHAR2,');
11586   l('        p_attrib_val6           IN      VARCHAR2,');
11587   l('        p_attrib_val7           IN      VARCHAR2,');
11588   l('        p_attrib_val8           IN      VARCHAR2,');
11589   l('        p_attrib_val9           IN      VARCHAR2,');
11590   l('        p_attrib_val10          IN      VARCHAR2,');
11591   l('        p_attrib_val11          IN      VARCHAR2,');
11592   l('        p_attrib_val12          IN      VARCHAR2,');
11593   l('        p_attrib_val13          IN      VARCHAR2,');
11594   l('        p_attrib_val14          IN      VARCHAR2,');
11595   l('        p_attrib_val15          IN      VARCHAR2,');
11596   l('        p_attrib_val16          IN      VARCHAR2,');
11597   l('        p_attrib_val17          IN      VARCHAR2,');
11598   l('        p_attrib_val18          IN      VARCHAR2,');
11599   l('        p_attrib_val19          IN      VARCHAR2,');
11600   l('        p_attrib_val20          IN      VARCHAR2,');
11601   l('        p_restrict_sql          IN      VARCHAR2,');
11602   l('        p_match_type            IN      VARCHAR2,');
11603   l('        p_search_merged         IN      VARCHAR2,');
11604   l('        x_search_ctx_id         OUT     NUMBER,');
11605   l('        x_num_matches           OUT     NUMBER');
11606   l(') IS');
11607   l('  BEGIN');
11608   l('    call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
11609   l('                     p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
11610   l('                     p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
11611   l('                     p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
11612   l('                     p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
11613   l('                     p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
11614   l('                     p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
11615   l('                     p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
11616   l('                     p_restrict_sql,''FIND_PARTIES'',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);');
11617   l(' END;');
11618 
11619   l('');
11620   l('-------------------------------------------------------------------------------------');
11621   l('--------------------  BULK MATCH RULE ::: call_api_dynamic---------------------------');
11622   l('-------------------------------------------------------------------------------------');
11623   l('PROCEDURE call_api_dynamic (');
11624   l('        p_rule_id               IN      NUMBER,');
11625   l('        p_attrib_id1            IN      NUMBER,');
11626   l('        p_attrib_id2            IN      NUMBER,');
11627   l('        p_attrib_id3            IN      NUMBER,');
11628   l('        p_attrib_id4            IN      NUMBER,');
11629   l('        p_attrib_id5            IN      NUMBER,');
11630   l('        p_attrib_id6            IN      NUMBER,');
11631   l('        p_attrib_id7            IN      NUMBER,');
11632   l('        p_attrib_id8            IN      NUMBER,');
11633   l('        p_attrib_id9            IN      NUMBER,');
11634   l('        p_attrib_id10           IN      NUMBER,');
11635   l('        p_attrib_id11           IN      NUMBER,');
11636   l('        p_attrib_id12           IN      NUMBER,');
11637   l('        p_attrib_id13           IN      NUMBER,');
11638   l('        p_attrib_id14           IN      NUMBER,');
11639   l('        p_attrib_id15           IN      NUMBER,');
11640   l('        p_attrib_id16           IN      NUMBER,');
11641   l('        p_attrib_id17           IN      NUMBER,');
11642   l('        p_attrib_id18           IN      NUMBER,');
11643   l('        p_attrib_id19           IN      NUMBER,');
11644   l('        p_attrib_id20           IN      NUMBER,');
11645   l('        p_attrib_val1           IN      VARCHAR2,');
11646   l('        p_attrib_val2           IN      VARCHAR2,');
11647   l('        p_attrib_val3           IN      VARCHAR2,');
11648   l('        p_attrib_val4           IN      VARCHAR2,');
11649   l('        p_attrib_val5           IN      VARCHAR2,');
11650   l('        p_attrib_val6           IN      VARCHAR2,');
11651   l('        p_attrib_val7           IN      VARCHAR2,');
11652   l('        p_attrib_val8           IN      VARCHAR2,');
11653   l('        p_attrib_val9           IN      VARCHAR2,');
11654   l('        p_attrib_val10          IN      VARCHAR2,');
11655   l('        p_attrib_val11          IN      VARCHAR2,');
11656   l('        p_attrib_val12          IN      VARCHAR2,');
11657   l('        p_attrib_val13          IN      VARCHAR2,');
11658   l('        p_attrib_val14          IN      VARCHAR2,');
11659   l('        p_attrib_val15          IN      VARCHAR2,');
11660   l('        p_attrib_val16          IN      VARCHAR2,');
11661   l('        p_attrib_val17          IN      VARCHAR2,');
11662   l('        p_attrib_val18          IN      VARCHAR2,');
11663   l('        p_attrib_val19          IN      VARCHAR2,');
11664   l('        p_attrib_val20          IN      VARCHAR2,');
11665   l('        p_restrict_sql          IN      VARCHAR2,');
11666   l('        p_api_name              IN      VARCHAR2,');
11667   l('        p_match_type            IN      VARCHAR2,');
11668   l('        p_party_id              IN      NUMBER,');
11669   l('        p_search_merged         IN      VARCHAR2,');
11670   l('        x_search_ctx_id         OUT     NUMBER,');
11671   l('        x_num_matches           OUT     NUMBER');
11672   l(') IS');
11673   l('  TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;');
11674   l('  l_match_idx NUMBER;');
11675   l('  AttrVals AttrList;');
11676   l('  l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
11677   l('  l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
11678   l('  l_contact_list HZ_PARTY_SEARCH.contact_list;');
11679   l('  l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
11680   l('  l_dup_set_id NUMBER;');
11681   l('  l_idx NUMBER;');
11682   l('  l_cpt_type VARCHAR2(255);');
11683   l('  FIRST BOOLEAN := TRUE; ');
11684   l('');
11685   l('BEGIN');
11686 
11687   d(fnd_log.level_procedure,'call_api_dynamic(+)');
11688   l('');
11689   FOR I in 1..20 LOOP
11690     l('  IF p_attrib_id'||I||' IS NOT NULL THEN');
11691     l('    AttrVals(p_attrib_id'||I||'):=p_attrib_val'||I||';');
11692     l('  END IF;');
11693   END LOOP;
11694 
11695   FIRST := TRUE;
11696   FOR ATTRS IN (
11697       SELECT a.attribute_id, a.attribute_name, a.entity_name
11698       FROM HZ_TRANS_ATTRIBUTES_VL a,
11699          HZ_MATCH_RULE_PRIMARY p
11700       WHERE p.match_rule_id = p_rule_id
11701       AND p.attribute_id = a.attribute_id
11702 
11703       UNION
11704 
11705       SELECT a.attribute_id, a.attribute_name, a.entity_name
11706       FROM HZ_TRANS_ATTRIBUTES_VL a,
11707          HZ_MATCH_RULE_SECONDARY s
11708       WHERE s.match_rule_id = p_rule_id
11709       AND s.attribute_id = a.attribute_id) LOOP
11710     l('  IF AttrVals.EXISTS('||ATTRS.attribute_id||') THEN');
11711     IF ATTRS.entity_name='PARTY' THEN
11712         l('    l_party_rec.'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11713         d(fnd_log.level_statement,'l_party_rec.'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11714     ELSIF ATTRS.entity_name='PARTY_SITES' THEN
11715         l('    l_party_site_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11716         d(fnd_log.level_statement,'l_party_site_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11717     ELSIF ATTRS.entity_name='CONTACTS' THEN
11718         l('    l_contact_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11719         d(fnd_log.level_statement,'l_contact_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11720     ELSIF ATTRS.entity_name='CONTACT_POINTS' THEN
11721       BEGIN
11722         SELECT tag INTO l_cpt_type FROM fnd_lookup_values
11723         WHERE lookup_type = 'HZ_DQM_CPT_ATTR_TYPE'
11724         AND lookup_code = ATTRS.attribute_name
11725         AND ROWNUM=1;
11726       EXCEPTION
11727         WHEN NO_DATA_FOUND THEN
11728           l_cpt_type:='PHONE';
11729       END;
11730 
11731       l('    l_cpt_type := '''||l_cpt_type||''';');
11732       l('    FIRST := FALSE;');
11733       l('    FOR I in 1..l_cpt_list.COUNT LOOP');
11734       l('      IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN');
11735       l('        l_cpt_list(I).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11736       l('        FIRST := TRUE;');
11737       ds(fnd_log.level_statement);
11738       dc(fnd_log.level_statement,'l_cpt_list(''||I||'').CONTACT_POINT_TYPE','l_cpt_type');
11739       dc(fnd_log.level_statement,'l_cpt_list(''||I||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11740       de;
11741       l('      END IF;');
11742       l('    END LOOP;');
11743       l('    IF not FIRST THEN');
11744       l('      l_idx := l_cpt_list.COUNT+1;');
11745       l('      l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;');
11746       l('      l_cpt_list(l_idx).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11747       ds(fnd_log.level_statement);
11748       dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').CONTACT_POINT_TYPE','l_cpt_type');
11749       dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11750       de;
11751       l('    END IF;');
11752     END IF;
11753     l('  END IF;');
11754     l('');
11755   END LOOP;
11756   l('');
11757   l('  IF upper(p_api_name) = ''FIND_PARTIES'' THEN');
11758   l('    find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11759   l('               p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,''N'',');
11760   l('               x_search_ctx_id,x_num_matches);');
11761   l('  ELSIF upper(p_api_name) = ''FIND_PARTY_DETAILS'' THEN');
11762   l('    find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11763   l('               p_restrict_sql,p_match_type,p_search_merged,');
11764   l('               x_search_ctx_id,x_num_matches);');
11765   l('  ELSIF upper(p_api_name) = ''FIND_PERSONS'' THEN');
11766   l('    find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11767   l('               p_restrict_sql,p_match_type,''N'',');
11768   l('               x_search_ctx_id,x_num_matches);');
11769   l('  ELSIF upper(p_api_name) = ''GET_MATCHING_PARTY_SITES'' THEN');
11770   l('    get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,');
11771   l('               p_restrict_sql,p_match_type,NULL,');
11772   l('               x_search_ctx_id,x_num_matches);');
11773   l('  ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACTS'' THEN');
11774   l('    get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,');
11775   l('               p_restrict_sql,p_match_type,NULL,');
11776   l('               x_search_ctx_id,x_num_matches);');
11777   l('  ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACT_POINTS'' THEN');
11778   l('    get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,');
11779   l('               p_restrict_sql,p_match_type,NULL,');
11780   l('               x_search_ctx_id,x_num_matches);');
11781   l('  END IF;');
11782   d(fnd_log.level_procedure,'call_api_dynamic(-)');
11783 
11784 
11785   l('EXCEPTION');
11786   l('  WHEN FND_API.G_EXC_ERROR THEN');
11787   l('    RAISE FND_API.G_EXC_ERROR;');
11788   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11789   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11790   l('  WHEN OTHERS THEN');
11791   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11792   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.call_api_dynamic'');');
11793   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11794   l('    FND_MSG_PUB.ADD;');
11795   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11796 
11797 
11798   l('END call_api_dynamic;');
11799   l('');
11800 
11801   l('-------------------------------------------------------------------------------------');
11802   l('--------------------  BULK MATCH RULE ::: get_matching_party_sites ------------------');
11803   l('-------------------------------------------------------------------------------------');
11804 
11805   l('');
11806   l('PROCEDURE get_matching_party_sites (');
11807   l('        p_rule_id               IN      NUMBER,');
11808   l('        p_party_id              IN      NUMBER,');
11809   l('        p_party_site_list       IN      HZ_PARTY_SEARCH.PARTY_SITE_LIST,');
11810   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
11811   l('        p_restrict_sql          IN      VARCHAR2,');
11812   l('        p_match_type            IN      VARCHAR2,');
11813   l('        p_dup_party_site_id     IN      NUMBER, ');
11814   l('        x_search_ctx_id         OUT     NUMBER,');
11815   l('        x_num_matches           OUT     NUMBER');
11816   l(') IS');
11817   l('  ');
11818   l('  -- Strings to hold the generated Intermedia query strings');
11819   l('  l_party_contains_str VARCHAR2(32000); ');
11820   l('  l_match_idx NUMBER;');
11821   l('  l_party_site_contains_str VARCHAR2(32000);');
11822   l('  l_contact_contains_str VARCHAR2(32000);');
11823   l('  l_contact_pt_contains_str VARCHAR2(32000);');
11824   l('  l_tmp VARCHAR2(32000);');
11825   l('');
11826   l('  -- Other local variables');
11827   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
11828   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
11829   l('  -- For Score calculation');
11830   l('  l_max_score NUMBER;');
11831   l('  l_entered_max_score NUMBER;');
11832   l('  FIRST BOOLEAN;');
11833   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
11834   l('');
11835   FOR TX IN (
11836       SELECT distinct f.staged_attribute_column
11837       FROM hz_trans_functions_vl f, hz_secondary_trans st,
11838            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
11839       WHERE sa.match_rule_id = p_rule_id
11840       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
11841       AND st.function_id = f.function_id
11842       AND (a.ENTITY_NAME='PARTY_SITES' OR a.ENTITY_NAME='CONTACT_POINTS')
11843       AND a.attribute_id = sa.attribute_id) LOOP
11844     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
11845   END LOOP;
11846   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
11847   l('');
11848   l('  l_score NUMBER;');
11849   l('  l_idx NUMBER;');
11850   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
11851   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
11852   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
11853   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
11854   l('  l_party_id NUMBER;');
11855   l('  l_ps_party_id NUMBER;');
11856   l('  l_ct_party_id NUMBER;');
11857   l('  l_cpt_party_id NUMBER;');
11858   l('  l_cpt_ps_id NUMBER;');
11859   l('  l_cpt_contact_id NUMBER;');
11860   l('  l_party_site_id NUMBER;');
11861   l('  l_org_contact_id NUMBER;');
11862   l('  l_contact_pt_id NUMBER;');
11863   l('  l_ps_contact_id NUMBER;');
11864   l('  l_party_max_score NUMBER;');
11865   l('  l_ps_max_score NUMBER;');
11866   l('  l_contact_max_score NUMBER;');
11867   l('  l_cpt_max_score NUMBER;');
11868   l('');
11869   l('  defpt NUMBER :=0;');
11870   l('  defps NUMBER :=0;');
11871   l('  defct NUMBER :=0;');
11872   l('  defcpt NUMBER :=0;');
11873   l('  l_index NUMBER;');
11874   l('');
11875   l('  ');
11876   l('  BEGIN');
11877 
11878 
11879   d(fnd_log.level_procedure,'get_matching_party_sites(+)');
11880   ds(fnd_log.level_statement);
11881   dc(fnd_log.level_statement,'Input Parameters:');
11882   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11883   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11884   dc(fnd_log.level_statement,'p_dup_party_site_id','p_dup_party_site_id');
11885   de;
11886   l('');
11887   l('    -- ************************************');
11888   l('    -- STEP 1. Initialization and error checks');
11889   l('');
11890   l('    l_match_str := ''' || l_match_str || ''';');
11891   l('    IF p_match_type = ''AND'' THEN');
11892   l('      l_match_str := '' AND '';');
11893   l('    ELSIF p_match_type = ''OR'' THEN');
11894   l('      l_match_str := '' OR '';');
11895   l('    END IF;');
11896   l('    SAVEPOINT get_matching_party_sites ;');
11897   l('    l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, p_party_site_list, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
11898   l('    g_score_until_thresh := false;');
11899   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
11900 
11901   l('');
11902   l('    l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
11903   l('    l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
11904   l('    init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,p_party_site_list,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);');
11905   l('');
11906   l('    -- Setup Search Context ID');
11907   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
11908   l('    x_search_ctx_id := l_search_ctx_id;');
11909   l('');
11910 
11911   ds(fnd_log.level_statement);
11912   dc(fnd_log.level_statement,'l_match_str','l_match_str');
11913   dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
11914   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
11915   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
11916   de;
11917 
11918   l('    IF l_party_site_contains_str IS NULL THEN');
11919   l('      defps := 1;');
11920   l('    END IF;');
11921   l('    IF l_contact_pt_contains_str IS NULL THEN');
11922   l('      defcpt := 1;');
11923   l('    END IF;');
11924   l('');
11925   l('    IF l_party_site_contains_str IS NOT NULL THEN');
11926   l('      open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL,l_party_site_cur);');
11927   l('      LOOP');
11928   l('        FETCH l_party_site_cur INTO ');
11929   l('            l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
11930   l('        EXIT WHEN l_party_site_cur%NOTFOUND;');
11931   l('      IF (p_dup_party_site_id IS NULL OR (');
11932   l('                p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND ');
11933   l('                l_party_site_id <> p_dup_party_site_id)) THEN  ');
11934   l('            l_index := map_id(l_party_site_id);');
11935   l('            l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
11936   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);');
11937   ds(fnd_log.level_statement);
11938   dc(fnd_log.level_statement,'Party Site Level Matches');
11939   dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
11940   dc(fnd_log.level_statement,'l_score','l_score');
11941   de;
11942 
11943   l('      END IF; ');
11944   l('      END LOOP;');
11945   l('      CLOSE l_party_site_cur;');
11946   l('    END IF;');
11947   l('');
11948   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
11949   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
11950   l('      LOOP');
11951   l('        FETCH l_contact_pt_cur INTO ');
11952   l('            l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
11953   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
11954   l('      IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (');
11955   l('         p_dup_party_site_id IS NOT NULL AND l_cpt_contact_id IS NULL AND p_dup_party_site_id <> l_cpt_ps_id))) THEN   ');
11956   l('        l_index := map_id(l_cpt_ps_id);');
11957   l('        IF l_match_str = '' OR '' THEN');
11958   l('          l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
11959   l('          IF NOT H_SCORES.EXISTS(l_index) THEN');
11960   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
11961   l('          ELSE');
11962   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
11963   l('               H_SCORES(l_index).TOTAL_SCORE := ');
11964   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
11965   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
11966   l('            END IF;');
11967   l('          END IF;');
11968   l('        ELSE');
11969   l('          IF H_SCORES.EXISTS(l_index) THEN');
11970   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
11971   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
11972   l('               H_SCORES(l_index).TOTAL_SCORE := ');
11973   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
11974   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
11975   l('            END IF;');
11976   l('          ELSIF defps=1 THEN');
11977   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
11978   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
11979   l('          END IF;');
11980   l('        END IF;');
11981   l('      END IF; ');
11982   ds(fnd_log.level_statement);
11983   dc(fnd_log.level_statement,'Contact_point Level Matches');
11984   dc(fnd_log.level_statement,'l_party_site_id','l_cpt_ps_id');
11985   dc(fnd_log.level_statement,'l_score','l_score');
11986   de;
11987   l('      END LOOP;');
11988   l('      CLOSE l_contact_pt_cur;');
11989   l('    END IF;');
11990   l('    ROLLBACK to get_matching_party_sites ;');
11991   l('    x_num_matches := 0;');
11992   l('    l_party_site_id := H_SCORES.FIRST;');
11993   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
11994   l('    WHILE l_party_site_id IS NOT NULL LOOP');
11995   ds(fnd_log.level_statement);
11996   dc(fnd_log.level_statement,'Match Party Site ID','H_SCORES(l_party_site_id).PARTY_SITE_ID');
11997   dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100)');
11998   de;
11999   l('      IF l_match_str = '' OR '' THEN');
12000     l('        IF (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12001     l('            INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
12002     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100);');
12003 --  END IF;
12004   l('          x_num_matches := x_num_matches+1;');
12005   l('        END IF;');
12006   l('      ELSE');
12007 --  IF l_purpose = 'S' THEN
12008     l('           IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND');
12009     l('           H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND');
12010     l('           (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12011     l('          INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
12012     l('          VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100));');
12013 --  ELSE
12014 --  END IF;
12015   l('          x_num_matches := x_num_matches+1;');
12016   l('        END IF;');
12017   l('      END IF;');
12018   l('      l_party_site_id:=H_SCORES.NEXT(l_party_site_id);');
12019   l('    END LOOP;');
12020 
12021   d(fnd_log.level_procedure,'get_matching_party_sites(-)');
12022 
12023   l('EXCEPTION');
12024   l('  WHEN FND_API.G_EXC_ERROR THEN');
12025   l('    ROLLBACK to get_matching_party_sites ;');
12026   l('    RAISE FND_API.G_EXC_ERROR;');
12027   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12028   l('    ROLLBACK to get_matching_party_sites ;');
12029   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12030   l('  WHEN OTHERS THEN');
12031   l('    ROLLBACK to get_matching_party_sites ;');
12032   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12033   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_party_sites'');');
12034   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12035   l('    FND_MSG_PUB.ADD;');
12036   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12037   l('END get_matching_party_sites;');
12038   l('');
12039 
12040 --  l('  NULL;');
12041 --  l('END;');
12042 
12043   l('-------------------------------------------------------------------------------------');
12044   l('--------------------  BULK MATCH RULE ::: get_matching_contacts --------------------');
12045   l('-------------------------------------------------------------------------------------');
12046   l('');
12047   l('PROCEDURE get_matching_contacts (');
12048   l('        p_rule_id               IN      NUMBER,');
12049   l('        p_party_id              IN      NUMBER,');
12050   l('        p_contact_list          IN      HZ_PARTY_SEARCH.CONTACT_LIST,');
12051   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
12052   l('        p_restrict_sql          IN      VARCHAR2,');
12053   l('        p_match_type            IN      VARCHAR2,');
12054   l('        p_dup_contact_id        IN      NUMBER, ');
12055   l('        x_search_ctx_id         OUT     NUMBER,');
12056   l('        x_num_matches           OUT     NUMBER');
12057   l(') IS');
12058   l('  ');
12059   l('  -- Strings to hold the generated Intermedia query strings');
12060   l('  l_party_contains_str VARCHAR2(32000); ');
12061   l('  l_party_site_contains_str VARCHAR2(32000);');
12062   l('  l_contact_contains_str VARCHAR2(32000);');
12063   l('  l_contact_pt_contains_str VARCHAR2(32000);');
12064   l('  l_tmp VARCHAR2(32000);');
12065   l('');
12066   l('  -- Other local variables');
12067   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
12068   l('  l_match_idx NUMBER;');
12069   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
12070   l('  -- For Score calculation');
12071   l('  l_max_score NUMBER;');
12072   l('  l_entered_max_score NUMBER;');
12073   l('  FIRST BOOLEAN;');
12074   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
12075   l('');
12076   FOR TX IN (
12077       SELECT distinct f.staged_attribute_column
12078       FROM hz_trans_functions_vl f, hz_secondary_trans st,
12079            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12080       WHERE sa.match_rule_id = p_rule_id
12081       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12082       AND st.function_id = f.function_id
12083       AND (a.ENTITY_NAME='CONTACTS' OR a.ENTITY_NAME='CONTACT_POINTS')
12084       AND a.attribute_id = sa.attribute_id) LOOP
12085     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12086   END LOOP;
12087   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
12088   l('');
12089   l('  l_score NUMBER;');
12090   l('  l_idx NUMBER;');
12091   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
12092   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
12093   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
12094   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
12095   l('  l_party_id NUMBER;');
12096   l('  l_ps_party_id NUMBER;');
12097   l('  l_ct_party_id NUMBER;');
12098   l('  l_cpt_party_id NUMBER;');
12099   l('  l_cpt_ps_id NUMBER;');
12100   l('  l_cpt_contact_id NUMBER;');
12101   l('  l_party_site_id NUMBER;');
12102   l('  l_org_contact_id NUMBER;');
12103   l('  l_contact_pt_id NUMBER;');
12104   l('');
12105   l('  defpt NUMBER :=0;');
12106   l('  defps NUMBER :=0;');
12107   l('  defct NUMBER :=0;');
12108   l('  defcpt NUMBER :=0;');
12109   l('  l_index NUMBER;');
12110   l('  l_party_max_score NUMBER;');
12111   l('  l_ps_max_score NUMBER;');
12112   l('  l_contact_max_score NUMBER;');
12113   l('  l_cpt_max_score NUMBER;');
12114   l('');
12115   l('  ');
12116   l('  BEGIN');
12117 
12118 
12119   d(fnd_log.level_procedure,'get_matching_contacts(+)');
12120   ds(fnd_log.level_statement);
12121   dc(fnd_log.level_statement,'Input Parameters:');
12122   dc(fnd_log.level_statement,'p_match_type','p_match_type');
12123   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
12124   dc(fnd_log.level_statement,'p_dup_contact_id','p_dup_contact_id');
12125   de;
12126 
12127   l('');
12128   l('    -- ************************************');
12129   l('    -- STEP 1. Initialization and error checks');
12130   l('');
12131   l('    l_match_str := ''' || l_match_str || ''';');
12132   l('    IF p_match_type = ''AND'' THEN');
12133   l('      l_match_str := '' AND '';');
12134   l('    ELSIF p_match_type = ''OR'' THEN');
12135   l('      l_match_str := '' OR '';');
12136   l('    END IF;');
12137   l('    SAVEPOINT get_matching_contacts ;');
12138   l('    l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, p_contact_list, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
12139   l('    g_score_until_thresh := false;');
12140   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
12141   l('');
12142   l('    l_contact_contains_str := check_contacts_bulk (p_contact_list);');
12143   l('    l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
12144   l('    init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,p_contact_list,p_contact_point_list);');
12145 
12146   l('');
12147   l('    -- Setup Search Context ID');
12148   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
12149   l('    x_search_ctx_id := l_search_ctx_id;');
12150   l('');
12151 
12152   ds(fnd_log.level_statement);
12153   dc(fnd_log.level_statement,'l_match_str','l_match_str');
12154   dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
12155   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
12156   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
12157   de;
12158 
12159   l('    IF l_contact_contains_str IS NULL THEN');
12160   l('      defct := 1;');
12161   l('    END IF;');
12162   l('    IF l_contact_pt_contains_str IS NULL THEN');
12163   l('      defcpt := 1;');
12164   l('    END IF;');
12165   l('');
12166   l('    IF l_contact_contains_str IS NOT NULL THEN');
12167   l('      open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL,l_contact_cur);');
12168   l('      LOOP');
12169   l('        FETCH l_contact_cur INTO ');
12170   l('            l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
12171   l('        EXIT WHEN l_contact_cur%NOTFOUND;');
12172   l('      IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN ');
12173   l('        l_index := map_id(l_org_contact_id);');
12174   l('          l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
12175   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id, null);');
12176 
12177   ds(fnd_log.level_statement);
12178   dc(fnd_log.level_statement,'Contact Level Matches');
12179   dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
12180   dc(fnd_log.level_statement,'l_score','l_score');
12181   de;
12182 
12183   l('      END IF; ');
12184   l('      END LOOP;');
12185   l('      CLOSE l_contact_cur;');
12186   l('    END IF;');
12187 
12188   l('');
12189   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
12190   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12191   l('      LOOP');
12192   l('        FETCH l_contact_pt_cur INTO ');
12193   l('            l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12194   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12195   l('      IF (l_cpt_contact_id IS NOT NULL AND (p_dup_contact_id IS NULL OR l_cpt_contact_id <>  p_dup_contact_id)) THEN ');
12196   l('        l_index := map_id(l_cpt_contact_id);');
12197   l('        IF l_match_str = '' OR '' THEN');
12198   l('          l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12199   l('          IF NOT H_SCORES.EXISTS(l_index) THEN');
12200   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
12201   l('          ELSE');
12202   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
12203   l('               H_SCORES(l_index).TOTAL_SCORE := ');
12204   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
12205   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
12206   l('            END IF;');
12207   l('          END IF;');
12208   l('        ELSE');
12209   l('          IF H_SCORES.EXISTS(l_index) THEN');
12210   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12211   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
12212   l('               H_SCORES(l_index).TOTAL_SCORE := ');
12213   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
12214   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
12215   l('            END IF;');
12216   l('          ELSIF defps=1 THEN');
12217   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12218   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
12219   l('          END IF;');
12220   l('        END IF;');
12221   l('        END IF; ');
12222   l('      END LOOP;');
12223   ds(fnd_log.level_statement);
12224   dc(fnd_log.level_statement,'Contact_point Level Matches');
12225   dc(fnd_log.level_statement,'l_org_contact_id','l_cpt_contact_id');
12226   dc(fnd_log.level_statement,'l_score','l_score');
12227   de;
12228   l('      CLOSE l_contact_pt_cur;');
12229   l('    END IF;');
12230   l('    ROLLBACK to get_matching_contacts ;');
12231   l('    x_num_matches := 0;');
12232   l('    l_org_contact_id := H_SCORES.FIRST;');
12233   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
12234   l('    WHILE l_org_contact_id IS NOT NULL LOOP');
12235   l('      IF l_match_str = '' OR '' THEN');
12236   ds(fnd_log.level_statement);
12237   dc(fnd_log.level_statement,'Match Contact ID','H_SCORES(l_org_contact_id).ORG_CONTACT_ID');
12238   dc(fnd_log.level_statement,'Score','round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100)');
12239   de;
12240 --  IF l_purpose = 'S' THEN
12241     l('        IF (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12242     l('            INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
12243     l('            VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100);');
12244 --  ELSE
12245 --  END IF;
12246   l('          x_num_matches := x_num_matches+1;');
12247   l('        END IF;');
12248   l('      ELSE');
12249 --  IF l_purpose = 'S' THEN
12250     l('           IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND');
12251     l('           H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND');
12252     l('           (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12253     l('          INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
12254     l('          VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100));');
12255 --  ELSE
12256 --  END IF;
12257   l('          x_num_matches := x_num_matches+1;');
12258   l('        END IF;');
12259   l('      END IF;');
12260   l('      l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);');
12261   l('    END LOOP;');
12262 
12263   d(fnd_log.level_procedure,'get_matching_contacts(-)');
12264 
12265   l('EXCEPTION');
12266   l('  WHEN FND_API.G_EXC_ERROR THEN');
12267   l('    ROLLBACK to get_matching_contacts ;');
12268   l('    RAISE FND_API.G_EXC_ERROR;');
12269   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12270   l('    ROLLBACK to get_matching_contacts ;');
12271   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12272   l('  WHEN OTHERS THEN');
12273   l('    ROLLBACK to get_matching_contacts ;');
12274   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12275   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contacts'');');
12276   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12277   l('    FND_MSG_PUB.ADD;');
12278   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12279   l('END get_matching_contacts;');
12280   l('');
12281   l('-------------------------------------------------------------------------------------');
12282   l('--------------------  BULK MATCH RULE ::: get_matching_contact_points ---------------');
12283   l('-------------------------------------------------------------------------------------');
12284   l('');
12285   l('PROCEDURE get_matching_contact_points (');
12286   l('        p_rule_id               IN      NUMBER,');
12287   l('        p_party_id              IN      NUMBER,');
12288   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
12289   l('        p_restrict_sql          IN      VARCHAR2,');
12290   l('        p_match_type            IN      VARCHAR2,');
12291   l('        p_dup_contact_point_id  IN      NUMBER, ');
12292   l('        x_search_ctx_id         OUT     NUMBER,');
12293   l('        x_num_matches           OUT     NUMBER');
12294   l(') IS');
12295   l('');
12296   l('');
12297   l('  -- Strings to hold the generated Intermedia query strings');
12298   l('  l_contact_pt_contains_str VARCHAR2(32000);');
12299   l('  l_tmp VARCHAR2(32000);');
12300   l('');
12301   l('  -- Other local variables');
12302   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
12303   l('  l_match_idx NUMBER;');
12304   l('  -- For Score calculation');
12305   l('  l_entered_max_score NUMBER;');
12306   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
12307   l('');
12308   FOR TX IN (
12309       SELECT distinct f.staged_attribute_column
12310       FROM hz_trans_functions_vl f, hz_secondary_trans st,
12311            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12312       WHERE sa.match_rule_id = p_rule_id
12313       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12314       AND st.function_id = f.function_id
12315       AND a.ENTITY_NAME='CONTACT_POINTS'
12316       AND a.attribute_id = sa.attribute_id) LOOP
12317     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12318   END LOOP;
12319   l('');
12320   l('  l_score NUMBER;');
12321   l('  l_idx NUMBER;');
12322   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
12323   l('  l_cpt_party_id NUMBER;');
12324   l('  l_cpt_ps_id NUMBER;');
12325   l('  l_cpt_contact_id NUMBER;');
12326   l('  l_contact_pt_id NUMBER;');
12327   l('  H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
12328   l('  H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;');
12329   l('  H_SCORE  HZ_PARTY_SEARCH.IDList;');
12330   l('');
12331   l('  cnt NUMBER :=0;');
12332   l('  l_party_max_score NUMBER;');
12333   l('  l_ps_max_score NUMBER;');
12334   l('  l_contact_max_score NUMBER;');
12335   l('  l_cpt_max_score NUMBER;');
12336   l('');
12337   l('  ');
12338   l('  BEGIN');
12339 
12340 
12341 
12342   d(fnd_log.level_procedure,'get_matching_contact_points(+)');
12343   ds(fnd_log.level_statement);
12344   dc(fnd_log.level_statement,'Input Parameters:');
12345   dc(fnd_log.level_statement,'p_match_type','p_match_type');
12346   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
12347   dc(fnd_log.level_statement,'p_dup_contact_point_id','p_dup_contact_point_id');
12348   de;
12349 
12350   l('');
12351   l('    -- ************************************');
12352   l('    -- STEP 1. Initialization and error checks');
12353   l('');
12354 
12355   l('    l_match_str := ''' || l_match_str || ''';');
12356   l('    IF p_match_type = ''AND'' THEN');
12357   l('      l_match_str := '' AND '';');
12358   l('    ELSIF p_match_type = ''OR'' THEN');
12359   l('      l_match_str := '' OR '';');
12360   l('    END IF;');
12361   l('SAVEPOINT get_matching_contact_points ;');
12362   l('    l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, ');
12363   l('       HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
12364   l('       p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
12365   l('    g_score_until_thresh := false;');
12366   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
12367   l('');
12368   l('    l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
12369   l('    init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);');
12370 
12371   l('');
12372   l('    -- Setup Search Context ID');
12373   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
12374   l('    x_search_ctx_id := l_search_ctx_id;');
12375 
12376   ds(fnd_log.level_statement);
12377   dc(fnd_log.level_statement,'l_match_str','l_match_str');
12378   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
12379   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
12380   de;
12381 
12382   l('');
12383   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
12384   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12385   l('      cnt := 1;');
12386   l('      LOOP');
12387   l('        FETCH l_contact_pt_cur INTO ');
12388   l('            l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12389   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12390   l('        IF (p_dup_contact_point_id IS NULL OR (');
12391   l('               p_dup_contact_point_id IS NOT NULL AND ');
12392   l('               l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND ');
12393   l('               p_dup_contact_point_id <>  l_contact_pt_id)) THEN   ');
12394   l('            H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;');
12395   l('            H_PARTY_ID(cnt) := l_cpt_party_id;');
12396   l('            H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12397   l('            cnt := cnt+1;');
12398   ds(fnd_log.level_statement);
12399   dc(fnd_log.level_statement,'Contact Point Matches');
12400   dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
12401   dc(fnd_log.level_statement,'l_score','l_score');
12402   de;
12403 
12404   l('        END IF; ');
12405   l('      END LOOP;');
12406   l('      CLOSE l_contact_pt_cur;');
12407 
12408   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
12409   l('ROLLBACK to get_matching_contact_points ;');
12410   l('      x_num_matches := 0; ');
12411   l('      FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP');
12412   ds(fnd_log.level_statement);
12413   dc(fnd_log.level_statement,'Match Contact Point ID','H_CONTACT_POINT_ID(I)');
12414   dc(fnd_log.level_statement,'Score','round((H_SCORE(I)/l_entered_max_score)*100)');
12415   de;
12416   l('        IF (H_SCORE(I)/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12417   l('        INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
12418   l('            l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);');
12419   l('            x_num_matches := x_num_matches + 1; ');
12420   l('        END IF;');
12421   l('      END LOOP; ');
12422   l('    END IF;');
12423 
12424   d(fnd_log.level_procedure,'get_matching_contact_points(-)');
12425 
12426   l('EXCEPTION');
12427   l('  WHEN FND_API.G_EXC_ERROR THEN');
12428   l('    ROLLBACK to get_matching_contact_points ;');
12429   l('    RAISE FND_API.G_EXC_ERROR;');
12430   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12431   l('    ROLLBACK to get_matching_contact_points ;');
12432   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12433   l('  WHEN OTHERS THEN');
12434   l('    ROLLBACK to get_matching_contact_points ;');
12435   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12436   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contact_points'');');
12437   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12438   l('    FND_MSG_PUB.ADD;');
12439   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12440   l('END get_matching_contact_points;');
12441 
12442   l('');
12443   l('   /**********************************************************');
12444   l('   This procedure finds the score details for a specific party that ');
12445   l('   matched ');
12446   l('');
12447   l('   **********************************************************/');
12448   l('');
12449   l('PROCEDURE get_score_details (');
12450   l('        p_rule_id               IN      NUMBER,');
12451   l('        p_party_id              IN      NUMBER,');
12452   l('        p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
12453   l('        p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
12454   l('        p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
12455   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
12456   l('        x_search_ctx_id         IN OUT  NUMBER');
12457   l(') IS');
12458   l('');
12459   l('  -- Strings to hold the generated Intermedia query strings');
12460   l('  l_party_contains_str VARCHAR2(32000); ');
12461   l('  l_party_site_contains_str VARCHAR2(32000);');
12462   l('  l_contact_contains_str VARCHAR2(32000);');
12463   l('  l_contact_pt_contains_str VARCHAR2(32000);');
12464   l('  l_tmp VARCHAR2(32000);');
12465   l('');
12466   l('  -- Other local variables');
12467   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
12468   l('  -- For Score calculation');
12469   l('  l_max_score NUMBER;');
12470   l('  l_entered_max_score NUMBER;');
12471   l('  FIRST BOOLEAN;');
12472   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
12473   l('');
12474   FOR TX IN (
12475       SELECT distinct f.staged_attribute_column
12476       FROM hz_trans_functions_vl f, hz_secondary_trans st,
12477            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12478       WHERE sa.match_rule_id = p_rule_id
12479       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12480       AND st.function_id = f.function_id
12481       AND a.attribute_id = sa.attribute_id) LOOP
12482     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12483     l('  l_max_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12484   END LOOP;
12485   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
12486   l('');
12487   l('  l_score NUMBER;');
12488   l('  l_match_idx NUMBER;');
12489   l('  l_idx NUMBER;');
12490   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
12491   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
12492   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
12493   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
12494   l('  l_party_id NUMBER;');
12495   l('  l_ps_party_id NUMBER;');
12496   l('  l_ct_party_id NUMBER;');
12497   l('  l_cpt_party_id NUMBER;');
12498   l('  l_cpt_ps_id NUMBER;');
12499   l('  l_cpt_contact_id NUMBER;');
12500   l('  l_party_site_id NUMBER;');
12501   l('  l_org_contact_id NUMBER;');
12502   l('  l_contact_pt_id NUMBER;');
12503   l('  l_ps_contact_id NUMBER;');
12504   l('  l_max_id NUMBER;');
12505   l('  l_max_idx NUMBER;');
12506   l('');
12507   l('  l_index NUMBER;');
12508   l('  l_party_max_score NUMBER;');
12509   l('  l_ps_max_score NUMBER;');
12510   l('  l_contact_max_score NUMBER;');
12511   l('  l_cpt_max_score NUMBER;');
12512   l('');
12513   l('  ');
12514   l('  BEGIN');
12515   l('');
12516 
12517   d(fnd_log.level_statement,'get_score_details(+)');
12518   l('    -- ************************************');
12519   l('    -- STEP 1. Initialization and error checks');
12520   l('');
12521   l('    l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,'' OR '', l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
12522   l('    g_score_until_thresh := false;');
12523   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
12524 
12525   l('    l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
12526   l('    l_contact_contains_str := check_contacts_bulk (p_contact_list);');
12527   l('    l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
12528 
12529   l('    init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
12530   l('');
12531   l('    -- Setup Search Context ID');
12532   l('    IF x_search_ctx_id IS NULL THEN');
12533   l('      SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
12534   l('      x_search_ctx_id := l_search_ctx_id;');
12535   l('    ELSE');
12536   l('      l_search_ctx_id := x_search_ctx_id;');
12537   l('    END IF;');
12538   l('');
12539   l('    open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);');
12540   l('    LOOP ');
12541   l('        FETCH l_party_cur INTO');
12542   l('           l_party_id '||l_p_into_list||';');
12543   l('        EXIT WHEN l_party_cur%NOTFOUND;');
12544   IF l_p_param_list IS NOT NULL THEN
12545     l('          INSERT_PARTY_SCORE(p_party_id, p_party_id, l_search_ctx_id, p_party_search_rec, g_party_stage_rec, '||l_p_param_list||',1);');
12546   END IF;
12547   l('    END LOOP;');
12548   l('    CLOSE l_party_cur;');
12549   l('');
12550   l('    IF l_party_site_contains_str IS NOT NULL THEN');
12551   l('      l_max_score := 0;');
12552   l('      l_max_id := 0;');
12553   l('      l_max_idx := 0;');
12554   l('      open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,l_party_site_cur);');
12555   l('      LOOP');
12556   l('        FETCH l_party_site_cur INTO ');
12557   l('            l_party_site_id, l_ps_party_id,l_ps_contact_id '||l_ps_into_list||';');
12558   l('        EXIT WHEN l_party_site_cur%NOTFOUND;');
12559   l('        l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
12560   l('        IF l_score > l_max_score THEN');
12561   l('          l_max_score := l_score;');
12562   l('          l_max_id := l_party_site_id;');
12563   l('          l_max_idx := l_match_idx;');
12564   FOR TX IN (
12565       SELECT distinct f.staged_attribute_column
12566       FROM hz_trans_functions_vl f, hz_secondary_trans st,
12567            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12568       WHERE sa.match_rule_id = p_rule_id
12569       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12570       AND st.function_id = f.function_id
12571       AND a.entity_name = 'PARTY_SITES'
12572       AND a.attribute_id = sa.attribute_id) LOOP
12573     l('          l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
12574   END LOOP;
12575   l('        END IF;');
12576   l('      END LOOP;');
12577   l('      CLOSE l_party_site_cur;');
12578   l('      IF l_max_score>0 THEN');
12579   l('        INSERT_PARTY_SITES_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_party_site_list(l_max_idx), g_party_site_stage_list(l_max_idx) '||replace(l_ps_param_list,'l_TX','l_max_TX')||',l_max_idx);');
12580   l('      END IF;');
12581   l('    END IF;');
12582   l('');
12583   l('    IF l_contact_contains_str IS NOT NULL THEN');
12584   l('      l_max_score := 0;');
12585   l('      l_max_id := 0;');
12586   l('      l_max_idx := 0;');
12587   l('      open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL,l_contact_cur);');
12588   l('      LOOP');
12589   l('        FETCH l_contact_cur INTO ');
12590   l('            l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
12591   l('        EXIT WHEN l_contact_cur%NOTFOUND;');
12592   l('        l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
12593   l('        IF l_score > l_max_score THEN');
12594   l('          l_max_score := l_score;');
12595   l('          l_max_id := l_org_contact_id;');
12596   l('          l_max_idx := l_match_idx;');
12597   FOR TX IN (
12598       SELECT distinct f.staged_attribute_column
12599       FROM hz_trans_functions_vl f, hz_secondary_trans st,
12600            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12601       WHERE sa.match_rule_id = p_rule_id
12602       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12603       AND st.function_id = f.function_id
12604       AND a.entity_name = 'CONTACTS'
12605       AND a.attribute_id = sa.attribute_id) LOOP
12606     l('          l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
12607   END LOOP;
12608   l('        END IF;');
12609   l('      END LOOP;');
12610   l('      CLOSE l_contact_cur;');
12611   l('      IF l_max_score>0 THEN');
12612   l('        INSERT_CONTACTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_list(l_max_idx), g_contact_stage_list(l_max_idx) '||replace(l_c_param_list,'l_TX','l_max_TX')||',l_max_idx);');
12613   l('      END IF;');
12614   l('    END IF;');
12615   l('');
12616   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
12617   l('      l_max_score := 0;');
12618   l('      l_max_id := 0;');
12619   l('      l_max_idx := 0;');
12620   l('      open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12621   l('      LOOP');
12622   l('        FETCH l_contact_pt_cur INTO ');
12623   l('            l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12624   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12625   l('        l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12626   l('        IF l_score > l_max_score THEN');
12627   l('          l_max_score := l_score;');
12628   l('          l_max_id := l_contact_pt_id;');
12629   l('          l_max_idx := l_match_idx;');
12630   FOR TX IN (
12631       SELECT distinct f.staged_attribute_column
12632       FROM hz_trans_functions_vl f, hz_secondary_trans st,
12633            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12634       WHERE sa.match_rule_id = p_rule_id
12635       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12636       AND st.function_id = f.function_id
12637       AND a.entity_name = 'CONTACT_POINTS'
12638       AND a.attribute_id = sa.attribute_id) LOOP
12639     l('          l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
12640   END LOOP;
12641   l('        END IF;');
12642   l('      END LOOP;');
12643   l('      IF l_max_score>0 THEN');
12644   l('        INSERT_CONTACT_POINTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_point_list(l_max_idx), g_contact_pt_stage_list(l_max_idx) '||replace(l_cpt_param_list,'l_TX','l_max_TX')||',l_max_idx);');
12645   l('      END IF;');
12646   l('      CLOSE l_contact_pt_cur;');
12647   l('    END IF;');
12648   l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12649   l('    DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12650   l('    DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12651   l('    DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12652   l('    DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12653   d(fnd_log.level_procedure,'get_score_details(-)');
12654 
12655 
12656   l('EXCEPTION');
12657   l('  WHEN FND_API.G_EXC_ERROR THEN');
12658   l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12659   l('    DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12660   l('    DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12661   l('    DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12662   l('    DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12663   l('    RAISE FND_API.G_EXC_ERROR;');
12664   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12665   l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12666   l('    DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12667   l('    DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12668   l('    DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12669   l('    DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12670   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12671   l('  WHEN OTHERS THEN');
12672   l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12673   l('    DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12674   l('    DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12675   l('    DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12676   l('    DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12677   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12678   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_score_details'');');
12679   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12680   l('    FND_MSG_PUB.ADD;');
12681   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12682   l('END get_score_details;');
12683   l('');
12684 
12685   generate_acquire_proc(p_rule_id, 'Q');
12686 
12687 
12688   generate_party_map_proc_bulk('MAP_PARTY_REC', p_rule_id);
12689   l('');
12690   generate_map_proc_bulk('PARTY_SITES', 'MAP_PARTY_SITE_REC', p_rule_id);
12691   l('');
12692   generate_map_proc_bulk('CONTACTS', 'MAP_CONTACT_REC', p_rule_id);
12693   l('');
12694   generate_map_proc_bulk('CONTACT_POINTS', 'MAP_CONTACT_POINT_REC', p_rule_id);
12695   l('');
12696   generate_check_proc(p_rule_id);
12697 
12698 
12699   generate_check_staged (p_rule_id);
12700   /*l('  PROCEDURE enable_debug IS');
12701 
12702   l('  BEGIN');
12703   l('    g_debug_count := g_debug_count + 1;');
12704 
12705   l('    IF g_debug_count = 1 THEN');
12706   l('      IF fnd_profile.value(''HZ_API_FILE_DEBUG_ON'') = ''Y'' OR');
12707   l('         fnd_profile.value(''HZ_API_DBMS_DEBUG_ON'') = ''Y''');
12708   l('      THEN');
12709   l('        hz_utility_v2pub.enable_debug;');
12710   l('        g_debug := TRUE;');
12711   d('PKG: '||p_pkg_name||' (+)');
12712   l('      END IF;');
12713   l('    END IF;');
12714   l('  END enable_debug;');
12715 
12716   l('  PROCEDURE disable_debug IS');
12717 
12718   l('  BEGIN');
12719 
12720   l('    IF g_debug THEN');
12721   l('      g_debug_count := g_debug_count - 1;');
12722 
12723   l('      IF g_debug_count = 0 THEN');
12724   d('PKG: '||p_pkg_name||' (-)');
12725   l('        hz_utility_v2pub.disable_debug;');
12726   l('        g_debug := FALSE;');
12727   l('      END IF;');
12728   l('    END IF;');
12729 
12730   l('  END disable_debug;');
12731   */
12732 
12733   l('END;');
12734   l('');
12735 END gen_pkg_body_bulk ;
12736 
12737 
12738 
12739 
12740 
12741 
12742 
12743 FUNCTION has_trx_context(proc VARCHAR2) RETURN BOOLEAN IS
12744 
12745   l_sql VARCHAR2(255);
12746   l_entity VARCHAR2(255);
12747   l_procedure VARCHAR2(255);
12748   l_attribute VARCHAR2(255);
12749   c NUMBER;
12750   n NUMBER;
12751   l_custom BOOLEAN;
12752 
12753 BEGIN
12754   c := dbms_sql.open_cursor;
12755   l_sql := 'select ' || proc ||
12756            '(:attrval,:lang,:attr,:entity,:ctx) from dual';
12757   dbms_sql.parse(c,l_sql,2);
12758   DBMS_SQL.BIND_VARIABLE(c,':attrval','x');
12759   DBMS_SQL.BIND_VARIABLE(c,':lang','x');
12760   DBMS_SQL.BIND_VARIABLE(c,':attr','x');
12761   DBMS_SQL.BIND_VARIABLE(c,':entity','x');
12762   DBMS_SQL.BIND_VARIABLE(c,':ctx','x');
12763   n:=DBMS_SQL.execute(c);
12764   dbms_sql.close_cursor(c);
12765   RETURN TRUE;
12766 EXCEPTION
12767   WHEN OTHERS THEN
12768     dbms_sql.close_cursor(c);
12769     RETURN FALSE;
12770 END;
12771 
12772 --VJN Introduced for Bulk Match Rules
12773 PROCEDURE generate_party_map_proc_bulk (
12774    p_proc_name          IN      VARCHAR2,
12775    p_rule_id            IN      NUMBER
12776 ) IS
12777 
12778   NONE BOOLEAN := TRUE;
12779   trxctx BOOLEAN := FALSE;
12780   INSERT_TRFNS varchar2(32000);
12781   INSERT_TRFN_VALUES varchar2(32000);
12782 
12783 BEGIN
12784 
12785   l('');
12786   l('/************************************************');
12787   l('  This procedure maps a search record from the logical');
12788   l('  record structure to the stage schema structure ');
12789   l('  for the PARTY Entity after applying ');
12790   l('  the defined transformations');
12791   l('************************************************/');
12792   l('');
12793   l('PROCEDURE ' || p_proc_name || '( ');
12794   l('    p_search_ctx IN BOOLEAN,');
12795   l('    p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, ');
12796   l('    x_entered_max_score OUT NUMBER,');
12797   l('    x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type');
12798   l('  ) IS ');
12799   l('  tmp VARCHAR2(4000);');
12800   l('BEGIN');
12801   ldbg_s('Inside Calling Procedure - '||p_proc_name);
12802   l('   IF p_search_ctx THEN');
12803   l('     x_entered_max_score:=0;');
12804   for SECATTRS IN (
12805         SELECT a.ATTRIBUTE_NAME, SCORE
12806         FROM HZ_TRANS_ATTRIBUTES_VL a,
12807              HZ_MATCH_RULE_SECONDARY sattr
12808         WHERE sattr.MATCH_RULE_ID = p_rule_id
12809         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12810         AND a.ENTITY_NAME = 'PARTY') LOOP
12811     l('    IF p_search_rec.'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12812     l('      x_entered_max_score := x_entered_max_score+'||SECATTRS.SCORE||';');
12813     l('    END IF;');
12814   END LOOP;
12815   l('    END IF;');
12816 
12817   for FUNCS IN (
12818         SELECT a.ATTRIBUTE_NAME,
12819                f.PROCEDURE_NAME,
12820                f.STAGED_ATTRIBUTE_COLUMN
12821         FROM HZ_TRANS_FUNCTIONS_VL f,
12822              HZ_TRANS_ATTRIBUTES_VL a,
12823              HZ_MATCH_RULE_PRIMARY pattr,
12824              HZ_PRIMARY_TRANS pfunc
12825         WHERE pattr.MATCH_RULE_ID = p_rule_id
12826         AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12827         AND a.ENTITY_NAME = 'PARTY'
12828         AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
12829         AND pfunc.FUNCTION_ID = f.FUNCTION_ID
12830 
12831         UNION
12832 
12833         SELECT a.ATTRIBUTE_NAME,
12834                f.PROCEDURE_NAME,
12835                f.STAGED_ATTRIBUTE_COLUMN
12836         FROM HZ_TRANS_FUNCTIONS_VL f,
12837              HZ_TRANS_ATTRIBUTES_VL a,
12838              HZ_MATCH_RULE_SECONDARY sattr,
12839              HZ_SECONDARY_TRANS sfunc
12840         WHERE sattr.MATCH_RULE_ID = p_rule_id
12841         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12842         AND a.ENTITY_NAME = 'PARTY'
12843         AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
12844         AND sfunc.FUNCTION_ID = f.FUNCTION_ID
12845 
12846         UNION
12847 
12848         SELECT a.attribute_name,
12849                f.PROCEDURE_NAME,
12850                f.STAGED_ATTRIBUTE_COLUMN
12851         FROM HZ_TRANS_FUNCTIONS_VL f,
12852             HZ_TRANS_ATTRIBUTES_VL a
12853         WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12854         AND a.entity_name = 'PARTY'
12855         AND a.attribute_name='PARTY_TYPE'
12856         AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
12857         AND nvl(f.active_flag,'Y')='Y'
12858         AND ROWNUM=1
12859   )
12860   LOOP
12861     NONE := FALSE;
12862     trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
12863     l('  IF p_search_ctx THEN');
12864     l('    IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12865     l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
12866     l('        ' || FUNCS.PROCEDURE_NAME ||'(');
12867     l('             p_search_rec.'||FUNCS.ATTRIBUTE_NAME);
12868     l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
12869     IF trxctx THEN
12870       l('             ,''PARTY'','''||g_context||''');');
12871     ELSE
12872       l('             ,''PARTY'');');
12873     END IF;
12874     l('    ELSE');
12875     l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
12876     l('    END IF;');
12877     IF NOT trxctx THEN
12878       l('  END IF;');
12879     ELSE
12880       l('  ELSE');
12881       l('    IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12882       l('      tmp :=' || FUNCS.PROCEDURE_NAME ||'(');
12883       l('             x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
12884       l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
12885       l('             ,''PARTY'',''SCORE'');');
12886       l('      IF tmp IS NOT NULL THEN');
12887       l('        x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
12888       l('      END IF;');
12889       l('    END IF;');
12890       l('  END IF;');
12891     END IF;
12892     INSERT_TRFNS := INSERT_TRFNS ||','||FUNCS.STAGED_ATTRIBUTE_COLUMN;
12893     INSERT_TRFN_VALUES := INSERT_TRFN_VALUES ||','||'x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
12894   END LOOP;
12895 
12896   IF NOT NONE THEN
12897      l('IF p_search_ctx THEN');
12898      l('     insert into HZ_SRCH_PARTIES(batch_id,party_id, party_osr,party_os' || INSERT_TRFNS
12899                      || ')'||' values(-1,-1,-1,-1'|| INSERT_TRFN_VALUES ||');');
12900      l('END IF;');
12901   END IF;
12902 
12903   IF NONE THEN
12904     l('  NULL;');
12905   END IF;
12906 
12907 
12908   l('EXCEPTION');
12909   l('  WHEN OTHERS THEN');
12910   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
12911   l('    FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
12912   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
12913   l('    FND_MSG_PUB.ADD;');
12914   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12915   l('END;');
12916 
12917 END generate_party_map_proc_bulk ;
12918 
12919 PROCEDURE generate_map_proc (
12920    p_entity             IN      VARCHAR2,
12921    p_proc_name          IN      VARCHAR2,
12922    p_rule_id		IN      NUMBER
12923 ) IS
12924 
12925   NONE BOOLEAN := TRUE;
12926   trxctx BOOLEAN := FALSE;
12927 BEGIN
12928 
12929   l('');
12930   l('/************************************************');
12931   l('  This procedure maps a search record from the logical');
12932   l('  record structure to the stage schema structure ');
12933   l('  for the '||p_entity || ' Entity after applying ');
12934   l('  the defined transformations');
12935   l('************************************************/');
12936   l('');
12937   l('PROCEDURE ' || p_proc_name || '( ');
12938   l('    p_search_ctx IN BOOLEAN,');
12939   IF p_entity = 'PARTY_SITES' THEN
12940     l('    p_search_list IN HZ_PARTY_SEARCH.party_site_list, ');
12941     l('    x_entered_max_score OUT NUMBER,');
12942     l('    x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list');
12943     l('  ) IS ');
12944   ELSIF p_entity = 'CONTACTS' THEN
12945     l('    p_search_list IN HZ_PARTY_SEARCH.contact_list, ');
12946     l('    x_entered_max_score OUT NUMBER,');
12947     l('    x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list');
12948     l('  ) IS ');
12949   ELSIF p_entity = 'CONTACT_POINTS' THEN
12950     l('    p_search_list IN HZ_PARTY_SEARCH.contact_point_list, ');
12951     l('    x_entered_max_score OUT NUMBER,');
12952     l('    x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list');
12953     l('  ) IS ');
12954   END IF;
12955   l('  l_current_max_score NUMBER;');
12956   l('  tmp VARCHAR2(4000);');
12957   if l_purpose = 'S' AND p_entity = 'CONTACT_POINTS' then
12958     l('  TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);');
12959     l('  l_cnt_pt_type_index INDEX_VARCHAR100_TBL;');
12960 
12961     l('  TYPE CONTACT_PT_REC_TYPE IS RECORD (');
12962     l('  contact_pt_type		VARCHAR2(100),');
12963     l('  max_score    		NUMBER) ;');
12964 
12965     l('  TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;');
12966     l('  l_cnt_pt_type contact_pt_list;');
12967 
12968     l('  N NUMBER := 1;');
12969     l('  x_modify VARCHAR2(1);');
12970   end if;
12971   l('BEGIN');
12972   ldbg_s('Inside Calling Procedure - '||p_proc_name);
12973   ldbg_s('p_entity - '||p_entity);
12974   l('  IF p_search_ctx THEN');
12975   IF p_entity = 'PARTY_SITES' THEN
12976     l('   g_ps_den_only:=TRUE;');
12977   END IF;
12978   l('    x_entered_max_score:=0;');
12979   l('    FOR I IN 1..p_search_list.COUNT LOOP');
12980   l('      l_current_max_score:=0;');
12981   IF p_entity = 'CONTACT_POINTS' THEN
12982     l('      x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;');
12983   END IF;
12984   for SECATTRS IN (
12985         SELECT a.ATTRIBUTE_NAME, SCORE, nvl(a.denorm_flag,'N') DENORM_FLAG
12986         FROM HZ_TRANS_ATTRIBUTES_VL a,
12987              HZ_MATCH_RULE_SECONDARY sattr
12988         WHERE sattr.MATCH_RULE_ID = p_rule_id
12989         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12990         AND a.ENTITY_NAME = p_entity) LOOP
12991     l('      IF p_search_list(I).'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12992     l('        l_current_max_score := l_current_max_score+'||SECATTRS.SCORE||';');
12993     IF p_entity = 'PARTY_SITES' AND SECATTRS.DENORM_FLAG='N' THEN
12994       l('        g_ps_den_only:=FALSE;');
12995     END IF;
12996 
12997     l('      END IF;');
12998 
12999   END LOOP;
13000 if l_purpose = 'S' AND p_entity = 'CONTACT_POINTS' then
13001        l('      x_modify := ''N'';');
13002         l('      FOR J IN 1..l_cnt_pt_type.count LOOP');
13003           l('      if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then');
13004  	  l('         x_modify := ''Y'';');
13005             l('      IF l_cnt_pt_type(J).max_score<l_current_max_score THEN');
13006                 l('      l_cnt_pt_type(J).max_score :=l_current_max_score;');
13007                 l('      EXIT;');
13008             l('      END IF;');
13009           l('      end if;');
13010         l('      END LOOP;');
13011         l('      if x_modify=''N'' then');
13012             l('      l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;');
13013             l('      l_cnt_pt_type(N).max_score := l_current_max_score;');
13014             l('      N:= N+1;');
13015         l('      end if;');
13016 
13017    else
13018   l('      IF l_current_max_score>x_entered_max_score THEN');
13019   l('        x_entered_max_score:=l_current_max_score;');
13020   l('      END IF;');
13021   end if;
13022 
13023   l('    END LOOP;');
13024   if l_purpose = 'S' AND p_entity = 'CONTACT_POINTS' then
13025       l('   FOR M IN 1..l_cnt_pt_type.count LOOP');
13026         l('   x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;');
13027     l('   END LOOP;');
13028   end if;
13029   l('  END IF;');
13030 
13031 
13032   for FUNCS IN (
13033         SELECT a.ATTRIBUTE_NAME,
13034                f.PROCEDURE_NAME,
13035                f.STAGED_ATTRIBUTE_COLUMN
13036         FROM HZ_TRANS_FUNCTIONS_VL f,
13037              HZ_TRANS_ATTRIBUTES_VL a,
13038              HZ_MATCH_RULE_PRIMARY pattr,
13039              HZ_PRIMARY_TRANS pfunc
13040         WHERE pattr.MATCH_RULE_ID = p_rule_id
13041         AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13042         AND a.ENTITY_NAME = p_entity
13043         AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13044         AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13045 
13046         UNION
13047 
13048         SELECT a.ATTRIBUTE_NAME,
13049                f.PROCEDURE_NAME,
13050                f.STAGED_ATTRIBUTE_COLUMN
13051         FROM HZ_TRANS_FUNCTIONS_VL f,
13052              HZ_TRANS_ATTRIBUTES_VL a,
13053              HZ_MATCH_RULE_SECONDARY sattr,
13054              HZ_SECONDARY_TRANS sfunc
13055         WHERE sattr.MATCH_RULE_ID = p_rule_id
13056         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13057         AND a.ENTITY_NAME = p_entity
13058         AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13059         AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13060   )
13061   LOOP
13062     NONE := FALSE;
13063     l('  FOR I IN 1..p_search_list.COUNT LOOP');
13064     l('    IF p_search_ctx THEN');
13065     trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
13066     l('      IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13067     l('        x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13068     l('          ' || FUNCS.PROCEDURE_NAME ||'(');
13069     l('             p_search_list(I).'||FUNCS.ATTRIBUTE_NAME);
13070     l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13071     IF NOT trxctx THEN
13072       l('             ,''' ||p_entity||''');');
13073     ELSE
13074       l('             ,''' ||p_entity||''','''||g_context||''');');
13075     END IF;
13076     l('      ELSE');
13077     l('        x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13078     l('      END IF;');
13079     IF NOT trxctx THEN
13080       l('    END IF;');
13081     ELSE
13082       l('    ELSE');
13083       l('      IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13084       l('        tmp := ' || FUNCS.PROCEDURE_NAME ||'(');
13085       l('             x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
13086       l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13087       l('             ,''' ||p_entity||''',''SCORE'');');
13088       l('        IF tmp IS NOT NULL THEN');
13089       l('          x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
13090       l('        END IF;');
13091       l('      END IF;');
13092       l('    END IF;');
13093     END IF;
13094     l('  END LOOP;');
13095   END LOOP;
13096   IF NONE THEN
13097     l('  NULL;');
13098   END IF;
13099 
13100   l('EXCEPTION');
13101   l('  WHEN OTHERS THEN');
13102   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13103   l('    FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13104   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13105   l('    FND_MSG_PUB.ADD;');
13106   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13107   l('END;');
13108 
13109 END generate_map_proc;
13110 
13111 
13112 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
13113  -- OF THE GLOBAL CONDITION RECORD FOR REGULAR MATCH RULES
13114 
13115 PROCEDURE generate_ent_cond_pop_rec_proc (
13116    p_entity             IN      VARCHAR2,
13117    p_rule_id		IN      NUMBER
13118 ) IS
13119 
13120  p_proc_name VARCHAR2(200);
13121  NONE BOOLEAN := TRUE;
13122 
13123 
13124  BEGIN
13125 
13126   p_proc_name := 'POP_'||p_entity||'_COND_REC';
13127   l('');
13128   l('/************************************************');
13129   l('  This procedure populates global cond record');
13130   l('  for the '||p_entity || ' Entity ');
13131   l('************************************************/');
13132   l('');
13133   l('PROCEDURE ' || p_proc_name||'(');
13134     IF p_entity = 'PARTY' THEN
13135       l('    p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type ');
13136       l('  ) IS ');
13137     ELSIF p_entity = 'PARTY_SITES' THEN
13138       l('    p_search_list IN HZ_PARTY_SEARCH.party_site_list ');
13139       l('  ) IS ');
13140     ELSIF p_entity = 'CONTACTS' THEN
13141       l('    p_search_list IN HZ_PARTY_SEARCH.contact_list ');
13142       l('  ) IS ');
13143     ELSIF p_entity = 'CONTACT_POINTS' THEN
13144       l('    p_search_list IN HZ_PARTY_SEARCH.contact_point_list ');
13145       l('  ) IS ');
13146   END IF;
13147 
13148   l('BEGIN');
13149 
13150   for FUNCS IN (
13151         SELECT a.ATTRIBUTE_ID, a.ATTRIBUTE_NAME
13152         FROM HZ_TRANS_FUNCTIONS_VL f,
13153              HZ_TRANS_ATTRIBUTES_VL a,
13154              HZ_MATCH_RULE_PRIMARY pattr,
13155              HZ_PRIMARY_TRANS pfunc
13156         WHERE pattr.MATCH_RULE_ID = p_rule_id
13157         AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13158         AND a.ENTITY_NAME = p_entity
13159         AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13160         AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13161 
13162         UNION
13163 
13164         SELECT a.ATTRIBUTE_ID, a.ATTRIBUTE_NAME
13165         FROM HZ_TRANS_FUNCTIONS_VL f,
13166              HZ_TRANS_ATTRIBUTES_VL a,
13167              HZ_MATCH_RULE_SECONDARY sattr,
13168              HZ_SECONDARY_TRANS sfunc
13169         WHERE sattr.MATCH_RULE_ID = p_rule_id
13170         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13171         AND a.ENTITY_NAME = p_entity
13172         AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13173         AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13174   )
13175   LOOP
13176      IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( FUNCS.attribute_id)
13177      THEN
13178         NONE := FALSE ;
13179         l('---------POPULATE THE GLOBAL WORD CONDITION REC FOR ' || p_entity || '-------------');
13180         IF p_entity = 'PARTY'
13181 	    THEN
13182 
13183             l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||FUNCS.attribute_id||','||'p_search_rec.'||FUNCS.attribute_name||');');
13184 
13185 	    ELSE
13186             l('------ Populate global condition record only if search list is not empty -----------');
13187             l(' IF p_search_list.COUNT > 0');
13188             l(' THEN') ;
13189 		    l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||FUNCS.attribute_id||','||'p_search_list(1).'||FUNCS.attribute_name||');');
13190             l('END IF ;');
13191 	    END IF;
13192      END IF ;
13193   END LOOP;
13194 
13195   IF NONE
13196   THEN
13197     l( 'NULL ;');
13198   END IF ;
13199 
13200   l('EXCEPTION');
13201   l('  WHEN OTHERS THEN');
13202   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13203   l('    FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13204   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13205   l('    FND_MSG_PUB.ADD;');
13206   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13207   l('END;');
13208 
13209 END ;
13210 
13211 PROCEDURE generate_map_proc_bulk (
13212    p_entity             IN      VARCHAR2,
13213    p_proc_name          IN      VARCHAR2,
13214    p_rule_id		IN      NUMBER
13215 ) IS
13216 
13217   NONE BOOLEAN := TRUE;
13218   trxctx BOOLEAN := FALSE;
13219   INSERT_TRFNS varchar2(32000);
13220   INSERT_TRFN_VALUES varchar2(32000);
13221 BEGIN
13222 
13223   l('');
13224   l('/************************************************');
13225   l('  This procedure maps a search record from the logical');
13226   l('  record structure to the stage schema structure ');
13227   l('  for the '||p_entity || ' Entity after applying ');
13228   l('  the defined transformations');
13229   l('************************************************/');
13230   l('');
13231   l('PROCEDURE ' || p_proc_name || '( ');
13232   l('    p_search_ctx IN BOOLEAN,');
13233   IF p_entity = 'PARTY_SITES' THEN
13234     l('    p_search_list IN HZ_PARTY_SEARCH.party_site_list, ');
13235     l('    x_entered_max_score OUT NUMBER,');
13236     l('    x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list');
13237     l('  ) IS ');
13238   ELSIF p_entity = 'CONTACTS' THEN
13239     l('    p_search_list IN HZ_PARTY_SEARCH.contact_list, ');
13240     l('    x_entered_max_score OUT NUMBER,');
13241     l('    x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list');
13242     l('  ) IS ');
13243   ELSIF p_entity = 'CONTACT_POINTS' THEN
13244     l('    p_search_list IN HZ_PARTY_SEARCH.contact_point_list, ');
13245     l('    x_entered_max_score OUT NUMBER,');
13246     l('    x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list');
13247     l('  ) IS ');
13248   END IF;
13249   l('  l_current_max_score NUMBER;');
13250   l('  tmp VARCHAR2(4000);');
13251   l('BEGIN');
13252   ldbg_s('Inside Calling Procedure - '||p_proc_name);
13253   ldbg_s('p_entity - '||p_entity);
13254   l('  IF p_search_ctx THEN');
13255   l('    x_entered_max_score:=0;');
13256   l('    FOR I IN 1..p_search_list.COUNT LOOP');
13257   l('      l_current_max_score:=0;');
13258   IF p_entity = 'CONTACT_POINTS' THEN
13259     l('      x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;');
13260   END IF;
13261   for SECATTRS IN (
13262         SELECT a.ATTRIBUTE_NAME, SCORE
13263         FROM HZ_TRANS_ATTRIBUTES_VL a,
13264              HZ_MATCH_RULE_SECONDARY sattr
13265         WHERE sattr.MATCH_RULE_ID = p_rule_id
13266         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13267         AND a.ENTITY_NAME = p_entity) LOOP
13268     l('      IF p_search_list(I).'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13269     l('        l_current_max_score := l_current_max_score+'||SECATTRS.SCORE||';');
13270     l('      END IF;');
13271   END LOOP;
13272   l('      IF l_current_max_score>x_entered_max_score THEN');
13273   l('        x_entered_max_score:=l_current_max_score;');
13274   l('      END IF;');
13275   l('    END LOOP;');
13276   l('  END IF;');
13277 
13278   for FUNCS IN (
13279         SELECT a.ATTRIBUTE_NAME,
13280                f.PROCEDURE_NAME,
13281                f.STAGED_ATTRIBUTE_COLUMN
13282         FROM HZ_TRANS_FUNCTIONS_VL f,
13283              HZ_TRANS_ATTRIBUTES_VL a,
13284              HZ_MATCH_RULE_PRIMARY pattr,
13285              HZ_PRIMARY_TRANS pfunc
13286         WHERE pattr.MATCH_RULE_ID = p_rule_id
13287         AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13288         AND a.ENTITY_NAME = p_entity
13289         AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13290         AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13291 
13292         UNION
13293 
13294         SELECT a.ATTRIBUTE_NAME,
13295                f.PROCEDURE_NAME,
13296                f.STAGED_ATTRIBUTE_COLUMN
13297         FROM HZ_TRANS_FUNCTIONS_VL f,
13298              HZ_TRANS_ATTRIBUTES_VL a,
13299              HZ_MATCH_RULE_SECONDARY sattr,
13300              HZ_SECONDARY_TRANS sfunc
13301         WHERE sattr.MATCH_RULE_ID = p_rule_id
13302         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13303         AND a.ENTITY_NAME = p_entity
13304         AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13305         AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13306   )
13307   LOOP
13308     NONE := FALSE;
13309     l('  FOR I IN 1..p_search_list.COUNT LOOP');
13310     l('    IF p_search_ctx THEN');
13311     trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
13312     l('      IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13313     l('        x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13314     l('          ' || FUNCS.PROCEDURE_NAME ||'(');
13315     l('             p_search_list(I).'||FUNCS.ATTRIBUTE_NAME);
13316     l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13317     IF NOT trxctx THEN
13318       l('             ,''' ||p_entity||''');');
13319     ELSE
13320       l('             ,''' ||p_entity||''','''||g_context||''');');
13321     END IF;
13322     l('      ELSE');
13323     l('        x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13324     l('      END IF;');
13325     IF NOT trxctx THEN
13326       l('    END IF;');
13327     ELSE
13328       l('    ELSE');
13329       l('      IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13330       l('        tmp := ' || FUNCS.PROCEDURE_NAME ||'(');
13331       l('             x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
13332       l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13333       l('             ,''' ||p_entity||''',''SCORE'');');
13334       l('        IF tmp IS NOT NULL THEN');
13335       l('          x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
13336       l('        END IF;');
13337       l('      END IF;');
13338       l('    END IF;');
13339     END IF;
13340     l('  END LOOP;');
13341   END LOOP;
13342 
13343   -- VJN : For inserting into the Search Tables
13344    IF NOT NONE THEN
13345 
13346                for FUNCS IN (
13347                     SELECT a.ATTRIBUTE_NAME,
13348                            f.PROCEDURE_NAME,
13349                            f.STAGED_ATTRIBUTE_COLUMN
13350                     FROM HZ_TRANS_FUNCTIONS_VL f,
13351                          HZ_TRANS_ATTRIBUTES_VL a,
13352                          HZ_MATCH_RULE_PRIMARY pattr,
13353                          HZ_PRIMARY_TRANS pfunc
13354                     WHERE pattr.MATCH_RULE_ID = p_rule_id
13355                     AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13356                     AND a.ENTITY_NAME = p_entity
13357                     AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13358                     AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13359 
13360                     UNION
13361 
13362                     SELECT a.ATTRIBUTE_NAME,
13363                            f.PROCEDURE_NAME,
13364                            f.STAGED_ATTRIBUTE_COLUMN
13365                     FROM HZ_TRANS_FUNCTIONS_VL f,
13366                          HZ_TRANS_ATTRIBUTES_VL a,
13367                          HZ_MATCH_RULE_SECONDARY sattr,
13368                          HZ_SECONDARY_TRANS sfunc
13369                     WHERE sattr.MATCH_RULE_ID = p_rule_id
13370                     AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13371                     AND a.ENTITY_NAME = p_entity
13372                     AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13373                     AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13374               )
13375               LOOP
13376 
13377                 NONE := FALSE;
13378                 INSERT_TRFNS := INSERT_TRFNS ||','||FUNCS.STAGED_ATTRIBUTE_COLUMN;
13379                 INSERT_TRFN_VALUES := INSERT_TRFN_VALUES ||','||'x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
13380 
13381               END LOOP;
13382 
13383               IF p_entity = 'PARTY_SITES'
13384                 THEN
13385                     l('IF p_search_ctx THEN');
13386                     l('  FOR I IN 1..p_search_list.COUNT LOOP');
13387                     l('               insert into HZ_SRCH_PSITES(batch_id,party_id, party_osr,party_os, party_site_id,party_site_osr, party_site_os,new_party_flag ' || INSERT_TRFNS
13388                      ||               ')'||' values(-1,-1,-1,-1,-1,-1,-1,''Y'''|| INSERT_TRFN_VALUES ||');');
13389                     l('  END LOOP;');
13390                     l('END IF;');
13391                 END IF;
13392 
13393                 IF p_entity = 'CONTACTS'
13394                 THEN
13395                     l('IF p_search_ctx THEN');
13396                     l('  FOR I IN 1..p_search_list.COUNT LOOP');
13397                     l('              insert into HZ_SRCH_CONTACTS(batch_id,party_id, party_osr,party_os, org_contact_id,contact_osr, contact_os,new_party_flag ' || INSERT_TRFNS
13398                      ||              ')'||' values(-1,-1,-1,-1,-1,-1,-1,''Y'''|| INSERT_TRFN_VALUES ||');');
13399                     l('  END LOOP;');
13400                     l('END IF;');
13401                 END IF;
13402 
13403                 IF p_entity = 'CONTACT_POINTS'
13404                 THEN
13405                     l('IF p_search_ctx THEN');
13406                     l('  FOR I IN 1..p_search_list.COUNT LOOP');
13407                     l('              insert into HZ_SRCH_CPTS(batch_id,party_id, party_osr,party_os, contact_point_id,contact_pt_osr, contact_pt_os,contact_point_type,new_party_flag ' || INSERT_TRFNS
13408                      ||              ')'||' values(-1,-1,-1,-1,-1,-1,-1,-1,''Y'''|| INSERT_TRFN_VALUES ||');');
13409                     l('  END LOOP;');
13410                     l('END IF; ');
13411                 END IF;
13412   END IF;
13413 
13414   IF NONE THEN
13415     l('  NULL;');
13416   END IF;
13417 
13418   l('EXCEPTION');
13419   l('  WHEN OTHERS THEN');
13420   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13421   l('    FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13422   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13423   l('    FND_MSG_PUB.ADD;');
13424   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13425   l('END;');
13426 
13427 END generate_map_proc_bulk ;
13428 
13429 
13430 
13431 PROCEDURE generate_party_map_proc (
13432    p_proc_name          IN      VARCHAR2,
13433    p_rule_id            IN      NUMBER
13434 ) IS
13435 
13436   NONE BOOLEAN := TRUE;
13437   trxctx BOOLEAN := FALSE;
13438   l_filt VARCHAR2(1);
13439 BEGIN
13440 
13441   l('');
13442   l('/************************************************');
13443   l('  This procedure maps a search record from the logical');
13444   l('  record structure to the stage schema structure ');
13445   l('  for the PARTY Entity after applying ');
13446   l('  the defined transformations');
13447   l('************************************************/');
13448   l('');
13449   l('PROCEDURE ' || p_proc_name || '( ');
13450   l('    p_search_ctx IN BOOLEAN,');
13451   l('    p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, ');
13452   l('    x_entered_max_score OUT NUMBER,');
13453   l('    x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type');
13454   l('  ) IS ');
13455   l('  tmp VARCHAR2(4000);');
13456   l('  l_party_name VARCHAR2(4000);');
13457   l('BEGIN');
13458   ldbg_s('Inside Calling Procedure - '||p_proc_name);
13459   l('   IF p_search_ctx THEN');
13460   l('     x_stage_rec.TX8 := NULL;');
13461   l('     g_other_party_level_attribs:=FALSE;');
13462   NONE:=TRUE;
13463   for PRIMATTRS IN (
13464         SELECT a.ATTRIBUTE_NAME
13465         FROM HZ_TRANS_ATTRIBUTES_VL a,
13466              HZ_MATCH_RULE_PRIMARY sattr
13467         WHERE sattr.MATCH_RULE_ID = p_rule_id
13468         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13469         AND a.ENTITY_NAME = 'PARTY'
13470         ) LOOP
13471     IF PRIMATTRS.ATTRIBUTE_NAME not in (
13472           'PARTY_NAME','PARTY_TYPE','STATUS','PARTY_ALL_NAMES') THEN
13473       IF NONE THEN
13474         l('    IF p_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL ');
13475         NONE:=FALSE;
13476       ELSE
13477         l('    OR p_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL ');
13478       END IF;
13479     END IF;
13480   END LOOP;
13481   IF NOT NONE THEN
13482     l('    THEN');
13483     l('      g_other_party_level_attribs:=TRUE;');
13484     l('    END IF;');
13485   END IF;
13486 
13487   l('     x_entered_max_score:=0;');
13488   for SECATTRS IN (
13489         SELECT a.ATTRIBUTE_NAME, SCORE
13490         FROM HZ_TRANS_ATTRIBUTES_VL a,
13491              HZ_MATCH_RULE_SECONDARY sattr
13492         WHERE sattr.MATCH_RULE_ID = p_rule_id
13493         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13494         AND a.ENTITY_NAME = 'PARTY') LOOP
13495     l('    IF p_search_rec.'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13496     l('      x_entered_max_score := x_entered_max_score+'||SECATTRS.SCORE||';');
13497     l('    END IF;');
13498   END LOOP;
13499   l('    END IF;');
13500 
13501   for FUNCS IN (
13502         SELECT a.ATTRIBUTE_NAME,a.attribute_id,
13503                f.PROCEDURE_NAME,
13504                f.STAGED_ATTRIBUTE_COLUMN
13505         FROM HZ_TRANS_FUNCTIONS_VL f,
13506              HZ_TRANS_ATTRIBUTES_VL a,
13507              HZ_MATCH_RULE_PRIMARY pattr,
13508              HZ_PRIMARY_TRANS pfunc
13509         WHERE pattr.MATCH_RULE_ID = p_rule_id
13510         AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13511         AND a.ENTITY_NAME = 'PARTY'
13512         AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13513         AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13514 
13515         UNION
13516 
13517         SELECT a.ATTRIBUTE_NAME,a.attribute_id,
13518                f.PROCEDURE_NAME,
13519                f.STAGED_ATTRIBUTE_COLUMN
13520         FROM HZ_TRANS_FUNCTIONS_VL f,
13521              HZ_TRANS_ATTRIBUTES_VL a,
13522              HZ_MATCH_RULE_SECONDARY sattr,
13523              HZ_SECONDARY_TRANS sfunc
13524         WHERE sattr.MATCH_RULE_ID = p_rule_id
13525         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13526         AND a.ENTITY_NAME = 'PARTY'
13527         AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13528         AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13529 
13530         UNION
13531 
13532         SELECT a.attribute_name,a.attribute_id,
13533                f.PROCEDURE_NAME,
13534                f.STAGED_ATTRIBUTE_COLUMN
13535         FROM HZ_TRANS_FUNCTIONS_VL f,
13536             HZ_TRANS_ATTRIBUTES_VL a
13537         WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13538         AND a.entity_name = 'PARTY'
13539         AND a.attribute_name='PARTY_TYPE'
13540         AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
13541         AND nvl(f.active_flag,'Y')='Y'
13542         AND ROWNUM=1
13543   )
13544   LOOP
13545     NONE := FALSE;
13546     trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
13547     begin
13548       select nvl(filter_flag, 'N') INTO l_filt
13549       FROM HZ_MATCH_RULE_PRIMARY p
13550       where p.MATCH_RULE_ID = p_rule_id
13551       AND p.attribute_id = FUNCS.attribute_id;
13552     exception
13553       when no_data_found then
13554         l_filt:='N';
13555     end;
13556     IF l_filt = 'N' THEN
13557     l('  IF p_search_ctx THEN');
13558     l('    IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13559     l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13560     l('        ' || FUNCS.PROCEDURE_NAME ||'(');
13561     l('             p_search_rec.'||FUNCS.ATTRIBUTE_NAME);
13562     l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13563     IF trxctx THEN
13564       l('             ,''PARTY'','''||g_context||''');');
13565     ELSE
13566       l('             ,''PARTY'');');
13567     END IF;
13568     l('    ELSE');
13569     l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13570     l('    END IF;');
13571     IF NOT trxctx THEN
13572       l('  END IF;');
13573     ELSE
13574       l('  ELSE');
13575       l('    IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13576       l('      tmp :=' || FUNCS.PROCEDURE_NAME ||'(');
13577       l('             x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
13578       l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13579       l('             ,''PARTY'',''SCORE'');');
13580       l('      IF tmp IS NOT NULL THEN');
13581       l('        x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
13582       l('      END IF;');
13583       l('    END IF;');
13584       l('  END IF;');
13585     END IF;
13586     ELSE
13587     l('    IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13588     l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13589     l('        ' || FUNCS.PROCEDURE_NAME ||'(');
13590     l('             p_search_rec.'||FUNCS.ATTRIBUTE_NAME);
13591     l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13592     IF trxctx THEN
13593       l('             ,''PARTY'',''STAGE'');');
13594     ELSE
13595       l('             ,''PARTY'');');
13596     END IF;
13597     l('    ELSE');
13598     l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13599     l('    END IF;');
13600     END IF;
13601 
13602     --- Modified for Bug 4016594
13603     IF FUNCS.ATTRIBUTE_NAME = 'DUNS_NUMBER_C' AND upper(FUNCS.PROCEDURE_NAME) = 'HZ_TRANS_PKG.EXACT' THEN
13604       l('    IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13605       l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13606       l('          lpad(x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ',9,''0'');');
13607       l('    END IF;');
13608     END IF;
13609 
13610   END LOOP;
13611   l('    l_party_name := p_search_rec.PARTY_NAME;');
13612   l('    IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN');
13613   l('      l_party_name := p_search_rec.PARTY_ALL_NAMES;');
13614   l('    END IF;');
13615   l('    IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN');
13616   l('      x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,''PARTY_NAME'',''PARTY'','''||g_context||''');');
13617   l('    END IF;');
13618 
13619   IF NONE THEN
13620     l('  NULL;');
13621   END IF;
13622 
13623 
13624   l('EXCEPTION');
13625   l('  WHEN OTHERS THEN');
13626   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13627   l('    FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13628   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13629   l('    FND_MSG_PUB.ADD;');
13630   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13631   l('END;');
13632 
13633 END generate_party_map_proc;
13634 
13635 
13636 
13637 PROCEDURE generate_check_proc (
13638 	p_rule_id	NUMBER) IS
13639 FIRST BOOLEAN;
13640 BEGIN
13641   l('');
13642   l('/************************************************');
13643   l('  This procedure checks if the input search criteria ');
13644   l('  is valid. It checks if : ');
13645   l('   1. At least one primary condition is passed');
13646   l('   2. Contact Point Type is not null for each condition');
13647   l('************************************************/');
13648   l('');
13649 
13650   l('FUNCTION check_prim_cond(');
13651   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
13652   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
13653   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
13654   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list)');
13655   l('      RETURN BOOLEAN IS');
13656   l('  BEGIN');
13657 
13658   FIRST := TRUE;
13659   FOR CPTS IN (SELECT ATTRIBUTE_NAME
13660        FROM HZ_TRANS_ATTRIBUTES_VL a,
13661             HZ_MATCH_RULE_PRIMARY p
13662        WHERE p.match_rule_id = p_rule_id
13663        AND a.ENTITY_NAME = 'CONTACT_POINTS'
13664        AND p.attribute_id = a.attribute_id
13665        AND ATTRIBUTE_NAME <> 'CONTACT_POINT_TYPE'
13666        AND nvl(p.FILTER_FLAG,'N') = 'N') LOOP
13667     IF FIRST THEN
13668       l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
13669       l('      IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (');
13670       l('p_contact_point_list(I).'||CPTS.ATTRIBUTE_NAME||' IS NOT NULL ');
13671       FIRST := FALSE;
13672     ELSE
13673       l('OR p_contact_point_list(I).'||CPTS.ATTRIBUTE_NAME||' IS NOT NULL ');
13674     END IF;
13675   END LOOP;
13676   IF NOT FIRST THEN
13677     l(' ) THEN');
13678     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_CONTACT_POINT_TYPE'');');
13679     l('        FND_MSG_PUB.ADD;');
13680     l('        RAISE FND_API.G_EXC_ERROR;');
13681     l('      END IF;');
13682     l('    END LOOP;');
13683     l('');
13684   END IF;
13685 
13686   FOR PRIMATTRS IN (
13687        SELECT ATTRIBUTE_NAME
13688        FROM HZ_TRANS_ATTRIBUTES_VL a,
13689             HZ_MATCH_RULE_PRIMARY p
13690        WHERE p.match_rule_id = p_rule_id
13691        AND p.attribute_id = a.attribute_id
13692        AND a.ENTITY_NAME = 'PARTY'
13693        AND nvl(p.FILTER_FLAG,'N') = 'N') LOOP
13694     l('    IF p_party_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13695     l('      RETURN TRUE;');
13696     l('    END IF;');
13697   END LOOP;
13698 
13699   FOR PRIMATTRS IN (
13700        SELECT ENTITY_NAME, ATTRIBUTE_NAME
13701        FROM HZ_TRANS_ATTRIBUTES_VL a,
13702             HZ_MATCH_RULE_PRIMARY p
13703        WHERE p.match_rule_id = p_rule_id
13704        AND a.ENTITY_NAME <> 'PARTY'
13705        AND p.attribute_id = a.attribute_id
13706        AND ATTRIBUTE_NAME <> 'CONTACT_POINT_TYPE'
13707        AND nvl(p.FILTER_FLAG,'N') = 'N')
13708   LOOP
13709     IF PRIMATTRS.ENTITY_NAME = 'PARTY_SITES' THEN
13710       l('    FOR I IN 1..p_party_site_list.COUNT LOOP');
13711       HZ_GEN_PLSQL.add_line('      IF p_party_site_list(I).',false);
13712     ELSIF PRIMATTRS.ENTITY_NAME = 'CONTACTS' THEN
13713       l('    FOR I IN 1..p_contact_list.COUNT LOOP');
13714       HZ_GEN_PLSQL.add_line('      IF p_contact_list(I).',false);
13715     ELSIF PRIMATTRS.ENTITY_NAME = 'CONTACT_POINTS' THEN
13716       l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
13717       HZ_GEN_PLSQL.add_line('      IF p_contact_point_list(I).',false);
13718     END IF;
13719     l(PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL THEN ');
13720     l('        RETURN TRUE;');
13721     l('      END IF;');
13722     l('    END LOOP;');
13723   END LOOP;
13724   l('    RETURN FALSE;');
13725   l('EXCEPTION');
13726   l('  WHEN FND_API.G_EXC_ERROR THEN');
13727   l('    RAISE FND_API.G_EXC_ERROR;');
13728   l('  WHEN OTHERS THEN');
13729   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
13730   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_prim_cond'');');
13731   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
13732   l('    FND_MSG_PUB.ADD;');
13733   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13734   l('  END check_prim_cond;');
13735   l('');
13736 
13737   l('/************************************************');
13738   l('  This procedure checks if the input search condition ');
13739   l('  has party site criteria. ');
13740   l('************************************************/');
13741 
13742   l('');
13743   l('PROCEDURE check_party_site_cond(');
13744   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
13745   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
13746   l('	   x_secondary		   OUT     BOOLEAN,');
13747   l('	   x_primary		   OUT     BOOLEAN');
13748   l(') IS');
13749   l('  BEGIN');
13750   l('    x_primary:= FALSE;');
13751   l('    x_secondary:= FALSE;');
13752 
13753   l('    FOR I IN 1..p_party_site_list.COUNT LOOP');
13754   FIRST := TRUE;
13755   FOR PRIMATTRS IN (
13756        SELECT ATTRIBUTE_NAME
13757        FROM HZ_TRANS_ATTRIBUTES_VL a,
13758             HZ_MATCH_RULE_PRIMARY p
13759        WHERE p.match_rule_id = p_rule_id
13760        AND a.ENTITY_NAME = 'PARTY_SITES'
13761        AND p.attribute_id = a.attribute_id)
13762   LOOP
13763     IF FIRST THEN
13764       l('      IF p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13765       FIRST := FALSE;
13766     ELSE
13767       l('         OR p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13768     END IF;
13769   END LOOP;
13770   IF NOT FIRST THEN
13771     l('      THEN');
13772     l('        x_primary := TRUE;');
13773     l('      END IF;');
13774     l('      EXIT WHEN x_primary;');
13775   ELSE
13776     l('      NULL;');
13777   END IF;
13778   l('    END LOOP;');
13779 
13780   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
13781   FIRST := TRUE;
13782   FOR PRIMATTRS IN (
13783        SELECT ATTRIBUTE_NAME
13784        FROM HZ_TRANS_ATTRIBUTES_VL a,
13785             HZ_MATCH_RULE_PRIMARY p
13786        WHERE p.match_rule_id = p_rule_id
13787        AND a.ENTITY_NAME = 'CONTACT_POINTS'
13788        AND p.attribute_id = a.attribute_id)
13789   LOOP
13790     IF FIRST THEN
13791       l('      IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13792       FIRST := FALSE;
13793     ELSE
13794       l('         OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13795     END IF;
13796   END LOOP;
13797 
13798   IF NOT FIRST THEN
13799     l('      THEN');
13800     l('        x_primary := TRUE;');
13801     l('      END IF;');
13802     l('      EXIT WHEN x_primary;');
13803   ELSE
13804     l('      NULL;');
13805   END IF;
13806   l('    END LOOP;');
13807   l('');
13808 
13809   l('    FOR I IN 1..p_party_site_list.COUNT LOOP');
13810   FIRST := TRUE;
13811   FOR SECATTRS IN (
13812        SELECT ATTRIBUTE_NAME
13813        FROM HZ_TRANS_ATTRIBUTES_VL a,
13814             HZ_MATCH_RULE_SECONDARY s
13815        WHERE s.match_rule_id = p_rule_id
13816        AND a.ENTITY_NAME = 'PARTY_SITES'
13817        AND s.attribute_id = a.attribute_id)
13818   LOOP
13819     IF FIRST THEN
13820       l('      IF p_party_site_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13821       FIRST := FALSE;
13822     ELSE
13823       l('         OR p_party_site_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13824     END IF;
13825   END LOOP;
13826   IF NOT FIRST THEN
13827     l('      THEN');
13828     l('        x_secondary := TRUE;');
13829     l('      END IF;');
13830     l('      EXIT WHEN x_secondary;');
13831   ELSE
13832     l('      NULL;');
13833   END IF;
13834   l('    END LOOP;');
13835 
13836   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
13837   FIRST := TRUE;
13838   FOR SECATTRS IN (
13839        SELECT ATTRIBUTE_NAME
13840        FROM HZ_TRANS_ATTRIBUTES_VL a,
13841             HZ_MATCH_RULE_SECONDARY s
13842        WHERE s.match_rule_id = p_rule_id
13843        AND a.ENTITY_NAME = 'CONTACT_POINTS'
13844        AND s.attribute_id = a.attribute_id)
13845   LOOP
13846     IF FIRST THEN
13847       l('      IF p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13848       FIRST := FALSE;
13849     ELSE
13850       l('         OR p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13851     END IF;
13852   END LOOP;
13853 
13854   IF NOT FIRST THEN
13855     l('      THEN');
13856     l('        x_secondary := TRUE;');
13857     l('      END IF;');
13858     l('      EXIT WHEN x_secondary;');
13859   ELSE
13860     l('      NULL;');
13861   END IF;
13862   l('    END LOOP;');
13863   l('EXCEPTION');
13864   l('  WHEN OTHERS THEN');
13865   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
13866   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_party_site_cond'');');
13867   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
13868   l('    FND_MSG_PUB.ADD;');
13869   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13870   l('  END check_party_site_cond;');
13871   l('');
13872 
13873   l('/************************************************');
13874   l('  This procedure checks if the input search condition ');
13875   l('  has contact criteria. ');
13876   l('************************************************/');
13877 
13878   l('');
13879   l('PROCEDURE check_contact_cond(');
13880   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
13881   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
13882   l('      x_secondary             OUT     BOOLEAN,');
13883   l('      x_primary               OUT     BOOLEAN');
13884   l(') IS');
13885 
13886   l('  BEGIN');
13887   l('    x_primary:= FALSE;');
13888   l('    x_secondary:= FALSE;');
13889 
13890 
13891   l('    FOR I IN 1..p_contact_list.COUNT LOOP');
13892   FIRST := TRUE;
13893   FOR PRIMATTRS IN (
13894        SELECT ATTRIBUTE_NAME
13895        FROM HZ_TRANS_ATTRIBUTES_VL a,
13896             HZ_MATCH_RULE_PRIMARY p
13897        WHERE p.match_rule_id = p_rule_id
13898        AND a.ENTITY_NAME = 'CONTACTS'
13899        AND p.attribute_id = a.attribute_id)
13900   LOOP
13901     IF FIRST THEN
13902       l('      IF p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13903       FIRST := FALSE;
13904     ELSE
13905       l('         OR p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13906     END IF;
13907   END LOOP;
13908   IF NOT FIRST THEN
13909     l('      THEN');
13910     l('        x_primary := TRUE;');
13911     l('      END IF;');
13912     l('      EXIT WHEN x_primary;');
13913   ELSE
13914     l('      NULL;');
13915   END IF;
13916   l('    END LOOP;');
13917   l('');
13918   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
13919   FIRST := TRUE;
13920   FOR PRIMATTRS IN (
13921        SELECT ATTRIBUTE_NAME
13922        FROM HZ_TRANS_ATTRIBUTES_VL a,
13923             HZ_MATCH_RULE_PRIMARY p
13924        WHERE p.match_rule_id = p_rule_id
13925        AND a.ENTITY_NAME = 'CONTACT_POINTS'
13926        AND p.attribute_id = a.attribute_id)
13927   LOOP
13928     IF FIRST THEN
13929       l('      IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13930       FIRST := FALSE;
13931     ELSE
13932       l('         OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13933     END IF;
13934   END LOOP;
13935   IF NOT FIRST THEN
13936     l('      THEN');
13937     l('        x_primary := TRUE;');
13938     l('      END IF;');
13939     l('      EXIT WHEN x_primary;');
13940   ELSE
13941     l('      NULL;');
13942   END IF;
13943   l('    END LOOP;');
13944 
13945   l('');
13946   l('    FOR I IN 1..p_contact_list.COUNT LOOP');
13947   FIRST := TRUE;
13948   FOR SECATTRS IN (
13949        SELECT ATTRIBUTE_NAME
13950        FROM HZ_TRANS_ATTRIBUTES_VL a,
13951             HZ_MATCH_RULE_SECONDARY s
13952        WHERE s.match_rule_id = p_rule_id
13953        AND a.ENTITY_NAME = 'CONTACTS'
13954        AND s.attribute_id = a.attribute_id)
13955   LOOP
13956     IF FIRST THEN
13957       l('      IF p_contact_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13958       FIRST := FALSE;
13959     ELSE
13960       l('         OR p_contact_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13961     END IF;
13962   END LOOP;
13963   IF NOT FIRST THEN
13964     l('      THEN');
13965     l('        x_secondary := TRUE;');
13966     l('      END IF;');
13967     l('      EXIT WHEN x_secondary;');
13968   ELSE
13969     l('      NULL;');
13970   END IF;
13971   l('    END LOOP;');
13972   l('');
13973 
13974   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
13975   FIRST := TRUE;
13976   FOR SECATTRS IN (
13977        SELECT ATTRIBUTE_NAME
13978        FROM HZ_TRANS_ATTRIBUTES_VL a,
13979             HZ_MATCH_RULE_SECONDARY s
13980        WHERE s.match_rule_id = p_rule_id
13981        AND a.ENTITY_NAME = 'CONTACT_POINTS'
13982        AND s.attribute_id = a.attribute_id)
13983   LOOP
13984     IF FIRST THEN
13985       l('      IF p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13986       FIRST := FALSE;
13987     ELSE
13988       l('         OR p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13989     END IF;
13990   END LOOP;
13991   IF NOT FIRST THEN
13992     l('      THEN');
13993     l('        x_secondary := TRUE;');
13994     l('      END IF;');
13995     l('      EXIT WHEN x_secondary;');
13996   ELSE
13997     l('      NULL;');
13998   END IF;
13999   l('    END LOOP;');
14000 
14001   l('EXCEPTION');
14002   l('  WHEN OTHERS THEN');
14003   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14004   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_contact_cond'');');
14005   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14006   l('    FND_MSG_PUB.ADD;');
14007   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14008   l('  END check_contact_cond;');
14009   l('');
14010 
14011   l('/************************************************');
14012   l('  This procedure checks if the input search condition ');
14013   l('  has valid contact point criteria. ');
14014   l('************************************************/');
14015 
14016   l('');
14017   l('PROCEDURE check_contact_point_cond(');
14018   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
14019   l('      x_secondary             OUT     BOOLEAN,');
14020   l('      x_primary               OUT     BOOLEAN');
14021   l(') IS');
14022   l('  BEGIN');
14023   l('    x_primary:= FALSE;');
14024   l('    x_secondary:= FALSE;');
14025   l('');
14026   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
14027   l('      IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN ');
14028   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_CONTACT_POINT_TYPE'');');
14029   l('        FND_MSG_PUB.ADD;');
14030   l('        RAISE FND_API.G_EXC_ERROR;');
14031   l('      END IF;');
14032   l('    END LOOP;');
14033   l('');
14034   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
14035   FIRST := TRUE;
14036   FOR PRIMATTRS IN (
14037        SELECT ATTRIBUTE_NAME
14038        FROM HZ_TRANS_ATTRIBUTES_VL a,
14039             HZ_MATCH_RULE_PRIMARY p
14040        WHERE p.match_rule_id = p_rule_id
14041        AND a.ENTITY_NAME = 'CONTACT_POINTS'
14042        AND p.attribute_id = a.attribute_id)
14043   LOOP
14044     IF FIRST THEN
14045       l('      IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14046       FIRST := FALSE;
14047     ELSE
14048       l('         OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14049     END IF;
14050   END LOOP;
14051   IF NOT FIRST THEN
14052     l('      THEN');
14053     l('        x_primary := TRUE;');
14054     l('      END IF;');
14055     l('      EXIT WHEN x_primary;');
14056   ELSE
14057     l('      NULL;');
14058   END IF;
14059   l('    END LOOP;');
14060 
14061   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
14062   FIRST := TRUE;
14063   FOR SECATTRS IN (
14064        SELECT ATTRIBUTE_NAME
14065        FROM HZ_TRANS_ATTRIBUTES_VL a,
14066             HZ_MATCH_RULE_SECONDARY s
14067        WHERE s.match_rule_id = p_rule_id
14068        AND a.ENTITY_NAME = 'CONTACT_POINTS'
14069        AND s.attribute_id = a.attribute_id)
14070   LOOP
14071     IF FIRST THEN
14072       l('      IF p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL  ');
14073       FIRST := FALSE;
14074     ELSE
14075       l('         OR p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14076     END IF;
14077   END LOOP;
14078 
14079   IF NOT FIRST THEN
14080     l('      THEN');
14081     l('        x_secondary := TRUE;');
14082     l('      END IF;');
14083     l('      EXIT WHEN x_secondary;');
14084   ELSE
14085     l('      NULL;');
14086   END IF;
14087   l('    END LOOP;');
14088   l('EXCEPTION');
14089   l('  WHEN OTHERS THEN');
14090   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14091   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_contact_point_cond'');');
14092   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14093   l('    FND_MSG_PUB.ADD;');
14094   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14095   l('  END check_contact_point_cond;');
14096   l('');
14097 
14098 
14099 END;
14100 
14101 PROCEDURE generate_custom_code (
14102 	p_rule_id       NUMBER,
14103         p_record 	VARCHAR2,
14104 	p_entity	VARCHAR2,
14105 	p_record_id	VARCHAR2) IS
14106 
14107 BEGIN
14108 
14109   ldbg_s('Inside calling procedure - generate_custom_code');
14110 
14111   FOR CUSTATTRS IN (
14112     SELECT distinct ATTRIBUTE_NAME, CUSTOM_ATTRIBUTE_PROCEDURE
14113     FROM HZ_TRANS_ATTRIBUTES_VL a,
14114          HZ_MATCH_RULE_PRIMARY p
14115     WHERE p.match_rule_id = p_rule_id
14116     AND p.attribute_id = a.attribute_id
14117     AND a.ENTITY_NAME = p_entity
14118     AND (a.SOURCE_TABLE = 'CUSTOM'
14119     OR a.CUSTOM_ATTRIBUTE_PROCEDURE IS NOT NULL)
14120     UNION
14121     SELECT distinct ATTRIBUTE_NAME, CUSTOM_ATTRIBUTE_PROCEDURE
14122     FROM HZ_TRANS_ATTRIBUTES_VL a,
14123          HZ_MATCH_RULE_SECONDARY s
14124     WHERE s.match_rule_id = p_rule_id
14125     AND s.attribute_id = a.attribute_id
14126     AND a.ENTITY_NAME = p_entity
14127     AND (a.SOURCE_TABLE = 'CUSTOM'
14128     OR a.CUSTOM_ATTRIBUTE_PROCEDURE IS NOT NULL)) LOOP
14129 
14130     l(p_record||'.'||CUSTATTRS.ATTRIBUTE_NAME||':=');
14131     l('       '||CUSTATTRS.CUSTOM_ATTRIBUTE_PROCEDURE||'('||
14132       p_record_id||' , '''||p_entity||''','''||CUSTATTRS.ATTRIBUTE_NAME||''');');
14133   END LOOP;
14134 END;
14135 
14136 -- Fix for Bug 4734661. Modified to add the p_called_from parameter.
14137 PROCEDURE generate_acquire_proc (
14138    p_rule_id       NUMBER
14139   ,p_called_from   VARCHAR2) IS
14140 
14141 l_num_attrs NUMBER;
14142 FIRST BOOLEAN;
14143 BEGIN
14144   l('');
14145   l('/************************************************');
14146   l('  This procedure retrieves the match rule attributes into ');
14147   l('  the search record structures');
14148   l('************************************************/');
14149   l('');
14150   l('PROCEDURE get_party_for_search (');
14151   l('        p_party_id              IN      NUMBER,');
14152   l('        x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
14153   l('        x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
14154   l('        x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
14155   l('        x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
14156   l(') IS');
14157   l('  l_party_id NUMBER;');
14158   l('  l_party_site_ids HZ_PARTY_SEARCH.IDList;');
14159   l('  l_contact_ids HZ_PARTY_SEARCH.IDList;');
14160   l('  l_contact_pt_ids HZ_PARTY_SEARCH.IDList;');
14161   l('  ps NUMBER :=1;');
14162   l('  cpt NUMBER :=1;');
14163   l('  ct NUMBER :=1;');
14164   l('  l_use_contact_info varchar2(1);');--bug 5169483
14165   l('BEGIN');
14166   l('');
14167 
14168 --bug 5169483
14169   l('    l_use_contact_info := ''Y'';');
14170   l('  IF nvl(FND_PROFILE.VALUE(''HZ_DQM_REL_PARTY_MATCH''),''N'')=''Y'' THEN');
14171   l('    l_use_contact_info := ''N'';');
14172   l('  END IF;');
14173 --bug 5169483
14174 
14175   -- Query number of party attributes
14176   SELECT COUNT(*) INTO l_num_attrs
14177   FROM (
14178     SELECT a.attribute_id
14179     FROM HZ_TRANS_ATTRIBUTES_VL a,
14180          HZ_MATCH_RULE_PRIMARY p
14181     WHERE p.match_rule_id = p_rule_id
14182     AND p.attribute_id = a.attribute_id
14183     AND a.ENTITY_NAME = 'PARTY'
14184 
14185     UNION
14186 
14187     SELECT a.attribute_id
14188     FROM HZ_TRANS_ATTRIBUTES_VL a,
14189          HZ_MATCH_RULE_SECONDARY s
14190     WHERE s.match_rule_id = p_rule_id
14191     AND s.attribute_id = a.attribute_id
14192     AND a.ENTITY_NAME = 'PARTY'
14193   );
14194 
14195   IF l_num_attrs > 0 THEN
14196     l('  l_party_id := p_party_id;');
14197   ELSE
14198     l('  l_party_id := null;');
14199   END IF;
14200 
14201   SELECT COUNT(*) INTO l_num_attrs
14202   FROM (
14203     SELECT a.attribute_id
14204     FROM HZ_TRANS_ATTRIBUTES_VL a,
14205          HZ_MATCH_RULE_PRIMARY p
14206     WHERE p.match_rule_id = p_rule_id
14207     AND p.attribute_id = a.attribute_id
14208     AND a.ENTITY_NAME = 'PARTY_SITES'
14209 
14210     UNION
14211 
14212     SELECT a.attribute_id
14213     FROM HZ_TRANS_ATTRIBUTES_VL a,
14214          HZ_MATCH_RULE_SECONDARY s
14215     WHERE s.match_rule_id = p_rule_id
14216     AND s.attribute_id = a.attribute_id
14217     AND a.ENTITY_NAME = 'PARTY_SITES'
14218   );
14219 
14220 
14221   IF l_num_attrs > 0 THEN
14222 
14223     l('  FOR PARTY_SITES IN (');
14224     l(' SELECT party_site_id FROM (');  ---Code Change for Match Rule Set
14225     l('     SELECT party_site_id,identifying_address_flag'); ---Code Change for Match Rule Set
14226     l('      FROM HZ_PARTY_SITES');
14227     l('      WHERE party_id = p_party_id');
14228     l('      AND (status is null OR status = ''A'') ');
14229     l('      AND identifying_address_flag=''Y''');
14230     l('      UNION');
14231     l('');
14232     l('     SELECT party_site_id,NVL(identifying_address_flag,''N'') identifying_address_flag'); ---Code Change for Match Rule Set
14233     l('      FROM HZ_PARTY_SITES');
14234     l('      WHERE party_id = p_party_id');
14235     l('      AND (status is null OR status = ''A'') ');
14236     l('      AND (identifying_address_flag IS NULL OR identifying_address_flag = ''N'')');
14237     -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14238     IF p_called_from IS NULL THEN
14239       l('      AND ROWNUM<6');
14240     END IF;
14241     l('      UNION');
14242     l('');
14243     l('     SELECT party_site_id,NVL(identifying_address_flag,''N'') identifying_address_flag');
14244     l('      FROM HZ_PARTY_SITES');
14245     l('      WHERE (status is null OR status = ''A'') ');
14246     l('      AND party_id in (');
14247     l('        SELECT party_id');
14248     l('        FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS');
14249     l('        WHERE HZ_RELATIONSHIPS.object_id = p_party_id');
14250     l('        AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14251     l('        AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14252     l('        AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14253     l('        and l_use_contact_info = ''Y''');--bug 5169483
14254     l('     ) ');
14255     -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14256     IF p_called_from IS NULL THEN
14257       l('     AND ROWNUM<6');
14258     END IF;
14259     l(') order by identifying_address_flag desc'); ---Code Change for Match Rule Set
14260     l('    ) LOOP');
14261     l('      l_party_site_ids(ps) := PARTY_SITES.party_site_id;');
14262     l('      ps:=ps+1;');
14263     l('  END LOOP;');
14264   END IF;
14265 
14266   -- Query number of contact attributes
14267   SELECT COUNT(*) INTO l_num_attrs
14268   FROM (
14269     SELECT a.attribute_id
14270     FROM HZ_TRANS_ATTRIBUTES_VL a,
14271          HZ_MATCH_RULE_PRIMARY p
14272     WHERE p.match_rule_id = p_rule_id
14273     AND p.attribute_id = a.attribute_id
14274     AND a.ENTITY_NAME = 'CONTACTS'
14275 
14276     UNION
14277 
14278     SELECT a.attribute_id
14279     FROM HZ_TRANS_ATTRIBUTES_VL a,
14280          HZ_MATCH_RULE_SECONDARY s
14281     WHERE s.match_rule_id = p_rule_id
14282     AND s.attribute_id = a.attribute_id
14283     AND a.ENTITY_NAME = 'CONTACTS'
14284   );
14285 
14286   IF l_num_attrs > 0 THEN
14287     l('    FOR CONTACTS IN (');
14288     l('      SELECT org_contact_id');
14289     l('      FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS');
14290     l('      WHERE HZ_RELATIONSHIPS.object_id = p_party_id');
14291     l('      AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14292     l('      AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14293     l('      AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = ''F''');
14294     l('      AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14295     -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14296     IF p_called_from IS NULL THEN
14297       l('      AND ROWNUM<6 ');
14298     END IF;
14299     l('    ) LOOP');
14300     l('      l_contact_ids(ct) := CONTACTS.org_contact_id;');
14301     l('      ct := ct+1;');
14302     l('    END LOOP;');
14303   END IF;
14304 
14305   -- Query number of contact point attributes
14306   SELECT COUNT(*) INTO l_num_attrs
14307   FROM (
14308     SELECT a.attribute_id
14309     FROM HZ_TRANS_ATTRIBUTES_VL a,
14310          HZ_MATCH_RULE_PRIMARY p
14311     WHERE p.match_rule_id = p_rule_id
14312     AND p.attribute_id = a.attribute_id
14313     AND a.ENTITY_NAME = 'CONTACT_POINTS'
14314 
14315     UNION
14316 
14317     SELECT a.attribute_id
14318     FROM HZ_TRANS_ATTRIBUTES_VL a,
14319          HZ_MATCH_RULE_SECONDARY s
14320     WHERE s.match_rule_id = p_rule_id
14321     AND s.attribute_id = a.attribute_id
14322     AND a.ENTITY_NAME = 'CONTACT_POINTS'
14323   );
14324 
14325   IF l_num_attrs > 0 THEN
14326     l('    FOR CONTACT_POINTS IN (');
14327     l('      SELECT CONTACT_POINT_ID');
14328     l('      FROM HZ_CONTACT_POINTS ');
14329     l('      WHERE PRIMARY_FLAG = ''Y''');
14330     l('      AND owner_table_name = ''HZ_PARTIES''');
14331     l('      AND owner_table_id = p_party_id');
14332     l('');
14333     l('      UNION');
14334     l('');
14335     l('      SELECT CONTACT_POINT_ID');
14336     l('      FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS ');--bug 4873802
14337     l('      WHERE PRIMARY_FLAG = ''Y''');
14338     l('      AND owner_table_name = ''HZ_PARTIES''');
14339     l('      AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id');--bug 4873802
14340     l('      AND HZ_RELATIONSHIPS.object_id = p_party_id');
14341     l('      AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14342     l('      AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14343     l('      AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14344     l('        and l_use_contact_info = ''Y''');--bug 5169483
14345     -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14346     IF p_called_from IS NULL THEN
14347       l('      AND ROWNUM<6');
14348     END IF;
14349     l('      UNION');
14350     l('');
14351     l('      SELECT CONTACT_POINT_ID');
14352     l('      FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES  ');--bug 4873802
14353     l('      WHERE PRIMARY_FLAG = ''Y''');
14354     l('      AND owner_table_name = ''HZ_PARTY_SITES''');
14355     l('      AND owner_table_id = party_site_id ');--bug 4873802
14356     l('      AND PARTY_ID = p_party_id ');
14357     l('      AND IDENTIFYING_ADDRESS_FLAG = ''Y'') LOOP');
14358     l('      l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;');
14359     l('      cpt := cpt+1;');
14360     l('    END LOOP;');
14361   END IF;
14362 
14363   l('    get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,');
14364   l('          x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);');
14365 
14366   l('EXCEPTION');
14367   l('  WHEN FND_API.G_EXC_ERROR THEN');
14368   l('    RAISE FND_API.G_EXC_ERROR;');
14369   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
14370   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14371   l('  WHEN OTHERS THEN');
14372   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14373   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''get_party_for_search'');');
14374   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14375   l('    FND_MSG_PUB.ADD;');
14376   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14377   l('END get_party_for_search;');
14378   l('');
14379 
14380   l('PROCEDURE get_search_criteria (');
14381   l('        p_party_id              IN      NUMBER,');
14382   l('        p_party_site_ids        IN      HZ_PARTY_SEARCH.IDList,');
14383   l('        p_contact_ids           IN      HZ_PARTY_SEARCH.IDList,');
14384   l('        p_contact_pt_ids        IN      HZ_PARTY_SEARCH.IDList,');
14385   l('        x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
14386   l('        x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
14387   l('        x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
14388   l('        x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
14389   l(') IS');
14390   l('BEGIN');
14391   l('');
14392   ldbg_s('Inside Calling Procedure - get_search_criteria');
14393 
14394   -- Query number of party attributes
14395   SELECT COUNT(*) INTO l_num_attrs
14396   FROM (
14397     SELECT a.attribute_id
14398     FROM HZ_TRANS_ATTRIBUTES_VL a,
14399          HZ_MATCH_RULE_PRIMARY p
14400     WHERE p.match_rule_id = p_rule_id
14401     AND p.attribute_id = a.attribute_id
14402     AND a.ENTITY_NAME = 'PARTY'
14403 
14404     UNION
14405 
14406     SELECT a.attribute_id
14407     FROM HZ_TRANS_ATTRIBUTES_VL a,
14408          HZ_MATCH_RULE_SECONDARY s
14409     WHERE s.match_rule_id = p_rule_id
14410     AND s.attribute_id = a.attribute_id
14411     AND a.ENTITY_NAME = 'PARTY'
14412   );
14413 
14414   IF l_num_attrs > 0 THEN
14415     l('    IF p_party_id IS NOT NULL THEN');
14416   ldbg_s('Before Calling Procedure - get_party_rec');
14417     l('      get_party_rec(p_party_id, x_party_search_rec);');
14418     l('    END IF;');
14419   END IF;
14420 
14421   SELECT COUNT(*) INTO l_num_attrs
14422   FROM (
14423     SELECT a.attribute_id
14424     FROM HZ_TRANS_ATTRIBUTES_VL a,
14425          HZ_MATCH_RULE_PRIMARY p
14426     WHERE p.match_rule_id = p_rule_id
14427     AND p.attribute_id = a.attribute_id
14428     AND a.ENTITY_NAME = 'PARTY_SITES'
14429 
14430     UNION
14431 
14432     SELECT a.attribute_id
14433     FROM HZ_TRANS_ATTRIBUTES_VL a,
14434          HZ_MATCH_RULE_SECONDARY s
14435     WHERE s.match_rule_id = p_rule_id
14436     AND s.attribute_id = a.attribute_id
14437     AND a.ENTITY_NAME = 'PARTY_SITES'
14438   );
14439 
14440 
14441   IF l_num_attrs > 0 THEN
14442     l('    IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN');
14443     ldbg_s('Before Calling Procedure - get_party_site_rec');
14444     l('      get_party_site_rec(p_party_site_ids, x_party_site_list);');
14445     l('    END IF;');
14446   END IF;
14447 
14448   -- Query number of contact attributes
14449   SELECT COUNT(*) INTO l_num_attrs
14450   FROM (
14451     SELECT a.attribute_id
14452     FROM HZ_TRANS_ATTRIBUTES_VL a,
14453          HZ_MATCH_RULE_PRIMARY p
14454     WHERE p.match_rule_id = p_rule_id
14455     AND p.attribute_id = a.attribute_id
14456     AND a.ENTITY_NAME = 'CONTACTS'
14457 
14458     UNION
14459 
14460     SELECT a.attribute_id
14461     FROM HZ_TRANS_ATTRIBUTES_VL a,
14462          HZ_MATCH_RULE_SECONDARY s
14463     WHERE s.match_rule_id = p_rule_id
14464     AND s.attribute_id = a.attribute_id
14465     AND a.ENTITY_NAME = 'CONTACTS'
14466   );
14467 
14468   IF l_num_attrs > 0 THEN
14469     l('    IF p_contact_ids IS NOT NULL AND p_contact_ids.COUNT>0 THEN');
14470     ldbg_s('Before Calling Procedure - get_contact_rec');
14471     l('      get_contact_rec(p_contact_ids, x_contact_list);');
14472     l('    END IF;');
14473   END IF;
14474 
14475   -- Query number of contact point attributes
14476   SELECT COUNT(*) INTO l_num_attrs
14477   FROM (
14478     SELECT a.attribute_id
14479     FROM HZ_TRANS_ATTRIBUTES_VL a,
14480          HZ_MATCH_RULE_PRIMARY p
14481     WHERE p.match_rule_id = p_rule_id
14482     AND p.attribute_id = a.attribute_id
14483     AND a.ENTITY_NAME = 'CONTACT_POINTS'
14484 
14485     UNION
14486 
14487     SELECT a.attribute_id
14488     FROM HZ_TRANS_ATTRIBUTES_VL a,
14489          HZ_MATCH_RULE_SECONDARY s
14490     WHERE s.match_rule_id = p_rule_id
14491     AND s.attribute_id = a.attribute_id
14492     AND a.ENTITY_NAME = 'CONTACT_POINTS'
14493   );
14494 
14495   IF l_num_attrs > 0 THEN
14496     l('    IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN');
14497     ldbg_s('Before Calling Procedure - get_contact_point_rec');
14498     l('      get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);');
14499     l('    END IF;');
14500   END IF;
14501   l('EXCEPTION');
14502   l('  WHEN FND_API.G_EXC_ERROR THEN');
14503   l('    RAISE FND_API.G_EXC_ERROR;');
14504   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
14505   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14506   l('  WHEN OTHERS THEN');
14507   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14508   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''get_search_criteria'');');
14509   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14510   l('    FND_MSG_PUB.ADD;');
14511   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14512   l('END get_search_criteria;');
14513   l('');
14514 
14515   l('');
14516   l('/************************************************');
14517   l('  This procedure retrieves the match rule party attributes into ');
14518   l('  the party search record structure ');
14519   l('************************************************/');
14520   l('');
14521   l('PROCEDURE get_party_rec (');
14522   l('        p_party_id              IN      NUMBER,');
14523   l('        x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type');
14524   l(') IS');
14525   l('    l_party_type VARCHAR2(255);');
14526   l('BEGIN');
14527   l('');
14528   ldbg_s('Inside calling procedure - get_party_rec');
14529   l('    SELECT PARTY_TYPE INTO l_party_type');
14530   l('    FROM HZ_PARTIES');
14531   l('    WHERE PARTY_ID = p_party_id;');
14532   l('');
14533   ldbg_sv('l_party_type is - ','l_party_type'  ) ;
14534   l('    IF l_party_type = ''ORGANIZATION'' THEN');
14535 
14536   SELECT COUNT(*) INTO l_num_attrs
14537   FROM (
14538     SELECT a.attribute_id
14539     FROM HZ_TRANS_ATTRIBUTES_VL a,
14540          HZ_MATCH_RULE_PRIMARY p
14541     WHERE p.match_rule_id = p_rule_id
14542     AND p.attribute_id = a.attribute_id
14543     AND a.ENTITY_NAME = 'PARTY'
14544     AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14545        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14546        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14547        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14548     AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14549     UNION
14550     SELECT a.attribute_id
14551     FROM HZ_TRANS_ATTRIBUTES_VL a,
14552          HZ_MATCH_RULE_SECONDARY s
14553     WHERE s.match_rule_id = p_rule_id
14554     AND s.attribute_id = a.attribute_id
14555     AND a.ENTITY_NAME = 'PARTY'
14556     AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14557        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14558        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14559        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14560     AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14561   );
14562 
14563   IF l_num_attrs>0 THEN
14564     l('      SELECT ');
14565     FIRST := TRUE;
14566     FOR ATTRS IN (
14567       SELECT distinct a.ATTRIBUTE_NAME, decode(a.SOURCE_TABLE, 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES', 'HZ_ORGANIZATION_PROFILES', 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES', 'HZ_ORGANIZATION_PROFILES', a.SOURCE_TABLE) SOURCE_TABLE
14568        FROM HZ_TRANS_ATTRIBUTES_VL a,
14569             HZ_MATCH_RULE_PRIMARY p
14570        WHERE p.match_rule_id = p_rule_id
14571        AND p.attribute_id = a.attribute_id
14572        AND a.ENTITY_NAME = 'PARTY'
14573        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14574           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14575        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14576        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14577        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14578        UNION
14579        SELECT distinct a.ATTRIBUTE_NAME, decode(a.SOURCE_TABLE, 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES', 'HZ_ORGANIZATION_PROFILES', 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES', 'HZ_ORGANIZATION_PROFILES', a.SOURCE_TABLE) SOURCE_TABLE
14580        FROM HZ_TRANS_ATTRIBUTES_VL a,
14581             HZ_MATCH_RULE_SECONDARY s
14582        WHERE s.match_rule_id = p_rule_id
14583        AND s.attribute_id = a.attribute_id
14584        AND a.ENTITY_NAME = 'PARTY'
14585        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14586           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14587        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14588        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14589        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14590 
14591       IF FIRST THEN
14592         l('        translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14593         FIRST := FALSE;
14594       ELSE
14595         l('       ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14596       END IF;
14597     END LOOP;
14598 
14599     l('      INTO ');
14600     FIRST := TRUE;
14601     FOR ATTRS IN (
14602        SELECT distinct a.ATTRIBUTE_NAME
14603        FROM HZ_TRANS_ATTRIBUTES_VL a,
14604             HZ_MATCH_RULE_PRIMARY p
14605        WHERE p.match_rule_id = p_rule_id
14606        AND p.attribute_id = a.attribute_id
14607        AND a.ENTITY_NAME = 'PARTY'
14608        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14609           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES'  OR
14610           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14611           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14612        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14613        UNION
14614        SELECT distinct a.ATTRIBUTE_NAME
14615        FROM HZ_TRANS_ATTRIBUTES_VL a,
14616             HZ_MATCH_RULE_SECONDARY s
14617        WHERE s.match_rule_id = p_rule_id
14618        AND s.attribute_id = a.attribute_id
14619        AND a.ENTITY_NAME = 'PARTY'
14620        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14621           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES'  OR
14622        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14623        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14624        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14625 
14626 
14627       IF FIRST THEN
14628         l('        x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14629         FIRST := FALSE;
14630       ELSE
14631         l('       ,x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14632       END IF;
14633     END LOOP;
14634 
14635     l('      FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES');
14636     l('      WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id');
14637     l('      AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL');
14638     l('      AND HZ_PARTIES.party_id = p_party_id;');
14639   ELSE
14640     l('      NULL;');
14641   END IF;
14642   l('    ELSIF l_party_type = ''PERSON'' THEN');
14643 
14644   SELECT COUNT(*) INTO l_num_attrs
14645   FROM (
14646     SELECT a.attribute_id
14647     FROM HZ_TRANS_ATTRIBUTES_VL a,
14648          HZ_MATCH_RULE_PRIMARY p
14649     WHERE p.match_rule_id = p_rule_id
14650     AND p.attribute_id = a.attribute_id
14651     AND a.ENTITY_NAME = 'PARTY'
14652     AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14653        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES'  OR
14654        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14655        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14656     AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14657     UNION
14658     SELECT a.attribute_id
14659     FROM HZ_TRANS_ATTRIBUTES_VL a,
14660          HZ_MATCH_RULE_SECONDARY s
14661     WHERE s.match_rule_id = p_rule_id
14662     AND s.attribute_id = a.attribute_id
14663     AND a.ENTITY_NAME = 'PARTY'
14664     AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14665        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES'  OR
14666        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14667        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14668     AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14669   );
14670 
14671   IF l_num_attrs>0 THEN
14672     l('      SELECT ');
14673     FIRST := TRUE;
14674     FOR ATTRS IN (
14675        SELECT distinct a.ATTRIBUTE_NAME, decode(a.SOURCE_TABLE, 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES', 'HZ_PERSON_PROFILES','HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES', 'HZ_PERSON_PROFILES', a.SOURCE_TABLE)  SOURCE_TABLE
14676        FROM HZ_TRANS_ATTRIBUTES_VL a,
14677             HZ_MATCH_RULE_PRIMARY p
14678        WHERE p.match_rule_id = p_rule_id
14679        AND p.attribute_id = a.attribute_id
14680        AND a.ENTITY_NAME = 'PARTY'
14681        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14682           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES'  OR
14683           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14684           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14685        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14686        UNION
14687        SELECT distinct a.ATTRIBUTE_NAME, decode(a.SOURCE_TABLE, 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES', 'HZ_PERSON_PROFILES', 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES', 'HZ_PERSON_PROFILES', a.SOURCE_TABLE) SOURCE_TABLE
14688        FROM HZ_TRANS_ATTRIBUTES_VL a,
14689             HZ_MATCH_RULE_SECONDARY s
14690        WHERE s.match_rule_id = p_rule_id
14691        AND s.attribute_id = a.attribute_id
14692        AND a.ENTITY_NAME = 'PARTY'
14693        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14694           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES'  OR
14695           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
14696           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES')
14697        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14698 
14699       IF FIRST THEN
14700         l('        translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14701         FIRST := FALSE;
14702       ELSE
14703         l('       ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14704       END IF;
14705     END LOOP;
14706 
14707     l('      INTO ');
14708     FIRST := TRUE;
14709     FOR ATTRS IN (
14710        SELECT distinct a.ATTRIBUTE_NAME
14711        FROM HZ_TRANS_ATTRIBUTES_VL a,
14712             HZ_MATCH_RULE_PRIMARY p
14713        WHERE p.match_rule_id = p_rule_id
14714        AND p.attribute_id = a.attribute_id
14715        AND a.ENTITY_NAME = 'PARTY'
14716        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14717           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES'  OR
14718           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
14719           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES')
14720        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14721        UNION
14722        SELECT distinct a.ATTRIBUTE_NAME
14723        FROM HZ_TRANS_ATTRIBUTES_VL a,
14724             HZ_MATCH_RULE_SECONDARY s
14725        WHERE s.match_rule_id = p_rule_id
14726        AND s.attribute_id = a.attribute_id
14727        AND a.ENTITY_NAME = 'PARTY'
14728        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14729           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14730           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
14731           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES')
14732        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14733 
14734       IF FIRST THEN
14735         l('        x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14736         FIRST := FALSE;
14737       ELSE
14738         l('       ,x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14739       END IF;
14740     END LOOP;
14741 
14742     l('      FROM HZ_PARTIES, HZ_PERSON_PROFILES');
14743     l('      WHERE HZ_PARTIES.party_id = HZ_PERSON_PROFILES.party_id');
14744     l('      AND HZ_PERSON_PROFILES.effective_end_date is NULL');
14745     l('      AND HZ_PARTIES.party_id = p_party_id;');
14746   ELSE
14747     l('      NULL;');
14748   END IF;
14749   l('    END IF;');
14750   l('    x_party_search_rec.PARTY_TYPE := l_party_type;');
14751   generate_custom_code(p_rule_id, '    x_party_search_rec','PARTY','p_party_id');
14752   l('');
14753   l('EXCEPTION');
14754   l('  WHEN OTHERS THEN');
14755   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
14756   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''get_party_rec'');');
14757   l('    FND_MESSAGE.SET_TOKEN(''PARTY_ID'',p_party_id);');
14758   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14759   l('    FND_MSG_PUB.ADD;');
14760   l('    RAISE FND_API.G_EXC_ERROR;');
14761   l('END get_party_rec;');
14762   l('');
14763   l('/************************************************');
14764   l('  This procedure retrieves the match rule party site attributes into ');
14765   l('  the party site search record structure ');
14766   l('************************************************/');
14767   l('');
14768   l('PROCEDURE get_party_site_rec (');
14769   l('        p_party_site_ids       IN      HZ_PARTY_SEARCH.IDList,');
14770   l('        x_party_site_list      OUT NOCOPY HZ_PARTY_SEARCH.party_site_list');
14771   l(') IS');
14772   l('  CURSOR c_party_sites(cp_party_site_id NUMBER) IS');
14773   l('    SELECT party_site_id');
14774   FOR ATTRS IN (
14775     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14776     FROM HZ_TRANS_ATTRIBUTES_VL a,
14777          HZ_MATCH_RULE_PRIMARY p
14778     WHERE p.match_rule_id = p_rule_id
14779     AND p.attribute_id = a.attribute_id
14780     AND a.ENTITY_NAME = 'PARTY_SITES'
14781     AND a.SOURCE_TABLE <> 'CUSTOM'
14782     UNION
14783     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14784     FROM HZ_TRANS_ATTRIBUTES_VL a,
14785          HZ_MATCH_RULE_SECONDARY s
14786     WHERE s.match_rule_id = p_rule_id
14787     AND s.attribute_id = a.attribute_id
14788     AND a.ENTITY_NAME = 'PARTY_SITES'
14789     AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14790 
14791      l('      ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14792   END LOOP;
14793   l('    FROM HZ_PARTY_SITES, HZ_LOCATIONS');
14794   l('    WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id');
14795   l('    AND   HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;');
14796   l('');
14797   l('  I NUMBER;');
14798   l('  J NUMBER:=1;');
14799   l('  l_party_site_id NUMBER;');
14800   l('');
14801   l('BEGIN');
14802   l('');
14803   ldbg_s('Inside calling procedure - get_party_site_rec');
14804   l('    FOR I IN 1..p_party_site_ids.COUNT LOOP');
14805   l('      l_party_site_id := p_party_site_ids(I);');
14806   l('      OPEN c_party_sites(p_party_site_ids(I));');
14807   l('      LOOP');
14808   l('        FETCH c_party_sites INTO');
14809   l('             l_party_site_id');
14810   FOR ATTRS IN (
14811     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14812     FROM HZ_TRANS_ATTRIBUTES_VL a,
14813          HZ_MATCH_RULE_PRIMARY p
14814     WHERE p.match_rule_id = p_rule_id
14815     AND p.attribute_id = a.attribute_id
14816     AND a.ENTITY_NAME = 'PARTY_SITES'
14817     AND a.SOURCE_TABLE <> 'CUSTOM'
14818 
14819     UNION
14820 
14821     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14822     FROM HZ_TRANS_ATTRIBUTES_VL a,
14823          HZ_MATCH_RULE_SECONDARY s
14824     WHERE s.match_rule_id = p_rule_id
14825     AND s.attribute_id = a.attribute_id
14826     AND a.ENTITY_NAME = 'PARTY_SITES'
14827     AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14828 
14829     l('           ,x_party_site_list(J).'||ATTRS.ATTRIBUTE_NAME);
14830   END LOOP;
14831   l('        ;');
14832   l('        EXIT WHEN c_party_sites%NOTFOUND;');
14833   l('');
14834   generate_custom_code(p_rule_id, '        x_party_site_list(J)','PARTY_SITES','l_party_site_id')
14835 ;
14836   l('        J:=J+1;');
14837   l('');
14838   l('      END LOOP;');
14839   l('      CLOSE c_party_sites;');
14840   l('    END LOOP;');
14841   l('');
14842   l('EXCEPTION');
14843   l('  WHEN OTHERS THEN');
14844   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
14845   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''get_party_site_rec'');');
14846   l('    FND_MESSAGE.SET_TOKEN(''PARTY_ID'',l_party_site_id);');
14847   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14848   l('    FND_MSG_PUB.ADD;');
14849   l('    RAISE FND_API.G_EXC_ERROR;');
14850   l('END get_party_site_rec;');
14851   l('');
14852 
14853   l('/************************************************');
14854   l('  This procedure retrieves the match rule contact attributes into ');
14855   l('  the contact search record structure ');
14856   l('************************************************/');
14857   l('');
14858   l('PROCEDURE get_contact_rec (');
14859   l('        p_contact_ids       IN      HZ_PARTY_SEARCH.IDList,');
14860   l('        x_contact_list      OUT NOCOPY HZ_PARTY_SEARCH.contact_list');
14861   l(') IS');
14862   l('  CURSOR c_contacts(cp_org_contact_id NUMBER) IS');
14863   l('    SELECT org_contact_id');
14864   FOR ATTRS IN (
14865     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14866     FROM HZ_TRANS_ATTRIBUTES_VL a,
14867          HZ_MATCH_RULE_PRIMARY p
14868     WHERE p.match_rule_id = p_rule_id
14869     AND p.attribute_id = a.attribute_id
14870     AND a.ENTITY_NAME = 'CONTACTS'
14871     AND a.SOURCE_TABLE <> 'CUSTOM'
14872     UNION
14873     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14874     FROM HZ_TRANS_ATTRIBUTES_VL a,
14875          HZ_MATCH_RULE_SECONDARY s
14876     WHERE s.match_rule_id = p_rule_id
14877     AND s.attribute_id = a.attribute_id
14878     AND a.ENTITY_NAME = 'CONTACTS'
14879     AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14880 
14881     l('      ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14882   END LOOP;
14883   l('    FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES');
14884   l('    WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id');
14885   l('    AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14886   l('    AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14887   l('    AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = ''F''');
14888   l('    AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14889   l('    AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id');
14890   l('    AND HZ_PERSON_PROFILES.effective_end_date IS NULL;');
14891   l('');
14892   l('  I NUMBER;');
14893   l('  l_org_contact_id NUMBER;');
14894   l('  J NUMBER:=1;');
14895 
14896   l('  BEGIN');
14897   l('');
14898   ldbg_s('Inside calling procedure - get_contact_rec');
14899   l('    FOR I IN 1..p_contact_ids.COUNT LOOP');
14900   l('      l_org_contact_id := p_contact_ids(I);');
14901   l('      OPEN c_contacts(p_contact_ids(I));');
14902   l('      LOOP');
14903   l('        FETCH c_contacts INTO');
14904   l('             l_org_contact_id');
14905   FOR ATTRS IN (
14906     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14907     FROM HZ_TRANS_ATTRIBUTES_VL a,
14908          HZ_MATCH_RULE_PRIMARY p
14909     WHERE p.match_rule_id = p_rule_id
14910     AND p.attribute_id = a.attribute_id
14911     AND a.ENTITY_NAME = 'CONTACTS'
14912     AND a.SOURCE_TABLE <> 'CUSTOM'
14913 
14914     UNION
14915 
14916     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14917     FROM HZ_TRANS_ATTRIBUTES_VL a,
14918          HZ_MATCH_RULE_SECONDARY s
14919     WHERE s.match_rule_id = p_rule_id
14920     AND s.attribute_id = a.attribute_id
14921     AND a.ENTITY_NAME = 'CONTACTS'
14922     AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14923 
14924     l('             ,x_contact_list(J).'||ATTRS.ATTRIBUTE_NAME);
14925   END LOOP;
14926   l('        ;');
14927   l('        EXIT WHEN c_contacts%NOTFOUND;');
14928   l('');
14929   generate_custom_code(p_rule_id, '        x_contact_list(J)','CONTACTS','l_org_contact_id');
14930   l('');
14931   l('        J:=J+1;');
14932   l('      END LOOP;');
14933   l('      CLOSE c_contacts;');
14934   l('    END LOOP;');
14935   l('');
14936   l('EXCEPTION');
14937   l('  WHEN OTHERS THEN');
14938   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
14939   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''get_contact_rec'');');
14940   l('    FND_MESSAGE.SET_TOKEN(''PARTY_ID'',l_org_contact_id);');
14941   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14942   l('    FND_MSG_PUB.ADD;');
14943   l('    RAISE FND_API.G_EXC_ERROR;');
14944   l('END get_contact_rec;');
14945   l('');
14946   l('/************************************************');
14947   l('  This procedure retrieves the match rule contact point attributes into ');
14948   l('  the contact point search record structure ');
14949   l('************************************************/');
14950   l('');
14951   l('PROCEDURE get_contact_point_rec (');
14952   l('        p_contact_point_ids     IN  HZ_PARTY_SEARCH.IDList,');
14953   l('        x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
14954   l(') IS');
14955   l('');
14956   l('  -- Cursor to fetch primary contact points for party');
14957   l('  CURSOR c_cpts(cp_contact_point_id NUMBER) IS');
14958   l('    SELECT contact_point_id, contact_point_type');
14959   FOR ATTRS IN (
14960     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14961     FROM HZ_TRANS_ATTRIBUTES_VL a,
14962          HZ_MATCH_RULE_PRIMARY p
14963     WHERE p.match_rule_id = p_rule_id
14964     AND p.attribute_id = a.attribute_id
14965     AND a.ENTITY_NAME = 'CONTACT_POINTS'
14966     AND a.SOURCE_TABLE <> 'CUSTOM'
14967 
14968     UNION
14969 
14970     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14971     FROM HZ_TRANS_ATTRIBUTES_VL a,
14972          HZ_MATCH_RULE_SECONDARY s
14973     WHERE s.match_rule_id = p_rule_id
14974     AND s.attribute_id = a.attribute_id
14975     AND a.ENTITY_NAME = 'CONTACT_POINTS'
14976     AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14977 
14978     l('      ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5565522
14979   END LOOP;
14980   l('    FROM HZ_CONTACT_POINTS');
14981   l('    WHERE contact_point_id = cp_contact_point_id;');
14982 
14983   l('');
14984   l('  I NUMBER;');
14985   l('  l_contact_point_id NUMBER;');
14986   l('  J NUMBER:=1;');
14987 
14988   l('  BEGIN');
14989   l('');
14990   ldbg_s('Inside calling procedure - get_contact_point_rec');
14991   l('    FOR I in 1..p_contact_point_ids.COUNT LOOP');
14992   l('      l_contact_point_id := p_contact_point_ids(I);');
14993   l('      OPEN c_cpts(p_contact_point_ids(I));');
14994   l('      LOOP');
14995   l('        FETCH c_cpts INTO');
14996   l('             l_contact_point_id, x_contact_point_list(J).contact_point_type');
14997 
14998   FOR ATTRS IN (
14999     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
15000     FROM HZ_TRANS_ATTRIBUTES_VL a,
15001          HZ_MATCH_RULE_PRIMARY p
15002     WHERE p.match_rule_id = p_rule_id
15003     AND p.attribute_id = a.attribute_id
15004     AND a.ENTITY_NAME = 'CONTACT_POINTS'
15005     AND a.SOURCE_TABLE <> 'CUSTOM'
15006 
15007     UNION
15008 
15009     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
15010     FROM HZ_TRANS_ATTRIBUTES_VL a,
15011          HZ_MATCH_RULE_SECONDARY s
15012     WHERE s.match_rule_id = p_rule_id
15013     AND s.attribute_id = a.attribute_id
15014     AND a.ENTITY_NAME = 'CONTACT_POINTS'
15015     AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
15016 
15017 
15018     l('             ,x_contact_point_list(J).'||ATTRS.ATTRIBUTE_NAME);
15019   END LOOP;
15020   l('        ;');
15021   l('        EXIT WHEN c_cpts%NOTFOUND;');
15022   l('');
15023   generate_custom_code(p_rule_id, '        x_contact_point_list(J)','CONTACT_POINTS','l_contact_point_id');
15024   l('        J:=J+1;');
15025   l('');
15026   l('      END LOOP;');
15027   l('      CLOSE c_cpts;');
15028   l('    END LOOP;');
15029 
15030   l('');
15031   l('EXCEPTION');
15032   l('  WHEN OTHERS THEN');
15033   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
15034   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''get_contact_point_rec'');');
15035   l('    FND_MESSAGE.SET_TOKEN(''PARTY_ID'',l_contact_point_id);');
15036   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
15037   l('    FND_MSG_PUB.ADD;');
15038   l('    RAISE FND_API.G_EXC_ERROR;');
15039   l('END get_contact_point_rec;');
15040 
15041 END;
15042 
15043 PROCEDURE generate_check_staged (
15044 	p_rule_id	IN	NUMBER
15045 ) IS
15046 
15047   CURSOR c_trans_func IS
15048     SELECT f.FUNCTION_ID
15049     FROM hz_primary_trans f, hz_match_rule_primary a
15050     WHERE a.MATCH_RULE_ID = p_rule_id
15051     AND a.PRIMARY_ATTRIBUTE_ID = f.PRIMARY_ATTRIBUTE_ID
15052 
15053     UNION
15054 
15055     SELECT f.FUNCTION_ID
15056     FROM hz_secondary_trans f, hz_match_rule_secondary a
15057     WHERE a.MATCH_RULE_ID = p_rule_id
15058     AND a.SECONDARY_ATTRIBUTE_ID = f.SECONDARY_ATTRIBUTE_ID;
15059 
15060 ---Start of Code Change for Match Rule Set
15061   CURSOR c_ruleset_trans_func IS
15062     SELECT f.FUNCTION_ID
15063     FROM hz_primary_trans f, hz_match_rule_primary a
15064     WHERE a.MATCH_RULE_ID IN (SELECT UNIQUE CONDITION_MATCH_RULE_ID
15065                               FROM HZ_MATCH_RULE_CONDITIONS
15066 			      WHERE MATCH_RULE_SET_ID = p_rule_id
15067                              )
15068     AND a.PRIMARY_ATTRIBUTE_ID = f.PRIMARY_ATTRIBUTE_ID
15069 
15070     UNION
15071 
15072     SELECT f.FUNCTION_ID
15073     FROM hz_secondary_trans f, hz_match_rule_secondary a
15074     WHERE a.MATCH_RULE_ID IN (SELECT UNIQUE CONDITION_MATCH_RULE_ID
15075                               FROM HZ_MATCH_RULE_CONDITIONS
15076 			      WHERE MATCH_RULE_SET_ID = p_rule_id
15077                              )
15078     AND a.SECONDARY_ATTRIBUTE_ID = f.SECONDARY_ATTRIBUTE_ID;
15079 
15080 ---End of Code Change for Match Rule Set
15081 
15082   l_func_id NUMBER;
15083   FIRST BOOLEAN := FALSE;
15084   l_rule_type varchar2(30); ---Code Change for Match Rule Set
15085 BEGIN
15086  ---Start of Code Change for Match Rule Set
15087  SELECT nvl(match_rule_type,'SINGLE') into l_rule_type FROM HZ_MATCH_RULES_VL
15088  WHERE match_rule_id = p_rule_id;
15089  ---End of Code Change for Match Rule Set
15090 
15091   l('FUNCTION check_staged RETURN BOOLEAN IS');
15092   l('');
15093   l('  CURSOR c_check_staged IS ');
15094   l('    SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL ');
15095   l('    WHERE nvl(STAGED_FLAG,''N'') = ''N'' ');
15096   l('    AND FUNCTION_ID in (');
15097   FIRST := TRUE;
15098 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
15099   OPEN c_trans_func;
15100   LOOP
15101     FETCH c_trans_func INTO l_func_id;
15102     EXIT WHEN c_trans_func%NOTFOUND;
15103 
15104     IF FIRST THEN
15105       l('                ' || l_func_id);
15106       FIRST := FALSE;
15107     ELSE
15108       l('                ,'|| l_func_id);
15109     END IF;
15110   END LOOP;
15111   CLOSE c_trans_func;
15112 ELSE ---Start of Code Change for Match Rule Set
15113  OPEN c_ruleset_trans_func;
15114   LOOP
15115     FETCH c_ruleset_trans_func INTO l_func_id;
15116     EXIT WHEN c_ruleset_trans_func%NOTFOUND;
15117 
15118     IF FIRST THEN
15119       l('                ' || l_func_id);
15120       FIRST := FALSE;
15121     ELSE
15122       l('                ,'|| l_func_id);
15123     END IF;
15124   END LOOP;
15125   CLOSE c_ruleset_trans_func;
15126 
15127 END IF; ---End of Code Change for Match Rule Set
15128   l('    );');
15129 
15130   l('  l_tmp NUMBER;');
15131 
15132   l('BEGIN');
15133   l('  IF g_staged =  1 THEN');
15134   l('    RETURN TRUE;');
15135   l('  ELSIF g_staged = 0 THEN');
15136   l('    RETURN FALSE;');
15137   l('  END IF;');
15138   l('');
15139   l('  OPEN c_check_staged;');
15140   l('  FETCH c_check_staged INTO l_tmp;');
15141   l('  IF c_check_staged%FOUND THEN');
15142   l('    CLOSE c_check_staged;');
15143   l('    g_staged := 0;');
15144   l('    RETURN FALSE;');
15145   l('  ELSE');
15146   l('    CLOSE c_check_staged;');
15147   l('    g_staged := 1;');
15148   l('    RETURN TRUE;');
15149   l('  END IF;');
15150   l('END check_staged;');
15151 
15152   l('');
15153   l('-- Fix for Bug 4736139');
15154   l('FUNCTION check_staged_var RETURN VARCHAR2 IS');
15155   l('  l_staged       VARCHAR2(1);');
15156   l('  l_staged_bool  BOOLEAN;');
15157   l('BEGIN');
15158   l('  l_staged_bool := check_staged;');
15159   l('  IF l_staged_bool THEN');
15160   l('    l_staged := ''Y'';');
15161   l('  ELSE');
15162   l('    l_staged := ''N'';');
15163   l('  END IF;');
15164   l('  RETURN l_staged;');
15165   l('END check_staged_var;');
15166   l('-- End fix for Bug 4736139');
15167   l('');
15168 
15169 END;
15170 
15171 PROCEDURE gen_pkg_spec (
15172 	p_pkg_name 	IN	VARCHAR2,
15173         p_rule_id	IN	NUMBER
15174 ) IS
15175 
15176 BEGIN
15177 
15178   l('CREATE or REPLACE PACKAGE ' || p_pkg_name || ' AUTHID CURRENT_USER AS');
15179   l('PROCEDURE map_party_rec (');
15180   l('        p_search_ctx IN BOOLEAN,');
15181   l('        p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15182   l('        x_entered_max_score OUT NUMBER,');
15183   l('        x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type');
15184   l(');');
15185   l('PROCEDURE map_party_site_rec (');
15186   l('      p_search_ctx IN BOOLEAN,');
15187   l('      p_search_list IN HZ_PARTY_SEARCH.party_site_list, ');
15188   l('      x_entered_max_score OUT NUMBER,');
15189   l('      x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list');
15190   l(');');
15191   l('PROCEDURE map_contact_rec (');
15192   l('      p_search_ctx IN BOOLEAN,');
15193   l('      p_search_list IN HZ_PARTY_SEARCH.contact_list,');
15194   l('      x_entered_max_score OUT NUMBER,');
15195   l('      x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list');
15196   l('  );');
15197   l('PROCEDURE map_contact_point_rec (');
15198   l('      p_search_ctx IN BOOLEAN,');
15199   l('      p_search_list IN HZ_PARTY_SEARCH.contact_point_list,');
15200   l('      x_entered_max_score OUT NUMBER,');
15201   l('      x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list');
15202   l('  );');
15203   l('PROCEDURE get_party_rec (');
15204   l('        p_party_id              IN      NUMBER,');
15205   l('        x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type');
15206   l(');');
15207   l('PROCEDURE get_party_site_rec (');
15208   l('        p_party_site_ids        IN      HZ_PARTY_SEARCH.IDList,');
15209   l('        x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list');
15210   l(');');
15211   l('PROCEDURE get_contact_rec (');
15212   l('        p_contact_ids           IN      HZ_PARTY_SEARCH.IDList,');
15213   l('        x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list');
15214   l(');');
15215   l('PROCEDURE get_contact_point_rec (');
15216   l('        p_contact_point_ids     IN  HZ_PARTY_SEARCH.IDList,');
15217   l('        x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15218   l(');');
15219 
15220   l('FUNCTION check_prim_cond(');
15221   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
15222   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
15223   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
15224   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list)');
15225   l('   RETURN BOOLEAN;');
15226   l('PROCEDURE check_party_site_cond(');
15227   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
15228   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15229   l('      x_secondary             OUT     BOOLEAN,');
15230   l('      x_primary               OUT     BOOLEAN');
15231   l(');');
15232   l('PROCEDURE check_contact_cond(');
15233   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
15234   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15235   l('      x_secondary             OUT     BOOLEAN,');
15236   l('      x_primary               OUT     BOOLEAN');
15237   l(');');
15238   l('PROCEDURE check_contact_point_cond(');
15239   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15240   l('      x_secondary             OUT     BOOLEAN,');
15241   l('      x_primary               OUT     BOOLEAN');
15242   l(');');
15243   l('PROCEDURE find_parties (');
15244   l('      p_rule_id               IN      NUMBER,');
15245   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
15246   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
15247   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
15248   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15249   l('      p_restrict_sql          IN      VARCHAR2,');
15250   l('      p_match_type		   IN      VARCHAR2,');
15251   l('      p_search_merged         IN      VARCHAR2,');
15252   l('      p_dup_party_id          IN      NUMBER,');
15253   l('      p_dup_set_id            IN      NUMBER,');
15254   l('      p_dup_batch_id          IN      NUMBER,');
15255   l('      p_ins_details           IN      VARCHAR2,');
15256   l('      x_search_ctx_id         OUT     NUMBER,');
15257   l('      x_num_matches           OUT     NUMBER');
15258   l(');');
15259   l('PROCEDURE find_persons (');
15260   l('      p_rule_id               IN      NUMBER,');
15261   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
15262   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
15263   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
15264   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15265   l('      p_restrict_sql          IN      VARCHAR2,');
15266   l('      p_match_type            IN      VARCHAR2,');
15267   l('      p_search_merged         IN      VARCHAR2,');
15268   l('      p_ins_details           IN      VARCHAR2,');
15269   l('      x_search_ctx_id         OUT     NUMBER,');
15270   l('      x_num_matches           OUT     NUMBER');
15271   l(');');
15272   l('PROCEDURE find_party_details (');
15273   l('      p_rule_id               IN      NUMBER,');
15274   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
15275   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
15276   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
15277   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15278   l('      p_restrict_sql          IN      VARCHAR2,');
15279   l('      p_match_type		   IN      VARCHAR2,');
15280   l('      p_search_merged         IN      VARCHAR2,');
15281   l('      x_search_ctx_id         OUT     NUMBER,');
15282   l('      x_num_matches           OUT     NUMBER');
15283   l(');');
15284   l('PROCEDURE find_duplicate_party_sites(');
15285   l('      p_rule_id               IN      NUMBER,');
15286   l('	   p_party_site_id	   IN	   NUMBER,');
15287   l('	   p_party_id		   IN	   NUMBER,');
15288   l('      p_restrict_sql          IN      VARCHAR2,');
15289   l('      p_match_type            IN      VARCHAR2,');
15290   l('      x_search_ctx_id         OUT     NUMBER,');
15291   l('      x_num_matches           OUT     NUMBER');
15292   l(');');
15293   l('PROCEDURE find_duplicate_contacts(');
15294   l('      p_rule_id               IN      NUMBER,');
15295   l('	   p_org_contact_id	   IN	   NUMBER,');
15296   l('	   p_party_id		   IN	   NUMBER,');
15297   l('      p_restrict_sql          IN      VARCHAR2,');
15298   l('      p_match_type            IN      VARCHAR2,');
15299   l('      x_search_ctx_id         OUT     NUMBER,');
15300   l('      x_num_matches           OUT     NUMBER');
15301   l(');');
15302   l('PROCEDURE find_duplicate_contact_points(');
15303   l('      p_rule_id               IN      NUMBER,');
15304   l('	   p_contact_point_id	   IN	   NUMBER,');
15305   l('	   p_party_id		   IN	   NUMBER,');
15306   l('      p_restrict_sql          IN      VARCHAR2,');
15307   l('      p_match_type            IN      VARCHAR2,');
15308   l('      x_search_ctx_id         OUT     NUMBER,');
15309   l('      x_num_matches           OUT     NUMBER');
15310   l(');');
15311   l('PROCEDURE find_duplicate_parties (');
15312   l('      p_rule_id               IN      NUMBER,');
15313   l('	   p_party_id		   IN	   NUMBER,');
15314   l('      p_restrict_sql          IN      VARCHAR2,');
15315   l('      p_match_type            IN      VARCHAR2,');
15316   l('	   p_dup_batch_id	   IN	   NUMBER,');
15317   l('      p_search_merged         IN      VARCHAR2,');
15318   l('      x_dup_set_id            OUT     NUMBER,');
15319   l('      x_search_ctx_id         OUT     NUMBER,');
15320   l('      x_num_matches           OUT     NUMBER');
15321   l(');');
15322   l('PROCEDURE get_matching_party_sites (');
15323   l('        p_rule_id               IN      NUMBER,');
15324   l('        p_party_id              IN      NUMBER,');
15325   l('        p_party_site_list       IN      HZ_PARTY_SEARCH.PARTY_SITE_LIST,');
15326   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
15327   l('        p_restrict_sql          IN      VARCHAR2,');
15328   l('        p_match_type	     IN      VARCHAR2,');
15329   l('        p_dup_party_site_id     IN      NUMBER, ');
15330   l('        x_search_ctx_id         OUT     NUMBER,');
15331   l('        x_num_matches           OUT     NUMBER');
15332   l(');');
15333   l('PROCEDURE get_matching_contacts (');
15334   l('        p_rule_id               IN      NUMBER,');
15335   l('        p_party_id              IN      NUMBER,');
15336   l('        p_contact_list   	     IN      HZ_PARTY_SEARCH.CONTACT_LIST,');
15337   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
15338   l('        p_restrict_sql          IN      VARCHAR2,');
15339   l('        p_match_type	     IN      VARCHAR2,');
15340   l('        p_dup_contact_id        IN      NUMBER, ');
15341   l('        x_search_ctx_id         OUT     NUMBER,');
15342   l('        x_num_matches           OUT     NUMBER');
15343   l(');');
15344   l('');
15345   l('PROCEDURE get_matching_contact_points (');
15346   l('        p_rule_id               IN      NUMBER,');
15347   l('        p_party_id              IN      NUMBER,');
15348   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
15349   l('        p_restrict_sql          IN      VARCHAR2,');
15350   l('        p_match_type	     IN      VARCHAR2,');
15351   l('        p_dup_contact_point_id  IN      NUMBER, ');
15352   l('        x_search_ctx_id         OUT     NUMBER,');
15353   l('        x_num_matches           OUT     NUMBER');
15354   l(');');
15355   l('PROCEDURE get_score_details (');
15356   l('        p_rule_id               IN      NUMBER,');
15357   l('        p_party_id              IN      NUMBER,');
15358   l('        p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
15359   l('        p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
15360   l('        p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
15361   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15362   l('        x_search_ctx_id         IN OUT  NUMBER');
15363   l(');');
15364   l('PROCEDURE find_parties_dynamic (');
15365   l('        p_rule_id               IN      NUMBER,');
15366   l('        p_attrib_id1            IN      NUMBER,');
15367   l('        p_attrib_id2            IN      NUMBER,');
15368   l('        p_attrib_id3            IN      NUMBER,');
15369   l('        p_attrib_id4            IN      NUMBER,');
15370   l('        p_attrib_id5            IN      NUMBER,');
15371   l('        p_attrib_id6            IN      NUMBER,');
15372   l('        p_attrib_id7            IN      NUMBER,');
15373   l('        p_attrib_id8            IN      NUMBER,');
15374   l('        p_attrib_id9            IN      NUMBER,');
15375   l('        p_attrib_id10           IN      NUMBER,');
15376   l('        p_attrib_id11           IN      NUMBER,');
15377   l('        p_attrib_id12           IN      NUMBER,');
15378   l('        p_attrib_id13           IN      NUMBER,');
15379   l('        p_attrib_id14           IN      NUMBER,');
15380   l('        p_attrib_id15           IN      NUMBER,');
15381   l('        p_attrib_id16           IN      NUMBER,');
15382   l('        p_attrib_id17           IN      NUMBER,');
15383   l('        p_attrib_id18           IN      NUMBER,');
15384   l('        p_attrib_id19           IN      NUMBER,');
15385   l('        p_attrib_id20           IN      NUMBER,');
15386   l('        p_attrib_val1           IN      VARCHAR2,');
15387   l('        p_attrib_val2           IN      VARCHAR2,');
15388   l('        p_attrib_val3           IN      VARCHAR2,');
15389   l('        p_attrib_val4           IN      VARCHAR2,');
15390   l('        p_attrib_val5           IN      VARCHAR2,');
15391   l('        p_attrib_val6           IN      VARCHAR2,');
15392   l('        p_attrib_val7           IN      VARCHAR2,');
15393   l('        p_attrib_val8           IN      VARCHAR2,');
15394   l('        p_attrib_val9           IN      VARCHAR2,');
15395   l('        p_attrib_val10          IN      VARCHAR2,');
15396   l('        p_attrib_val11          IN      VARCHAR2,');
15397   l('        p_attrib_val12          IN      VARCHAR2,');
15398   l('        p_attrib_val13          IN      VARCHAR2,');
15399   l('        p_attrib_val14          IN      VARCHAR2,');
15400   l('        p_attrib_val15          IN      VARCHAR2,');
15401   l('        p_attrib_val16          IN      VARCHAR2,');
15402   l('        p_attrib_val17          IN      VARCHAR2,');
15403   l('        p_attrib_val18          IN      VARCHAR2,');
15404   l('        p_attrib_val19          IN      VARCHAR2,');
15405   l('        p_attrib_val20          IN      VARCHAR2,');
15406   l('        p_restrict_sql          IN      VARCHAR2,');
15407   l('        p_match_type            IN      VARCHAR2,');
15408   l('        p_search_merged         IN      VARCHAR2,');
15409   l('        x_search_ctx_id         OUT     NUMBER,');
15410   l('        x_num_matches           OUT     NUMBER');
15411   l(');');
15412   l('PROCEDURE call_api_dynamic (');
15413   l('        p_rule_id               IN      NUMBER,');
15414   l('        p_attrib_id1            IN      NUMBER,');
15415   l('        p_attrib_id2            IN      NUMBER,');
15416   l('        p_attrib_id3            IN      NUMBER,');
15417   l('        p_attrib_id4            IN      NUMBER,');
15418   l('        p_attrib_id5            IN      NUMBER,');
15419   l('        p_attrib_id6            IN      NUMBER,');
15420   l('        p_attrib_id7            IN      NUMBER,');
15421   l('        p_attrib_id8            IN      NUMBER,');
15422   l('        p_attrib_id9            IN      NUMBER,');
15423   l('        p_attrib_id10           IN      NUMBER,');
15424   l('        p_attrib_id11           IN      NUMBER,');
15425   l('        p_attrib_id12           IN      NUMBER,');
15426   l('        p_attrib_id13           IN      NUMBER,');
15427   l('        p_attrib_id14           IN      NUMBER,');
15428   l('        p_attrib_id15           IN      NUMBER,');
15429   l('        p_attrib_id16           IN      NUMBER,');
15430   l('        p_attrib_id17           IN      NUMBER,');
15431   l('        p_attrib_id18           IN      NUMBER,');
15432   l('        p_attrib_id19           IN      NUMBER,');
15433   l('        p_attrib_id20           IN      NUMBER,');
15434   l('        p_attrib_val1           IN      VARCHAR2,');
15435   l('        p_attrib_val2           IN      VARCHAR2,');
15436   l('        p_attrib_val3           IN      VARCHAR2,');
15437   l('        p_attrib_val4           IN      VARCHAR2,');
15438   l('        p_attrib_val5           IN      VARCHAR2,');
15439   l('        p_attrib_val6           IN      VARCHAR2,');
15440   l('        p_attrib_val7           IN      VARCHAR2,');
15441   l('        p_attrib_val8           IN      VARCHAR2,');
15442   l('        p_attrib_val9           IN      VARCHAR2,');
15443   l('        p_attrib_val10          IN      VARCHAR2,');
15444   l('        p_attrib_val11          IN      VARCHAR2,');
15445   l('        p_attrib_val12          IN      VARCHAR2,');
15446   l('        p_attrib_val13          IN      VARCHAR2,');
15447   l('        p_attrib_val14          IN      VARCHAR2,');
15448   l('        p_attrib_val15          IN      VARCHAR2,');
15449   l('        p_attrib_val16          IN      VARCHAR2,');
15450   l('        p_attrib_val17          IN      VARCHAR2,');
15451   l('        p_attrib_val18          IN      VARCHAR2,');
15452   l('        p_attrib_val19          IN      VARCHAR2,');
15453   l('        p_attrib_val20          IN      VARCHAR2,');
15454   l('        p_restrict_sql          IN      VARCHAR2,');
15455   l('        p_api_name              IN      VARCHAR2,');
15456   l('        p_match_type            IN      VARCHAR2,');
15457   l('        p_party_id              IN      NUMBER,');
15458   l('        p_search_merged         IN      VARCHAR2,');
15459   l('        x_search_ctx_id         OUT     NUMBER,');
15460   l('        x_num_matches           OUT     NUMBER');
15461   l(');');
15462 
15463   l('PROCEDURE get_party_for_search (');
15464   l('        p_party_id              IN      NUMBER,');
15465   l('        x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
15466   l('        x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
15467   l('        x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
15468   l('        x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15469   l(');');
15470   l('PROCEDURE get_search_criteria (');
15471   l('        p_party_id              IN      NUMBER,');
15472   l('        p_party_site_ids        IN      HZ_PARTY_SEARCH.IDList,');
15473   l('        p_contact_ids           IN      HZ_PARTY_SEARCH.IDList,');
15474   l('        p_contact_pt_ids        IN      HZ_PARTY_SEARCH.IDList,');
15475   l('        x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
15476   l('        x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
15477   l('        x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
15478   l('        x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15479   l(');');
15480 
15481   l('FUNCTION check_staged RETURN BOOLEAN;');
15482   l('');
15483   l('-- Fix for Bug 4736139');
15484   l('FUNCTION check_staged_var RETURN VARCHAR2;');
15485   l('');
15486   l('  g_staged NUMBER := -1;');
15487   l('END ' || p_pkg_name || ';');
15488 
15489 END;
15490 
15491 FUNCTION num_primary(
15492    p_entity VARCHAR2,
15493    p_rule_id NUMBER) RETURN NUMBER IS
15494 
15495 l_num_primary NUMBER;
15496 BEGIN
15497   SELECT count(1) INTO l_num_primary
15498   FROM HZ_MATCH_RULE_PRIMARY p,
15499        HZ_TRANS_ATTRIBUTES_VL a
15500   WHERE p.match_rule_id = p_rule_id
15501   AND   p.ATTRIBUTE_ID = a.ATTRIBUTE_ID
15502   AND   ENTITY_NAME = p_entity;
15503   RETURN l_num_primary;
15504 
15505 END;
15506 
15507 FUNCTION num_secondary(
15508    p_rule_id NUMBER,
15509    p_entity VARCHAR2) RETURN NUMBER IS
15510 
15511 l_num_secondary NUMBER;
15512 BEGIN
15513   SELECT count(1) INTO l_num_secondary
15514   FROM HZ_MATCH_RULE_SECONDARY p,
15515        HZ_TRANS_ATTRIBUTES_VL a
15516   WHERE p.match_rule_id = p_rule_id
15517   AND   p.ATTRIBUTE_ID = a.ATTRIBUTE_ID
15518   AND   ENTITY_NAME = p_entity;
15519   RETURN l_num_secondary;
15520 
15521 END;
15522 
15523 
15524 PROCEDURE gen_exception_block IS
15525 
15526 BEGIN
15527   l('  --Standard call to get message count and if count is 1, get message info');
15528   l('  FND_MSG_PUB.Count_And_Get(');
15529   l('    p_encoded => FND_API.G_FALSE,');
15530   l('    p_count => x_msg_count,');
15531   l('    p_data  => x_msg_data);');
15532   l('  EXCEPTION');
15533   l('       WHEN FND_API.G_EXC_ERROR THEN');
15534   l('               x_return_status := FND_API.G_RET_STS_ERROR;');
15535   l('               FND_MSG_PUB.Count_And_Get(');
15536   l('                               p_encoded => FND_API.G_FALSE,');
15537   l('                               p_count => x_msg_count,');
15538   l('                               p_data  => x_msg_data);');
15539   l('       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
15540   l('               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;');
15541   l('               FND_MSG_PUB.Count_And_Get(');
15542   l('                               p_encoded => FND_API.G_FALSE,');
15543   l('                               p_count => x_msg_count,');
15544   l('                               p_data  => x_msg_data);');
15545   l('');
15546   l('       WHEN OTHERS THEN');
15547   l('               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;');
15548   l('               FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
15549   l('               FND_MESSAGE.SET_TOKEN(''PROC'' ,''HZ_PARTY_SEARCH'');');
15550   l('               FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
15551   l('               FND_MSG_PUB.ADD;');
15552   l('');
15553   l('               FND_MSG_PUB.Count_And_Get(');
15554   l('                               p_encoded => FND_API.G_FALSE,');
15555   l('                               p_count => x_msg_count,');
15556   l('                               p_data  => x_msg_data);');
15557 END;
15558 
15559 
15560 -- VJN put the meat of what this was earlier doing into the overloaded
15561 -- procedure, that would do the actual compiling based on the match rule purpose
15562 PROCEDURE compile_all_rules_nolog IS
15563 BEGIN
15564   compile_all_rules_nolog('D');
15565   compile_all_rules_nolog('S');
15566 END;
15567 
15568 -- VJN introduced overloaded procedure
15569 PROCEDURE compile_all_rules_nolog( p_rule_purpose IN varchar2)
15570 IS
15571 
15572   l_return_status varchar2(100)  := null;
15573   l_msg_count      number(15)    := 0;
15574   l_msg_data      varchar2(4000)  := null;
15575 
15576   CURSOR c_rules_for_compile  IS
15577     SELECT MATCH_RULE_ID,RULE_NAME FROM HZ_MATCH_RULES_VL
15578     where rule_purpose = p_rule_purpose ;
15579 
15580   l_cur_date DATE;
15581 
15582   l_match_rule_id         NUMBER;
15583   l_rule_name HZ_MATCH_RULES_TL.RULE_NAME%TYPE;
15584   err VARCHAR2(2000);
15585 
15586 BEGIN
15587 
15588   -- Initialize return status and message stack
15589   FND_MSG_PUB.initialize;
15590 
15591   l_cur_date := SYSDATE;
15592 
15593   UPDATE HZ_MATCH_RULES_B SET compilation_flag = 'U'
15594   where rule_purpose = p_rule_purpose ;
15595 
15596   OPEN c_rules_for_compile ;
15597   LOOP
15598     FETCH c_rules_for_compile INTO l_match_rule_id, l_rule_name;
15599     EXIT WHEN c_rules_for_compile%NOTFOUND;
15600 
15601     BEGIN
15602       HZ_MATCH_RULE_COMPILE.COMPILE_MATCH_RULE( l_match_rule_id,'Y',
15603                                                l_return_status,
15604                                                l_msg_count,
15605                                                l_msg_data) ;
15606 
15607     EXCEPTION
15608       WHEN OTHERS THEN
15609         UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_match_rule_id;
15610         COMMIT;
15611     END;
15612 
15613   END LOOP;
15614 
15615   -- IF p_rule_purpose <> 'Q'
15616   -- THEN
15617       HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
15618       gen_wrap_pkg_body(-1);
15619       HZ_GEN_PLSQL.compile_code;
15620   -- END IF;
15621 
15622 EXCEPTION
15623   WHEN OTHERS THEN
15624     ROLLBACK;
15625 END;
15626 
15627 
15628 
15629 
15630 PROCEDURE compile_all_rules (
15631         errbuf                  OUT NOCOPY     VARCHAR2,
15632         retcode                 OUT NOCOPY     VARCHAR2
15633 ) IS
15634 
15635   l_return_status varchar2(100)  := null;
15636   l_msg_count      number(15)    := 0;
15637   l_msg_data      varchar2(4000)  := null;
15638 
15639   CURSOR c_rules_for_compile  IS
15640     SELECT MATCH_RULE_ID,RULE_NAME FROM HZ_MATCH_RULES_VL ORDER BY match_rule_type DESC nulls first;--bug 5263694
15641 
15642   l_cur_date DATE;
15643 
15644   l_match_rule_id         NUMBER;
15645   l_rule_name HZ_MATCH_RULES_TL.RULE_NAME%TYPE;
15646   err VARCHAR2(2000);
15647 
15648 BEGIN
15649 
15650   retcode := 0;
15651 
15652   outandlog('Starting Concurrent Program ''Compile Match Rules ''');
15653   outandlog('Start Time ' || TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
15654   outandlog('NEWLINE');
15655 
15656   -- Initialize return status and message stack
15657   FND_MSG_PUB.initialize;
15658 
15659   l_cur_date := SYSDATE;
15660 
15661   log('');
15662 
15663   UPDATE HZ_MATCH_RULES_B SET compilation_flag = 'U';
15664 
15665   OPEN c_rules_for_compile ;
15666   LOOP
15667     FETCH c_rules_for_compile INTO l_match_rule_id, l_rule_name;
15668     EXIT WHEN c_rules_for_compile%NOTFOUND;
15669 
15670     BEGIN
15671       log('Compiling Match Rule ' || l_rule_name || ' ... ', FALSE);
15672       HZ_MATCH_RULE_COMPILE.COMPILE_MATCH_RULE( l_match_rule_id,'Y',
15673                                                l_return_status,
15674                                                l_msg_count,
15675                                                l_msg_data) ;
15676 
15677       IF l_return_status = 'S' THEN
15678         log('Done');
15679       ELSE
15680         retcode := 1;
15681         log('');
15682         log('Error Compiling Rule : ');
15683         err := logerror;
15684       END IF;
15685     EXCEPTION
15686       WHEN OTHERS THEN
15687         retcode := 1;
15688         log('');
15689         log('Error Compiling Rule : ');
15690         err := logerror(SQLERRM);
15691         UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_match_rule_id;
15692         COMMIT;
15693     END;
15694   END LOOP;
15695   HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
15696   gen_wrap_pkg_body(-1);
15697   HZ_GEN_PLSQL.compile_code;
15698 
15699   IF retcode = 1 THEN
15700     outandlog('One or More match rules compilation had errors. Please check the log file for details');
15701   END IF;
15702 
15703   outandlog('Concurrent Program Execution completed ');
15704   outandlog('End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
15705 EXCEPTION
15706   WHEN OTHERS THEN
15707     retcode := 2;
15708     ROLLBACK;
15709     log('Errors Encountered');
15710     errbuf := logerror(SQLERRM);
15711 END;
15712 
15713 /**
15714 * Procedure to write a message to the out file
15715 **/
15716 PROCEDURE out(
15717    message      IN      VARCHAR2,
15718    newline      IN      BOOLEAN DEFAULT TRUE) IS
15719 BEGIN
15720   IF message = 'NEWLINE' THEN
15721     FND_FILE.NEW_LINE(FND_FILE.OUTPUT, 1);
15722   ELSIF (newline) THEN
15723     FND_FILE.put_line(fnd_file.output,message);
15724   ELSE
15725     FND_FILE.put(fnd_file.output,message);
15726   END IF;
15727 END out;
15728 
15729 /**
15730 * Procedure to write a message to the log file
15731 **/
15732 PROCEDURE log(
15733    message      IN      VARCHAR2,
15734    newline      IN      BOOLEAN DEFAULT TRUE
15735 ) IS
15736 BEGIN
15737   IF message = 'NEWLINE' THEN
15738    FND_FILE.NEW_LINE(FND_FILE.LOG, 1);
15739   ELSIF (newline) THEN
15740     FND_FILE.put_line(fnd_file.log,message);
15741   ELSE
15742     FND_FILE.put(fnd_file.log,message);
15743   END IF;
15744 END log;
15745 
15746 /**
15747 * Procedure to write a message to the out and log files
15748 **/
15749 PROCEDURE outandlog(
15750    message      IN      VARCHAR2,
15751    newline      IN      BOOLEAN DEFAULT TRUE) IS
15752 BEGIN
15753   out(message, newline);
15754   log(message, newline);
15755 END outandlog;
15756 
15757 /**
15758 * Function to fetch messages of the stack and log the error
15759 * Also returns the error
15760 **/
15761 FUNCTION logerror(SQLERRM VARCHAR2 DEFAULT NULL)
15762 RETURN VARCHAR2 IS
15763 
15764   l_msg_data VARCHAR2(2000);
15765 BEGIN
15766   FND_MSG_PUB.Reset;
15767 
15768   FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
15769     l_msg_data := l_msg_data || FND_MSG_PUB.Get(p_encoded => FND_API.G_FALSE );
15770   END LOOP;
15771   IF (SQLERRM IS NOT NULL) THEN
15772     l_msg_data := l_msg_data || SQLERRM;
15773   END IF;
15774   log(l_msg_data);
15775   RETURN l_msg_data;
15776 END logerror;
15777 
15778 PROCEDURE gen_call_api_dynamic_names IS
15779 
15780 BEGIN
15781   l(' ');
15782   l(' FUNCTION get_attrib_id(p_str VARCHAR2)  ');
15783   l('   RETURN NUMBER IS  ');
15784   l('   l_id NUMBER;  ');
15785   l('   l_pl NUMBER;  ');
15786   l('   l_token VARCHAR2(1);  ');
15787   l('   BEGIN  ');
15788   l('        l_token := ''.'';  ');
15789   l('        l_pl := instrb(p_str, l_token);  ');
15790   l('        select attribute_id into l_id  ');
15791   l('        from hz_trans_attributes_b  ');
15792   l('        where entity_name = substrb(p_str, 0, l_pl - 1)  ');
15793   l('        and ATTRIBUTE_NAME = substrb(p_str, l_pl + 1);  ');
15794   l('        RETURN l_id;  ');
15795   l('   EXCEPTION WHEN NO_DATA_FOUND THEN  ');
15796   l('             FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_NOATTRIB_ERROR'' ); ');
15797   l('             FND_MESSAGE.SET_TOKEN(''ENTITY_ATTRIBUTE'' ,p_str); ');
15798   l('             FND_MSG_PUB.ADD; ');
15799   l('             RAISE FND_API.G_EXC_ERROR; ');
15800   l('   END get_attrib_id;  ');
15801 
15802   l('  PROCEDURE call_api_dynamic_names (');
15803   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
15804   l('      p_rule_id               IN      NUMBER,');
15805   l('      p_attrib_name1            IN      VARCHAR2,');
15806   l('      p_attrib_name2            IN      VARCHAR2,');
15807   l('      p_attrib_name3            IN      VARCHAR2,');
15808   l('      p_attrib_name4            IN      VARCHAR2,');
15809   l('      p_attrib_name5            IN      VARCHAR2,');
15810   l('      p_attrib_name6            IN      VARCHAR2,');
15811   l('      p_attrib_name7            IN      VARCHAR2,');
15812   l('      p_attrib_name8            IN      VARCHAR2,');
15813   l('      p_attrib_name9            IN      VARCHAR2,');
15814   l('      p_attrib_name10           IN      VARCHAR2,');
15815   l('      p_attrib_name11           IN      VARCHAR2,');
15816   l('      p_attrib_name12           IN      VARCHAR2,');
15817   l('      p_attrib_name13           IN      VARCHAR2,');
15818   l('      p_attrib_name14           IN      VARCHAR2,');
15819   l('      p_attrib_name15           IN      VARCHAR2,');
15820   l('      p_attrib_name16           IN      VARCHAR2,');
15821   l('      p_attrib_name17           IN      VARCHAR2,');
15822   l('      p_attrib_name18           IN      VARCHAR2,');
15823   l('      p_attrib_name19           IN      VARCHAR2,');
15824   l('      p_attrib_name20           IN      VARCHAR2,');
15825   l('      p_attrib_val1           IN      VARCHAR2,');
15826   l('      p_attrib_val2           IN      VARCHAR2,');
15827   l('      p_attrib_val3           IN      VARCHAR2,');
15828   l('      p_attrib_val4           IN      VARCHAR2,');
15829   l('      p_attrib_val5           IN      VARCHAR2,');
15830   l('      p_attrib_val6           IN      VARCHAR2,');
15831   l('      p_attrib_val7           IN      VARCHAR2,');
15832   l('      p_attrib_val8           IN      VARCHAR2,');
15833   l('      p_attrib_val9           IN      VARCHAR2,');
15834   l('      p_attrib_val10          IN      VARCHAR2,');
15835   l('      p_attrib_val11          IN      VARCHAR2,');
15836   l('      p_attrib_val12          IN      VARCHAR2,');
15837   l('      p_attrib_val13          IN      VARCHAR2,');
15838   l('      p_attrib_val14          IN      VARCHAR2,');
15839   l('      p_attrib_val15          IN      VARCHAR2,');
15840   l('      p_attrib_val16          IN      VARCHAR2,');
15841   l('      p_attrib_val17          IN      VARCHAR2,');
15842   l('      p_attrib_val18          IN      VARCHAR2,');
15843   l('      p_attrib_val19          IN      VARCHAR2,');
15844   l('      p_attrib_val20          IN      VARCHAR2,');
15845   l('      p_restrict_sql          IN      VARCHAR2,');
15846   l('      p_api_name              IN      VARCHAR2,');
15847   l('      p_match_type            IN      VARCHAR2,');
15848   l('      p_party_id              IN      NUMBER,');
15849   l('      p_search_merged         IN      VARCHAR2,');
15850   l('      x_search_ctx_id         OUT     NUMBER,');
15851   l('      x_num_matches           OUT     NUMBER,');
15852   l('      x_return_status         OUT     VARCHAR2,');
15853   l('      x_msg_count             OUT     NUMBER,');
15854   l('      x_msg_data              OUT     VARCHAR2');
15855   l(' ) IS');
15856   l('     l_attrib_id1   NUMBER; ');
15857   l('       l_attrib_id2   NUMBER; ');
15858   l('       l_attrib_id3   NUMBER; ');
15859   l('       l_attrib_id4   NUMBER; ');
15860   l('       l_attrib_id5   NUMBER; ');
15861   l('       l_attrib_id6   NUMBER; ');
15862   l('       l_attrib_id7   NUMBER; ');
15863   l('       l_attrib_id8   NUMBER; ');
15864   l('       l_attrib_id9   NUMBER; ');
15865   l('       l_attrib_id10  NUMBER; ');
15866   l('       l_attrib_id11  NUMBER; ');
15867   l('       l_attrib_id12  NUMBER; ');
15868   l('       l_attrib_id13  NUMBER; ');
15869   l('       l_attrib_id14  NUMBER; ');
15870   l('       l_attrib_id15  NUMBER; ');
15871   l('       l_attrib_id16  NUMBER; ');
15872   l('       l_attrib_id17  NUMBER; ');
15873   l('       l_attrib_id18  NUMBER; ');
15874   l('       l_attrib_id19  NUMBER; ');
15875   l('       l_attrib_id20  NUMBER; ');
15876   l('  BEGIN');
15877   d(fnd_log.level_procedure,'call_api_dynamic_names(+)');
15878   d(fnd_log.level_statement,'Rule ID','p_rule_id ');
15879   l(' ');
15880   l('      IF (p_attrib_name1 IS NOT NULL) THEN  ');
15881   l('           l_attrib_id1 := get_attrib_id(p_attrib_name1); ');
15882   l('      END IF; ');
15883   l('      IF (p_attrib_name2 IS NOT NULL) THEN ');
15884   l('           l_attrib_id2 := get_attrib_id(p_attrib_name2); ');
15885   l('      END IF; ');
15886   l('      IF (p_attrib_name3 IS NOT NULL) THEN ');
15887   l('           l_attrib_id3 := get_attrib_id(p_attrib_name3); ');
15888   l('      END IF; ');
15889   l('      IF (p_attrib_name4 IS NOT NULL) THEN ');
15890   l('           l_attrib_id4 := get_attrib_id(p_attrib_name4); ');
15891   l('      END IF; ');
15892   l('      IF (p_attrib_name5 IS NOT NULL) THEN ');
15893   l('           l_attrib_id5 := get_attrib_id(p_attrib_name5); ');
15894   l('      END IF; ');
15895   l('      IF (p_attrib_name6 IS NOT NULL) THEN ');
15896   l('           l_attrib_id6 := get_attrib_id(p_attrib_name6); ');
15897   l('      END IF; ');
15898   l('      IF (p_attrib_name7 IS NOT NULL) THEN ');
15899   l('           l_attrib_id7 := get_attrib_id(p_attrib_name7); ');
15900   l('      END IF; ');
15901   l('      IF (p_attrib_name8 IS NOT NULL) THEN ');
15902   l('           l_attrib_id8 := get_attrib_id(p_attrib_name8); ');
15903   l('      END IF; ');
15904   l('      IF (p_attrib_name9 IS NOT NULL) THEN ');
15905   l('           l_attrib_id9 := get_attrib_id(p_attrib_name9); ');
15906   l('      END IF; ');
15907   l('      IF (p_attrib_name10 IS NOT NULL) THEN ');
15908   l('           l_attrib_id10 := get_attrib_id(p_attrib_name10); ');
15909   l('      END IF; ');
15910   l('      IF (p_attrib_name11 IS NOT NULL) THEN ');
15911   l('           l_attrib_id11 := get_attrib_id(p_attrib_name11); ');
15912   l('      END IF; ');
15913   l('      IF (p_attrib_name12 IS NOT NULL) THEN ');
15914   l('           l_attrib_id12 := get_attrib_id(p_attrib_name12); ');
15915   l('      END IF; ');
15916   l('      IF (p_attrib_name13 IS NOT NULL) THEN ');
15917   l('           l_attrib_id13 := get_attrib_id(p_attrib_name13); ');
15918   l('      END IF; ');
15919   l('      IF (p_attrib_name14 IS NOT NULL) THEN ');
15920   l('           l_attrib_id14 := get_attrib_id(p_attrib_name14); ');
15921   l('      END IF; ');
15922   l('      IF (p_attrib_name15 IS NOT NULL) THEN ');
15923   l('           l_attrib_id15 := get_attrib_id(p_attrib_name15); ');
15924   l('      END IF; ');
15925   l('      IF (p_attrib_name16 IS NOT NULL) THEN ');
15926   l('           l_attrib_id16 := get_attrib_id(p_attrib_name16); ');
15927   l('      END IF; ');
15928   l('      IF (p_attrib_name17 IS NOT NULL) THEN ');
15929   l('           l_attrib_id17 := get_attrib_id(p_attrib_name17); ');
15930   l('      END IF; ');
15931   l('      IF (p_attrib_name18 IS NOT NULL) THEN ');
15932   l('           l_attrib_id18 := get_attrib_id(p_attrib_name18);  ');
15933   l('      END IF; ');
15934   l('      IF (p_attrib_name19 IS NOT NULL) THEN ');
15935   l('           l_attrib_id19 := get_attrib_id(p_attrib_name19); ');
15936   l('      END IF; ');
15937   l('      IF (p_attrib_name20 IS NOT NULL) THEN ');
15938   l('           l_attrib_id20 := get_attrib_id(p_attrib_name20); ');
15939   l('      END IF; ');
15940 
15941 
15942   l('    hz_party_search.call_api_dynamic( ');
15943   l('            p_init_msg_list, p_rule_id, ');
15944   l('            l_attrib_id1,l_attrib_id2,l_attrib_id3,l_attrib_id4,l_attrib_id5, ');
15945   l('            l_attrib_id6,l_attrib_id7,l_attrib_id8,l_attrib_id9,l_attrib_id10, ');
15946   l('            l_attrib_id11,l_attrib_id12,l_attrib_id13,l_attrib_id14,l_attrib_id15, ');
15947   l('            l_attrib_id16,l_attrib_id17,l_attrib_id18,l_attrib_id19,l_attrib_id20, ');
15948   l('            p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5, ');
15949   l('            p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10, ');
15950   l('            p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15, ');
15951   l('            p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20, ');
15952   l('            p_restrict_sql,p_api_name,p_match_type,p_party_id,p_search_merged, ');
15953   l('            x_search_ctx_id,x_num_matches, x_return_status, x_msg_count, x_msg_data);  ');
15954   d(fnd_log.level_procedure,'call_api_dynamic_names(-)');
15955   gen_exception_block;
15956   l('  END call_api_dynamic_names; ');
15957 
15958 END gen_call_api_dynamic_names;
15959 
15960 ---Start of Code Change for Match Rule Set
15961 FUNCTION has_uncompiled_childern(p_rule_set_id NUMBER)
15962 RETURN BOOLEAN
15963 IS
15964 CURSOR c_uncompiled_children IS
15965   SELECT count(unique compilation_flag) FROM HZ_MATCH_RULES_B
15966   WHERE  match_rule_id IN( SELECT unique condition_match_rule_id
15967                            FROM   HZ_MATCH_RULE_CONDITIONS
15968 			   WHERE  match_rule_set_id = p_rule_set_id)
15969   AND compilation_flag <> 'C';
15970 l_count NUMBER;
15971 
15972 BEGIN
15973  OPEN  c_uncompiled_children;
15974  FETCH c_uncompiled_children INTO l_count;
15975  CLOSE c_uncompiled_children;
15976  IF (l_count >0 )THEN
15977    RETURN TRUE;
15978  ELSE
15979    RETURN FALSE;
15980  END IF;
15981 END;
15982 
15983 PROCEDURE compile_all_rulesets (
15984         p_cond_rule_id   IN NUMBER
15985 ) IS
15986 
15987   l_return_status varchar2(100)  := null;
15988   l_msg_count      number(15)    := 0;
15989   l_msg_data      varchar2(4000)  := null;
15990 
15991   CURSOR c_rulesets_for_compile  IS
15992     SELECT UNIQUE MATCH_RULE_ID,RULE_NAME FROM HZ_MATCH_RULES_VL
15993     WHERE COMPILATION_FLAG <> 'C'
15994     AND MATCH_RULE_ID IN (SELECT UNIQUE MATCH_RULE_SET_ID FROM HZ_MATCH_RULE_CONDITIONS
15995                           WHERE CONDITION_MATCH_RULE_ID = p_cond_rule_id)
15996     ;
15997 
15998 
15999   l_match_rule_set_id         NUMBER;
16000   l_rule_name HZ_MATCH_RULES_TL.RULE_NAME%TYPE;
16001   err VARCHAR2(2000);
16002   l_has_errors BOOLEAN := FALSE;
16003 BEGIN
16004 
16005   -- Initialize return status and message stack
16006   FND_MSG_PUB.initialize;
16007 
16008   log('');
16009 
16010   OPEN c_rulesets_for_compile ;
16011   LOOP
16012     FETCH c_rulesets_for_compile INTO l_match_rule_set_id, l_rule_name;
16013     EXIT WHEN c_rulesets_for_compile%NOTFOUND;
16014 
16015     BEGIN
16016       log('Compiling Match Rule Set ' || l_rule_name || ' ... ', FALSE);
16017       HZ_MATCH_RULE_COMPILE.COMPILE_MATCH_RULE( l_match_rule_set_id,'Y',
16018                                                l_return_status,
16019                                                l_msg_count,
16020                                                l_msg_data) ;
16021 
16022       IF l_return_status = 'S' THEN
16023         log('Done');
16024       ELSE
16025         log('');
16026 	l_has_errors :=TRUE;
16027         log('Error Compiling Rule Set: '||l_match_rule_set_id || ' msg_data='||l_msg_data);
16028 
16029       END IF;
16030     EXCEPTION
16031       WHEN OTHERS THEN
16032         log('');
16033         l_has_errors :=TRUE;
16034         log('Error Compiling Rule Set : '||l_match_rule_set_id||' ,sqlerrm='||sqlerrm);
16035 	UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_match_rule_set_id;
16036         COMMIT;
16037     END;
16038   END LOOP;
16039   close c_rulesets_for_compile;
16040  IF NOT l_has_errors THEN
16041   HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
16042   gen_wrap_pkg_body(-1);
16043   HZ_GEN_PLSQL.compile_code;
16044  END IF;
16045 
16046 EXCEPTION
16047   WHEN OTHERS THEN
16048     ROLLBACK;
16049     log('Errors Encountered during match rule set compilation..sqlerrm='||sqlerrm);
16050 END;
16051 
16052 PROCEDURE pop_conditions(p_mrule_set_id	   IN  NUMBER,
16053 			 p_api_name		   IN  VARCHAR2,
16054 			 p_parameters		   IN  VARCHAR2,
16055 			 p_eval_level IN  VARCHAR2)
16056 IS
16057 
16058 TYPE ref_conditions is ref cursor;
16059 c_ref_conditions ref_conditions;
16060 
16061 
16062 l_cond_string varchar2(32000);
16063 l_add_then BOOLEAN;
16064 l_count NUMBER;
16065 l_value VARCHAR2(2000);
16066 l_tmp_value varchar2(30);
16067 l_index NUMBER;
16068 l_sql   varchar2(1000);
16069 l_close_if  BOOLEAN;
16070 
16071 l_condition_match_rule_id NUMBER(15);
16072 l_entity_name             VARCHAR2(255);
16073 l_attribute_name          VARCHAR2(255);
16074 l_operation               VARCHAR2(30);
16075 l_rank                    NUMBER;
16076 
16077 BEGIN
16078 
16079   IF p_eval_level = 'PARTY' THEN
16080     l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16081             ' attr.attribute_name,operation,value,rank '||
16082             ' FROM   hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16083             ' WHERE  cond.match_rule_set_id  = '||P_MRULE_SET_ID||
16084             ' AND    cond.attribute_id= attr.attribute_id (+) '||
16085             ' ORDER BY rank ASC';
16086   ELSIF p_eval_level = 'PARTY_SITES' then
16087     l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16088             ' attr.attribute_name,operation,value,rank '||
16089             ' FROM   hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16090             ' WHERE  cond.match_rule_set_id  = '||P_MRULE_SET_ID||
16091             ' AND    nvl(attr.entity_name,''XYZ'') NOT IN (''PARTY'',''CONTACTS'') '||
16092 	    ' AND    cond.attribute_id= attr.attribute_id (+) '||
16093 	    ' ORDER BY rank ASC';
16094   ELSIF p_eval_level = 'CONTACTS' then
16095     l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16096             ' attr.attribute_name,operation,value,rank '||
16097             ' FROM   hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16098             ' WHERE  cond.match_rule_set_id  = '||P_MRULE_SET_ID||
16099             ' AND    nvl(attr.entity_name,''XYZ'') NOT IN (''PARTY'',''PARTY_SITES'') '||
16100 	    ' AND    cond.attribute_id= attr.attribute_id (+) '||
16101 	    ' ORDER BY rank ASC';
16102   ELSIF p_eval_level = 'CONTACT_POINTS' then
16103     l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16104             ' attr.attribute_name,operation,value,rank '||
16105             ' FROM   hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16106             ' WHERE  cond.match_rule_set_id  = '||P_MRULE_SET_ID||
16107             ' AND    nvl(attr.entity_name,''XYZ'') NOT IN (''PARTY'',''PARTY_SITES'',''CONTACTS'') '||
16108 	    ' AND    cond.attribute_id= attr.attribute_id (+) '||
16109 	    ' ORDER BY rank ASC';
16110   ELSE
16111     RETURN;
16112   END IF;
16113 
16114   l_add_then    := FALSE;
16115   l_count       := 0;
16116   l_cond_string := NULL;
16117   l_value   := NULL;
16118   l_index   := 0;
16119   l_close_if := FALSE;
16120    --Start of Bug No: 4234203
16121   l('DECLARE');
16122   l(' l_condition_match_rule_id NUMBER(15);');
16123   l(' l_cond_rule_name VARCHAR2(255);');
16124   l(' CURSOR c_rule_name(p_rule_id NUMBER) IS SELECT rule_name FROM hz_match_rules_vl ');
16125   l(' where match_rule_id=p_rule_id ;');
16126   l('BEGIN');
16127   --End of Bug No: 4234203
16128   OPEN c_ref_conditions FOR l_sql;
16129   LOOP
16130     FETCH c_ref_conditions INTO l_condition_match_rule_id,l_entity_name,l_attribute_name,l_operation,
16131                                 l_value,l_rank;
16132     EXIT WHEN c_ref_conditions%NOTFOUND;
16133      l_cond_string := NULL;
16134      l_count := l_count+1;
16135      IF l_count = 1 AND l_attribute_name IS NOT NULL THEN
16136         l('IF  ');
16137         l_add_then := TRUE;
16138 	l_close_if := TRUE;
16139      ELSIF l_attribute_name IS NOT NULL THEN
16140         l('ELSIF  ');
16141         l_add_then := TRUE;
16142 	l_close_if := TRUE;
16143      ELSIF l_attribute_name IS NULL AND l_add_then THEN
16144        l('ELSE  ');
16145        l_add_then := FALSE;
16146        l_close_if := TRUE;
16147      END IF;
16148      IF l_operation = 'LIKE' then
16149         l_value :=''''||HZ_TRANS_PKG.EXACT(l_value,NULL,l_attribute_name,l_entity_name)||'%''';
16150      ELSIF l_operation = 'IN' then
16151         l_tmp_value := l_value;
16152 	l_value := NULL;
16153 	LOOP
16154 	 l_index := instrb(l_tmp_value,',');
16155 	 IF l_index =0 then
16156 	  l_value := l_value ||','''||HZ_TRANS_PKG.EXACT(l_tmp_value,NULL,l_attribute_name,l_entity_name)||'''';
16157 	  l_value := '('||ltrim(l_value,',')||')';
16158 	    exit;
16159          END IF;
16160 	 l_value := l_value ||','''||HZ_TRANS_PKG.EXACT(substrb(l_tmp_value,1,l_index-1),NULL,l_attribute_name,l_entity_name)||'''';
16161 	 l_tmp_value := substrb(l_tmp_value,l_index+1);
16162 	END LOOP;
16163 
16164     ELSE
16165         l_value :=''''||HZ_TRANS_PKG.EXACT(l_value,NULL,l_attribute_name,l_entity_name)||'''';
16166     END IF;
16167 
16168     IF  l_entity_name = 'PARTY' THEN
16169          l_cond_string := 'HZ_TRANS_PKG.EXACT(p_party_search_rec.'||l_attribute_name||',NULL,'''||
16170 	                   l_attribute_name||''',''PARTY'') '|| l_operation ||'  '|| l_value;
16171     ELSIF l_entity_name = 'PARTY_SITES' THEN
16172          l_cond_string := '(p_party_site_list IS NOT NULL AND p_party_site_list.COUNT >0) AND (HZ_TRANS_PKG.EXACT(p_party_site_list(1).'||
16173 	 l_attribute_name||',NULL,'''||l_attribute_name||''',''PARTY_SITES'') '|| l_operation ||'  '|| l_value ||')';
16174     ELSIF l_entity_name = 'CONTACTS' THEN
16175          l_cond_string := '(p_contact_list IS NOT NULL AND p_contact_list.COUNT >0) AND (HZ_TRANS_PKG.EXACT(p_contact_list(1).'||
16176 	 l_attribute_name||',NULL,'''||l_attribute_name||''',''CONTACTS'') '|| l_operation ||'  '|| l_value ||')';
16177     ELSIF l_entity_name = 'CONTACT_POINTS' THEN
16178          l_cond_string := '(p_contact_point_list IS NOT NULL AND  p_contact_point_list.COUNT >0) AND (HZ_TRANS_PKG.EXACT(p_contact_point_list(1).'||
16179 	 l_attribute_name||',NULL,'''||l_attribute_name||''',''CONTACT_POINTS'') '|| l_operation ||'  '|| l_value ||')';
16180     END IF;
16181     IF l_add_then THEN
16182         l_cond_string := l_cond_string || '  THEN ';
16183     END IF;
16184 
16185     l(l_cond_string);
16186     l(' l_condition_match_rule_id :='|| l_condition_match_rule_id ||';'); --Bug No: 4234203
16187     ldbg_s('Calling '||p_api_name||' using match rule id :'||l_condition_match_rule_id); --Bug No: 4234203
16188     l(' HZ_MATCH_RULE_'||l_condition_match_rule_id||'.'||p_api_name||'('|| p_parameters ||');');
16189   END LOOP;
16190   CLOSE c_ref_conditions;
16191   IF l_close_if THEN
16192        l('END IF;');
16193   END IF;
16194   --Start of Bug No: 4234203
16195   l('EXCEPTION');
16196   l(' WHEN OTHERS THEN') ;
16197   l(' OPEN  c_rule_name(l_condition_match_rule_id);');
16198   l(' FETCH c_rule_name INTO l_cond_rule_name;');
16199   l(' CLOSE c_rule_name; ');
16200   l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_SRCH_ERROR''); ');
16201   l(' FND_MESSAGE.SET_TOKEN(''MATCH_RULE'',l_cond_rule_name); ');
16202   l(' FND_MSG_PUB.ADD; ');
16203   l(' RAISE; ');
16204   l('END;');
16205   --End of Bug No: 4234203
16206 END pop_conditions;
16207 ---End of Code Change for Match Rule Set
16208 
16209 --Start of Bug No: 4162385
16210  FUNCTION get_entity_level_score(p_match_rule_id NUMBER,p_entity_name VARCHAR2)
16211  RETURN NUMBER
16212  IS
16213   l_score NUMBER;
16214  BEGIN
16215    SELECT nvl(sum(sec.score),0) INTO l_score
16216    FROM HZ_MATCH_RULE_SECONDARY sec,HZ_TRANS_ATTRIBUTES_VL attr
16217    WHERE sec.match_rule_id = p_match_rule_id
16218    AND   sec.attribute_id  = attr.attribute_id
16219    AND   attr.entity_name  =  p_entity_name;
16220 
16221    RETURN l_score;
16222  END get_entity_level_score;
16223 --End of Bug No: 4162385
16224 
16225 END;