DBA Data[Home] [Help]

PACKAGE BODY: APPS.HZ_MATCH_RULE_COMPILE

Source


4 g_party_and_query VARCHAR2(4000);
1 PACKAGE BODY HZ_MATCH_RULE_COMPILE AS
2 /*$Header: ARHDQMCB.pls 120.105 2011/03/10 11:28:56 amstephe ship $ */
3 
5 g_party_or_query VARCHAR2(4000);
6 g_party_site_query VARCHAR2(4000);
7 g_contact_query VARCHAR2(4000);
8 g_cpt_query VARCHAR2(4000);
9 l_purpose VARCHAR2(30);
10 
11 --Start of Bug No: 4162385dbms_output.put_line(' ');
12 FUNCTION get_entity_level_score(p_match_rule_id NUMBER,p_entity_name VARCHAR2)
13 RETURN NUMBER;
14 --End of Bug No: 4162385
15 
16 
17 /*******************Private Procedures forward declarations ********/
18 PROCEDURE gen_pkg_body (
19         p_pkg_name      IN      VARCHAR2,
20         p_rule_id       IN      NUMBER
21 );
22 
23 -- VJN introduced procedure to generate body for bulk match rules
24 PROCEDURE gen_pkg_body_bulk (
25         p_pkg_name      IN      VARCHAR2,
26         p_rule_id       IN      NUMBER
27 );
28 
29 PROCEDURE gen_call_api_dynamic_names;
30 
31 FUNCTION has_acquisition_attribs ( p_match_rule_id IN NUMBER, p_entity_name IN VARCHAR2)
32 RETURN BOOLEAN
33 IS
34 temp BOOLEAN := FALSE ;
35 BEGIN
36         FOR attrs in (
37         SELECT primary_attribute_id
38         FROM HZ_MATCH_RULE_PRIMARY p, HZ_TRANS_ATTRIBUTES_VL a
39         where  p.match_rule_id= p_match_rule_id
40         and p.attribute_id=a.attribute_id
41         and a.entity_name = p_entity_name
42         )
43         LOOP
44             temp := TRUE ;
45         END LOOP;
46    return temp ;
47 END has_acquisition_attribs ;
48 
49 ---Start of Code Change for Match Rule Set
50 FUNCTION has_uncompiled_childern(p_rule_set_id NUMBER)
51 RETURN BOOLEAN;
52 
53 PROCEDURE compile_all_rulesets (
54         p_cond_rule_id   IN NUMBER
55 );
56 PROCEDURE pop_conditions(p_mrule_set_id	   IN  NUMBER,
57 			   p_api_name		   IN  VARCHAR2,
58 			   p_parameters		   IN  VARCHAR2,
59 			   p_eval_level IN  VARCHAR2
60 );
61 ---End of Code Change for Match Rule Set
62 
63 PROCEDURE generate_map_proc (
64    p_entity             IN      VARCHAR2,
65    p_proc_name          IN      VARCHAR2,
66    p_rule_id            IN      NUMBER
67 );
68 
69 PROCEDURE generate_map_proc_bulk (
70    p_entity             IN      VARCHAR2,
71    p_proc_name          IN      VARCHAR2,
72    p_rule_id            IN      NUMBER
73 );
74 
75 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
76  -- OF THE GLOBAL CONDITION RECORD FOR REGULAR MATCH RULES
77 
78 PROCEDURE generate_ent_cond_pop_rec_proc (
79    p_entity             IN      VARCHAR2,
80    p_rule_id		    IN      NUMBER
81 );
82 
83 
84 PROCEDURE generate_party_map_proc (
85    p_proc_name          IN      VARCHAR2,
86    p_rule_id            IN      NUMBER
87 );
88 
89 PROCEDURE generate_party_map_proc_bulk (
90    p_proc_name          IN      VARCHAR2,
91    p_rule_id            IN      NUMBER
92 );
93 
94 PROCEDURE generate_check_proc (
95         p_rule_id       NUMBER);
96 
97 PROCEDURE gen_pkg_spec (
98         p_pkg_name      IN      VARCHAR2,
99         p_rule_id       IN      NUMBER
100 );
101 
102 PROCEDURE gen_wrap_pkg_body(
103 	p_rule_id IN NUMBER
104 );
105 
106 PROCEDURE gen_exception_block;
107 
108 -- Fix for Bug 4734661. Modified to add the p_called_from parameter.
109 PROCEDURE generate_acquire_proc (
110         p_rule_id       NUMBER
111        ,p_called_from   VARCHAR2 DEFAULT NULL);
112 
113 PROCEDURE generate_check_staged (
114         p_rule_id       IN      NUMBER
115 );
116 
117 PROCEDURE out(
118    message      IN      VARCHAR2,
119    newline      IN      BOOLEAN DEFAULT TRUE);
120 
121 PROCEDURE log(
122    message      IN      VARCHAR2,
123    newline      IN      BOOLEAN DEFAULT TRUE);
124 
125 PROCEDURE outandlog(
126    message      IN      VARCHAR2,
127    newline      IN      BOOLEAN DEFAULT TRUE);
128 
129 FUNCTION logerror(SQLERRM VARCHAR2 DEFAULT NULL)
130          RETURN VARCHAR2;
131 
132 
133 
134 /*** Private procedure for inserting lines into generated packages **/
135 PROCEDURE l(str VARCHAR2) IS
136 BEGIN
137   HZ_GEN_PLSQL.add_line(str);
138 END;
139 
140 /*** Private procedure for inserting statement , procedure level debug lines into generated packages **/
141 PROCEDURE d(p_msg_level NUMBER,str VARCHAR2, val VARCHAR2 DEFAULT NULL, pad VARCHAR2 DEFAULT '    ') IS
142 l_msg_level VARCHAR2(30);
143 BEGIN
144   IF p_msg_level=FND_LOG.LEVEL_STATEMENT THEN
145    l(pad||'IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN');
146    l_msg_level :='fnd_log.level_statement';
147   ELSIF p_msg_level=FND_LOG.LEVEL_PROCEDURE THEN
148    l(pad||'IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN');
149    l_msg_level :='fnd_log.level_procedure';
150   ELSE
151    RETURN;
152   END IF;
153   IF val IS NULL THEN
157     l(pad||'  hz_utility_v2pub.debug(p_message=>'''||str||' '',p_module_prefix=>''dqm'',p_module=>''hz_match_rule_xxx'',p_prefix=>NULL,p_msg_level=>'||l_msg_level||');');
154     -- REPURI. Bug 4996283. Adding tracking indentifiers for fnd log messages
155     -- Passing p_module_prefix as dqm and p_module as hz_match_rule_xxx to help debug fnd logs better
156 
158   ELSE
159   l(pad||'  hz_utility_v2pub.debug(p_message=>'''||str||' ''||'||val||',p_module_prefix=>''dqm'',p_module=>''hz_match_rule_xxx'',p_prefix=>NULL,p_msg_level=>'||l_msg_level||');');
160   END IF;
161   l(pad||'END IF;');
162 END;
163 
164 /*** Private procedure for inserting statement , procedure level debug start lines into generated packages **/
165 PROCEDURE ds(p_msg_level NUMBER,pad VARCHAR2 DEFAULT '    ') IS
166 BEGIN
167 IF nvl(FND_PROFILE.VALUE('HZ_DQM_DEV_DEBUG'), 'N') = 'N'
168 THEN
169   IF p_msg_level=FND_LOG.LEVEL_STATEMENT THEN
170    l(pad||'IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN');
171   ELSIF p_msg_level=FND_LOG.LEVEL_PROCEDURE THEN
172    l(pad||'IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN');
173   ELSE
174    RETURN;
175   END IF;
176 END IF;
177 END;
178 
179 /*** Private procedure for inserting statement , procedure level debug content lines into generated packages **/
180 PROCEDURE dc(p_msg_level NUMBER,str VARCHAR2, val VARCHAR2 DEFAULT NULL, pad VARCHAR2 DEFAULT '    ') IS
181 l_msg_level VARCHAR2(30);
182 BEGIN
183 IF nvl(FND_PROFILE.VALUE('HZ_DQM_DEV_DEBUG'), 'N') = 'N'
184 THEN
185   IF p_msg_level=FND_LOG.LEVEL_STATEMENT THEN
186      l_msg_level :='fnd_log.level_statement';
187   ELSIF p_msg_level=FND_LOG.LEVEL_PROCEDURE THEN
188       l_msg_level :='fnd_log.level_procedure';
189   ELSE
190    RETURN;
191   END IF;
192   IF val IS NULL THEN
193     -- REPURI. Bug 4996283. Adding tracking indentifiers for fnd log messages
194     -- Passing p_module_prefix as dqm and p_module as hz_match_rule_xxx to help debug fnd logs better
195 
196     l(pad||'  hz_utility_v2pub.debug(p_message=>'''||str||''',p_module_prefix=>''dqm'',p_module=>''hz_match_rule_xxx'',p_prefix=>NULL,p_msg_level=>'||l_msg_level||');');
197   ELSE
198     l(pad||'  hz_utility_v2pub.debug(p_message=>'''||str||' ''||'||val||',p_module_prefix=>''dqm'',p_module=>''hz_match_rule_xxx'',p_prefix=>NULL,p_msg_level=>'||l_msg_level||');');
199   END IF;
200 ELSE
201   IF val IS NULL THEN
202      l('dbms_output.put_line(SubStr(''' || str || ''', 1, 255));');
203   ELSE
204      l('dbms_output.put_line(SubStr(''' || str || '''||''---''||' || val || ', 1, 255));');
205   END IF;
206 
207 END IF;
208 END;
209 
210 /*** Private procedure for inserting statement , procedure level debug end lines into generated packages **/
211 PROCEDURE de(pad VARCHAR2 DEFAULT '    ') IS
212 BEGIN
213 IF nvl(FND_PROFILE.VALUE('HZ_DQM_DEV_DEBUG'), 'N') = 'N'
214 THEN
215   l(pad||'END IF;');
216 END IF;
217 END;
218 
219 /*** VJN Introduced Private procedures for inserting
220 upto four consecutive procedure level debug lines with
221 statement level header and footer into generated
222 packages
223      Note that str1 and val1 are not defaulted. We need atleast
224 one procedure level line.
225 
226      This the string - value pair version
227 **/
228 PROCEDURE ldbg_sv(str1 VARCHAR2, val1 VARCHAR2,
229                str2 VARCHAR2 DEFAULT NULL, val2 VARCHAR2 DEFAULT NULL,
230                str3 VARCHAR2 DEFAULT NULL, val3 VARCHAR2 DEFAULT NULL,
231                str4 VARCHAR2 DEFAULT NULL, val4 VARCHAR2 DEFAULT NULL
232                ) IS
233 BEGIN
234 
235   IF str1 IS NOT NULL
236   THEN
237     ds(fnd_log.level_statement, '   ');
238     dc(fnd_log.level_statement, str1, val1) ;
239   END IF;
240 
241   IF str2 IS NOT NULL
242   THEN
243     dc(fnd_log.level_statement, str2, val2) ;
244   END IF;
245 
246   IF str3 IS NOT NULL
247   THEN
248     dc(fnd_log.level_statement, str3, val3) ;
249   END IF;
250 
251   IF str4 IS NOT NULL
252   THEN
253     dc(fnd_log.level_statement, str4, val4) ;
254   END IF;
255 
256   IF str1 IS NOT NULL
257   THEN
258      de ;
259   END IF;
260 
261 END;
262 
263 /**
264    This the string only version
265 **/
266 PROCEDURE ldbg_s(str1 VARCHAR2,
267                str2 VARCHAR2 DEFAULT NULL,
268                str3 VARCHAR2 DEFAULT NULL,
269                str4 VARCHAR2 DEFAULT NULL
270                ) IS
271 BEGIN
272 
273   IF str1 IS NOT NULL
274   THEN
275     ds(fnd_log.level_statement, '   ');
276     dc(fnd_log.level_statement, str1 ) ;
277   END IF;
278 
279   IF str2 IS NOT NULL
280   THEN
281     dc(fnd_log.level_statement, str2 ) ;
282   END IF;
283 
284   IF str3 IS NOT NULL
285   THEN
286     dc(fnd_log.level_statement, str3 ) ;
287   END IF;
288 
289   IF str4 IS NOT NULL
290   THEN
291     dc(fnd_log.level_statement, str4) ;
292   END IF;
293 
294   IF str1 IS NOT NULL
295   THEN
296      de ;
297   END IF;
298 
299 END;
300 
301 PROCEDURE ldbg_procedure
302 IS
303 BEGIN
304   IF nvl(FND_PROFILE.VALUE('HZ_DQM_DEV_DEBUG'), 'N') = 'Y'
305   THEN
306     l('');
307     l('PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)');
308     l('IS');
309     l('     remainder_str VARCHAR2(4000);');
310     l('     current_pos NUMBER ;');
311     l('BEGIN');
312     l('     remainder_str := input_str ;');
313     l('     current_pos := 1 ;');
317     l('         current_pos := current_pos + 255 ;');
314     l('     WHILE remainder_str IS NOT NULL');
315     l('     LOOP');
316     l('         dbms_output.put_line(substr(remainder_str, 1 , 255 ) );');
318     l('         remainder_str := substr(input_str,current_pos );');
319     l('     END LOOP ;');
320     l('END ;');
321    ELSE
322     l('');
323     l('PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)');
324     l('IS');
325     l('     remainder_str VARCHAR2(4000);');
326     l('     current_pos NUMBER ;');
327     l('     temp VARCHAR2(300) ;');
328     l('BEGIN');
329     l('     remainder_str := input_str ;');
330     l('     current_pos := 1 ;');
331     ds(fnd_log.level_statement, '   ');
332     l('     WHILE remainder_str IS NOT NULL');
333     l('     LOOP');
334     l('     temp := substr(remainder_str, 1 , 255 );');
335     dc(fnd_log.level_statement, ' ', 'temp' ) ;
336     l('     current_pos := current_pos + 255 ;');
337     l('     remainder_str := substr(input_str,current_pos );');
338     l('     END LOOP ;');
339     de ;
340     l('END ;');
341    END IF ;
342 END ;
343 
344 FUNCTION num_secondary(
345    p_rule_id NUMBER,
346    p_entity VARCHAR2) RETURN NUMBER;
347 
348 
349 -- VJN Introduced Private procedure to generate primary attribute predicate for bulk match rules
350 PROCEDURE generate_bulk_predicate(
351    p_rule_id IN NUMBER,
352    p_dynamic_sql_flag  IN VARCHAR2 DEFAULT 'N',
353    p_match_str IN VARCHAR2,
354    p_entity IN VARCHAR2)
355 IS
356 FIRST1 boolean;
357 FIRST boolean;
358 BEGIN
359    IF p_dynamic_sql_flag = 'Y'
360    THEN
361         l('            ''srch.batch_id = -1''||');
362         l('            ''AND''||');
363         l('            ''(''||'    );
364                -- Generate the Primary Attribute section of the query for the passed in entity
365          FIRST1 := TRUE;
366          FOR attrs in (
367           SELECT primary_attribute_id
368           FROM HZ_MATCH_RULE_PRIMARY p, HZ_TRANS_ATTRIBUTES_VL a
369           where  p.match_rule_id=p_rule_id
370           and p.attribute_id=a.attribute_id
371           and a.entity_name = p_entity
372           and nvl(p.filter_flag,'N') = 'N' )
373          LOOP
374                       -- between attributes
375                       IF FIRST1
376                       THEN
377                          FIRST1 := FALSE;
378                          l('-------' ||  p_entity || ' LEVEL ACQUISITION ON NON-FILTER ATTRIBUTES USING B-TREE INDEXES ---------');
379                       ELSE
380                          -- spit out the 'AND' or 'OR' depending on the match_all_flag in the match_rule
381                          l(''''||p_match_str||''''||'||');
382 
383                       END IF;
384 
385                      FIRST := TRUE;
386                      FOR trans in ( SELECT staged_attribute_column
387                         FROM hz_primary_trans pt, hz_trans_functions_vl f
388                         where f.function_id = pt.function_id
389                         and pt.primary_attribute_id = attrs.primary_attribute_id
390                      )
391                      LOOP
392                           IF FIRST
393                           THEN
394                               l('-- do an or between all the transformations of an attribute -- ');
395                               l('''(''||');
396                               l('''(srch.'|| trans.staged_attribute_column || ' is not null and ' ||
397                                                'stage.'|| trans.staged_attribute_column || ' like srch.'||
398                                                trans.staged_attribute_column || ' || ''''%'''')' || '''||');
399 
400                               FIRST := FALSE;
401                           ELSE
402                                l('''or (srch.'|| trans.staged_attribute_column || ' is not null and ' ||
403                                                'stage.'|| trans.staged_attribute_column || ' like srch.'||
404                                                trans.staged_attribute_column || ' || ''''%'''')' || '''||');
405                           END IF;
406 
407                      END LOOP;
408                    l(''')''||');
409          END LOOP;
410         l(''')''||');
411 
412    ELSE
413          l('            srch.batch_id = -1');
414          l('            AND');
415          l('            (');
416          -- Generate the Primary Attribute section of the query for the passed in entity
417          FIRST1 := TRUE;
418          FOR attrs in (
419           SELECT primary_attribute_id
420           FROM HZ_MATCH_RULE_PRIMARY p, HZ_TRANS_ATTRIBUTES_VL a
421           where  p.match_rule_id=p_rule_id
422           and p.attribute_id=a.attribute_id
423           and a.entity_name = p_entity
424           and nvl(p.filter_flag,'N') = 'N' )
425          LOOP
426                       -- between attributes
427                       IF FIRST1
428                       THEN
429                          FIRST1 := FALSE;
430                          l('-------' || 'PARTY LEVEL ACQUISITION ON NON-FILTER ATTRIBUTES USING B-TREE INDEXES ---------');
431                       ELSE
432                          -- spit out the 'AND' or 'OR' depending on the match_all_flag in the match_rule
433                          l(p_match_str);
434 
435                       END IF;
436 
437                      FIRST := TRUE;
438                      FOR trans in ( SELECT staged_attribute_column
439                         FROM hz_primary_trans pt, hz_trans_functions_vl f
443                      LOOP
440                         where f.function_id = pt.function_id
441                         and pt.primary_attribute_id = attrs.primary_attribute_id
442                      )
444                           IF FIRST
445                           THEN
446                               l('-- do an or between all the transformations of an attribute -- ');
447                               l('(');
448                               l('(srch.'|| trans.staged_attribute_column || ' is not null and ' ||
449                                                'stage.'|| trans.staged_attribute_column || ' like srch.'||
450                                                trans.staged_attribute_column || ' || ''%'')');
451 
452                               FIRST := FALSE;
453                           ELSE
454                                l('or (srch.'|| trans.staged_attribute_column || ' is not null and ' ||
455                                                'stage.'|| trans.staged_attribute_column || ' like srch.'||
456                                                trans.staged_attribute_column || ' || ''%'')'); --Bug No:3863630
457                           END IF;
458 
459                      END LOOP;
460                    l(')');
461          END LOOP;
462          l(')');
463    END IF;
464 
465 END ;
466 
467 
468 
469 
470 
471 /**
472 * Public procedure to compile a match rule.
473 * This procedure generates a compiled PLSQL package
474 * spec and body for the given Match Rule (p_rule_id).
475 *
476 * The name of the generated match rule is:
477 *     HZ_MATCH_RULE_<p_rule_id>
478 *
479 **/
480 PROCEDURE compile_match_rule (
481 	p_rule_id	IN	NUMBER,
482 	p_skip_wrap	IN	VARCHAR2,
483         x_return_status         OUT NOCOPY    VARCHAR2,
484         x_msg_count             OUT NOCOPY    NUMBER,
485         x_msg_data              OUT NOCOPY    VARCHAR2
486 ) IS
487 
488    CURSOR check_null_set IS
489     SELECT DISTINCT a.entity_name
490     FROM hz_match_rule_secondary s, hz_trans_attributes_vl a
491     WHERE a.attribute_id = s.attribute_id
492     AND s.match_rule_id = p_rule_id
493     MINUS
494     SELECT DISTINCT a.entity_name
495     FROM hz_match_rule_primary p, hz_trans_attributes_vl a
496     WHERE a.attribute_id = p.attribute_id
497     AND p.match_rule_id = p_rule_id;
498 
499    CURSOR check_inactive IS
500     SELECT 1
501     FROM hz_match_rule_primary p, hz_primary_trans pt, hz_trans_functions_vl f
502     WHERE p.match_rule_id = p_rule_id
503     AND pt.PRIMARY_ATTRIBUTE_ID = p.PRIMARY_ATTRIBUTE_ID
504     AND f.function_id = pt.function_id
505     AND f.ACTIVE_FLAG = 'N'
506     UNION
507     SELECT 1
508     FROM hz_match_rule_secondary s, hz_secondary_trans pt, hz_trans_functions_vl f
509     WHERE s.match_rule_id = p_rule_id
510     AND pt.SECONDARY_ATTRIBUTE_ID = s.SECONDARY_ATTRIBUTE_ID
511     AND f.function_id = pt.function_id
512     AND f.ACTIVE_FLAG = 'N';
513 
514 -- Local variable declarations
515     l_tmp VARCHAR2(255);
516 
517     l_rule_id NUMBER;
518     l_batch_flag VARCHAR2(1);
519     l_purpose VARCHAR2(1);
520     l_package_name VARCHAR2(2000);
521     l_match_rule_type varchar2(30); --Code Change for Match Rule Set
522 
523 BEGIN
524 
525   --Initialize API return status to success.
526   x_return_status := FND_API.G_RET_STS_SUCCESS;
527 
528   -- Initialize the compiled package name
529   l_rule_id := TO_NUMBER(p_rule_id);
530   l_package_name := 'HZ_MATCH_RULE_'||p_rule_id;
531 
532   -- Initialize message stack
533   FND_MSG_PUB.initialize;
534 
535   BEGIN
536     -- Verify that the match rule exists
537     SELECT 1 INTO l_batch_flag
538     FROM HZ_MATCH_RULES_VL
539     WHERE match_rule_id = l_rule_id;
540 
541   EXCEPTION
542     WHEN NO_DATA_FOUND THEN
543       FND_MESSAGE.SET_NAME('AR', 'HZ_STAGE_NO_RULE');
544       FND_MSG_PUB.ADD;
545       RAISE FND_API.G_EXC_ERROR;
546   END;
547 
548 
549   SELECT RULE_PURPOSE,NVL(MATCH_RULE_TYPE,'SINGLE') into l_purpose,l_match_rule_type FROM HZ_MATCH_RULES_VL --Code Change for Match Rule Set
550   WHERE match_rule_id = l_rule_id;
551 
552  --Start of Code Change for Match Rule Set
553   IF (l_match_rule_type = 'SET') THEN
554     IF (has_uncompiled_childern(l_rule_id)) THEN
555       FND_MESSAGE.SET_NAME('AR', 'HZ_RULE_SET_UNCOMP_RULE_EXISTS');
556       FND_MSG_PUB.ADD;
557       RAISE FND_API.G_EXC_ERROR;
558     END IF;
559    --Populate the match rule set primary and secondary attributes
560    HZ_POP_MRULE_SET_ATTR_V2PUB.pop_mrule_set_attributes(l_rule_id);
561   END IF;
562  --End Of Code Change for Match Rule Set
563 
564 
565  -- VJN : In order to make sure that Bulk Duplicate Identification Match rules
566  --       have both the following versions:
567  --       1. HZ_MATCH_RULE_XXX that incorporate the  "find APIS"
568  --          that use the conventional B-tree indexes as opposed to Intermedia indexes.
569  --       2. HZ_IMP_MATCH_RULE_XXX that incorporate the APIs which do the
570  --          bulk duplicate identification, using B-tree indexes.
571  --       I have changed the logic of this match rule generating package to
572  --       generate HZ_MATCH_RULE_XXX for all match rules ( no matter which rule_purpose it is)
573  --       and generate HZ_IMP_MATCH_RULE_XXX in addition, when the rule_purpose is "Q".
574 
575     /* abordia.  Added to check that acquisition has at least one attribute for each
579     OPEN  check_null_set;
576      entity defined in scoring.  Added update statements since compile_match_rule
577      is public api and commented unnecessary updates in compile_all_rules and
578      compile_all_rules_nolog.  */
580     FETCH check_null_set INTO l_tmp;
581     IF check_null_set%FOUND THEN
582       CLOSE  check_null_set;
583       BEGIN
584         EXECUTE IMMEDIATE 'DROP PACKAGE HZ_MATCH_RULE_'||l_rule_id;
585       EXCEPTION
586         WHEN OTHERS THEN
587           NULL;
588       END;
589       fnd_message.set_name('AR','HZ_SCORING_NO_ACQUISITION');
590       FND_MSG_PUB.ADD;
591       RAISE FND_API.G_EXC_ERROR;
592     END IF;
593     CLOSE check_null_set;
594 
595     /* Check if match rule has any inactive transformations */
596     OPEN check_inactive;
597     FETCH check_inactive INTO l_tmp;
598     IF check_inactive%FOUND THEN
599       CLOSE  check_inactive;
600       BEGIN
601         EXECUTE IMMEDIATE 'DROP PACKAGE HZ_MATCH_RULE_'||l_rule_id;
602       EXCEPTION
603         WHEN OTHERS THEN
604           NULL;
605       END;
606 
607       fnd_message.set_name('AR','HZ_MR_HAS_INACTIVE_TX');
608       FND_MSG_PUB.ADD;
609       RAISE FND_API.G_EXC_ERROR;
610     END IF;
611     CLOSE check_inactive;
612 
613     -- Generate and compile match rule package spec
614     HZ_GEN_PLSQL.new(l_package_name, 'PACKAGE');
615     gen_pkg_spec(l_package_name, l_rule_id);
616     HZ_GEN_PLSQL.compile_code;
617 
618     -- Generate the package body
619     HZ_GEN_PLSQL.new(l_package_name, 'PACKAGE BODY');
620 
621     -- VJN: generate the body for HZ_MATCH_RULE_XXX depending on the rule purpose:
622     --      If rule purpose is Q, we would generate Bulk Match rules that use B-tree indexes
623     --      Else we would generate Match rules that use the regular intermedia text indexes
624 
625     g_context := 'SEARCH';
626     IF l_purpose = 'Q'
627     THEN
628        gen_pkg_body_bulk(l_package_name, l_rule_id);
629     ELSE
630        IF(l_purpose ='D')THEN
631         g_context := 'SDIB';
632        END IF;
633        gen_pkg_body(l_package_name, l_rule_id);
634     END IF;
635 
636     -- Compile the package body
637     HZ_GEN_PLSQL.compile_code;
638 
639 
640     IF p_skip_wrap IS NULL OR p_skip_wrap='N' THEN
641       -- Generate and compile API package body (Package HZ_PARTY_SEARCH)
642       HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
643       gen_wrap_pkg_body(p_rule_id);
644       HZ_GEN_PLSQL.compile_code;
645     END IF;
646 
647     EXECUTE IMMEDIATE 'ALTER PACKAGE ' || l_package_name || ' COMPILE SPECIFICATION';  --bug 5622345
648 
649     --Standard call to get message count and if count is 1, get message info.
650     FND_MSG_PUB.Count_And_Get(
651      p_encoded => FND_API.G_FALSE,
652      p_count => x_msg_count,
653      p_data  => x_msg_data);
654 
655     UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'C' WHERE MATCH_RULE_ID = l_rule_id;
656     COMMIT;
657 
658      /*
659     IF l_match_rule_type <> 'SET' THEN
660      compile_all_rulesets(l_rule_id);
661     END IF;
662     */
663 
664   -- VJN: For match rules of type "Q" viz., Bulk Match Rules, generate
665   --      and compile HZ_IMP_MATCH_RULE_XXX packages
666 
667   IF l_purpose = 'Q'
668   THEN
669      HZ_DQM_DUP_ID_PKG.compile_match_rule(l_rule_id,x_return_status,x_msg_count,x_msg_data);
670   END IF;
671 
672 EXCEPTION
673   WHEN FND_API.G_EXC_ERROR THEN
674     FND_MSG_PUB.Count_And_Get(
675       p_encoded => FND_API.G_FALSE,
676       p_count => x_msg_count,
677       p_data  => x_msg_data);
678     x_return_status := FND_API.G_RET_STS_ERROR;
679     UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_rule_id;
680     COMMIT;
681   WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
682     FND_MSG_PUB.Count_And_Get(
683       p_encoded => FND_API.G_FALSE,
684       p_count => x_msg_count,
685       p_data  => x_msg_data);
686       x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
687     UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_rule_id;
688     COMMIT;
689   WHEN OTHERS THEN
690 
691     FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
692     FND_MESSAGE.SET_TOKEN('PROC','compile_match_rule');
693     FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
694     FND_MSG_PUB.ADD;
695 
696     FND_MSG_PUB.Count_And_Get(
697       p_encoded => FND_API.G_FALSE,
698       p_count => x_msg_count,
699       p_data  => x_msg_data);
700     x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;
701     UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_rule_id;
702     COMMIT;
703 END;
704 
705 PROCEDURE compile_match_rule (
706 	p_rule_id	IN	NUMBER,
707         x_return_status         OUT NOCOPY    VARCHAR2,
708         x_msg_count             OUT NOCOPY    NUMBER,
709         x_msg_data              OUT NOCOPY    VARCHAR2
710 ) IS
711 BEGIN
712   compile_match_rule(p_rule_id,'N',x_return_status,x_msg_count,x_msg_data);
713 END;
714 
715 /**
716 * Private procedure to generate the body of the API package
717 *    HZ_PARTY_SEARCH
718 *
719 * This procedure generates a call to the appropriate match rule
720 * procedure for each match rule
721 *
722 **/
723 PROCEDURE gen_wrap_pkg_body (
724 	p_rule_id	IN	NUMBER
728   l_sql VARCHAR2(4000);
725 ) IS
726 
727 FIRST BOOLEAN;
729 
730   FUNCTION check_proc (p_rule_id NUMBER) RETURN BOOLEAN IS
731     c NUMBER;
732   BEGIN
733     c := dbms_sql.open_cursor;
734     dbms_sql.parse(c,replace(l_sql,'RULEID',to_char(p_rule_id)),2);
735     dbms_sql.close_cursor(c);
736     RETURN TRUE;
737   EXCEPTION
738     WHEN OTHERS THEN
739       RETURN FALSE;
740   END;
741 
742 BEGIN
743  -- UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'T' WHERE RULE_PURPOSE='Q' AND COMPILATION_FLAG='C';
744   -- Generation of code
745   l('CREATE or REPLACE PACKAGE BODY HZ_PARTY_SEARCH AS');
746   l('/*=======================================================================+');
747   l(' |  Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|');
748   l(' |                          All rights reserved.                         |');
749   l(' +=======================================================================+');
750   l(' | NAME');
751   l(' |      HZ_PARTY_SEARCH');
752   l(' |');
753   l(' | DESCRIPTION');
754   l(' |');
755   l(' | Compiled by the HZ Match Rule Compiler');
756   l(' | PUBLIC PROCEDURES');
757   l(' |    find_parties');
758   l(' |    get_matching_party_sites');
759   l(' |    get_matching_contacts');
760   l(' |    get_matching_contact_points');
761   l(' |    get_party_score_details');
762   l(' |    ');
763   l(' | HISTORY');
764   l(' |      '||TO_CHAR(SYSDATE,'DD-MON-YYYY') || ' Generated by HZ Match Rule Compiler');
765   l(' |');
766   l(' *=======================================================================*/');
767 
768   l('  g_debug_count                        NUMBER := 0;');
769   --l('  g_debug                              BOOLEAN := FALSE;');
770   l('  g_last_rule			    NUMBER := -1;');
771   l('  g_last_rule_valid	 	    BOOLEAN := FALSE;');
772 
773   --l('  PROCEDURE enable_debug;');
774   --l('  PROCEDURE disable_debug;');
775 
776   -- Generate find_parties code. Backward compatible signature.
777   l('  PROCEDURE find_parties (');
778   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
779   l('      x_rule_id               IN OUT  NUMBER,');
780   l('      p_party_search_rec      IN      party_search_rec_type,');
781   l('      p_party_site_list       IN      party_site_list,');
782   l('      p_contact_list          IN      contact_list,');
783   l('      p_contact_point_list    IN      contact_point_list,');
784   l('      p_restrict_sql          IN      VARCHAR2,');
785   l('      p_search_merged         IN      VARCHAR2,');
786   l('      x_search_ctx_id         IN OUT  NUMBER,');
787   l('      x_num_matches           IN OUT  NUMBER,');
788   l('      x_return_status         OUT     VARCHAR2,');
789   l('      x_msg_count             OUT     NUMBER,');
790   l('      x_msg_data              OUT     VARCHAR2');
791   l(') IS');
792   l('  BEGIN');
793   d(fnd_log.level_procedure,'find_parties-1(+)');
794   d(fnd_log.level_statement,'Rule ID','x_rule_id');
795 
796   l('     find_parties(p_init_msg_list,x_rule_id,p_party_search_rec,');
797   l('            p_party_site_list,p_contact_list,p_contact_point_list,');
798   l('            p_restrict_sql,NULL,p_search_merged,x_search_ctx_id,');
799   l('            x_num_matches,x_return_status,x_msg_count,x_msg_data);');
800   d(fnd_log.level_procedure,'find_parties-1(-)');
801   l('  END;');
802   l('');
803   -- Generate find_parties code. Public  signature.
804   l('  PROCEDURE find_parties (');
805   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
806   l('      p_rule_id               IN      NUMBER,');
807   l('      p_party_search_rec      IN      party_search_rec_type,');
808   l('      p_party_site_list       IN      party_site_list,');
809   l('      p_contact_list          IN      contact_list,');
810   l('      p_contact_point_list    IN      contact_point_list,');
811   l('      p_restrict_sql          IN      VARCHAR2,');
812   l('      p_match_type            IN      VARCHAR2,');
813   l('      p_search_merged         IN      VARCHAR2,');
814   l('      x_search_ctx_id         OUT     NUMBER,');
815   l('      x_num_matches           OUT     NUMBER,');
816   l('      x_return_status         OUT     VARCHAR2,');
817   l('      x_msg_count             OUT     NUMBER,');
818   l('      x_msg_data              OUT     VARCHAR2');
819   l(') IS');
820   l('  CURSOR c_match_rule IS ');
821   l('    SELECT COMPILATION_FLAG ');
822   l('    FROM HZ_MATCH_RULES_VL ');
823   l('    WHERE MATCH_RULE_ID = p_rule_id;');
824   l('  l_cmp_flag VARCHAR2(1);');
825   l('  BEGIN');
826   l('');
827   d(fnd_log.level_procedure,'find_parties(+)');
828   d(fnd_log.level_statement,'Rule ID','p_rule_id');
829   l('    -- Initialize return status and message stack');
830   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
831   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
832   l('      FND_MSG_PUB.initialize;');
833   l('    END IF;');
834   l('');
835   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
836   l('      -- Find the match rule');
837   l('      null;');
838   l('');
839   l('      -- No MATCH RULE FOUND');
840   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
841   l('      FND_MSG_PUB.ADD;');
842   l('      RAISE FND_API.G_EXC_ERROR;');
843   l('    END IF;');
844 
845   l('    OPEN c_match_rule;');
846   l('    FETCH c_match_rule INTO l_cmp_flag;');
847   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
851   l('    END IF;');
848   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
849   l('      FND_MSG_PUB.ADD;');
850   l('      RAISE FND_API.G_EXC_ERROR;');
852 
853   FIRST := TRUE;
854   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
855                FROM HZ_MATCH_RULES_VL
856                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
857                AND (nvl(COMPILATION_FLAG,'N') = 'C'
858                OR MATCH_RULE_ID = p_rule_id)) LOOP
859     l('    -- Code for Match rule '||RULE.RULE_NAME);
860     IF FIRST THEN
861       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
862       FIRST := FALSE;
863     ELSE
864       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
865     END IF;
866     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
867     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
868     l('        FND_MSG_PUB.ADD;');
869     l('        RAISE FND_API.G_EXC_ERROR;');
870     l('      END IF;');
871 
872     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_parties(');
873     l('        p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,');
874     l('        p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,''N'',x_search_ctx_id,x_num_matches);');
875   END LOOP;
876   l('    END IF;');
877   -- Quality Score
878   l(' -- User quality score ');
879   l(' IF (fnd_profile.value(''HZ_QUALITY_WEIGHTING_USER_HOOK'') = ''Y'')  THEN  ');
880   l('     HZ_DQM_SEARCH_UTIL.get_quality_score ( x_search_ctx_id, p_rule_id); ');
881   l('  END IF; ');
882 
883   d(fnd_log.level_procedure,'find_parties(-)');
884   gen_exception_block;
885   l('  END;');
886   l('');
887 
888 
889   -- Generate find_persons code. Public  signature.
890   l('  PROCEDURE find_persons (');
891   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
892   l('      p_rule_id               IN      NUMBER,');
893   l('      p_party_search_rec      IN      party_search_rec_type,');
894   l('      p_party_site_list       IN      party_site_list,');
895   l('      p_contact_list          IN      contact_list,');
896   l('      p_contact_point_list    IN      contact_point_list,');
897   l('      p_restrict_sql          IN      VARCHAR2,');
898   l('      p_match_type            IN      VARCHAR2,');
899   l('      p_search_merged         IN      VARCHAR2, ');
900   l('      x_search_ctx_id         OUT     NUMBER,');
901   l('      x_num_matches           OUT     NUMBER,');
902   l('      x_return_status         OUT     VARCHAR2,');
903   l('      x_msg_count             OUT     NUMBER,');
904   l('      x_msg_data              OUT     VARCHAR2');
905   l(') IS');
906   l('  CURSOR c_match_rule IS ');
907   l('    SELECT COMPILATION_FLAG ');
908   l('    FROM HZ_MATCH_RULES_VL ');
909   l('    WHERE MATCH_RULE_ID = p_rule_id;');
910   l('  l_cmp_flag VARCHAR2(1);');
911   l('  BEGIN');
912   l('');
913   d(fnd_log.level_procedure,'find_persons(+)');
914   d(fnd_log.level_statement,'Rule ID','p_rule_id');
915   l('    -- Initialize return status and message stack');
916   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
917   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
918   l('      FND_MSG_PUB.initialize;');
919   l('    END IF;');
920   l('');
921   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
922   l('      -- Find the match rule');
923   l('      null;');
924   l('');
925   l('      -- No MATCH RULE FOUND');
926   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
927   l('      FND_MSG_PUB.ADD;');
928   l('      RAISE FND_API.G_EXC_ERROR;');
929   l('    END IF;');
930 
931   l('    OPEN c_match_rule;');
932   l('    FETCH c_match_rule INTO l_cmp_flag;');
933   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
934   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
935   l('      FND_MSG_PUB.ADD;');
936   l('      RAISE FND_API.G_EXC_ERROR;');
937   l('    END IF;');
938   ---Bug:5261867, additional parameter null in place of p_search_merged
939   l_sql := 'declare x number; y number; begin HZ_MATCH_RULE_RULEID.find_persons(-1,'||
940     'HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,'||
941     'HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,'||
942     'null,null,null,null,x,y); end;';
943 
944   FIRST := TRUE;
945   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
946                FROM HZ_MATCH_RULES_VL
947                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
948                AND (nvl(COMPILATION_FLAG,'N') = 'C'
949                OR MATCH_RULE_ID = p_rule_id)) LOOP
950     l('    -- Code for Match rule '||RULE.RULE_NAME);
951     IF FIRST THEN
952       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
953       FIRST := FALSE;
954     ELSE
955       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
956     END IF;
957     IF check_proc(RULE.MATCH_RULE_ID) THEN
958       l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
959       l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
960       l('        FND_MSG_PUB.ADD;');
961       l('        RAISE FND_API.G_EXC_ERROR;');
962       l('      END IF;');
963       l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_persons(');
964       l('        p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,');
965       l('        p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,''N'',x_search_ctx_id,x_num_matches);');
966     ELSE
967       l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
968       l('      FND_MSG_PUB.ADD;');
969       l('      RAISE FND_API.G_EXC_ERROR;');
970     END IF;
971 
972   END LOOP;
976   l('  END;');
973   l('    END IF;');
974   d(fnd_log.level_procedure,'find_persons(-)');
975   gen_exception_block;
977   l('');
978 
979 
980   -- Generate find_persons code. Public  signature.
981   l('  PROCEDURE find_persons (');
982   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
983   l('      p_rule_id               IN      NUMBER,');
984   l('      p_party_search_rec      IN      party_search_rec_type,');
985   l('      p_party_site_list       IN      party_site_list,');
986   l('      p_contact_list          IN      contact_list,');
987   l('      p_contact_point_list    IN      contact_point_list,');
988   l('      p_restrict_sql          IN      VARCHAR2,');
989   l('      p_match_type            IN      VARCHAR2,');
990   l('      x_search_ctx_id         OUT     NUMBER,');
991   l('      x_num_matches           OUT     NUMBER,');
992   l('      x_return_status         OUT     VARCHAR2,');
993   l('      x_msg_count             OUT     NUMBER,');
994   l('      x_msg_data              OUT     VARCHAR2');
995   l(') IS');
996   l('  BEGIN');
997   l('  	find_persons (');
998   l('      p_init_msg_list,p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, ');
999   l('      p_restrict_sql ,p_match_type,NULL,x_search_ctx_id,x_num_matches,x_return_status,');
1000   l('      x_msg_count,x_msg_data);');
1001   l('  END;');
1002   l('');
1003 
1004   -- Generate find_party_details code. Public  signature.
1005   l('  PROCEDURE find_party_details (');
1006   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1007   l('      p_rule_id               IN      NUMBER,');
1008   l('      p_party_search_rec      IN      party_search_rec_type,');
1009   l('      p_party_site_list       IN      party_site_list,');
1010   l('      p_contact_list          IN      contact_list,');
1011   l('      p_contact_point_list    IN      contact_point_list,');
1012   l('      p_restrict_sql          IN      VARCHAR2,');
1013   l('      p_match_type            IN      VARCHAR2,');
1014   l('      p_search_merged         IN      VARCHAR2,');
1015   l('      x_search_ctx_id         OUT     NUMBER,');
1016   l('      x_num_matches           OUT     NUMBER,');
1017   l('      x_return_status         OUT     VARCHAR2,');
1018   l('      x_msg_count             OUT     NUMBER,');
1019   l('      x_msg_data              OUT     VARCHAR2');
1020   l(') IS');
1021   l('  CURSOR c_match_rule IS ');
1022   l('    SELECT COMPILATION_FLAG ');
1023   l('    FROM HZ_MATCH_RULES_VL ');
1024   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1025   l('  l_cmp_flag VARCHAR2(1);');
1026   l('  BEGIN');
1027 
1028   ds(fnd_log.level_procedure,'    ');
1029   dc(fnd_log.level_procedure,'find_party_details(+)');
1030   de('    ');
1031   ds(fnd_log.level_statement,'    ');
1032   dc(fnd_log.level_statement,'Rule ID','p_rule_id');
1033   de('    ');
1034   l('');
1035   l('    -- Initialize return status and message stack');
1036   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1037   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1038   l('      FND_MSG_PUB.initialize;');
1039   l('    END IF;');
1040   l('');
1041   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1042   l('      -- Find the match rule');
1043   l('      null;');
1044   l('');
1045   l('      -- No MATCH RULE FOUND');
1046   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1047   l('      FND_MSG_PUB.ADD;');
1048   l('      RAISE FND_API.G_EXC_ERROR;');
1049   l('    END IF;');
1050 
1051   l('    OPEN c_match_rule;');
1052   l('    FETCH c_match_rule INTO l_cmp_flag;');
1053   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1054   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1055   l('      FND_MSG_PUB.ADD;');
1056   l('      RAISE FND_API.G_EXC_ERROR;');
1057   l('    END IF;');
1058 
1059   FIRST := TRUE;
1060   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1061                FROM HZ_MATCH_RULES_VL
1062                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1063                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1064                OR MATCH_RULE_ID = p_rule_id)) LOOP
1065     l('    -- Code for Match rule '||RULE.RULE_NAME);
1066     IF FIRST THEN
1067       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1068       FIRST := FALSE;
1069     ELSE
1070       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1071     END IF;
1072     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1073     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1074     l('        FND_MSG_PUB.ADD;');
1075     l('        RAISE FND_API.G_EXC_ERROR;');
1076     l('      END IF;');
1077 
1078     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_party_details(');
1079     l('        p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,');
1080     l('        p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,x_search_ctx_id,x_num_matches);');
1081   END LOOP;
1082   l('    END IF;');
1083   d(fnd_log.level_procedure,'find_party_details(-)');
1084   gen_exception_block;
1085   l('  END;');
1086   l('');
1087   l('  PROCEDURE find_duplicate_parties (');
1088   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1089   l('      p_rule_id               IN      NUMBER,');
1090   l('      p_party_id              IN      NUMBER,');
1091   l('      p_restrict_sql          IN      VARCHAR2,');
1092   l('      p_match_type            IN      VARCHAR2,');
1093   l('      p_dup_batch_id          IN      NUMBER,');
1094   l('      p_search_merged         IN      VARCHAR2,');
1095   l('      x_dup_set_id            OUT     NUMBER,');
1096   l('      x_search_ctx_id         OUT     NUMBER,');
1100   l('      x_msg_data              OUT     VARCHAR2');
1097   l('      x_num_matches           OUT     NUMBER,');
1098   l('      x_return_status         OUT     VARCHAR2,');
1099   l('      x_msg_count             OUT     NUMBER,');
1101   l(') IS');
1102   l('  CURSOR c_match_rule IS ');
1103   l('    SELECT COMPILATION_FLAG ');
1104   l('    FROM HZ_MATCH_RULES_VL ');
1105   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1106   l('  l_cmp_flag VARCHAR2(1);');
1107   l('  BEGIN');
1108 
1109 
1110   d(fnd_log.level_procedure,'find_duplicate_parties(+)');
1111   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1112 
1113   l('');
1114   l('    -- Initialize return status and message stack');
1115   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1116   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1117   l('      FND_MSG_PUB.initialize;');
1118   l('    END IF;');
1119   l('');
1120   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1121   l('      -- Find the match rule');
1122   l('      null;');
1123   l('');
1124   l('      -- No MATCH RULE FOUND');
1125   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1126   l('      FND_MSG_PUB.ADD;');
1127   l('      RAISE FND_API.G_EXC_ERROR;');
1128   l('    END IF;');
1129 
1130   l('    IF g_last_rule<>p_rule_id OR NOT g_last_rule_valid THEN');
1131   l('      OPEN c_match_rule;');
1132   l('      FETCH c_match_rule INTO l_cmp_flag;');
1133   l('      IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1134   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1135   l('        FND_MSG_PUB.ADD;');
1136   l('        RAISE FND_API.G_EXC_ERROR;');
1137   l('      END IF;');
1138   l('      g_last_rule := p_rule_id;');
1139   l('      g_last_rule_valid := TRUE;');
1140   l('    END IF;');
1141 
1142   FIRST := TRUE;
1143   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1144                FROM HZ_MATCH_RULES_VL
1145                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1146                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1147                OR MATCH_RULE_ID = p_rule_id)) LOOP
1148     l('    -- Code for Match rule '||RULE.RULE_NAME);
1149     IF FIRST THEN
1150       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1151       FIRST := FALSE;
1152     ELSE
1153       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1154     END IF;
1155     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1156     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1157     l('        FND_MSG_PUB.ADD;');
1158     l('        RAISE FND_API.G_EXC_ERROR;');
1159     l('      END IF;');
1160 
1161     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_duplicate_parties(');
1162     l('        p_rule_id,p_party_id,');
1163     l('        p_restrict_sql,p_match_type,p_dup_batch_id,p_search_merged,x_dup_set_id, x_search_ctx_id,x_num_matches);');
1164   END LOOP;
1165   l('    END IF;');
1166   d(fnd_log.level_procedure,'find_duplicate_parties(-)');
1167 
1168   gen_exception_block;
1169   l('  END;');
1170   l('');
1171 
1172   l('');
1173   l('  PROCEDURE find_duplicate_party_sites (');
1174   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1175   l('      p_rule_id               IN      NUMBER,');
1176   l('      p_party_site_id         IN      NUMBER,');
1177   l('      p_party_id              IN      NUMBER,');
1178   l('      p_restrict_sql          IN      VARCHAR2,');
1179   l('      p_match_type            IN      VARCHAR2,');
1180   l('      x_search_ctx_id         OUT     NUMBER,');
1181   l('      x_num_matches           OUT     NUMBER,');
1182   l('      x_return_status         OUT     VARCHAR2,');
1183   l('      x_msg_count             OUT     NUMBER,');
1184   l('      x_msg_data              OUT     VARCHAR2');
1185   l(') IS');
1186   l('  CURSOR c_match_rule IS ');
1187   l('    SELECT COMPILATION_FLAG ');
1188   l('    FROM HZ_MATCH_RULES_VL ');
1189   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1190   l('  l_cmp_flag VARCHAR2(1);');
1191   l('  BEGIN');
1192 
1193 
1194   d(fnd_log.level_procedure,'find_duplicate_party_sites(+)');
1195   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1196 
1197   l('');
1198   l('    -- Initialize return status and message stack');
1199   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1200   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1201   l('      FND_MSG_PUB.initialize;');
1202   l('    END IF;');
1203   l('');
1204   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1205   l('      -- Find the match rule');
1206   l('      null;');
1207   l('');
1208   l('      -- No MATCH RULE FOUND');
1209   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1210   l('      FND_MSG_PUB.ADD;');
1211   l('      RAISE FND_API.G_EXC_ERROR;');
1212   l('    END IF;');
1213 
1214   l('    OPEN c_match_rule;');
1215   l('    FETCH c_match_rule INTO l_cmp_flag;');
1216   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1217   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1218   l('      FND_MSG_PUB.ADD;');
1219   l('      RAISE FND_API.G_EXC_ERROR;');
1220   l('    END IF;');
1221 
1222   FIRST := TRUE;
1223   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1224                FROM HZ_MATCH_RULES_VL
1225                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1226                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1227                OR MATCH_RULE_ID = p_rule_id)) LOOP
1228     l('    -- Code for Match rule '||RULE.RULE_NAME);
1229     IF FIRST THEN
1230       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1231       FIRST := FALSE;
1232     ELSE
1236     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1233       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1234     END IF;
1235     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1237     l('        FND_MSG_PUB.ADD;');
1238     l('        RAISE FND_API.G_EXC_ERROR;');
1239     l('      END IF;');
1240 
1241     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_duplicate_party_sites(');
1242     l('        p_rule_id,p_party_site_id,p_party_id,');
1243     l('        p_restrict_sql,p_match_type,x_search_ctx_id,x_num_matches);');
1244   END LOOP;
1245   l('    END IF;');
1246   d(fnd_log.level_procedure,'find_duplicate_party_sites(-)');
1247 
1248   gen_exception_block;
1249   l('  END;');
1250 
1251   l('');
1252   l('  PROCEDURE find_duplicate_contacts (');
1253   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1254   l('      p_rule_id               IN      NUMBER,');
1255   l('      p_org_contact_id        IN      NUMBER,');
1256   l('      p_party_id              IN      NUMBER,');
1257   l('      p_restrict_sql          IN      VARCHAR2,');
1258   l('      p_match_type            IN      VARCHAR2,');
1259   l('      x_search_ctx_id         OUT     NUMBER,');
1260   l('      x_num_matches           OUT     NUMBER,');
1261   l('      x_return_status         OUT     VARCHAR2,');
1262   l('      x_msg_count             OUT     NUMBER,');
1263   l('      x_msg_data              OUT     VARCHAR2');
1264   l(') IS');
1265   l('  CURSOR c_match_rule IS ');
1266   l('    SELECT COMPILATION_FLAG ');
1267   l('    FROM HZ_MATCH_RULES_VL ');
1268   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1269   l('  l_cmp_flag VARCHAR2(1);');
1270   l('  BEGIN');
1271 
1272 
1273   d(fnd_log.level_procedure,'find_duplicate_contacts(+)');
1274   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1275 
1276   l('');
1277   l('    -- Initialize return status and message stack');
1278   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1279   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1280   l('      FND_MSG_PUB.initialize;');
1281   l('    END IF;');
1282   l('');
1283   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1284   l('      -- Find the match rule');
1285   l('      null;');
1286   l('');
1287   l('      -- No MATCH RULE FOUND');
1288   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1289   l('      FND_MSG_PUB.ADD;');
1290   l('      RAISE FND_API.G_EXC_ERROR;');
1291   l('    END IF;');
1292 
1293   l('    OPEN c_match_rule;');
1294   l('    FETCH c_match_rule INTO l_cmp_flag;');
1295   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1296   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1297   l('      FND_MSG_PUB.ADD;');
1298   l('      RAISE FND_API.G_EXC_ERROR;');
1299   l('    END IF;');
1300 
1301   FIRST := TRUE;
1302   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1303                FROM HZ_MATCH_RULES_VL
1304                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1305                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1306                OR MATCH_RULE_ID = p_rule_id)) LOOP
1307     l('    -- Code for Match rule '||RULE.RULE_NAME);
1308     IF FIRST THEN
1309       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1310       FIRST := FALSE;
1311     ELSE
1312       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1313     END IF;
1314     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1315     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1316     l('        FND_MSG_PUB.ADD;');
1317     l('        RAISE FND_API.G_EXC_ERROR;');
1318     l('      END IF;');
1319 
1320     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_duplicate_contacts(');
1321     l('        p_rule_id,p_org_contact_id,p_party_id,');
1322     l('        p_restrict_sql,p_match_type,x_search_ctx_id,x_num_matches);');
1323   END LOOP;
1324   l('    END IF;');
1325   d(fnd_log.level_procedure,'find_duplicate_contacts(-)');
1326 
1327   gen_exception_block;
1328   l('  END;');
1329 
1330   l('');
1331   l('  PROCEDURE find_duplicate_contact_points (');
1332   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1333   l('      p_rule_id               IN      NUMBER,');
1334   l('      p_contact_point_id      IN      NUMBER,');
1335   l('      p_party_id              IN      NUMBER,');
1336   l('      p_restrict_sql          IN      VARCHAR2,');
1337   l('      p_match_type            IN      VARCHAR2,');
1338   l('      x_search_ctx_id         OUT     NUMBER,');
1339   l('      x_num_matches           OUT     NUMBER,');
1340   l('      x_return_status         OUT     VARCHAR2,');
1341   l('      x_msg_count             OUT     NUMBER,');
1342   l('      x_msg_data              OUT     VARCHAR2');
1343   l(') IS');
1344   l('  CURSOR c_match_rule IS ');
1345   l('    SELECT COMPILATION_FLAG ');
1346   l('    FROM HZ_MATCH_RULES_VL ');
1347   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1348   l('  l_cmp_flag VARCHAR2(1);');
1349   l('  BEGIN');
1350 
1351 
1352   d(fnd_log.level_procedure,'find_duplicate_contact_points(+)');
1353   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1354 
1355   l('');
1356   l('    -- Initialize return status and message stack');
1357   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1358   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1359   l('      FND_MSG_PUB.initialize;');
1360   l('    END IF;');
1361   l('');
1362   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1363   l('      -- Find the match rule');
1364   l('      null;');
1365   l('');
1366   l('      -- No MATCH RULE FOUND');
1367   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1368   l('      FND_MSG_PUB.ADD;');
1369   l('      RAISE FND_API.G_EXC_ERROR;');
1373   l('    FETCH c_match_rule INTO l_cmp_flag;');
1370   l('    END IF;');
1371 
1372   l('    OPEN c_match_rule;');
1374   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1375   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1376   l('      FND_MSG_PUB.ADD;');
1377   l('      RAISE FND_API.G_EXC_ERROR;');
1378   l('    END IF;');
1379 
1380   FIRST := TRUE;
1381   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1382                FROM HZ_MATCH_RULES_VL
1383                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1384                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1385                OR MATCH_RULE_ID = p_rule_id)) LOOP
1386     l('    -- Code for Match rule '||RULE.RULE_NAME);
1387     IF FIRST THEN
1388       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1389       FIRST := FALSE;
1390     ELSE
1391       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1392     END IF;
1393     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1394     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1395     l('        FND_MSG_PUB.ADD;');
1396     l('        RAISE FND_API.G_EXC_ERROR;');
1397     l('      END IF;');
1398 
1399     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_duplicate_contact_points(');
1400     l('        p_rule_id,p_contact_point_id,p_party_id,');
1401     l('        p_restrict_sql,p_match_type,x_search_ctx_id,x_num_matches);');
1402   END LOOP;
1403   l('    END IF;');
1404   d(fnd_log.level_procedure,'find_duplicate_contact_points(-)');
1405 
1406   gen_exception_block;
1407   l('  END;');
1408   l('');
1409   l('');
1410   l('  PROCEDURE find_parties_dynamic (');
1411   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1412   l('      p_rule_id               IN      NUMBER,');
1413   l('      p_attrib_id1            IN      NUMBER,');
1414   l('      p_attrib_id2            IN      NUMBER,');
1415   l('      p_attrib_id3            IN      NUMBER,');
1416   l('      p_attrib_id4            IN      NUMBER,');
1417   l('      p_attrib_id5            IN      NUMBER,');
1418   l('      p_attrib_id6            IN      NUMBER,');
1419   l('      p_attrib_id7            IN      NUMBER,');
1420   l('      p_attrib_id8            IN      NUMBER,');
1421   l('      p_attrib_id9            IN      NUMBER,');
1422   l('      p_attrib_id10           IN      NUMBER,');
1423   l('      p_attrib_id11           IN      NUMBER,');
1424   l('      p_attrib_id12           IN      NUMBER,');
1425   l('      p_attrib_id13           IN      NUMBER,');
1426   l('      p_attrib_id14           IN      NUMBER,');
1427   l('      p_attrib_id15           IN      NUMBER,');
1428   l('      p_attrib_id16           IN      NUMBER,');
1429   l('      p_attrib_id17           IN      NUMBER,');
1430   l('      p_attrib_id18           IN      NUMBER,');
1431   l('      p_attrib_id19           IN      NUMBER,');
1432   l('      p_attrib_id20           IN      NUMBER,');
1433   l('      p_attrib_val1           IN      VARCHAR2,');
1434   l('      p_attrib_val2           IN      VARCHAR2,');
1435   l('      p_attrib_val3           IN      VARCHAR2,');
1436   l('      p_attrib_val4           IN      VARCHAR2,');
1437   l('      p_attrib_val5           IN      VARCHAR2,');
1438   l('      p_attrib_val6           IN      VARCHAR2,');
1439   l('      p_attrib_val7           IN      VARCHAR2,');
1440   l('      p_attrib_val8           IN      VARCHAR2,');
1441   l('      p_attrib_val9           IN      VARCHAR2,');
1442   l('      p_attrib_val10          IN      VARCHAR2,');
1443   l('      p_attrib_val11          IN      VARCHAR2,');
1444   l('      p_attrib_val12          IN      VARCHAR2,');
1445   l('      p_attrib_val13          IN      VARCHAR2,');
1446   l('      p_attrib_val14          IN      VARCHAR2,');
1447   l('      p_attrib_val15          IN      VARCHAR2,');
1448   l('      p_attrib_val16          IN      VARCHAR2,');
1449   l('      p_attrib_val17          IN      VARCHAR2,');
1450   l('      p_attrib_val18          IN      VARCHAR2,');
1451   l('      p_attrib_val19          IN      VARCHAR2,');
1452   l('      p_attrib_val20          IN      VARCHAR2,');
1453   l('      p_restrict_sql          IN      VARCHAR2,');
1454   l('      p_match_type            IN      VARCHAR2,');
1455   l('      p_search_merged         IN      VARCHAR2,');
1456   l('      x_search_ctx_id         OUT     NUMBER,');
1457   l('      x_num_matches           OUT     NUMBER,');
1458   l('      x_return_status         OUT     VARCHAR2,');
1459   l('      x_msg_count             OUT     NUMBER,');
1460   l('      x_msg_data              OUT     VARCHAR2');
1461   l(') IS');
1462   l('  CURSOR c_match_rule IS ');
1463   l('    SELECT COMPILATION_FLAG ');
1464   l('    FROM HZ_MATCH_RULES_VL ');
1465   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1466   l('  l_cmp_flag VARCHAR2(1);');
1467   l('  BEGIN');
1468 
1469 
1470   d(fnd_log.level_procedure,'find_parties_dynamic(+)');
1471   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1472 
1473   l('');
1474   l('    -- Initialize return status and message stack');
1475   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1476   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1477   l('      FND_MSG_PUB.initialize;');
1478   l('    END IF;');
1479   l('');
1480   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1481   l('      -- Find the match rule');
1482   l('      null;');
1483   l('');
1484   l('      -- No MATCH RULE FOUND');
1485   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1486   l('      FND_MSG_PUB.ADD;');
1487   l('      RAISE FND_API.G_EXC_ERROR;');
1488   l('    END IF;');
1489 
1490   l('    OPEN c_match_rule;');
1494   l('      FND_MSG_PUB.ADD;');
1491   l('    FETCH c_match_rule INTO l_cmp_flag;');
1492   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1493   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1495   l('      RAISE FND_API.G_EXC_ERROR;');
1496   l('    END IF;');
1497 
1498   FIRST := TRUE;
1499   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1500                FROM HZ_MATCH_RULES_VL
1501                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1502                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1503                OR MATCH_RULE_ID = p_rule_id)) LOOP
1504     l('    -- Code for Match rule '||RULE.RULE_NAME);
1505     IF FIRST THEN
1506       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1507       FIRST := FALSE;
1508     ELSE
1509       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1510     END IF;
1511     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1512     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1513     l('        FND_MSG_PUB.ADD;');
1514     l('        RAISE FND_API.G_EXC_ERROR;');
1515     l('      END IF;');
1516 
1517     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.find_parties_dynamic(');
1518     l('        p_rule_id,');
1519     l('        p_attrib_id1,p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
1520     l('        p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
1521     l('        p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
1522     l('        p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
1523     l('        p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
1524     l('        p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
1525     l('        p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
1526     l('        p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
1527     l('        p_restrict_sql,p_match_type,p_search_merged,x_search_ctx_id,x_num_matches);');
1528   END LOOP;
1529   l('    END IF;');
1530   d(fnd_log.level_procedure,'find_parties_dynamic(-)');
1531 
1532   gen_exception_block;
1533   l('  END;');
1534   l('');
1535   l('  PROCEDURE call_api_dynamic (');
1536   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1537   l('      p_rule_id               IN      NUMBER,');
1538   l('      p_attrib_id1            IN      NUMBER,');
1539   l('      p_attrib_id2            IN      NUMBER,');
1540   l('      p_attrib_id3            IN      NUMBER,');
1541   l('      p_attrib_id4            IN      NUMBER,');
1542   l('      p_attrib_id5            IN      NUMBER,');
1543   l('      p_attrib_id6            IN      NUMBER,');
1544   l('      p_attrib_id7            IN      NUMBER,');
1545   l('      p_attrib_id8            IN      NUMBER,');
1546   l('      p_attrib_id9            IN      NUMBER,');
1547   l('      p_attrib_id10           IN      NUMBER,');
1548   l('      p_attrib_id11           IN      NUMBER,');
1549   l('      p_attrib_id12           IN      NUMBER,');
1550   l('      p_attrib_id13           IN      NUMBER,');
1551   l('      p_attrib_id14           IN      NUMBER,');
1552   l('      p_attrib_id15           IN      NUMBER,');
1553   l('      p_attrib_id16           IN      NUMBER,');
1554   l('      p_attrib_id17           IN      NUMBER,');
1555   l('      p_attrib_id18           IN      NUMBER,');
1556   l('      p_attrib_id19           IN      NUMBER,');
1557   l('      p_attrib_id20           IN      NUMBER,');
1558   l('      p_attrib_val1           IN      VARCHAR2,');
1559   l('      p_attrib_val2           IN      VARCHAR2,');
1560   l('      p_attrib_val3           IN      VARCHAR2,');
1561   l('      p_attrib_val4           IN      VARCHAR2,');
1562   l('      p_attrib_val5           IN      VARCHAR2,');
1563   l('      p_attrib_val6           IN      VARCHAR2,');
1564   l('      p_attrib_val7           IN      VARCHAR2,');
1565   l('      p_attrib_val8           IN      VARCHAR2,');
1566   l('      p_attrib_val9           IN      VARCHAR2,');
1567   l('      p_attrib_val10          IN      VARCHAR2,');
1568   l('      p_attrib_val11          IN      VARCHAR2,');
1569   l('      p_attrib_val12          IN      VARCHAR2,');
1570   l('      p_attrib_val13          IN      VARCHAR2,');
1571   l('      p_attrib_val14          IN      VARCHAR2,');
1572   l('      p_attrib_val15          IN      VARCHAR2,');
1573   l('      p_attrib_val16          IN      VARCHAR2,');
1574   l('      p_attrib_val17          IN      VARCHAR2,');
1575   l('      p_attrib_val18          IN      VARCHAR2,');
1576   l('      p_attrib_val19          IN      VARCHAR2,');
1577   l('      p_attrib_val20          IN      VARCHAR2,');
1578   l('      p_restrict_sql          IN      VARCHAR2,');
1579   l('      p_api_name              IN      VARCHAR2,');
1580   l('      p_match_type            IN      VARCHAR2,');
1581   l('      p_party_id              IN      NUMBER,');
1582   l('      p_search_merged         IN      VARCHAR2,');
1583   l('      x_search_ctx_id         OUT     NUMBER,');
1584   l('      x_num_matches           OUT     NUMBER,');
1585   l('      x_return_status         OUT     VARCHAR2,');
1586   l('      x_msg_count             OUT     NUMBER,');
1587   l('      x_msg_data              OUT     VARCHAR2');
1588   l(') IS');
1589   l('  CURSOR c_match_rule IS ');
1590   l('    SELECT COMPILATION_FLAG ');
1591   l('    FROM HZ_MATCH_RULES_VL ');
1592   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1593   l('  l_cmp_flag VARCHAR2(1);');
1594   l('  BEGIN');
1595 
1596 
1597   d(fnd_log.level_procedure,'find_parties_dynamic(+)');
1598   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1599 
1600   l('');
1604   l('      FND_MSG_PUB.initialize;');
1601   l('    -- Initialize return status and message stack');
1602   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1603   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1605   l('    END IF;');
1606   l('');
1607   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1608   l('      -- Find the match rule');
1609   l('      null;');
1610   l('');
1611   l('      -- No MATCH RULE FOUND');
1612   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1613   l('      FND_MSG_PUB.ADD;');
1614   l('      RAISE FND_API.G_EXC_ERROR;');
1615   l('    END IF;');
1616 
1617   l('    OPEN c_match_rule;');
1618   l('    FETCH c_match_rule INTO l_cmp_flag;');
1619   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1620   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1621   l('      FND_MSG_PUB.ADD;');
1622   l('      RAISE FND_API.G_EXC_ERROR;');
1623   l('    END IF;');
1624 
1625   l_sql := 'declare x number; y number; begin HZ_MATCH_RULE_RULEID.call_api_dynamic(null,null,'||
1626        'null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'||
1627        'null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,null,'||
1628        'null,null,null,null,null,null,null,null,null,null,null,null,x,y); end;';
1629 
1630 
1631   FIRST := TRUE;
1632   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1633                FROM HZ_MATCH_RULES_VL
1634                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1635                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1636                OR MATCH_RULE_ID = p_rule_id)) LOOP
1637     l('    -- Code for Match rule '||RULE.RULE_NAME);
1638     IF FIRST THEN
1639       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1640       FIRST := FALSE;
1644     IF check_proc(RULE.MATCH_RULE_ID) THEN
1641     ELSE
1642       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1643     END IF;
1645 
1646       l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1647       l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1648       l('        FND_MSG_PUB.ADD;');
1649       l('        RAISE FND_API.G_EXC_ERROR;');
1650       l('      END IF;');
1651 
1652       l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.call_api_dynamic(');
1653       l('        p_rule_id,');
1654       l('        p_attrib_id1,p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
1655       l('        p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
1656       l('        p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
1657       l('        p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
1658       l('        p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
1659       l('        p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
1660       l('        p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
1661       l('        p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
1662       l('        p_restrict_sql,p_api_name,p_match_type,p_party_id,p_search_merged,x_search_ctx_id,x_num_matches);');
1663     ELSE
1664       l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1665       l('      FND_MSG_PUB.ADD;');
1666       l('      RAISE FND_API.G_EXC_ERROR;');
1667     END IF;
1668 
1669   END LOOP;
1670   l('    END IF;');
1671   d(fnd_log.level_procedure,'call_api_dynamic(-)');
1672 
1673   gen_exception_block;
1674   l('  END; ');
1675 
1676   gen_call_api_dynamic_names;
1677 
1678   -- Generate get_matching_party_sites code
1679   l('PROCEDURE get_matching_party_sites (');
1680   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1681   l('        p_rule_id               IN      NUMBER,');
1682   l('        p_party_id              IN      NUMBER,');
1683   l('        p_party_site_list	     IN	     PARTY_SITE_LIST,');
1684   l('        p_contact_point_list    IN	     CONTACT_POINT_LIST,');
1685   l('        x_search_ctx_id         OUT     NUMBER,');
1686   l('        x_return_status         OUT     VARCHAR2,');
1687   l('        x_msg_count             OUT     NUMBER,');
1688   l('        x_msg_data              OUT     VARCHAR2');
1689   l(') IS');
1690   l('  l_num_matches NUMBER;');
1691   l('  BEGIN');
1692 
1693 
1694   d(fnd_log.level_procedure,'get_matching_party_sites-1(+)');
1695   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1696 
1697   l('     get_matching_party_sites(p_init_msg_list,p_rule_id,p_party_id,');
1698   l('            p_party_site_list,p_contact_point_list,');
1699   l('            NULL,NULL,x_search_ctx_id,');
1700   l('            l_num_matches,x_return_status,x_msg_count,x_msg_data);');
1701   d(fnd_log.level_procedure,'get_matching_party_sites-1(-)');
1702 
1703   l('  END;');
1704 
1705   l('PROCEDURE get_matching_party_sites (');
1706   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1707   l('        p_rule_id               IN      NUMBER,');
1708   l('        p_party_id              IN      NUMBER,');
1709   l('        p_party_site_list       IN      PARTY_SITE_LIST,');
1710   l('        p_contact_point_list    IN      CONTACT_POINT_LIST,');
1711   l('        p_restrict_sql          IN      VARCHAR2,');
1712   l('        p_match_type            IN      VARCHAR2,');
1713   l('        x_search_ctx_id         OUT     NUMBER,');
1714   l('        x_num_matches           OUT     NUMBER,');
1715   l('        x_return_status         OUT     VARCHAR2,');
1716   l('        x_msg_count             OUT     NUMBER,');
1717   l('        x_msg_data              OUT     VARCHAR2');
1718   l(') IS');
1719   l('  CURSOR c_match_rule IS ');
1720   l('    SELECT COMPILATION_FLAG ');
1721   l('    FROM HZ_MATCH_RULES_VL ');
1722   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1723   l('  l_cmp_flag VARCHAR2(1);');
1724   l('  BEGIN');
1725 
1726 
1727   d(fnd_log.level_procedure,'get_matching_party_sites(+)');
1728   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1729 
1730 
1731   l('');
1732   l('    -- Initialize return status and message stack');
1733   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1734   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1735   l('      FND_MSG_PUB.initialize;');
1736   l('    END IF;');
1737   l('');
1738   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1739   l('      -- No MATCH RULE FOUND');
1740   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1741   l('      FND_MSG_PUB.ADD;');
1742   l('      RAISE FND_API.G_EXC_ERROR;');
1743   l('    END IF;');
1744 
1745   l('    OPEN c_match_rule;');
1746   l('    FETCH c_match_rule INTO l_cmp_flag;');
1747   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1748   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1749   l('      FND_MSG_PUB.ADD;');
1750   l('      RAISE FND_API.G_EXC_ERROR;');
1751   l('    END IF;');
1752 
1753   FIRST := TRUE;
1754   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1755                FROM HZ_MATCH_RULES_VL
1756                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1757                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1758                OR MATCH_RULE_ID = p_rule_id)) LOOP
1759     l('    -- Code for Match rule '||RULE.RULE_NAME);
1760     IF FIRST THEN
1761       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1762       FIRST := FALSE;
1763     ELSE
1767     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1764       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1765     END IF;
1766     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1768     l('        FND_MSG_PUB.ADD;');
1769     l('        RAISE FND_API.G_EXC_ERROR;');
1770     l('      END IF;');
1771     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_matching_party_sites(');
1772     l('        p_rule_id, p_party_id,p_party_site_list, p_contact_point_list,');
1773     l('        p_restrict_sql, p_match_type,null,x_search_ctx_id,x_num_matches);');
1774   END LOOP;
1775   l('    END IF;');
1776   d(fnd_log.level_procedure,'get_matching_party_sites(-)');
1777 
1778   gen_exception_block;
1779   l('  END;');
1780   l('');
1781   -- Generate get_matching_contacts code
1782   l('PROCEDURE get_matching_contacts (');
1783   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1784   l('        p_rule_id               IN      NUMBER,');
1785   l('        p_party_id              IN      NUMBER,');
1786   l('        p_contact_list          IN      CONTACT_LIST,');
1787   l('        p_contact_point_list    IN      CONTACT_POINT_LIST,');
1788   l('        x_search_ctx_id         OUT     NUMBER,');
1789   l('        x_return_status         OUT     VARCHAR2,');
1790   l('        x_msg_count             OUT     NUMBER,');
1791   l('        x_msg_data              OUT     VARCHAR2');
1792   l(') IS');
1793   l('  l_num_matches NUMBER;');
1794   l('  BEGIN');
1795 
1796 
1797   d(fnd_log.level_procedure,'get_matching_contacts-1(+)');
1798   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1799 
1800   l('     get_matching_contacts(p_init_msg_list,p_rule_id,p_party_id,');
1801   l('            p_contact_list,p_contact_point_list,');
1802   l('            NULL,NULL,x_search_ctx_id,');
1803   l('            l_num_matches,x_return_status,x_msg_count,x_msg_data);');
1804   d(fnd_log.level_procedure,'get_matching_contacts-1(-)');
1805 
1806   l('  END;');
1807 
1808   l('PROCEDURE get_matching_contacts (');
1809   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1810   l('        p_rule_id               IN      NUMBER,');
1811   l('        p_party_id              IN      NUMBER,');
1812   l('        p_contact_list	     IN	     CONTACT_LIST,');
1813   l('        p_contact_point_list    IN	     CONTACT_POINT_LIST,');
1814   l('        p_restrict_sql          IN      VARCHAR2,');
1815   l('        p_match_type            IN      VARCHAR2,');
1816   l('        x_search_ctx_id         OUT     NUMBER,');
1817   l('        x_num_matches           OUT     NUMBER,');
1818   l('        x_return_status         OUT     VARCHAR2,');
1819   l('        x_msg_count             OUT     NUMBER,');
1820   l('        x_msg_data              OUT     VARCHAR2');
1821   l(') IS');
1822   l('  CURSOR c_match_rule IS ');
1823   l('    SELECT COMPILATION_FLAG ');
1824   l('    FROM HZ_MATCH_RULES_VL ');
1825   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1826   l('  l_cmp_flag VARCHAR2(1);');
1827   l('  BEGIN');
1828 
1829 
1830   d(fnd_log.level_procedure,'get_matching_contacts(+)');
1831   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1832 
1833 
1834   l('');
1835   l('    -- Initialize return status and message stack');
1836   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1837   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1838   l('      FND_MSG_PUB.initialize;');
1839   l('    END IF;');
1840   l('');
1841   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1842   l('      -- No MATCH RULE FOUND');
1843   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1844   l('      FND_MSG_PUB.ADD;');
1845   l('      RAISE FND_API.G_EXC_ERROR;');
1846   l('    END IF;');
1847 
1848   l('    OPEN c_match_rule;');
1849   l('    FETCH c_match_rule INTO l_cmp_flag;');
1850   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1851   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1852   l('      FND_MSG_PUB.ADD;');
1853   l('      RAISE FND_API.G_EXC_ERROR;');
1854   l('    END IF;');
1855 
1856   FIRST := TRUE;
1857   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1858                FROM HZ_MATCH_RULES_VL
1859                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1860                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1861                OR MATCH_RULE_ID = p_rule_id)) LOOP
1862     l('    -- Code for Match rule '||RULE.RULE_NAME);
1863     IF FIRST THEN
1864       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1865       FIRST := FALSE;
1866     ELSE
1867       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1868     END IF;
1869     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1870     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1871     l('        FND_MSG_PUB.ADD;');
1872     l('        RAISE FND_API.G_EXC_ERROR;');
1873     l('      END IF;');
1874     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_matching_contacts(');
1875     l('        p_rule_id, p_party_id,p_contact_list, p_contact_point_list,');
1876     l('        p_restrict_sql, p_match_type,null,x_search_ctx_id,x_num_matches);');
1877   END LOOP;
1878   l('    END IF;');
1879   gen_exception_block;
1880   d(fnd_log.level_procedure,'get_matching_contacts(-)');
1881 
1882   l('  END;');
1883   l('');
1884   -- Generate get_matching_contact_points code
1885   l('PROCEDURE get_matching_contact_points (');
1886   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1887   l('        p_rule_id               IN      NUMBER,');
1888   l('        p_party_id              IN      NUMBER,');
1892   l('        x_msg_count             OUT     NUMBER,');
1889   l('        p_contact_point_list    IN	     CONTACT_POINT_LIST,');
1890   l('        x_search_ctx_id         OUT     NUMBER,');
1891   l('        x_return_status         OUT     VARCHAR2,');
1893   l('        x_msg_data              OUT     VARCHAR2');
1894   l(') IS');
1895   l('  l_num_matches NUMBER;');
1896   l('  BEGIN');
1897 
1898 
1899   d(fnd_log.level_procedure,'get_matching_contact_points-1(+)');
1900   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1901 
1902   l('     get_matching_contact_points(p_init_msg_list,p_rule_id,p_party_id,');
1903   l('            p_contact_point_list,');
1904   l('            NULL,NULL,x_search_ctx_id,');
1905   l('            l_num_matches,x_return_status,x_msg_count,x_msg_data);');
1906   d(fnd_log.level_procedure,'get_matching_contact_points-1(-)');
1907 
1908   l('  END;');
1909   l('PROCEDURE get_matching_contact_points (');
1910   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1911   l('        p_rule_id               IN      NUMBER,');
1912   l('        p_party_id              IN      NUMBER,');
1913   l('        p_contact_point_list    IN	     CONTACT_POINT_LIST,');
1914   l('        p_restrict_sql          IN      VARCHAR2,');
1915   l('        p_match_type            IN      VARCHAR2,');
1916   l('        x_search_ctx_id         OUT     NUMBER,');
1917   l('        x_num_matches           OUT     NUMBER,');
1918   l('        x_return_status         OUT     VARCHAR2,');
1919   l('        x_msg_count             OUT     NUMBER,');
1920   l('        x_msg_data              OUT     VARCHAR2');
1921   l(') IS');
1922   l('  CURSOR c_match_rule IS ');
1923   l('    SELECT COMPILATION_FLAG ');
1924   l('    FROM HZ_MATCH_RULES_VL ');
1925   l('    WHERE MATCH_RULE_ID = p_rule_id;');
1926   l('  l_cmp_flag VARCHAR2(1);');
1927   l('  BEGIN');
1928 
1929 
1930   d(fnd_log.level_procedure,'get_matching_contact_points(+)');
1931   d(fnd_log.level_statement,'Rule ID','p_rule_id');
1932 
1933   l('');
1934   l('    -- Initialize return status and message stack');
1935   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
1936   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
1937   l('      FND_MSG_PUB.initialize;');
1938   l('    END IF;');
1939   l('');
1940   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
1941   l('      -- No MATCH RULE FOUND');
1942   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
1943   l('      FND_MSG_PUB.ADD;');
1944   l('      RAISE FND_API.G_EXC_ERROR;');
1945   l('    END IF;');
1946 
1947   l('    OPEN c_match_rule;');
1948   l('    FETCH c_match_rule INTO l_cmp_flag;');
1949   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
1950   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
1951   l('      FND_MSG_PUB.ADD;');
1952   l('      RAISE FND_API.G_EXC_ERROR;');
1953   l('    END IF;');
1954 
1955   FIRST := TRUE;
1956   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
1957                FROM HZ_MATCH_RULES_VL
1958                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
1959                AND (nvl(COMPILATION_FLAG,'N') = 'C'
1960                OR MATCH_RULE_ID = p_rule_id)) LOOP
1961     l('    -- Code for Match rule '||RULE.RULE_NAME);
1962     IF FIRST THEN
1963       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1964       FIRST := FALSE;
1965     ELSE
1966       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
1967     END IF;
1968     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
1969     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
1970     l('        FND_MSG_PUB.ADD;');
1971     l('        RAISE FND_API.G_EXC_ERROR;');
1972     l('      END IF;');
1973 
1974     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_matching_contact_points(');
1975     l('        p_rule_id, p_party_id, p_contact_point_list,');
1976     l('        p_restrict_sql, p_match_type,null,x_search_ctx_id,x_num_matches);');
1977   END LOOP;
1978   l('    END IF;');
1979   d(fnd_log.level_procedure,'get_matching_contact_points(-)');
1980 
1981   gen_exception_block;
1982   l('  END;');
1983   l('');
1984   -- Generate get_party_score_details code
1985   l('PROCEDURE get_party_score_details (');
1986   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
1987   l('        p_rule_id               IN      NUMBER,');
1988   l('        p_party_id              IN      NUMBER,');
1989   l('        p_search_ctx_id         IN      NUMBER,');
1990   l('      p_party_search_rec      IN      party_search_rec_type,');
1991   l('      p_party_site_list       IN      party_site_list,');
1992   l('      p_contact_list          IN      contact_list,');
1993   l('      p_contact_point_list    IN      contact_point_list,');
1994   l('        x_return_status         OUT     VARCHAR2,');
1995   l('        x_msg_count             OUT     NUMBER,');
1996   l('        x_msg_data              OUT     VARCHAR2');
1997   l(') IS');
1998   l('  l_search_ctx_id NUMBER;');
1999   l('  BEGIN');
2000 
2001 
2002   d(fnd_log.level_procedure,'get_party_score_details(+)');
2003   d(fnd_log.level_statement,'Rule ID','p_rule_id');
2004 
2005   l('     l_search_ctx_id:=p_search_ctx_id;');
2006   l('     get_score_details(p_init_msg_list,p_rule_id,p_party_id,');
2007   l('            p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,');
2008   l('            l_search_ctx_id,x_return_status,x_msg_count,x_msg_data);');
2009   d(fnd_log.level_procedure,'get_party_score_details(-)');
2010 
2011   l('  END;');
2012 
2013   l('PROCEDURE get_score_details (');
2014   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
2015   l('        p_rule_id               IN      NUMBER,');
2016   l('        p_party_id              IN      NUMBER,');
2020   l('        p_contact_point_list    IN      contact_point_list,');
2017   l('        p_party_search_rec      IN      party_search_rec_type,');
2018   l('        p_party_site_list       IN      party_site_list,');
2019   l('        p_contact_list          IN      contact_list,');
2021   l('        x_search_ctx_id         IN OUT  NUMBER,');
2022   l('        x_return_status         OUT     VARCHAR2,');
2023   l('        x_msg_count             OUT     NUMBER,');
2024   l('        x_msg_data              OUT     VARCHAR2');
2025   l(') IS');
2026   l('  CURSOR c_match_rule IS ');
2027   l('    SELECT COMPILATION_FLAG ');
2028   l('    FROM HZ_MATCH_RULES_VL ');
2029   l('    WHERE MATCH_RULE_ID = p_rule_id;');
2030   l('  l_cmp_flag VARCHAR2(1);');
2031   l('  BEGIN');
2032 
2033 
2034   d(fnd_log.level_procedure,'get_score_details(+)');
2035   d(fnd_log.level_statement,'Rule ID','p_rule_id');
2036 
2037 
2038   l('');
2039   l('    -- Initialize return status and message stack');
2040   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
2041   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
2042   l('      FND_MSG_PUB.initialize;');
2043   l('    END IF;');
2044   l('');
2045   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
2046   l('      -- No MATCH RULE FOUND');
2047   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
2048   l('      FND_MSG_PUB.ADD;');
2049   l('      RAISE FND_API.G_EXC_ERROR;');
2050   l('    END IF;');
2051 
2052   l('    OPEN c_match_rule;');
2053   l('    FETCH c_match_rule INTO l_cmp_flag;');
2054   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
2055   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
2056   l('      FND_MSG_PUB.ADD;');
2057   l('      RAISE FND_API.G_EXC_ERROR;');
2058   l('    END IF;');
2059 
2060   FIRST := TRUE;
2061   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
2062                FROM HZ_MATCH_RULES_VL
2063                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
2064                AND (nvl(COMPILATION_FLAG,'N') = 'C'
2065                OR MATCH_RULE_ID = p_rule_id)) LOOP
2066     l('    -- Code for Match rule '||RULE.RULE_NAME);
2067     IF FIRST THEN
2068       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2069       FIRST := FALSE;
2070     ELSE
2071       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2072     END IF;
2073     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
2074     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
2075     l('        FND_MSG_PUB.ADD;');
2076     l('        RAISE FND_API.G_EXC_ERROR;');
2077     l('      END IF;');
2078     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_score_details(');
2079     l('        p_rule_id,');
2080     l('        p_party_id, p_party_search_rec,p_party_site_list,');
2081     l('        p_contact_list, p_contact_point_list,x_search_ctx_id);');
2082   END LOOP;
2083   l('    END IF;');
2084   d(fnd_log.level_procedure,'get_score_details(-)');
2085 
2086   gen_exception_block;
2087   l('  END;');
2088   l('PROCEDURE get_party_for_search (');
2089   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
2090   l('        p_rule_id               IN      NUMBER,');
2091   l('        p_party_id              IN      NUMBER,');
2092   l('        x_party_search_rec      OUT NOCOPY party_search_rec_type,');
2093   l('        x_party_site_list       OUT NOCOPY party_site_list,');
2094   l('        x_contact_list          OUT NOCOPY contact_list,');
2095   l('        x_contact_point_list    OUT NOCOPY contact_point_list,');
2096   l('        x_return_status         OUT     VARCHAR2,');
2097   l('        x_msg_count             OUT     NUMBER,');
2098   l('        x_msg_data              OUT     VARCHAR2');
2099   l(') IS');
2100   l('  CURSOR c_match_rule IS ');
2101   l('    SELECT COMPILATION_FLAG ');
2102   l('    FROM HZ_MATCH_RULES_VL ');
2103   l('    WHERE MATCH_RULE_ID = p_rule_id;');
2104   l('  l_cmp_flag VARCHAR2(1);');
2105   l('  BEGIN');
2106 
2107 
2108   d(fnd_log.level_procedure,'get_party_for_search(+)');
2109   d(fnd_log.level_statement,'Rule ID','p_rule_id');
2110 
2111   l('');
2112   l('    -- Initialize return status and message stack');
2113   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
2114   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
2115   l('      FND_MSG_PUB.initialize;');
2116   l('    END IF;');
2117   l('');
2118   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
2119   l('      -- No MATCH RULE FOUND');
2120   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
2121   l('      FND_MSG_PUB.ADD;');
2122   l('      RAISE FND_API.G_EXC_ERROR;');
2123   l('    END IF;');
2124 
2125   l('    OPEN c_match_rule;');
2126   l('    FETCH c_match_rule INTO l_cmp_flag;');
2127   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
2128   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
2129   l('      FND_MSG_PUB.ADD;');
2130   l('      RAISE FND_API.G_EXC_ERROR;');
2131   l('    END IF;');
2132 
2133   FIRST := TRUE;
2134   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
2135                FROM HZ_MATCH_RULES_VL
2136                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
2137                AND (nvl(COMPILATION_FLAG,'N') = 'C'
2138                OR MATCH_RULE_ID = p_rule_id)) LOOP
2139     l('    -- Code for Match rule '||RULE.RULE_NAME);
2140     IF FIRST THEN
2141       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2142       FIRST := FALSE;
2143     ELSE
2144       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2145     END IF;
2146     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
2147     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
2151     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_party_for_search(');
2148     l('        FND_MSG_PUB.ADD;');
2149     l('        RAISE FND_API.G_EXC_ERROR;');
2150     l('      END IF;');
2152     l('        p_party_id, x_party_search_rec,x_party_site_list,');
2153     l('        x_contact_list, x_contact_point_list);');
2154   END LOOP;
2155   l('    END IF;');
2156   d(fnd_log.level_procedure,'get_party_for_search(-)');
2157 
2158   gen_exception_block;
2159   l('  END;');
2160 
2161   l('PROCEDURE get_search_criteria (');
2162   l('        p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
2163   l('        p_rule_id               IN      NUMBER,');
2164   l('        p_party_id              IN      NUMBER,');
2165   l('        p_party_site_ids        IN      IDList,');
2166   l('        p_contact_ids           IN      IDList,');
2167   l('        p_contact_pt_ids        IN      IDList,');
2168   l('        x_party_search_rec      OUT NOCOPY party_search_rec_type,');
2169   l('        x_party_site_list       OUT NOCOPY party_site_list,');
2170   l('        x_contact_list          OUT NOCOPY contact_list,');
2171   l('        x_contact_point_list    OUT NOCOPY contact_point_list,');
2172   l('        x_return_status         OUT     VARCHAR2,');
2173   l('        x_msg_count             OUT     NUMBER,');
2174   l('        x_msg_data              OUT     VARCHAR2');
2175   l(') IS');
2176   l('  CURSOR c_match_rule IS ');
2177   l('    SELECT COMPILATION_FLAG ');
2178   l('    FROM HZ_MATCH_RULES_VL ');
2179   l('    WHERE MATCH_RULE_ID = p_rule_id;');
2180   l('  l_cmp_flag VARCHAR2(1);');
2181   l('  BEGIN');
2182 
2183   d(fnd_log.level_procedure,'get_search_criteria(+)');
2184   d(fnd_log.level_statement,'Rule ID','p_rule_id');
2185 
2186   l('');
2187   l('    -- Initialize return status and message stack');
2188   l('    x_return_status := FND_API.G_RET_STS_SUCCESS;');
2189   l('    IF FND_API.to_Boolean(p_init_msg_list) THEN');
2190   l('      FND_MSG_PUB.initialize;');
2191   l('    END IF;');
2192   l('');
2193   l('    IF p_rule_id IS NULL OR p_rule_id = 0 THEN');
2194   l('      -- No MATCH RULE FOUND');
2195   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_MATCH_RULE'');');
2196   l('      FND_MSG_PUB.ADD;');
2197   l('      RAISE FND_API.G_EXC_ERROR;');
2198   l('    END IF;');
2199 
2200   l('    OPEN c_match_rule;');
2201   l('    FETCH c_match_rule INTO l_cmp_flag;');
2202   l('    IF c_match_rule%NOTFOUND OR l_cmp_flag <> ''C'' THEN');
2203   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
2204   l('      FND_MSG_PUB.ADD;');
2205   l('      RAISE FND_API.G_EXC_ERROR;');
2206   l('    END IF;');
2207 
2208   FIRST := TRUE;
2209   FOR RULE IN (SELECT MATCH_RULE_ID,RULE_NAME
2210                FROM HZ_MATCH_RULES_VL
2211                WHERE nvl(ACTIVE_FLAG,'Y')='Y'
2212                AND (nvl(COMPILATION_FLAG,'N') = 'C'
2213                OR MATCH_RULE_ID = p_rule_id)) LOOP
2214     l('    -- Code for Match rule '||RULE.RULE_NAME);
2215     IF FIRST THEN
2216       l('    IF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2217       FIRST := FALSE;
2218     ELSE
2219       l('    ELSIF p_rule_id='||RULE.MATCH_RULE_ID||' THEN ');
2220     END IF;
2221     l('      IF NOT HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.check_staged THEN');
2222     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_TX_NOT_STAGED'');');
2223     l('        FND_MSG_PUB.ADD;');
2224     l('        RAISE FND_API.G_EXC_ERROR;');
2225     l('      END IF;');
2226     l('      HZ_MATCH_RULE_'||RULE.MATCH_RULE_ID||'.get_search_criteria(');
2227     l('        p_party_id, p_party_site_ids, p_contact_ids, p_contact_pt_ids, x_party_search_rec,x_party_site_list,');
2228     l('        x_contact_list, x_contact_point_list);');
2229   END LOOP;
2230   l('    END IF;');
2231   d(fnd_log.level_procedure,'get_search_criteria(-)');
2232 
2233   gen_exception_block;
2234   l('  END;');
2235 
2236   /*l('  PROCEDURE enable_debug IS');
2237 
2238   l('  BEGIN');
2239   l('    g_debug_count := g_debug_count + 1;');
2240 
2241   l('    IF g_debug_count = 1 THEN');
2242   l('      IF fnd_profile.value(''HZ_API_FILE_DEBUG_ON'') = ''Y'' OR');
2243   l('         fnd_profile.value(''HZ_API_DBMS_DEBUG_ON'') = ''Y''');
2244   l('      THEN');
2245   l('        hz_utility_v2pub.enable_debug;');
2246   l('        g_debug := TRUE;');
2247   l('      END IF;');
2248   l('    END IF;');
2249   d('PKG: HZ_PARTY_SEARCH (+)');
2250   l('  END enable_debug;');
2251 
2252   l('  PROCEDURE disable_debug IS');
2253 
2254   l('  BEGIN');
2255 
2256   l('    IF g_debug THEN');
2257   d('PKG: HZ_PARTY_SEARCH (-)');
2258   l('      g_debug_count := g_debug_count - 1;');
2259 
2260   l('      IF g_debug_count = 0 THEN');
2261   l('        hz_utility_v2pub.disable_debug;');
2262   l('        g_debug := FALSE;');
2263   l('      END IF;');
2264   l('    END IF;');
2265 
2266   l('  END disable_debug;');
2267   */
2268 
2269   l('END;');
2270   -- UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'C' WHERE  COMPILATION_FLAG = 'T';
2271 
2272 END;
2273 
2274 /** Procedure to create score function for party sites, contacts and contact points ***/
2275 PROCEDURE add_score_function(p_entity VARCHAR2, p_rule_id NUMBER) IS
2276 FIRST boolean := TRUE;
2277 l_list VARCHAR2(255);
2278 
2279 BEGIN
2280   l('  FUNCTION GET_'||p_entity||'_SCORE (');
2281   l('       x_matchidx OUT NUMBER');
2282   FIRST := TRUE;
2283   FOR TX IN (
2284       SELECT f.staged_attribute_column
2285       FROM hz_trans_functions_vl f, hz_secondary_trans st,
2286            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
2287       WHERE sa.match_rule_id = p_rule_id
2291       AND a.entity_name= p_entity
2288       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
2289       AND st.function_id = f.function_id
2290       AND a.attribute_id = sa.attribute_id
2292       ORDER BY sa.attribute_id) LOOP
2293      l('      ,p_table_'||TX.STAGED_ATTRIBUTE_COLUMN||' VARCHAR2');
2294   END LOOP;
2295   l('  ) RETURN NUMBER IS');
2296   l('    maxscore NUMBER := 0;');
2297   l('    l_current_score NUMBER := 0;');
2298   l('  BEGIN');
2299   l('    x_matchidx := 0;');
2300   IF p_entity='PARTY_SITES' THEN
2301     l_list := 'g_party_site_stage_list';
2302   ELSIF p_entity='CONTACTS' THEN
2303     l_list := 'g_contact_stage_list';
2304   ELSIF p_entity='CONTACT_POINTS' THEN
2305     l_list := 'g_contact_pt_stage_list';
2306   END IF;
2307   l('    IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN');
2308   l('       RETURN l_current_score;');
2309   l('    END IF;');
2310 
2311   l('    FOR J IN 1..'||l_list||'.COUNT LOOP');
2312   l('      l_current_score := 0;');
2313   FOR SECATTRS IN (
2314         SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id
2315         FROM HZ_TRANS_ATTRIBUTES_VL a,
2316              HZ_MATCH_RULE_SECONDARY s
2317         WHERE s.match_rule_id = p_rule_id
2318         AND s.attribute_id = a.attribute_id
2319         AND a.entity_name = p_entity ) LOOP
2320       FIRST := TRUE;
2321       FOR SECTRANS IN (
2322           SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
2323                  TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
2324           FROM HZ_SECONDARY_TRANS s,
2325                HZ_TRANS_FUNCTIONS_VL f
2326           WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
2327           AND s.FUNCTION_ID = f.FUNCTION_ID
2328           ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
2329         IF FIRST THEN
2330            FIRST := FALSE;
2331            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
2332              l('      IF HZ_DQM_SEARCH_UTIL.is_similar_match('||l_list||'(J).'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2333                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||',(50000*(J-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2334            ELSE
2335              l('      IF HZ_DQM_SEARCH_UTIL.is_match('||l_list||'(J).'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2336                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',(50000*(J-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2337            END IF;
2338            l('        l_current_score:=l_current_score+ '||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
2339         ELSE
2340            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
2341              l('      ELSIF l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) || ' AND ');
2342              l('          HZ_DQM_SEARCH_UTIL.is_similar_match('||l_list||'(J).'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2343                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||',(50000*(J-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2344            ELSE
2345              l('      ELSIF -- l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) || ' AND ');
2346              l('          HZ_DQM_SEARCH_UTIL.is_match('||l_list||'(J).'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2347                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',(50000*(J-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2348            END IF;
2349            l('        l_current_score:=l_current_score+ '||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
2350         END IF;
2351         l('        IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN');
2352         l('          x_matchidx:=J;');
2353         l('          RETURN l_current_score;');
2354         l('        END IF;');
2355       END LOOP;
2356       l('      END IF;');
2357   END LOOP;
2358   l('      IF maxscore<l_current_score THEN');
2359   l('        maxscore:=l_current_score;');
2360   l('        x_matchidx:=J;');
2361   l('      END IF;');
2362   l('    END LOOP;');
2363   l('    RETURN maxscore;');
2364   l('  END;');
2365 END;
2366 
2367 /** Procedure to create score function for party sites, contacts and contact points ***/
2368 PROCEDURE add_insert_function(p_entity VARCHAR2, p_rule_id NUMBER) IS
2369 FIRST boolean := TRUE;
2370 l_list VARCHAR2(255);
2371 
2372 BEGIN
2373   l('  PROCEDURE INSERT_'||p_entity||'_SCORE (');
2374   l('       p_party_id IN  NUMBER');
2375   l('       ,p_record_id IN  NUMBER');
2376   l('       ,p_search_ctx_id IN  NUMBER');
2377   IF p_entity='PARTY' THEN
2378     l('       ,p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type');
2379     l('       ,p_stage_rec IN HZ_PARTY_STAGE.party_stage_rec_type');
2380   ELSIF p_entity='PARTY_SITES' THEN
2381     l('       ,p_search_rec IN HZ_PARTY_SEARCH.party_site_search_rec_type');
2382     l('       ,p_stage_rec IN HZ_PARTY_STAGE.party_site_stage_rec_type');
2383   ELSIF p_entity='CONTACTS' THEN
2384     l('       ,p_search_rec IN HZ_PARTY_SEARCH.contact_search_rec_type');
2385     l('       ,p_stage_rec IN HZ_PARTY_STAGE.contact_stage_rec_type');
2386   ELSIF p_entity='CONTACT_POINTS' THEN
2387     l('       ,p_search_rec IN HZ_PARTY_SEARCH.contact_point_search_rec_type');
2388     l('       ,p_stage_rec IN HZ_PARTY_STAGE.contact_pt_stage_rec_type');
2389   END IF;
2390   FIRST := TRUE;
2391   FOR TX IN (
2392       SELECT f.staged_attribute_column
2393       FROM hz_trans_functions_vl f, hz_secondary_trans st,
2394            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
2395       WHERE sa.match_rule_id = p_rule_id
2396       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
2397       AND st.function_id = f.function_id
2398       AND a.attribute_id = sa.attribute_id
2399       AND a.entity_name= p_entity
2403   l('        ,p_idx IN NUMBER) IS');
2400       ORDER BY sa.attribute_id) LOOP
2401      l('      ,p_table_'||TX.STAGED_ATTRIBUTE_COLUMN||' VARCHAR2');
2402   END LOOP;
2404   l('    l_current_score NUMBER:=0;');
2405   l('    l_score NUMBER;');
2406   l('    l_attrib_value VARCHAR2(2000);');
2407   l('  BEGIN');
2408   ldbg_s('Inside Calling Procedure - INSERT_'||p_entity||'_SCORE');
2409 
2410   FOR SECATTRS IN (
2411         SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id,
2412                USER_DEFINED_ATTRIBUTE_NAME
2413         FROM HZ_TRANS_ATTRIBUTES_VL a,
2414              HZ_MATCH_RULE_SECONDARY s
2415         WHERE s.match_rule_id = p_rule_id
2416         AND s.attribute_id = a.attribute_id
2417         AND a.entity_name = p_entity ) LOOP
2418       FIRST := TRUE;
2419       l('     l_score :=0;');
2420       FOR SECTRANS IN (
2421           SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
2422                  TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
2423           FROM HZ_SECONDARY_TRANS s,
2424                HZ_TRANS_FUNCTIONS_VL f
2425           WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
2426           AND s.FUNCTION_ID = f.FUNCTION_ID
2427           ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
2428         IF FIRST THEN
2429            FIRST := FALSE;
2430            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
2431              l('      IF HZ_DQM_SEARCH_UTIL.is_similar_match(p_stage_rec.'||
2432                SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2433                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2434            ELSE
2435 	       IF(l_purpose in('S','W') and SECATTRS.attribute_id=16) --6334571
2436 		THEN
2437              l('      IF HZ_DQM_SEARCH_UTIL.is_match(case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2438 			' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
2439 			' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then  p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2440 			' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2441 
2442 	       ELSE
2443 	        l('      IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2444                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2445 	       END IF;
2446            END IF;
2447            l('      l_score :='||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
2448            ldbg_sv('l_score is - ','l_score'  ) ;
2449         ELSE
2450            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
2451              l('      ELSIF l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) ||
2452                ' AND ');
2453              l('          HZ_DQM_SEARCH_UTIL.is_similar_match(p_stage_rec.'||
2454                SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2455                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2456            ELSE
2457 	      IF(l_purpose in('S','W') and SECATTRS.attribute_id=16) --6334571
2458 		THEN
2459 		 l('      ELSIF l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) || ' AND ');
2460                  l('          HZ_DQM_SEARCH_UTIL.is_match(case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2461 			' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
2462 			' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then  p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2463 			' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2464 		ELSE
2465              l('      ELSIF l_current_score<'|| ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100)) || ' AND ');
2466              l('          HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
2467                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',(50000*(p_idx-1)+'||SECTRANS.FUNCTION_ID||')) THEN');
2468 	       END IF;
2469            END IF;
2470            l('      l_score :='||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
2471            ldbg_sv('l_score is - ','l_score'  ) ;
2472         END IF;
2473       END LOOP;
2474       l('      END IF;');
2475       l('      IF l_score>0 THEN');
2476   ldbg_s('l_score > 0');
2477         l('      l_attrib_value := get_attrib_val(p_record_id,'''||SECATTRS.ENTITY_NAME||''','''||SECATTRS.ATTRIBUTE_NAME||''');');
2478   ldbg_s('Inserting into HZ_PARTY_SCORE_DTLS_GT ...');
2479         l('      INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,');
2480         l('                ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)');
2481         l('      VALUES (');
2482         l('           p_party_id,p_record_id,p_search_ctx_id,'''||
2483 	              SECATTRS.ATTRIBUTE_NAME||''','); --Bug No: 3820598
2484                       --replace(SECATTRS.USER_DEFINED_ATTRIBUTE_NAME,'''','''''')||''','); --Bug No: 3820598
2485         l('           '''||SECATTRS.ENTITY_NAME||''', p_search_rec.'||SECATTRS.ATTRIBUTE_NAME||',');
2486         l('           l_attrib_value,l_score);');
2487         ldbg_s('Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done');
2488       l('      END IF;');
2489   END LOOP;
2490   l('    NULL;');
2491   l('  END;');
2492 END;
2493 
2494 PROCEDURE add_get_attrib_func(p_rule_id NUMBER) IS
2495   Type charTab IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
2496   entList charTab;
2500 
2497   entity VARCHAR2(255);
2498 
2499 BEGIN
2501   l('  FUNCTION get_attrib_val(');
2502   l('      p_record_id 	NUMBER');
2503   l('     ,p_entity 	VARCHAR2');
2504   l('     ,p_attribute 	VARCHAR2');
2505   l('  ) RETURN VARCHAR2 IS');
2506   l('  l_matched_value VARCHAR2(2000);');
2507   l('  l_party_type VARCHAR2(255);');
2508   l('  BEGIN');
2509 
2510   entList(1) := 'PARTY';
2511   entList(2) := 'PARTY_SITES';
2512   entList(3) := 'CONTACTS';
2513   entList(4) := 'CONTACT_POINTS';
2514   FOR I IN 1..4 LOOP
2515     entity := entList(I);
2516     l('  IF p_entity = '''||entity||''' THEN');
2517     FOR SECATTRS IN (
2518         SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id,
2519                USER_DEFINED_ATTRIBUTE_NAME, SOURCE_TABLE, CUSTOM_ATTRIBUTE_PROCEDURE
2520         FROM HZ_TRANS_ATTRIBUTES_VL a,
2521              HZ_MATCH_RULE_SECONDARY s
2522         WHERE s.match_rule_id = p_rule_id
2523         AND s.attribute_id = a.attribute_id
2524         AND a.entity_name = entity) LOOP
2525       l('  IF p_attribute = '''||SECATTRS.ATTRIBUTE_NAME||''' THEN');
2526       IF entity = 'PARTY' THEN
2527         l('');
2528         IF SECATTRS.SOURCE_TABLE <> 'CUSTOM' AND SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
2529           l('      SELECT party_type INTO l_party_type ');
2530           l('      FROM HZ_PARTIES');
2531           l('      WHERE party_id = p_record_id;');
2532           l('      IF l_party_type = ''ORGANIZATION'' THEN');
2533           l('        SELECT '||SECATTRS.ATTRIBUTE_NAME ||
2534           ' INTO l_matched_value ');
2535           IF SECATTRS.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' or
2536              SECATTRS.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' or
2537              SECATTRS.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' THEN
2538             l('        FROM HZ_ORGANIZATION_PROFILES');
2539             l('        WHERE party_id = p_record_id ');
2540             l('        and effective_end_date is null');
2541           ELSE
2542             l('        FROM '||SECATTRS.SOURCE_TABLE);
2543             l('        WHERE party_id = p_record_id ');
2544           END IF;
2545           l('        and rownum = 1;');
2546 
2547           l('      ELSIF l_party_type = ''PERSON'' THEN');
2548           l('        SELECT '||SECATTRS.ATTRIBUTE_NAME ||
2549           ' INTO l_matched_value ');
2550           IF SECATTRS.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' or
2551              SECATTRS.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' or
2552              SECATTRS.SOURCE_TABLE = 'HZ_PERSON_PROFILES' THEN
2553             l('        FROM HZ_PERSON_PROFILES');
2554             l('        WHERE party_id = p_record_id ');
2555             l('        and effective_end_date is null ');
2556           ELSE
2557             l('        FROM '||SECATTRS.SOURCE_TABLE);
2558             l('        WHERE party_id = p_record_id ');
2559           END IF;
2560           l('        and rownum = 1;');
2561           l('      END IF;');
2562         ELSE
2563           l('     l_matched_value := '||SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE ||
2564             ' (p_record_id, p_entity,'''||SECATTRS.ATTRIBUTE_NAME||''',''Y'');');
2565         END IF;
2566         l('      RETURN l_matched_value;');
2567      ELSIF entity = 'PARTY_SITES' THEN
2568        IF SECATTRS.SOURCE_TABLE <> 'CUSTOM' AND SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
2569           l('     BEGIN');
2570           l('       SELECT '|| SECATTRS.SOURCE_TABLE||'.'||
2571                     SECATTRS.ATTRIBUTE_NAME);
2572           l('       INTO l_matched_value ');
2573           l('       FROM HZ_PARTY_SITES, HZ_LOCATIONS');
2574           l('       WHERE HZ_PARTY_SITES.party_site_id = p_record_id');
2575           l('       AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id and rownum=1;');
2576           l('     EXCEPTION');
2577           l('       WHEN NO_DATA_FOUND THEN');
2578           l('         l_matched_value := ''Err'';');
2579           l('     END;');
2580        ELSE
2581           l('     l_matched_value := '||SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE ||
2582             ' (p_record_id, p_entity,'''||SECATTRS.ATTRIBUTE_NAME||''',''Y'');');
2583        END IF;
2584        l('      RETURN l_matched_value;');
2585      ELSIF entity = 'CONTACTS' THEN
2586        IF SECATTRS.SOURCE_TABLE <> 'CUSTOM' AND SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
2587           l('     BEGIN');
2588           l('       SELECT '|| SECATTRS.SOURCE_TABLE||'.'||
2589                   SECATTRS.ATTRIBUTE_NAME);
2590           l('       INTO l_matched_value ');
2591           l('       FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES');
2592           l('       WHERE HZ_ORG_CONTACTS.org_contact_id = p_record_id');
2593           l('       AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
2594           l('       AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
2595           l('       AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = ''F''');
2596           l('       AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
2597           l('       AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id');
2598           l('       AND HZ_PERSON_PROFILES.effective_end_date IS NULL and rownum=1;');
2599           l('     EXCEPTION');
2600           l('       WHEN NO_DATA_FOUND THEN');
2601           l('         l_matched_value := ''Err'';');
2602           l('     END;');
2603        ELSE
2604           l('     l_matched_value := '||SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE ||
2605             ' (p_record_id, p_entity,'''||SECATTRS.ATTRIBUTE_NAME||''',''Y'');');
2606        END IF;
2607        l('      RETURN l_matched_value;');
2608      ELSIF entity = 'CONTACT_POINTS' THEN
2612           l('       FROM HZ_CONTACT_POINTS ');
2609        IF SECATTRS.SOURCE_TABLE <> 'CUSTOM' AND SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL THEN
2610           l('     BEGIN');
2611           l('       SELECT ' || SECATTRS.ATTRIBUTE_NAME || ' INTO l_matched_value ');
2613           l('       WHERE contact_point_id = p_record_id and rownum=1;');
2614           l('     EXCEPTION');
2615           l('       WHEN NO_DATA_FOUND THEN');
2616           l('         l_matched_value := ''Err'';');
2617           l('     END;');
2618        ELSE
2619           l('     l_matched_value := '||SECATTRS.CUSTOM_ATTRIBUTE_PROCEDURE ||
2620             ' (p_record_id, p_entity,'''||SECATTRS.ATTRIBUTE_NAME||''',''Y'');');
2621        END IF;
2622        l('      RETURN l_matched_value;');
2623      END IF;
2624      l('    END IF;');
2625    END LOOP;
2626    l('    NULL;');
2627    l('  END IF;');
2628  END LOOP;
2629  l('END;');
2630 END;
2631 
2632 
2633 PROCEDURE add_query_gen_func (p_entity VARCHAR2, p_rule_id NUMBER) IS
2634 
2635   l_num_primary NUMBER;
2636   l_list VARCHAR2(255);
2637   l_trans VARCHAR2(4000);
2638   l_query VARCHAR2(4000);
2639   FIRST BOOLEAN := TRUE;
2640   FIRST1 BOOLEAN := TRUE;
2641   l_den_section VARCHAR2(30) := null;
2642   tmp VARCHAR2(30);
2643 
2644 BEGIN
2645   l('  FUNCTION INIT_'||p_entity||'_QUERY(p_match_str VARCHAR2, x_denorm_str OUT VARCHAR2) RETURN VARCHAR2 IS');
2646   l('    l_contains_str VARCHAR2(32000); ');
2647   l('    l_contains_str_temp VARCHAR2(32000); ');
2648   l('    l_den_contains_str VARCHAR2(32000); ');
2649   l('    l_den_contains_str_temp VARCHAR2(32000); ');
2650   l('    l_filter_str VARCHAR2(4000) := null;');
2651   l('    l_prim_temp VARCHAR2(4000) := null;');
2652   l('    l_prim_temp_den VARCHAR2(4000) := null;');
2653   if l_purpose in('S','W') and p_entity='CONTACT_POINTS' then
2654     l('    TYPE CONTACT_PT_REC_TYPE IS RECORD (');
2655     l('    contact_pt_type		VARCHAR2(100)) ;');
2656 
2657     l('    TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;');
2658     l('    l_cnt_pt_type contact_pt_list;');
2659 
2660     l('    N NUMBER:=1;');
2661     l('    x_modify VARCHAR2(1);');
2662   end if;
2663   l('  BEGIN');
2664   d(fnd_log.level_procedure,'INIT_'||p_entity||'_QUERY ');
2665   l('    x_denorm_str := NULL;');
2666 
2667   -- Setup of contains str
2668   l_num_primary := 0;
2669   SELECT count(1) INTO l_num_primary
2670   FROM HZ_MATCH_RULE_PRIMARY p,
2671        HZ_TRANS_ATTRIBUTES_VL a
2672   WHERE p.match_rule_id = p_rule_id
2673   AND   p.ATTRIBUTE_ID = a.ATTRIBUTE_ID
2674   AND   ENTITY_NAME = p_entity;
2675 
2676   IF p_entity='PARTY_SITES' THEN
2677     l_list := 'g_party_site_stage_list';
2678     l_den_section := 'D_PS';
2679   ELSIF p_entity='CONTACTS' THEN
2680     l_list := 'g_contact_stage_list';
2681     l_den_section := 'D_CT';
2682   ELSIF p_entity='CONTACT_POINTS' THEN
2683     l_list := 'g_contact_pt_stage_list';
2684     l_den_section := 'D_CPT';
2685   END IF;
2686 
2687   l_query := null;
2688   IF l_num_primary >0 THEN
2689     l('');
2690     l('    -- Dynamic setup of party site contains str');
2691     l('    --');
2692     l('    -- For each primary transformation add to intermedia query if it ');
2693     l('    -- is not null');
2694     l('    FOR I IN 1..'||l_list||'.COUNT LOOP');
2695     l('      l_contains_str_temp := null;');
2696     l('      l_den_contains_str_temp := null;');
2697     l('      l_filter_str := null;');
2698     IF p_entity = 'CONTACT_POINTS' THEN
2699       l('      l_filter_str := ''(''||'||l_list||'(I).CONTACT_POINT_TYPE||'') '';');
2700     END IF;
2701 
2702     if l_purpose in('S','W') and p_entity='CONTACT_POINTS' then
2703         l('      if(l_cnt_pt_type.count>0) then');
2704         l('      x_modify := ''Y'';');
2705        l('      FOR J IN 1..l_cnt_pt_type.COUNT LOOP');
2706         l('      IF (l_cnt_pt_type(J).contact_pt_type=g_contact_pt_stage_list(I).CONTACT_POINT_TYPE) THEN');
2707          l('      x_modify := ''N'';');
2708         l('      END IF;');
2709        l('      END LOOP;');
2710        l('      if x_modify = ''Y'' then');
2711         l('      l_cnt_pt_type(N).contact_pt_type := g_contact_pt_stage_list(I).CONTACT_POINT_TYPE;');
2712         l('      N := N+1;');
2713        l('      end if;');
2714       l('      else');
2715         l('      l_cnt_pt_type(N).contact_pt_type := g_contact_pt_stage_list(I).CONTACT_POINT_TYPE;');
2716         l('      N := N+1;');
2717       l('      end if;');
2718     end if;
2719 
2720     FIRST := TRUE;
2721     FOR PRIMATTRS IN (
2722       SELECT a.ATTRIBUTE_ID, PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME,nvl(FILTER_FLAG,'N') FILTER_FLAG,
2723              nvl(DENORM_FLAG,'N') DENORM_FLAG
2724       FROM HZ_TRANS_ATTRIBUTES_VL a,
2725            HZ_MATCH_RULE_PRIMARY p
2726       WHERE p.match_rule_id = p_rule_id
2727       AND p.attribute_id = a.attribute_id
2728       AND a.ENTITY_NAME = p_entity) LOOP
2729       l('');
2730       l('      -- Setup query string for '||PRIMATTRS.ATTRIBUTE_NAME);
2731       l('      l_prim_temp := null;');
2732       l('      l_prim_temp_den := null;');
2733       FIRST1 := TRUE;
2734       FOR PRIMTRANS IN (
2735         SELECT f.STAGED_ATTRIBUTE_COLUMN, f.TRANSFORMATION_NAME, nvl(f.PRIMARY_FLAG,'N') PRIMARY_FLAG
2736         FROM HZ_TRANS_FUNCTIONS_VL f,
2737            HZ_PRIMARY_TRANS pt
2738       WHERE pt.PRIMARY_ATTRIBUTE_ID = PRIMATTRS.PRIMARY_ATTRIBUTE_ID
2739       AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
2740         IF PRIMATTRS.FILTER_FLAG <> 'Y' THEN
2741 
2742           IF PRIMTRANS.PRIMARY_FLAG = 'Y' THEN
2743             tmp := '''A'||PRIMATTRS.ATTRIBUTE_ID||'''';
2744           ELSE
2745             tmp := 'NULL';
2746           END IF;
2747 
2751             ','||tmp||',l_prim_temp);');
2748           l('      HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
2749           l('            '||l_list||'(I).'||
2750             PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
2752           IF PRIMATTRS.DENORM_FLAG = 'Y' THEN
2753             l('      HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
2754             l('            '||l_list||'(I).'||
2755               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
2756               ','''||l_den_section||''',l_prim_temp_den);');
2757           END IF;
2758         ELSE
2759           l('      HZ_DQM_SEARCH_UTIL.add_filter( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
2760           l('             '||l_list||'(I).'||
2761             PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
2762             ',''A'||PRIMATTRS.ATTRIBUTE_ID||''',l_filter_str);');
2763         END IF;
2764         IF FIRST1 THEN
2765           l_trans := '('||l_list||'(1).'||
2766                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' '' || '||
2767                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||'||l_list||'(1).'||
2768                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
2769           FIRST1 := FALSE;
2770         ELSE
2771           l_trans := l_trans|| ' OR ('|| l_list||'(1).'||
2772                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' '' ||'||
2773                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||'||l_list||'(1).'||
2774                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
2775         END IF;
2776       END LOOP;
2777 /*
2778       IF FIRST THEN
2779         l_query := '('||l_trans||')';
2780         FIRST := FALSE;
2781       ELSE
2782         l_query := l_query || ' AND (' || l_trans||')';
2783       END IF;
2784 */
2785       IF PRIMATTRS.FILTER_FLAG <> 'Y' THEN
2786         IF PRIMATTRS.DENORM_FLAG = 'Y' THEN
2787           l('      HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp_den, '' AND '', l_den_contains_str_temp);');
2788         END IF;
2789         l('      HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, '' AND '', l_contains_str_temp);');
2790       END IF;
2791     END LOOP;
2792 
2793     IF p_entity='PARTY_SITES' THEN
2794       g_party_site_query := l_query;
2795     ELSIF p_entity='CONTACTS' THEN
2796       g_contact_query := l_query;
2797     ELSIF p_entity='CONTACT_POINTS' THEN
2798       g_cpt_query := l_query;
2799     END IF;
2800     l('');
2801     l('      HZ_DQM_SEARCH_UTIL.add_search_record(l_contains_str_temp, '||
2802       ' 	 l_filter_str, l_contains_str);');
2803     l('      HZ_DQM_SEARCH_UTIL.add_search_record(l_den_contains_str_temp, '||
2804       ' 	 null, l_den_contains_str);');
2805     if l_purpose in('S','W') and p_entity='CONTACT_POINTS' then
2806      	l('IF N>1 THEN ');
2807      	l(' distinct_search_cpt_types := N-1;');
2808      	l('ELSE');
2809         l(' distinct_search_cpt_types := N;');
2810 		l('END IF;');
2811       ldbg_sv('distinct_search_cpt_types is - ','distinct_search_cpt_types'  ) ;
2812     end if;
2813 
2814     l('    END LOOP;');
2815     l('    -- Add the search criteria to query string');
2816     l('    IF lengthb(l_contains_str) > 4000 THEN');
2817     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_SEARCH_CRIT_LARGE_ERROR'');');
2818     l('        FND_MESSAGE.SET_TOKEN(''ENTITY'','''||p_entity||''');');
2819     l('        FND_MSG_PUB.ADD;');
2820     l('        RAISE FND_API.G_EXC_ERROR;');
2821     l('    END IF;');
2822     l('    x_denorm_str := l_den_contains_str;');
2823     l('    RETURN l_contains_str;');
2824     l('  END;');
2825     l('');
2826   ELSE
2827     l('    RETURN NULL;');
2828     l('  END;');
2829     l('');
2830   END IF;
2831 END;
2832 
2833 PROCEDURE get_column_list (
2834 	p_rule_id	IN	NUMBER,
2835  	p_entity	IN	VARCHAR2,
2836 	x_select_list	OUT NOCOPY	VARCHAR2,
2837 	x_param_list	OUT NOCOPY	VARCHAR2,
2838 	x_into_list	OUT NOCOPY	VARCHAR2) IS
2839 
2840 FIRST BOOLEAN;
2841 BEGIN
2842   x_select_list := '';
2843   x_into_list := '';
2844   x_param_list := '';
2845 
2846   FIRST := TRUE;
2847   FOR TX IN (
2848       SELECT f.staged_attribute_column, a.attribute_name, f.procedure_name
2849       FROM hz_trans_functions_vl f, hz_secondary_trans st,
2850            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
2851       WHERE sa.match_rule_id = p_rule_id
2852       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
2853       AND st.function_id = f.function_id
2854       AND a.attribute_id = sa.attribute_id
2855       AND a.entity_name= p_entity
2856       ORDER BY sa.attribute_id) LOOP
2857      --- Modified for Bug 4016594
2858      IF TX.ATTRIBUTE_NAME = 'DUNS_NUMBER_C' AND upper(TX.PROCEDURE_NAME) = 'HZ_TRANS_PKG.EXACT' THEN
2859        x_select_list := x_select_list || ', lpad(rtrim('||TX.STAGED_ATTRIBUTE_COLUMN||'),9,chr('||ascii('0')||'))';
2860      ELSE
2861        x_select_list := x_select_list || ', '||TX.STAGED_ATTRIBUTE_COLUMN;
2862      END IF;
2863 
2864      x_into_list := x_into_list || ', '||'l_'||TX.STAGED_ATTRIBUTE_COLUMN;
2865      IF FIRST AND p_entity = 'PARTY' THEN
2866        x_param_list := 'l_'||TX.STAGED_ATTRIBUTE_COLUMN;
2867        FIRST := FALSE;
2868      ELSE
2869        x_param_list := x_param_list||',l_'||TX.STAGED_ATTRIBUTE_COLUMN;
2870      END IF;
2871   END LOOP;
2872   RETURN;
2873 END;
2874 
2875 /**
2876 * Private procedure to generate the body of the Public Match Rule API
2877 * for a match rule. Package Name is:
2878 *    HZ_MATCH_RULE_<p_rule_id>
2879 *
2880 * This procedure generates the code required to execute searches
2881 *
2882 **/
2883 PROCEDURE gen_pkg_body (
2884         p_pkg_name      IN      VARCHAR2,
2885         p_rule_id	IN	NUMBER
2886 ) IS
2887 
2888   -- Local Variables
2892   l_match_str VARCHAR2(255);
2889   FIRST boolean;
2890   FIRST1 boolean;
2891   UPSTMT boolean;
2893   l_attrib_cnt NUMBER;
2894   l_party_filter VARCHAR2(1) := null;
2895   l_ps_filter VARCHAR2(1) := null;
2896   l_contact_filter VARCHAR2(1) := null;
2897   l_cpt_filter VARCHAR2(1) := null;
2898   l_num_primary NUMBER;
2899   l_num_secondary NUMBER;
2900   l_ent VARCHAR2(30);
2901   l_max_score NUMBER;
2902   l_match_threshold NUMBER;
2903 
2904   TYPE NumberList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
2905   TYPE CharList IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
2906   attribList NumberList;
2907 
2908   l_party_filter_str VARCHAR2(2000);
2909   l_dyn_party_filter_str VARCHAR2(2000);
2910   l_p_select_list VARCHAR2(1000);
2911   l_p_param_list VARCHAR2(1000);
2912   l_p_into_list VARCHAR2(1000);
2913   l_ps_select_list VARCHAR2(1000);
2914   l_ps_param_list VARCHAR2(1000);
2915   l_ps_into_list VARCHAR2(1000);
2916   l_c_select_list VARCHAR2(1000);
2917   l_c_param_list VARCHAR2(1000);
2918   l_c_into_list VARCHAR2(1000);
2919   l_cpt_select_list VARCHAR2(1000);
2920   l_cpt_param_list VARCHAR2(1000);
2921   l_cpt_into_list VARCHAR2(1000);
2922   cnt NUMBER;
2923   l_party_filt_bind CharList;
2924   party_binds CharList;
2925   l_cpt_type VARCHAR2(255);
2926   l_trans VARCHAR2(4000);
2927   l_auto_merge_score NUMBER;
2928   tmp VARCHAR2(30);
2929   l_party_name_score VARCHAR2(255);
2930   l_party_level_cnt NUMBER;
2931   l_rule_type VARCHAR2(30); ---Code Change for Match Rule Set
2932 
2933   l_entity_score_lh VARCHAR2(4000); --Bug No: 4162385
2934   l_entity_score_rh VARCHAR2(4000); --Bug No: 4162385
2935 
2936 BEGIN
2937 
2938   -- Query match thresholds and search type
2939   SELECT RULE_PURPOSE, MATCH_SCORE, nvl(AUTO_MERGE_SCORE,99999), decode(MATCH_ALL_FLAG,'Y',' AND ',' OR '),
2940   NVL(match_rule_type,'SINGLE') ---Code Change for Match Rule Set
2941   INTO l_purpose, l_match_threshold, l_auto_merge_score, l_match_str,l_rule_type---Code Change for Match Rule Set
2942   FROM HZ_MATCH_RULES_VL
2943   WHERE match_rule_id = p_rule_id;
2944 
2945   SELECT nvl(SUM(SCORE),1) INTO l_max_score
2946   FROM HZ_MATCH_RULE_SECONDARY
2947   WHERE match_rule_id = p_rule_id;
2948 
2949   --bug 5878732
2950   IF  l_purpose in ('S','W') AND Nvl(l_match_threshold,0)<>0 THEN
2951   l_match_threshold:= ROUND((l_match_threshold/100) *  l_max_score);
2952   END IF;
2953 
2954   l('CREATE or REPLACE PACKAGE BODY ' || p_pkg_name || ' AS');
2955   l('/*=======================================================================+');
2956   l(' |  Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|');
2957   l(' |                          All rights reserved.                         |');
2958   l(' +=======================================================================+');
2959   l(' | NAME');
2960   l(' |      ' || p_pkg_name);
2961   l(' |');
2962   l(' | DESCRIPTION');
2963   l(' |');
2964   l(' | Compiled by the HZ Match Rule Compiler');
2965   l(' | -- Do Not Modify --');
2966   l(' |');
2967   l(' | PUBLIC PROCEDURES');
2968   l(' |    find_parties');
2969   l(' |    get_matching_party_sites');
2970   l(' |    get_matching_contacts');
2971   l(' |    get_matching_contact_points');
2972   l(' |    get_score_details');
2973   l(' |    ');
2974   l(' | HISTORY');
2975   l(' |      '||TO_CHAR(SYSDATE,'DD-MON-YYYY') || ' Generated by HZ Match Rule Compiler');
2976   l(' |');
2977   l(' *=======================================================================*/');
2978 
2979   IF l_purpose = 'S'
2980   THEN
2981       l('');
2982       l('-- ==========================================================================================');
2983       l('-- ============MATCH RULE COMPILER GENERATED CODE FOR SEARCH MATCH RULES ====================');
2984       l('-- ==========================================================================================');
2985       l('');
2986   ELSIF l_purpose = 'D'
2987   THEN
2988       l('');
2989       l('-- ==========================================================================================');
2990       l('-- ============MATCH RULE COMPILER GENERATED CODE FOR DUP IDENTIFICATION MATCH RULES ========');
2991       l('-- ==========================================================================================');
2992       l('');
2993    ELSIF l_purpose = 'W'
2994   THEN
2995       l('');
2996       l('-- ==========================================================================================');
2997       l('-- ============MATCH RULE COMPILER GENERATED CODE FOR WEB SERVICE  MATCH RULES ========');
2998       l('-- ==========================================================================================');
2999       l('');
3000   END IF;
3001 
3002   l('  TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;');
3003   l('  call_order vlisttype;');
3004   l('  call_max_score HZ_PARTY_SEARCH.IDList;');
3005   l('  call_type vlisttype;');
3006   l('  g_party_stage_rec  HZ_PARTY_STAGE.party_stage_rec_type;');
3007   l('  g_party_site_stage_list  HZ_PARTY_STAGE.party_site_stage_list;');
3008   l('  g_contact_stage_list  HZ_PARTY_STAGE.contact_stage_list;');
3009   l('  g_contact_pt_stage_list  HZ_PARTY_STAGE.contact_pt_stage_list;');
3010   l('  g_mappings  HZ_PARTY_SEARCH.IDList;');
3011   l('  g_max_id NUMBER:=2000000000;');
3012   l('  g_other_party_level_attribs BOOLEAN;');
3013   l('');
3014   l('  g_debug_count                        NUMBER := 0;');
3015   --l('  g_debug                              BOOLEAN := FALSE;');
3016   l('  g_score_until_thresh BOOLEAN:=false;');
3017   l(' ');
3018   l('  g_thres_score NUMBER:=1000;');
3019   l('  g_ps_den_only BOOLEAN;');
3020   l('  g_index_owner VARCHAR2(255);');
3021   l('  distinct_search_cpt_types NUMBER ; ');
3025 
3022   --l('  PROCEDURE enable_debug;');
3023   --l('  PROCEDURE disable_debug;');
3024 
3026   IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
3027 	ldbg_procedure;
3028   l('FUNCTION check_estimate_hits (');
3029   l('  p_entity VARCHAR2,');
3030   l('  p_contains_str VARCHAR2) RETURN NUMBER IS');
3031   l('  ');
3032   l('  ustatus VARCHAR2(255);');
3033   l('  dstatus VARCHAR2(255);');
3034   l('  l_bool BOOLEAN;');
3035   l('  l_hits NUMBER := 0;'); --Bug No: 6048573
3036   l('BEGIN');
3037   l('  IF g_index_owner IS NULL THEN');
3038   l('    l_bool := fnd_installation.GET_APP_INFO(''AR'',ustatus,dstatus,g_index_owner);');
3039   l('  END IF;');
3040   l('  IF p_entity=''PARTY'' THEN');
3041   l('');
3042   l('    l_hits :=  CTX_QUERY.count_hits(');
3043   l('        g_index_owner||''.''||''HZ_STAGE_PARTIES_T1'',p_contains_str, false);');
3044   l('  ELSIF p_entity=''PARTY_SITES'' THEN');
3045   l('    l_hits :=  CTX_QUERY.count_hits(');
3046   l('        g_index_owner||''.''||''HZ_STAGE_PARTY_SITES_T1'',p_contains_str, false);');
3047   l('  ELSIF p_entity=''CONTACTS'' THEN');
3048   l('    l_hits :=  CTX_QUERY.count_hits(');
3049   l('        g_index_owner||''.''||''HZ_STAGE_CONTACT_T1'',p_contains_str, false);');
3050   l('  ELSIF p_entity=''CONTACT_POINTS'' THEN');
3051   l('    l_hits :=  CTX_QUERY.count_hits(');
3052   l('        g_index_owner||''.''||''HZ_STAGE_CPT_T1'',p_contains_str, false);');
3053   l('  END IF;');
3054   l('  RETURN floor(l_hits/2) ;'); --Bug No: 6048573
3055   l('  ');
3056   l('');
3057 --bug 4959719 start
3058   l('  exception');
3059   l('    when others then');
3060   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
3061   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
3062   l('        FND_MSG_PUB.ADD;');
3063   l('        RAISE FND_API.G_EXC_ERROR;');
3064    --Start Bug No: 3032742.
3065   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
3066   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
3067   l('        FND_MSG_PUB.ADD;');
3068   l('        RAISE FND_API.G_EXC_ERROR;');
3069   --End Bug No : 3032742.
3070   l('      else ');
3071   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
3072   l('      end if;');
3073 --bug 4959719 end
3074   l('END;');
3075 
3076   -- VJN Introduced function for Bug 3979089
3077   l('');
3078   l('');
3079   l('FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)');
3080   l('RETURN VARCHAR2');
3081   l('IS');
3082   l('p_person_restrict_sql VARCHAR2(32767);');
3083   l('p_restrict1_sql VARCHAR2(32767);');
3084   l('p_final_restrict_sql VARCHAR2(32767);');
3085   l('BEGIN');
3086   l('   p_final_restrict_sql := p_restrict_sql ; ');
3087   l('   IF p_restrict_sql IS NOT NULL');
3088   l('   THEN');
3089   l('     IF instrb(p_restrict_sql, ''STAGE.'') > 0');
3090   l('     THEN');
3091   l('        p_restrict1_sql := replace( p_restrict_sql, ''STAGE.'', ''stage1.'');');
3092   l('     ELSIF instrb(p_restrict_sql, ''stage.'') > 0');
3093   l('     THEN');
3094   l('           p_restrict1_sql := replace( p_restrict_sql, ''stage.'', ''stage1.'');');
3095   l('     END IF;');
3096 
3097   l('    p_person_restrict_sql := ''exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r'' ');
3098   l('                               ||' || ' '' where oc.org_contact_id = stage.org_contact_id and'' ');
3099   l('                               ||' || ' '' r.relationship_id = oc.party_relationship_id'' ');
3100   l('                               ||' || ' '' and r.subject_type = ''''PERSON'''' AND r.object_type = ''''ORGANIZATION'''' '' ');
3101   l('                               ||' || ' '' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id'' ');
3102   l('                               ||' || ' '' and '' || p_restrict1_sql || '' ) )'' ; ');
3103 
3104   l('p_final_restrict_sql := ''((stage.org_contact_id is null and '' || p_restrict_sql || '') or (stage.org_contact_id is not null and '' ');
3105   l('                           || p_person_restrict_sql ||  '' ))''; ');
3106   l(' END IF;');
3107   l(' return p_final_restrict_sql ;');
3108   l('END;');
3109 
3110   /***********************************************************************
3111   * Private procedure to map IDs greater than the max allowed by PLSQL
3112   * Index-by tables.
3113   ************************************************************************/
3114   l('  FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS');
3115   l('    l_newidx NUMBER;');
3116   l('  BEGIN ');
3117   ldbg_s('-----------------','calling the function map_id');
3118   ldbg_sv('argument in_id = ', 'in_id');
3119 
3120   l('    IF in_id<g_max_id THEN ');
3121   l('      RETURN in_id;');
3122   l('    ELSE');
3123   l('      FOR I in 1..g_mappings.COUNT LOOP');
3124   l('        IF in_id = g_mappings(I) THEN');
3125   l('          RETURN (g_max_id+I);');
3126   l('        END IF;');
3127   l('      END LOOP;');
3128   l('      l_newidx := g_mappings.COUNT+1;');
3129   l('      g_mappings(l_newidx) := in_id;');
3130   l('      RETURN (g_max_id+l_newidx);');
3131   l('    END IF;');
3132   l('  END;');
3133 
3134   l('  FUNCTION GET_PARTY_SCORE ');
3135   FIRST := TRUE;
3136   FOR TX IN (
3137       SELECT f.staged_attribute_column
3138       FROM hz_trans_functions_vl f, hz_secondary_trans st,
3139            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
3140       WHERE sa.match_rule_id = p_rule_id
3141       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
3142       AND st.function_id = f.function_id
3143       AND a.attribute_id = sa.attribute_id
3144       AND a.entity_name= 'PARTY'
3145       ORDER BY sa.attribute_id) LOOP
3146      IF FIRST THEN
3147        l('       (');
3148        l('       p_table_'||TX.staged_attribute_column||' VARCHAR2');
3149        FIRST := FALSE;
3150      ELSE
3151        l('      ,p_table_'||TX.staged_attribute_column||' VARCHAR2');
3152      END IF;
3153   END LOOP;
3154   IF FIRST THEN
3155     l('   RETURN NUMBER IS');
3156   ELSE
3157     l('  ) RETURN NUMBER IS');
3158   END IF;
3159   l('    total NUMBER := 0;');
3160   l('  BEGIN');
3161   ldbg_s('-----------------','calling the function get_party_score');
3162   d(fnd_log.level_procedure,'GET_PARTY_SCORE  ');
3163   l('    IF g_score_until_thresh AND (total)>=g_thres_score THEN');
3164   ldbg_sv('get_party_score returned total = ', 'total');
3165   l('      RETURN total;');
3166   l('    END IF;');
3167   FOR SECATTRS IN (
3168         SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id
3169         FROM HZ_TRANS_ATTRIBUTES_VL a,
3170              HZ_MATCH_RULE_SECONDARY s
3171         WHERE s.match_rule_id = p_rule_id
3172         AND s.attribute_id = a.attribute_id
3173         AND a.entity_name = 'PARTY') LOOP
3174       FIRST := TRUE;
3175       FOR SECTRANS IN (
3176           SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
3177                  TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
3178           FROM HZ_SECONDARY_TRANS s,
3179                HZ_TRANS_FUNCTIONS_VL f
3180           WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
3181           AND s.FUNCTION_ID = f.FUNCTION_ID
3182           ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
3183         IF FIRST THEN
3184            FIRST := FALSE;
3185            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
3186              l('    IF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3187                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
3188            ELSE
3189 		IF(l_purpose IN ('S','W') and SECATTRS.attribute_id=16) --6334571
3190 		THEN
3191                         l('    IF HZ_DQM_SEARCH_UTIL.is_match(case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3192 			' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
3193 			' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then  p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3194 			' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||SECTRANS.FUNCTION_ID||') THEN');
3195 
3196 
3197          	ELSE
3198              l('    IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3199                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
3200 	       END IF;
3201            END IF;
3202         ELSE
3203            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
3204              l('    ELSIF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3205                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
3206            ELSE
3207 	   		IF(l_purpose IN ('S','W') and SECATTRS.attribute_id=16) --6334571
3208 			THEN
3209 
3210 			l('    ELSIF HZ_DQM_SEARCH_UTIL.is_match(case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3211 			' else ltrim(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||
3212 			' case(instr(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',''%'')) when 0 then  p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3213 			' else ltrim( p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||',chr(48)) END'||','||SECTRANS.FUNCTION_ID||') THEN');
3214 
3215 			ELSE
3216 
3217              l('    ELSIF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
3218                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
3219 		       END IF;
3220            END IF;
3221         END IF;
3222         l('      total := total+'||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
3223         l('      IF g_score_until_thresh AND (total)>=g_thres_score THEN ');
3224 	ldbg_sv('get_party_score returned total = ', 'total');
3225         l('        RETURN total;');
3226         l('      END IF;');
3227       END LOOP;
3228       l('    END IF;');
3229   END LOOP;
3230   l('    RETURN total;');
3231   l('  END;');
3232 
3233   add_score_function('PARTY_SITES',p_rule_id);
3234   add_score_function('CONTACTS',p_rule_id);
3235   add_score_function('CONTACT_POINTS',p_rule_id);
3236   add_get_attrib_func(p_rule_id);
3237   add_insert_function('PARTY',p_rule_id);
3238   add_insert_function('PARTY_SITES',p_rule_id);
3239   add_insert_function('CONTACTS',p_rule_id);
3240   add_insert_function('CONTACT_POINTS',p_rule_id);
3241 
3242   --- VJN Introduced for conditional Word Replacements
3243   --- Populate the global condition record before doing the mapping
3244   --- so that mapping takes into account conditional word replacements if any
3245   generate_ent_cond_pop_rec_proc('PARTY', p_rule_id);
3246   l('');
3247   generate_ent_cond_pop_rec_proc('PARTY_SITES', p_rule_id);
3248   l('');
3249   generate_ent_cond_pop_rec_proc('CONTACTS', p_rule_id);
3250   l('');
3251   generate_ent_cond_pop_rec_proc('CONTACT_POINTS', p_rule_id);
3252   l('');
3253 
3254 
3255   l('  PROCEDURE init_score_context (');
3256   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type:=');
3257   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
3258   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list:=');
3259   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
3260   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list:= ');
3261   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
3262   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list:=');
3263   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST');
3264   l('  ) IS');
3265   l('   l_dummy NUMBER;');
3266   l('  BEGIN');
3267   ldbg_s('-----------------','calling the procedure init_score_context');
3268   ldbg_s('In init_score_context calling the Map procedures');
3269   l('    -- Transform search criteria');
3270   l('    HZ_TRANS_PKG.clear_globals;');
3271   l('    MAP_PARTY_REC(FALSE,p_party_search_rec, l_dummy, g_party_stage_rec);');
3272   l('    MAP_PARTY_SITE_REC(FALSE,p_party_site_list, l_dummy, g_party_site_stage_list);');
3273   l('    MAP_CONTACT_REC(FALSE,p_contact_list, l_dummy, g_contact_stage_list);');
3274   l('    MAP_CONTACT_POINT_REC(FALSE,p_contact_point_list, l_dummy, g_contact_pt_stage_list);');
3275   l('');
3276   l('  END;');
3277 
3278 
3279   l('  FUNCTION init_search(');
3280   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type:=');
3281   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
3282   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list:=');
3283   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
3284   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list:= ');
3285   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
3286   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list:=');
3287   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,');
3288   l('      p_match_type            IN  VARCHAR2,');
3289   l('      x_party_max_score       OUT NUMBER,');
3290   l('      x_ps_max_score       OUT NUMBER,');
3291   l('      x_contact_max_score       OUT NUMBER,');
3292   l('      x_cpt_max_score       OUT NUMBER');
3293   l('  ) RETURN NUMBER IS ');
3294   l('  l_entered_max_score NUMBER:=0;');
3295   l('  l_ps_entered_max_score NUMBER:=0;');
3296   l('  l_ct_entered_max_score NUMBER:=0;');
3297   l('  l_cpt_entered_max_score NUMBER:=0;');
3298   l('  vlist vlisttype;');
3299   l('  maxscore HZ_PARTY_SEARCH.IDList;');
3300   l('  l_name VARCHAR2(200);');
3301   l('  l_idx NUMBER; ');
3302   l('  l_num NUMBER; ');
3303   l('  total NUMBER; ');
3304   l('  threshold NUMBER; ');
3305   l('  BEGIN');
3306   ldbg_s('-----------------','calling the function init_search');
3307   l('    IF NOT check_prim_cond (p_party_search_rec,');
3308   l('                            p_party_site_list,');
3309   l('                            p_contact_list,');
3310   l('                            p_contact_point_list) THEN');
3311   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_PRIMARY_COND'');');
3312   l('      FND_MSG_PUB.ADD;');
3313   l('      RAISE FND_API.G_EXC_ERROR;');
3314   l('    END IF;');
3315   IF l_max_score=1 THEN
3316     ldbg_s('In init_search calling util package set_no_score');
3317     l('    HZ_DQM_SEARCH_UTIL.set_no_score;');
3318   ELSE
3319     ldbg_s('In init_search calling util package set_score');
3320     l('    HZ_DQM_SEARCH_UTIL.set_score;');
3321   END IF;
3322   l('    g_mappings.DELETE;');
3323   l('    g_party_site_stage_list.DELETE;');
3324   l('    g_contact_stage_list.DELETE;');
3325   l('    g_contact_pt_stage_list.DELETE;');
3326   l('    call_order.DELETE;');
3327   l('    call_max_score.DELETE;');
3328   l('    HZ_DQM_SEARCH_UTIL.new_search;');
3329   l('    HZ_TRANS_PKG.set_party_type(p_party_search_rec.PARTY_TYPE);');
3330   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
3331   l('');
3332   ldbg_s('In init_search calling the Map procedures');
3333   l('    -- Transform search criteria');
3334   -- VJN Introduced for conditional Word Replacements
3335   --- Populate the global condition record before doing the mapping
3336   --- so that mapping takes into account conditional word replacements if any
3337   l('POP_PARTY_COND_REC(p_party_search_rec);');
3338   l('');
3339   l('POP_PARTY_SITES_COND_REC(p_party_site_list);');
3340   l('');
3341   l('POP_CONTACTS_COND_REC(p_contact_list);');
3342   l('');
3343   l('POP_CONTACT_POINTS_COND_REC(p_contact_point_list);');
3344   l('');
3345 
3346   l('    MAP_PARTY_REC(TRUE,p_party_search_rec, l_entered_max_score, g_party_stage_rec);');
3347   l('    MAP_PARTY_SITE_REC(TRUE,p_party_site_list, l_ps_entered_max_score, g_party_site_stage_list);');
3348   l('    MAP_CONTACT_REC(TRUE,p_contact_list, l_ct_entered_max_score, g_contact_stage_list);');
3352   ldbg_s('In init_search determining call order of entities');
3349   l('    MAP_CONTACT_POINT_REC(TRUE,p_contact_point_list, l_cpt_entered_max_score, g_contact_pt_stage_list);');
3350   l('');
3351   l('      ');
3353   l('    l_idx := l_entered_max_score+1;');
3354   l('    vlist (l_idx) := ''PARTY'';');
3355   l('    maxscore (l_idx) := l_entered_max_score;');
3356 
3357   l('    l_idx := l_ps_entered_max_score+1;');
3358   l('    WHILE vlist.EXISTS(l_idx) LOOP');
3359   l('      l_idx := l_idx+1;');
3360   l('    END LOOP;');
3361   l('    vlist (l_idx) := ''PARTY_SITE'';');
3362   l('    maxscore (l_idx) := l_ps_entered_max_score;');
3363   l('');
3364   l('    l_idx := l_ct_entered_max_score+1;');
3365   l('    WHILE vlist.EXISTS(l_idx) LOOP');
3366   l('      l_idx := l_idx+1;');
3367   l('    END LOOP;');
3368   l('    vlist (l_idx) := ''CONTACT'';');
3369   l('    maxscore (l_idx) := l_ct_entered_max_score;');
3370   l('');
3371   l('    l_idx := l_cpt_entered_max_score+1;');
3372   l('    WHILE vlist.EXISTS(l_idx) LOOP');
3373   l('      l_idx := l_idx+1;');
3374   l('    END LOOP;');
3375   l('    vlist (l_idx) := ''CONTACT_POINT'';');
3376   l('    maxscore (l_idx) := l_cpt_entered_max_score;');
3377   l('');
3378   l('    l_num := 1;');
3379   l('    l_idx := vlist.LAST;');
3380   ldbg_s('Call order is the following');
3381   l('    WHILE l_idx IS NOT NULL LOOP');
3382   l('      call_order(l_num) := vlist(l_idx);');
3383   l('      call_max_score(l_num) := maxscore(l_idx);');
3384   ldbg_s('-----------------');
3385   ldbg_sv('l_num = ','l_num','entity = ', 'vlist(l_idx)', 'call_max_score for entity = ', 'maxscore(l_idx)');
3386   l('      l_idx := vlist.PRIOR(l_idx);');
3387   l('      l_num := l_num+1;');
3388   l('    END LOOP;  ');
3389   ldbg_s('-----------------');
3390   l('    call_order(5):=''NONE'';');
3391   ldbg_s('In init_search determining call type of entities');
3392   l('    IF p_match_type = '' OR '' THEN');
3393   ldbg_s('This is an OR Match Rule');
3394   IF l_purpose = 'S' THEN
3395     l('      threshold := round(('||l_match_threshold||'/'||l_max_score||')*(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score));');
3396     ldbg_s('This is a search Match Rule');
3397     ldbg_sv('Threshold defined in Match Rule, after rounding off is ', 'threshold');
3398   ELSE
3399     l('      threshold := '||l_match_threshold||';');
3400     ldbg_s('This is a Duplicate Identification Match Rule');
3401     ldbg_sv('Threshold defined in Match Rule is ', 'threshold');
3402   END IF;
3403 
3404   l('      l_idx := vlist.FIRST;');
3405   l('      total := 0;');
3406   l('      l_num := 4;');
3407   l('      WHILE l_idx IS NOT NULL LOOP');
3408   l('        total := total+maxscore(l_idx);');
3409   l('        IF total<threshold THEN');
3410   l('          call_type(l_num) := ''AND'';');
3411   l('        ELSE');
3412   l('          call_type(l_num) := ''OR'';');
3413   l('        END IF;');
3414   l('        l_idx := vlist.NEXT(l_idx);');
3415   l('        l_num := l_num-1;');
3416   l('      END LOOP;');
3417   l('    ELSE');
3418   l('      call_type(1) := ''OR'';');
3419   l('      call_type(2) := ''AND'';');
3420   l('      call_type(3) := ''AND'';');
3421   l('      call_type(4) := ''AND'';');
3422   l('    END IF;');
3423   ldbg_s('Call types are the following');
3424   ldbg_s('-----------------');
3425   ldbg_sv('call type 1 = ', 'call_type(1)', 'call type 2 = ', 'call_type(2)','call type 3 = ', 'call_type(3)','call type 4 = ', 'call_type(4)');
3426   ldbg_s('-----------------');
3427   l('    x_party_max_score := l_entered_max_score;');
3428   l('    x_ps_max_score := l_ps_entered_max_score;');
3429   l('    x_contact_max_score := l_ct_entered_max_score;');
3430   l('    x_cpt_max_score := l_cpt_entered_max_score;');
3431   ldbg_s('init_search returned with the following max scores at each level');
3432   ldbg_s('-----------------');
3433   ldbg_sv('entered party max score = ', 'l_entered_max_score',
3434           'entered paty site max score = ', 'l_ps_entered_max_score',
3435           'entered contact max score = ', 'l_ct_entered_max_score',
3436           'entered contact point max score = ', 'l_cpt_entered_max_score');
3437   ldbg_sv('entered total score = ', '(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score)');
3438   ldbg_s('-----------------');
3439   l('    RETURN (l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score);');
3440   l('  END;');
3441 
3442 
3443   l('  FUNCTION INIT_PARTY_QUERY(p_match_str VARCHAR2, ');
3444   l('              p_denorm_str VARCHAR2,');
3445   l('              p_party_max_score NUMBER,');
3446   l('              p_denorm_max_score NUMBER,');
3447   l('              p_non_denorm_max_score NUMBER,');
3448   l('              p_threshold NUMBER) RETURN VARCHAR2 IS');
3449   l('    l_party_contains_str VARCHAR2(32000); ');
3450   l('    l_party_filter VARCHAR2(1) := null;');
3451   l('    l_prim_temp VARCHAR2(4000);');
3452   l('    l_denorm_str VARCHAR2(4000);');
3453   l('  BEGIN');
3454   ldbg_s('-----------------','calling the function init_party_query');
3455   ldbg_sv('passed in p_match_str is ', 'p_match_str');
3456   ldbg_sv('passed in p_denorm_str is ', 'p_denorm_str');
3457   ldbg_sv('passed in p_denorm_max_score is ', 'p_denorm_max_score');
3458   ldbg_sv('passed in p_non_denorm_max_score is ', 'p_non_denorm_max_score');
3459   ldbg_sv('passed in p_threshold is ', 'p_threshold');
3460 
3461   l('    IF p_party_max_score<=p_threshold OR p_match_str='' AND '' THEN');
3462   l('      l_denorm_str := NULL;');
3463   ldbg_sv('calculated denorm string l_denorm_str is ', 'l_denorm_str' );
3464   l('    ELSE');
3465   l('      l_denorm_str := p_denorm_str;');
3466   ldbg_sv('calculated denorm string l_denorm_str is ', 'l_denorm_str');
3467   l('    END IF;');
3468 
3469   FIRST := TRUE;
3470   g_party_or_query := null;
3471   g_party_and_query := null;
3475     FROM HZ_TRANS_ATTRIBUTES_VL a,
3472   cnt := cnt+1;
3473   FOR PRIMATTRS IN (
3474     SELECT a.ATTRIBUTE_ID, PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME, nvl(SCORE,0) SCORE
3476          HZ_MATCH_RULE_PRIMARY p,
3477          HZ_MATCH_RULE_SECONDARY s
3478     WHERE p.match_rule_id = p_rule_id
3479     AND s.match_rule_id (+) = p_rule_id
3480     AND s.attribute_id (+) = a.attribute_id
3481     AND p.attribute_id = a.attribute_id
3482     AND a.ENTITY_NAME = 'PARTY'
3483     AND nvl(FILTER_FLAG,'N') <> 'Y'
3484     ORDER BY SCORE) LOOP
3485     FIRST1 := TRUE;
3486     l('');
3487     l('    -- Setup query string for '||PRIMATTRS.ATTRIBUTE_NAME);
3488     l('    l_prim_temp := null;');
3489     FOR PRIMTRANS IN (
3490       SELECT f.STAGED_ATTRIBUTE_COLUMN, f.TRANSFORMATION_NAME, nvl(f.PRIMARY_FLAG,'N') PRIMARY_FLAG, f.PROCEDURE_NAME
3491       FROM HZ_TRANS_FUNCTIONS_VL f,
3492          HZ_PRIMARY_TRANS pt
3493     WHERE pt.PRIMARY_ATTRIBUTE_ID = PRIMATTRS.PRIMARY_ATTRIBUTE_ID
3494     AND pt.FUNCTION_ID = f.FUNCTION_ID)
3495     LOOP
3496         IF FIRST1 THEN
3497           l_trans := '(g_party_stage_rec.'||
3498                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
3499                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
3500                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
3501           FIRST1 := FALSE;
3502         ELSE
3503           l_trans := l_trans||' OR (g_party_stage_rec.'||
3504                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
3505                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
3506                      PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
3507         END IF;
3508           IF PRIMTRANS.PRIMARY_FLAG = 'Y' THEN
3509             tmp := '''A'||PRIMATTRS.ATTRIBUTE_ID||'''';
3510           ELSE
3511             tmp := 'NULL';
3512           END IF;
3513         --- Modified for Bug 4016594
3514         IF PRIMATTRS.ATTRIBUTE_NAME = 'DUNS_NUMBER_C' AND upper(PRIMTRANS.PROCEDURE_NAME) = 'HZ_TRANS_PKG.EXACT' THEN
3515           l('    IF g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NOT NULL THEN');
3516 		  l('     IF ltrim(g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||',''0'') IS NOT NULL THEN');
3517           l('      FOR I in lengthb(ltrim(g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||',''0''))..9 LOOP');
3518           l('        HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
3519           l('          lpad(ltrim(g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
3520               ',''0''),I,chr('||ascii('0')||')),'||tmp||',l_prim_temp);');
3521           l('      END LOOP;');
3522           l('     END IF;');
3523           l('    END IF;');
3524         ELSE
3525           l('    HZ_DQM_SEARCH_UTIL.add_transformation( -- ' || PRIMTRANS.TRANSFORMATION_NAME);
3526           l('          g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||
3527             ','||tmp||',l_prim_temp);');
3528         END IF;
3529 
3530     END LOOP;
3531 
3532     IF FIRST THEN
3533       FIRST := FALSE;
3534       g_party_or_query := '('||l_trans||')';
3535       g_party_and_query := '('||l_trans||')';
3536     ELSE
3537       g_party_or_query := g_party_or_query || ' OR (' || l_trans||')';
3538       g_party_and_query := g_party_and_query || ' AND (' || l_trans||')';
3539     END IF;
3540 
3541     l('');
3542     IF PRIMATTRS.SCORE = 0 THEN
3543       l('    HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);');
3544     ELSE
3545       l('  IF l_denorm_str IS NOT NULL THEN');
3546       l('    IF (p_non_denorm_max_score+'||PRIMATTRS.SCORE||')>=p_threshold THEN');
3547       l('      l_denorm_str := NULL;');
3548       l('      HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);');
3549       l('    ELSIF (p_non_denorm_max_score+p_denorm_max_score+'||PRIMATTRS.SCORE||')>=p_threshold THEN');
3550       l('      HZ_DQM_SEARCH_UTIL.add_attribute_with_denorm(l_prim_temp, p_match_str, l_denorm_str, l_party_contains_str);');
3551       l('      l_denorm_str := NULL;');
3552       l('    END IF;');
3553       l('  ELSE');
3554       l('    HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);');
3555       l('  END IF;');
3556     END IF;
3557   END LOOP;
3558   l('    IF lengthb(l_party_contains_str) > 4000 THEN');
3559   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_SEARCH_CRIT_LARGE_ERROR'');');
3560   l('      FND_MESSAGE.SET_TOKEN(''ENTITY'',''PARTY'');');
3561   l('      FND_MSG_PUB.ADD;');
3562   l('      RAISE FND_API.G_EXC_ERROR;');
3563   l('    END IF;');
3564   l('    IF (p_match_str = '' AND '' OR p_party_max_score<p_threshold) AND l_party_contains_str IS NOT NULL AND p_denorm_str IS NOT NULL THEN');
3565   ldbg_s('party contains string returned by init_search is an AND between these strings ');
3566   ldbg_sv('l_party_contains_str = ', 'l_party_contains_str');
3567   ldbg_sv('p_denorm_str = ', 'p_denorm_str');
3568   l('      RETURN ''(''||l_party_contains_str||'') AND (''||p_denorm_str||'')'';');
3569   l('    ELSE');
3570   ldbg_s('party contains string returned by init_search is ', 'l_party_contains_str');
3571   l('      RETURN l_party_contains_str;');
3572   l('    END IF;');
3573   l('  END;');
3574 
3575   get_column_list(p_rule_id, 'PARTY',l_p_select_list,l_p_param_list, l_p_into_list);
3576   get_column_list(p_rule_id, 'PARTY_SITES',l_ps_select_list,l_ps_param_list, l_ps_into_list);
3577   get_column_list(p_rule_id, 'CONTACTS',l_c_select_list,l_c_param_list, l_c_into_list);
3578   get_column_list(p_rule_id, 'CONTACT_POINTS',l_cpt_select_list,l_cpt_param_list, l_cpt_into_list);
3579 
3580   l_party_filter_str := NULL;
3581   l_dyn_party_filter_str := NULL;
3582   FIRST := TRUE;
3583   cnt := 1;
3584   for PRIMTRANS IN (
3585         SELECT f.STAGED_ATTRIBUTE_COLUMN
3586         FROM HZ_TRANS_FUNCTIONS_VL f,
3590         WHERE pattr.MATCH_RULE_ID = p_rule_id
3587              HZ_TRANS_ATTRIBUTES_VL a,
3588              HZ_MATCH_RULE_PRIMARY pattr,
3589              HZ_PRIMARY_TRANS pfunc
3591         AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
3592         AND a.ENTITY_NAME = 'PARTY'
3593         AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
3594         AND pfunc.FUNCTION_ID = f.FUNCTION_ID
3595         AND FILTER_FLAG  = 'Y'
3596 
3597         UNION
3598 
3599         SELECT f.STAGED_ATTRIBUTE_COLUMN
3600         FROM HZ_TRANS_FUNCTIONS_VL f,
3601             HZ_TRANS_ATTRIBUTES_VL a
3602         WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
3603         AND a.entity_name = 'PARTY'
3604         AND a.attribute_name='PARTY_TYPE'
3605         AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
3606         AND nvl(f.active_flag,'Y')='Y'
3607         AND ROWNUM=1
3608   ) LOOP
3609 
3610         IF FIRST THEN
3611           l_party_filter_str := '(g_party_stage_rec.'||
3612                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3613                ' IS NULL OR g_party_stage_rec.'||
3614                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' =  p.' ||
3615                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3616           l_dyn_party_filter_str := '(:'||
3617                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3618                ' IS NULL OR :'||
3619                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' =  p.' ||
3620                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3621           FIRST := FALSE;
3622         ELSE
3623           l_dyn_party_filter_str := l_dyn_party_filter_str || ' AND ' ||
3624                '(:'||
3625                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3626                ' IS NULL OR :'||
3627                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' =  p.' ||
3628                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3629           l_party_filter_str := l_party_filter_str || ' AND ' ||
3630                '(g_party_stage_rec.'||
3631                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
3632                ' IS NULL OR g_party_stage_rec.'||
3633                PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' =  p.' ||
3634                 PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
3635         END IF;
3636         l_party_filt_bind(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3637         cnt:=cnt+1;
3638   END LOOP;
3639 
3640   add_query_gen_func('PARTY_SITES',p_rule_id);
3641   add_query_gen_func('CONTACTS',p_rule_id);
3642   add_query_gen_func('CONTACT_POINTS',p_rule_id);
3643 
3644    /*********************************************************************************
3645    * Match rule private procedures to open a cursor for performing intermedia queries.
3646    *   open_party_cursor - Intermedia query on HZ_STAGED_PARTIES
3647    *   open_party_site_cursor - Intermedia query on HZ_STAGED_PARTY_SITES
3648    *   open_contact_cursor - Intermedia query on HZ_STAGED_CONTACTS
3649    *   open_contact_pt_cursor - Intermedia query on HZ_STAGED_CONTACT_POINTS
3650    *
3651    * Input:
3652    * p_dup_party_id : Called in the duplicate identification case, to filter off
3653    *                  the party for which we are trying find duplicates.
3654    * p_restrict_sql : restrict_sql criteria passed to match rule
3655    * p_contains_str : Intermedia query string
3656    * p_search_ctx_id : Only to called from find_party_details, for filtering against
3657    *                  party_ids returned by the party query
3658    * p_party_id : USed in the get_matching_party_sites, get_matching_contacts and
3659    *              get_matching_cpts procedures, to only find records belonging to the specified
3660    *              party_id
3661    *********************************************************************************/
3662 
3663   IF l_purpose IN ('S','W') THEN
3664     l_party_name_score:='decode(TX8,g_party_stage_rec.TX8||'' '',100,90)';
3665   ELSE
3666     BEGIN
3667       SELECT to_char(score) INTO l_party_name_score from HZ_MATCH_RULE_SECONDARY s, HZ_TRANS_ATTRIBUTES_VL a
3668       WHERE a.attribute_id = s.attribute_id
3669       AND s.match_rule_id = p_rule_id
3670       AND attribute_name = 'PARTY_NAME';
3671     EXCEPTION
3672       WHEN NO_DATA_FOUND THEN
3673         l_party_name_score := '0';
3674     END;
3675   END IF;
3676   l('  PROCEDURE open_party_cursor_direct (');
3677   l('            p_dup_party_id NUMBER, ');
3678   l('            p_restrict_sql VARCHAR2, ');
3679   l('            p_match_str VARCHAR2,');
3680   l('            p_search_merged VARCHAR2,');
3681   l('            p_party_contains_str VARCHAR2,');
3682   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
3683   l('    l_sqlstr VARCHAR2(4000);');
3684   l('    l_search_merged VARCHAR2(1);');
3685   l('  BEGIN');
3686   ldbg_s('-----------------','calling procedure open party cursor direct');
3687   l('    IF (p_search_merged is null) then ');
3688   l('       l_search_merged := ''N'';  ');
3689   l('    ELSE ');
3690   l('       l_search_merged := p_search_merged; ');
3691   l('    END IF; ');
3692   ldbg_sv('Search Merged Flag - ','l_search_merged');
3693   l('    IF p_restrict_sql IS NULL AND NOT g_other_party_level_attribs AND NOT (p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,''D_PS'')>0 AND g_party_site_stage_list.COUNT=1) THEN');
3694   ldbg_s('Restrict SQL is NULL and other conditions met to OPEN x_cursor');
3695   l('     OPEN x_cursor FOR ');
3696   l('      SELECT PARTY_ID '|| l_p_select_list);
3697   l('      FROM hz_staged_parties ');
3698   l('      WHERE TX8 LIKE g_party_stage_rec.TX8||'' %''');
3699   l('      AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||'' '' =  TX36))');
3700   l('      AND( (l_search_merged =''Y'' ) ');
3701   l('           OR (l_search_merged = ''I'' AND nvl(status, ''A'') in (''A'', ''I''))  ');
3702   l('           OR (l_search_merged = ''N'' AND nvl(status, ''A'') in (''A'')))  ');
3703   l('      AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id);');
3704   l('    ELSE');
3705   ldbg_s('Restrict SQL is NOT NULL OR other conditions not met, Else Part');
3706   l('      l_sqlstr := ''SELECT PARTY_ID '|| l_p_select_list||' FROM hz_staged_parties stage '';');
3707   l('      l_sqlstr := l_sqlstr || '' WHERE TX8 like :TX8||'''' %'''' '';');
3708   l('      l_sqlstr := l_sqlstr || '' AND (:TX36 IS NULL OR :TX36||'''' '''' =  TX36) '';');
3709   l('      IF l_search_merged = ''N'' THEN');
3710   l('        l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''')=''''A'''' '';');
3711   l('      ELSIF l_search_merged = ''I'' THEN');
3712   l('        l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''') in (''''A'''',''''I'''') '';');
3713   l('      END IF;');
3714   l('      l_sqlstr := l_sqlstr || '' AND (:p_dup IS NULL OR party_id <> :p_dup ) '';');
3715   l('      IF g_other_party_level_attribs THEN');
3716   FIRST := TRUE;
3717   cnt := 1;
3718   FOR PATTRS IN (
3719     SELECT PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME
3720     FROM HZ_TRANS_ATTRIBUTES_VL a,
3721          HZ_MATCH_RULE_PRIMARY p
3722     WHERE p.match_rule_id = p_rule_id
3723     AND p.attribute_id = a.attribute_id
3724     AND a.ENTITY_NAME = 'PARTY'
3725     AND a.attribute_name <> 'PARTY_NAME'
3726     AND nvl(FILTER_FLAG,'N') = 'N') LOOP
3727     IF FIRST THEN
3728       l('      l_sqlstr := l_sqlstr || '' AND ((:attr IS NULL OR '';');
3729       FIRST := FALSE;
3730     ELSE
3731       l('      l_sqlstr := l_sqlstr || ''     ''||p_match_str||'' (:attr IS NULL OR '';');
3732     END IF;
3733 
3734     FIRST1 := TRUE;
3735     FOR PRIMTRANS IN (
3736       SELECT f.STAGED_ATTRIBUTE_COLUMN
3737       FROM HZ_TRANS_FUNCTIONS_VL f,
3738          HZ_PRIMARY_TRANS pt
3739       WHERE pt.PRIMARY_ATTRIBUTE_ID = PATTRS.PRIMARY_ATTRIBUTE_ID
3740       AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
3741         IF FIRST1 THEN
3742            l('      l_sqlstr := l_sqlstr || ''     ('||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3743            FIRST1 :=  FALSE;
3744            party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3745            cnt := cnt+1;
3746          ELSE
3747            l('      l_sqlstr := l_sqlstr || ''      OR '||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3748          END IF;
3749          party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3750          cnt := cnt+1;
3751     END LOOP;
3752     l('     l_sqlstr := l_sqlstr || '' )) '';');
3753   END LOOP;
3754   IF NOT FIRST THEN
3755      l('     l_sqlstr := l_sqlstr || '' ) '';');
3756   END IF;
3757 
3758   FOR PATTRS IN (
3759     SELECT PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME
3760     FROM HZ_TRANS_ATTRIBUTES_VL a,
3761          HZ_MATCH_RULE_PRIMARY p
3762     WHERE p.match_rule_id = p_rule_id
3763     AND p.attribute_id = a.attribute_id
3764     AND a.ENTITY_NAME = 'PARTY'
3765     AND a.attribute_name <> 'PARTY_NAME'
3766     AND nvl(FILTER_FLAG,'N') = 'Y') LOOP
3767     l('      l_sqlstr := l_sqlstr || '' AND (:attr IS NULL OR '';');
3768 
3769     FIRST1 := TRUE;
3770     FOR PRIMTRANS IN (
3771       SELECT f.STAGED_ATTRIBUTE_COLUMN
3772       FROM HZ_TRANS_FUNCTIONS_VL f,
3773          HZ_PRIMARY_TRANS pt
3774       WHERE pt.PRIMARY_ATTRIBUTE_ID = PATTRS.PRIMARY_ATTRIBUTE_ID
3775       AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
3776          IF FIRST1 THEN
3777            l('      l_sqlstr := l_sqlstr || ''     ('||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3778            FIRST1 :=  FALSE;
3779            party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3780            cnt := cnt+1;
3781          ELSE
3782            l('      l_sqlstr := l_sqlstr || ''      OR '||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' like :'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3783          END IF;
3784          party_binds(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
3785          cnt := cnt+1;
3786     END LOOP;
3787     l('     l_sqlstr := l_sqlstr || '' )) '';');
3788   END LOOP;
3789   IF party_binds.COUNT=0 THEN
3790     l('     NULL;');
3791   END IF;
3792   l('     END IF;');
3793   l_party_level_cnt := cnt;
3794   l('     IF p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,''D_PS'')>0 AND g_party_site_stage_list.COUNT=1 THEN');
3795   ldbg_s('p_party_contains_str string is NOT NULL and other conditions met');
3796   FIRST := TRUE;
3797   FOR DENATTR IN (
3798     SELECT PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME
3799     FROM HZ_TRANS_ATTRIBUTES_VL a,
3800          HZ_MATCH_RULE_PRIMARY p
3801     WHERE p.match_rule_id = p_rule_id
3802     AND p.attribute_id = a.attribute_id
3806     FIRST1 := TRUE;
3803     AND a.ENTITY_NAME = 'PARTY_SITES'
3804     AND nvl(a.denorm_flag,'N') = 'Y') LOOP
3805     l('      l_sqlstr := l_sqlstr || '' AND (:attr IS NULL OR '';');
3807     FOR DENTRANS IN (
3808       SELECT f.STAGED_ATTRIBUTE_COLUMN
3809       FROM HZ_TRANS_FUNCTIONS_VL f,
3810          HZ_PRIMARY_TRANS pt
3811       WHERE pt.PRIMARY_ATTRIBUTE_ID = DENATTR.PRIMARY_ATTRIBUTE_ID
3812       AND pt.FUNCTION_ID = f.FUNCTION_ID) LOOP
3813          IF FIRST1 THEN
3814            l('      l_sqlstr := l_sqlstr || ''     (D_PS like ''''% ''''||:'||DENTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3815            FIRST1 :=  FALSE;
3816            party_binds(cnt) := 'g_party_site_stage_list(1).'||DENTRANS.STAGED_ATTRIBUTE_COLUMN;
3817            cnt := cnt+1;
3818          ELSE
3819            l('      l_sqlstr := l_sqlstr || ''      OR D_PS like ''''% ''''||:'||DENTRANS.STAGED_ATTRIBUTE_COLUMN||'||'''' %'''' '';');
3820          END IF;
3821          party_binds(cnt) := 'g_party_site_stage_list(1).'||DENTRANS.STAGED_ATTRIBUTE_COLUMN;
3822          cnt := cnt+1;
3823     END LOOP;
3824     l('     l_sqlstr := l_sqlstr || '' )) '';');
3825   END LOOP;
3826   IF l_party_level_cnt=cnt THEN
3827     l('       null;');
3828   END IF;
3829   l('     END IF;');
3830   ldbg_s('l_sqlstr before appending restrict_sql');
3831   ldbg_sv('l_sqlstr is - ','l_sqlstr');
3832 
3833   l('     IF p_restrict_sql IS NOT NULL THEN');
3834   l('       l_sqlstr := l_sqlstr || '' AND ''||p_restrict_sql||'' '';');
3835   l('     END IF;');
3836   ldbg_s('l_sqlstr after appending restrict_sql');
3837   ldbg_sv('l_sqlstr is - ','l_sqlstr');
3838   l('     IF g_other_party_level_attribs AND p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,''D_PS'')>0 AND g_party_site_stage_list.COUNT=1 THEN');
3839   ldbg_s('IF g_other_party_level_attribs AND p_party_contains_str IS NOT NULL AND ...');
3840   l('       OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id');
3841   FOR I in 1..party_binds.COUNT LOOP
3842     l('     ,'||party_binds(I));
3843   END LOOP;
3844   l('     ;');
3845   l('     ELSIF g_other_party_level_attribs THEN');
3846   ldbg_s('ELSIF g_other_party_level_attribs THEN');
3847   l('       OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id');
3848   FOR I in 1..(l_party_level_cnt-1)LOOP
3849     l('     ,'||party_binds(I));
3850   END LOOP;
3851   l('     ;');
3852   l('     ELSIF p_party_contains_str IS NOT NULL AND instrb(p_party_contains_str,''D_PS'')>0 AND g_party_site_stage_list.COUNT=1 THEN');
3853   ldbg_s('ELSIF p_party_contains_str IS NOT NULL AND ...');
3854   l('       OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id');
3855   FOR I in l_party_level_cnt..party_binds.COUNT LOOP
3856     l('     ,'||party_binds(I));
3857   END LOOP;
3858   l('     ;');
3859   l('     ELSE');
3860   ldbg_s('ELSE code fork');
3861   l('       OPEN x_cursor FOR l_sqlstr USING g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id;');
3862   l('     END IF;');
3863   l('    END IF;');
3864   l('  END;');
3865 
3866   l('  PROCEDURE open_party_cursor(');
3867   l('            p_dup_party_id NUMBER, ');
3868   l('            p_restrict_sql VARCHAR2, ');
3869   l('            p_contains_str  VARCHAR2, ');
3870   l('            p_search_ctx_id NUMBER,');
3871   l('            p_match_str VARCHAR2,');
3872   l('            p_search_merged VARCHAR2,');
3873   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
3874   l('  l_sqlstr VARCHAR2(4000);');
3875   l('  l_hint VARCHAR2(100); ');
3876   l('  l_check NUMBER; ');
3877   l('  l_search_merged VARCHAR2(1); ');
3878   l('  BEGIN');
3879   ldbg_s('-----------------','calling procedure open party cursor');
3880   l('    IF (p_search_merged is null) then ');
3881   l('       l_search_merged := ''N'';  ');
3882   l('    ELSE ');
3883   l('       l_search_merged := p_search_merged; ');
3884   l('    END IF; ');
3885   l('    IF p_contains_str IS NULL THEN');
3886   ldbg_s('part contains string is null');
3887   /**** To query based on party_id .. from the get_score_details flow ***/
3888   l('      OPEN x_cursor FOR ');
3889   l('        SELECT PARTY_ID '|| l_p_select_list);
3890   l('        FROM HZ_STAGED_PARTIES stage');
3891   l('        WHERE PARTY_ID = p_dup_party_id;');
3892 
3893   /**** Static queries when restrict_sql is null OR if p_search_ctx_id IS NOT NULL *****/
3894   l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
3895   ldbg_s('Either restrict sql is null or search context id is not null');
3896   /**** When search context ID is null .. Retrieve rows using intermedia index ****/
3897   l('      IF p_search_ctx_id IS NULL THEN');
3898   ldbg_s('Search context id is null');
3899   l('        OPEN x_cursor FOR ');
3900   l('          SELECT /*+ INDEX(stage HZ_STAGE_PARTIES_T1) */ PARTY_ID '|| l_p_select_list);
3901   l('          FROM HZ_STAGED_PARTIES stage');
3902   IF l_party_filter_str IS NOT NULL THEN
3903     l('          WHERE contains( concat_col, p_contains_str)>0');
3904     l('          AND ('||replace(l_party_filter_str,'p.','stage.')||')');
3905   ELSE
3906     l('          WHERE contains( concat_col, p_contains_str)>0');
3907   END IF;
3908   l('          AND( (l_search_merged =''Y'' ) ');
3909   l('          OR (l_search_merged = ''I'' AND nvl(stage.status, ''A'') in (''A'', ''I''))  ');
3910   l('          OR (l_search_merged = ''N'' AND nvl(stage.status, ''A'') in (''A''))       ) ');
3911   l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
3912 
3913 
3914   /**** When search context ID is not null .. Query using DQM_PARTIES_GT. Filter using
3915         intermedia index ****/
3916   l('      ELSE');
3917   ldbg_s('Search context id is not null');
3918   l('        OPEN x_cursor FOR ');
3922   l('            AND d.SEARCH_CONTEXT_ID=p_search_ctx_id');
3919   l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTIES_U1) */ stage.PARTY_ID '|| l_p_select_list);
3920   l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTIES stage');
3921   l('            WHERE contains( concat_col, p_contains_str)>0');
3923   l('            AND d.party_id = stage.party_id');
3924   IF l_party_filter_str IS NOT NULL THEN
3925     l('            AND ('||replace(l_party_filter_str,'p.','stage.')||')');
3926   END IF;
3927   l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
3928   l('            AND( (l_search_merged =''Y'' ) ');
3929   l('            OR (l_search_merged = ''I'' AND nvl(stage.status, ''A'') in (''A'', ''I''))  ');
3930   l('            OR (l_search_merged = ''N'' AND nvl(stage.status, ''A'') in (''A''))       ); ');
3931   l('      END IF;');
3932 
3933   /**** When restrict_sql is not null *****/
3934   l('    ELSE');
3935   ldbg_s('Restrict sql is not null');
3936   l('       l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
3937   l('       IF (l_check > 0 ) THEN ');
3938   ldbg_s('Restrict sql has a Selective Hint');
3939   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_PARTIES_U1) */''; ');
3940   l('       ELSE ');
3941   l('           l_hint := ''/*+ INDEX(stage HZ_STAGE_PARTIES_T1) */''; ');
3942   l('       END IF; ');
3943   /**** When search context ID is null .. Access using intermedia index ***/
3944   l('     IF p_search_ctx_id IS NULL THEN');
3945   l('       l_sqlstr := ''SELECT   '' || l_hint || '' PARTY_ID '|| l_p_select_list||'''||');
3946   l('                   '' FROM HZ_STAGED_PARTIES stage''||');
3947   l('                   '' WHERE contains( concat_col, :cont)>0''||');
3948   IF l_dyn_party_filter_str IS NOT NULL THEN
3949     l('                   '' AND ('||replace(l_dyn_party_filter_str,'p.','stage.')||')''||');
3950   END IF;
3951   l('                   '' AND (''||p_restrict_sql||'')'' ||');
3952   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
3953   l('          IF l_search_merged = ''Y'' THEN  ');
3954   l('                  l_sqlstr := l_sqlstr ;  ');
3955   l('          ELSIF l_search_merged = ''I'' THEN  ');
3956   l('                  l_sqlstr := l_sqlstr ||'' AND nvl(stage.status,''''A'''') in (''''A'''', ''''I'''')'';  ');
3957   l('          ELSE  ');
3958   l('                  l_sqlstr := l_sqlstr ||'' AND nvl(stage.status,''''A'''') in (''''A'''')'';  ');
3959   l('          END IF;  ');
3960   l(' 	   output_long_strings(''----------------------------------------------------------'');');
3961   l('      output_long_strings(''Party Contains String = ''||p_contains_str);');
3962   l('		output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
3963   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
3964   FOR I in 1..l_party_filt_bind.COUNT LOOP
3965       l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
3966   END LOOP;
3967   l('                    ,p_dup_party_id, p_dup_party_id;');
3968   l('     END IF;');
3969   l('   END IF;');
3970   l('  exception');
3971   l('    when others then');
3972   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
3973   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
3974   l('        FND_MSG_PUB.ADD;');
3975   l('        RAISE FND_API.G_EXC_ERROR;');
3976    --Start Bug No: 3032742.
3977   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
3978   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
3979   l('        FND_MSG_PUB.ADD;');
3980   l('        RAISE FND_API.G_EXC_ERROR;');
3981   --Bug: 3392837
3982   l('      elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
3983   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
3984   l('        FND_MSG_PUB.ADD;');
3985   l('        RAISE FND_API.G_EXC_ERROR;');
3986   --End Bug No : 3032742.
3987   l('      else ');
3988   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
3989   l('    	 FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
3990   l('    	 FND_MSG_PUB.ADD;');
3991   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
3992   l('      end if;');
3993   l('  END;');
3994   l('');
3995 
3996   l('  PROCEDURE open_party_site_cursor(');
3997   l('            p_dup_party_id NUMBER, ');
3998   l('            p_party_id NUMBER, ');
3999   l('            p_restrict_sql VARCHAR2, ');
4000   l('            p_contains_str  VARCHAR2, ');
4001   l('            p_search_ctx_id  NUMBER, ');
4002   l('            p_search_merged  VARCHAR2, ');
4003   l('            p_search_rel_sites  VARCHAR2, ');
4004   l('            p_person_api  VARCHAR2, ');
4005   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
4006   l('  l_sqlstr VARCHAR2(4000);');
4007   l('  l_hint VARCHAR2(100); ');
4008   l('  l_check NUMBER; ');
4009   l('  l_check_dt NUMBER; ');
4010   l('  l_search_merged VARCHAR2(1); ');
4011   l('  l_status_sql VARCHAR2(100); ');
4012   l('  p_restrict_sql1 VARCHAR2(4000); ');
4013   l(' ');
4014   l('  BEGIN');
4015   ldbg_s('-----------------','calling the procedure open_party_site_cursor');
4016   l('     IF (p_search_merged is null) then ');
4017   l('        l_search_merged := ''N'';  ');
4018   l('     ELSE ');
4019   l('        l_search_merged := p_search_merged; ');
4020   l('     END IF; ');
4021   /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
4022   l('     IF p_party_id IS NOT NULL THEN');
4023   ldbg_s('Single Party Scenario');
4024   l('       IF p_search_rel_sites = ''N'' THEN');
4025   l('         OPEN x_cursor FOR ');
4026   l('          SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4027   l('          FROM HZ_STAGED_PARTY_SITES stage');
4028   l('          WHERE contains( concat_col, p_contains_str)>0');
4029   --Start of BugNo: 4299785
4030   l('          AND( (l_search_merged =''Y'' )  ');
4031   l('             OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4032   l('             OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4033   --End of BugNo: 4299785
4034   l('          AND stage.party_id = p_party_id; ');
4035   l('       ELSE');
4036   l('         OPEN x_cursor FOR ');
4037   l('          SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4038   l('          FROM HZ_STAGED_PARTY_SITES stage');
4039   l('          WHERE contains( concat_col, p_contains_str)>0');
4040   --Start of BugNo: 4299785
4041   l('          AND( (l_search_merged =''Y'' )  ');
4042   l('            OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4043   l('            OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4044   --End of BugNo: 4299785
4045   l('          AND stage.party_id = p_party_id ');
4046   l('          UNION');
4047   l('          SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'|| l_ps_select_list);
4048   l('          FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc');
4049   l('          WHERE contains( concat_col, p_contains_str)>0');
4050   --Start of BugNo: 4299785
4051   l('          AND( (l_search_merged =''Y'' )  ');
4052   l('            OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4053   l('            OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4054   --End of BugNo: 4299785
4055   l('          AND r.object_id = p_party_id ');
4056   l('          AND r.subject_id = stage.party_id ');
4057   l('          AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
4058   l('          AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
4059   l('          AND r.relationship_id = oc.party_relationship_id');
4060   l('          AND oc.org_contact_id = stage.org_contact_id; ');
4061   l('      END IF;');
4062   /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
4063   l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
4064   ldbg_s('Either restrict sql is null or search context id is not null');
4065   /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
4066   l('      IF p_search_ctx_id IS NULL THEN');
4067   ldbg_s('Search context id is null');
4068   l('        OPEN x_cursor FOR ');
4069   l('          SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4070   l('          FROM HZ_STAGED_PARTY_SITES stage');
4071   IF l_party_filter_str IS NOT NULL THEN
4072     l('        WHERE contains( concat_col, p_contains_str)>0');
4073     l('        AND EXISTS (');
4074     l('          SELECT 1 FROM HZ_STAGED_PARTIES p');
4075     l('          WHERE p.PARTY_ID = stage.PARTY_ID');
4076     l('          AND( (l_search_merged =''Y'' )  ');
4077     l('          OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I''))  ');
4078     l('          OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A''))       )  ');
4079     l('          AND ('||l_party_filter_str||'))');
4080   ELSE
4081     l('        WHERE contains( concat_col, p_contains_str)>0');
4082 
4083   END IF;
4084     --Start of BugNo: 4299785
4085     l('          AND( (l_search_merged =''Y'' )  ');
4086     l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4087     l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4088     --End of BugNo: 4299785
4089   l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4090 
4091   /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
4092   l('      ELSE');
4093   ldbg_s('Search context id is not null');
4094   l('        IF p_person_api = ''Y'' THEN');
4095   l('          OPEN x_cursor FOR ');
4096   l('            SELECT  PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4097   l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage');
4101   l('          OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4098   l('            WHERE contains( concat_col, p_contains_str)>0');
4099   --Start of BugNo: 4299785
4100   l('          AND( (l_search_merged =''Y'' )  ');
4102   l('          OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4103   --End of BugNo: 4299785
4104   l('            AND d.search_context_id = p_search_ctx_id');
4105   l('            AND d.party_id = stage.party_id');
4106   l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
4107   l('            UNION ');
4108   l('            SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, r.subject_id, stage.ORG_CONTACT_ID'|| l_ps_select_list);
4109   l('            FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage');
4110   l('            WHERE contains( concat_col, p_contains_str)>0');
4111   --Start of BugNo: 4299785
4112   l('          AND( (l_search_merged =''Y'' )  ');
4113   l('          OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4114   l('          OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4115   --End of BugNo: 4299785
4116   l('            AND d.search_context_id = p_search_ctx_id');
4117   l('            AND d.party_id = r.subject_id');
4118   l('            AND r.relationship_id = oc.party_relationship_id');
4119   l('            AND oc.org_contact_id = stage.org_contact_id');
4120   l('            AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);');
4121   l('        ELSE');
4122   l('          OPEN x_cursor FOR ');
4123   l('            SELECT  PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID'|| l_ps_select_list);
4124   l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage');
4125   l('            WHERE contains( concat_col, p_contains_str)>0');
4126   --Start of BugNo: 4299785
4127   l('            AND( (l_search_merged =''Y'' )  ');
4128   l('             OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4129   l('             OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4130   --End of BugNo: 4299785
4131   l('            AND d.search_context_id = p_search_ctx_id');
4132   l('            AND d.party_id = stage.party_id');
4133   l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4134   l('        END IF;');
4135 
4136   l('      END IF;');
4137 
4138   /**** Restrict_sql is not null. Retrieve using intermedia ****/
4139   l('    ELSE');
4140   ldbg_s('Restrict sql is not null');
4141   l('       l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
4142   l('       l_check_dt := instrb(p_restrict_sql, ''SELECTIVE_PS''); ');
4143   l('       IF (l_check_dt > 0 ) THEN ');
4144   ldbg_s('Restrict sql has the selective_ps  hint');
4145   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */''; ');
4146   l('       ELSIF (l_check > 0 ) THEN ');
4147   ldbg_s('Restrict sql has the selective hint');
4148   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */''; ');
4149   l('       END IF; ');
4150   l('       IF l_search_merged = ''Y'' THEN ');
4151   l('               l_status_sql := '' '' ;  ');
4152   l('       ELSIF l_search_merged = ''I'' THEN  ');
4153   l('               l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''', ''''I'''')''; ');
4154   l('       ELSE ');
4155   l('               l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''')''; ');
4156   l('       END IF; ');
4157   /* Performance fix for Bug:4643321*/
4158   l(' 		/*Performance fix for Bug:4589953*/ ');
4159   l(' 		IF(p_person_api=''Y'') THEN ');
4160   l('       IF (l_check > 0 ) THEN ');
4161      l('       IF instrb(p_restrict_sql, ''STAGE.'') > 0 THEN ');
4162      l('       	p_restrict_sql1 := replace( p_restrict_sql, ''STAGE.'', ''stage1.'');');
4163      l('       ELSIF instrb(p_restrict_sql, ''stage.'') > 0 THEN ');
4164      l('       	p_restrict_sql1 := replace( p_restrict_sql, ''stage.'', ''stage1.'');');
4165      l('       ELSE');
4166      l('		p_restrict_sql1 := ''stage1.''||p_restrict_sql;');
4167   l('       END IF; ');
4168   l('       l_sqlstr := ''SELECT  /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4169   l('                   '' FROM HZ_STAGED_PARTY_SITES stage''||');
4170   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4171   --Start of BugNo: 4299785
4172   l('                   ''  AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''|| ');
4173   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''|| ');
4174   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''|| ');
4175   --End of BugNo: 4299785
4176             l('         '' AND (ORG_CONTACT_ID IS NULL '' ||');
4177             l('       	'' AND (''||p_restrict_sql||''))'' ||');
4178             l('       	'' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '' ||');
4179             l('         '' UNION '' ||');
4180   l('       			 ''SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4181   l('                   '' FROM HZ_STAGED_PARTY_SITES stage''||');
4182   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4183   --Start of BugNo: 4299785
4184   l('                   ''  AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''|| ');
4185   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''|| ');
4186   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''|| ');
4187   --End of BugNo: 4299785
4188 
4189             l('         '' AND ORG_CONTACT_ID IN '' ||');
4193             l('         '' and (''||p_restrict_sql1|| '') )'' ||') ;
4190             l('         '' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships '' ||');
4191             l('         '' where subject_type = ''''PERSON'''' AND object_type = ''''ORGANIZATION'''') stage1 '' ||');
4192             l('         '' where stage1.relationship_id = oc.party_relationship_id '' || ');
4194             l('         '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4195   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str,');
4196   l('                    p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;');
4197 
4198   l('       ELSE ');
4199   l('       l_sqlstr := ''SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4200   l('                   '' FROM HZ_STAGED_PARTY_SITES stage''||');
4201   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4202   --Start of BugNo: 4299785
4203   l('                   ''  AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''|| ');
4204   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''|| ');
4205   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''|| ');
4206   --End of BugNo: 4299785
4207   IF l_dyn_party_filter_str IS NOT NULL THEN
4208     l('                 '' AND EXISTS (''||');
4209     l('                 '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4210     l('                 '' WHERE p.party_id = stage.party_id '' || ');
4211     l('                 '' AND ('||l_dyn_party_filter_str||')  ''|| l_status_sql ||'' ) '' || ');
4212   END IF;
4213   l('                   '' AND (''||get_adjusted_restrict_sql(p_restrict_sql)||'')'' ||');
4214   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4215   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4216   FOR I in 1..l_party_filt_bind.COUNT LOOP
4217     l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4218   END LOOP;
4219   l('                    ,p_dup_party_id, p_dup_party_id;');
4220   l('       END IF; ');
4221 
4222   l('		ELSE ');
4223   l('       l_sqlstr := ''SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID '|| l_ps_select_list||'''||');
4224   l('                   '' FROM HZ_STAGED_PARTY_SITES stage''||');
4225   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4226   --Start of BugNo: 4299785
4227   l('                   ''  AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''|| ');
4228   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''|| ');
4229   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''|| ');
4230   --End of BugNo: 4299785
4231 
4232   IF l_dyn_party_filter_str IS NOT NULL THEN
4233     l('                 '' AND EXISTS (''||');
4234     l('                 '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4235     l('                 '' WHERE p.party_id = stage.party_id '' || ');
4236     l('                 '' AND ('||l_dyn_party_filter_str||')  ''|| l_status_sql ||'' ) '' || ');
4237   END IF;
4238   l('                   '' AND (''||p_restrict_sql||'')'' ||');
4239   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4240   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4241   FOR I in 1..l_party_filt_bind.COUNT LOOP
4242     l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4243   END LOOP;
4244   l('                    ,p_dup_party_id, p_dup_party_id;');
4245   l('		  END IF; ');
4246   l('    END IF;');
4247   l(' 	    output_long_strings(''----------------------------------------------------------'');');
4248   l('       output_long_strings(''Party Site Contains String = ''||p_contains_str);');
4249   l('		output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
4250   l('  exception');
4251   l('    when others then');
4252   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
4253   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
4254   l('        FND_MSG_PUB.ADD;');
4255   l('        RAISE FND_API.G_EXC_ERROR;');
4256   --Start Bug No: 3032742.
4257   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
4258   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4259   l('        FND_MSG_PUB.ADD;');
4260   l('        RAISE FND_API.G_EXC_ERROR;');
4261   --Bug: 3392837
4262   l('      elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
4263   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4264   l('        FND_MSG_PUB.ADD;');
4265   l('        RAISE FND_API.G_EXC_ERROR;');
4266   --End Bug No : 3032742.
4267   l('      else ');
4268   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
4269   l('    	 FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4270   l('    	 FND_MSG_PUB.ADD;');
4271   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4272   l('      end if;');
4273   l('  END;');
4274   l('');
4275   l('  PROCEDURE open_contact_cursor(');
4276   l('            p_dup_party_id NUMBER, ');
4277   l('            p_party_id NUMBER, ');
4278   l('            p_restrict_sql VARCHAR2, ');
4279   l('            p_contains_str  VARCHAR2, ');
4280   l('            p_search_ctx_id  NUMBER, ');
4281   l('            p_search_merged  VARCHAR2, ');
4282   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
4283   l('  l_sqlstr VARCHAR2(4000);');
4284   l('  l_hint VARCHAR2(100); ');
4285   l('  l_check NUMBER; ');
4286   l('  l_check_dt NUMBER; ');
4287   l('  l_search_merged VARCHAR2(1); ');
4288   l('  l_status_sql VARCHAR2(100); ');
4289   l(' ');
4290   l('  BEGIN');
4291   ldbg_s('-----------------','calling the procedure open_contact_cursor');
4292   l('     IF (p_search_merged is null) then ');
4293   l('        l_search_merged := ''N'';  ');
4294   l('     ELSE ');
4295   l('        l_search_merged := p_search_merged; ');
4296   l('     END IF; ');
4297   /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
4298   l('     IF p_party_id IS NOT NULL THEN');
4299   ldbg_s('Single party scenario');
4300   l('       OPEN x_cursor FOR ');
4301   l('          SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
4302   l('          FROM HZ_STAGED_CONTACTS stage');
4303   IF l_party_filter_str IS NOT NULL THEN
4304     l('        WHERE contains( concat_col, p_contains_str)>0');
4305     l('        AND EXISTS (');
4306     l('          SELECT 1 FROM HZ_STAGED_PARTIES p');
4307     l('          WHERE p.PARTY_ID = stage.PARTY_ID');
4308     l('          AND( (l_search_merged =''Y'' )  ');
4309     l('          OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I''))  ');
4310     l('          OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A''))       )  ');
4311     l('          AND ('||l_party_filter_str||'))');
4312   ELSE
4313     l('        WHERE contains( concat_col, p_contains_str)>0');
4314   END IF;
4315   --Start of BugNo: 4299785
4316   l('          AND( (l_search_merged =''Y'' )  ');
4317   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4318   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4319   --End of BugNo: 4299785
4320   l('          AND stage.party_id = p_party_id;');
4321   /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
4322   l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
4323   ldbg_s('Either Restrict sql is null or Search Context Id is not null');
4324   /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
4325   l('      IF p_search_ctx_id IS NULL THEN');
4326   ldbg_s('Search Context id is null');
4327   l('        OPEN x_cursor FOR ');
4328   l('          SELECT ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
4329   l('          FROM HZ_STAGED_CONTACTS stage');
4330   IF l_party_filter_str IS NOT NULL THEN
4331     l('        WHERE contains( concat_col, p_contains_str)>0');
4332     l('        AND EXISTS (');
4333     l('          SELECT 1 FROM HZ_STAGED_PARTIES p');
4334     l('          WHERE p.PARTY_ID = stage.PARTY_ID');
4335     l('          AND( (l_search_merged =''Y'' )  ');
4336     l('          OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I''))  ');
4337     l('          OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A''))       )  ');
4338     l('          AND ('||l_party_filter_str||'))');
4339   ELSE
4340     l('        WHERE contains( concat_col, p_contains_str)>0');
4341   END IF;
4342   --Start of BugNo: 4299785
4343   l('          AND( (l_search_merged =''Y'' )  ');
4344   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4345   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4346   --End of BugNo: 4299785
4347   l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4348 
4349   /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
4350   l('      ELSE');
4351   ldbg_s('Search Context id is not null');
4352   l('          OPEN x_cursor FOR ');
4353   l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID'|| l_c_select_list);
4354   l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage');
4355   l('            WHERE contains( concat_col, p_contains_str)>0');
4356   l('            AND d.search_context_id = p_search_ctx_id');
4357   l('            AND d.party_id = stage.party_id');
4358 /*
4359   IF l_party_filter_str IS NOT NULL THEN
4360     l('          AND EXISTS (');
4361     l('            SELECT 1 FROM HZ_STAGED_PARTIES p');
4362     l('            WHERE p.PARTY_ID = stage.PARTY_ID');
4363     l('            AND ('||l_party_filter_str||'))');
4364   END IF;
4365 */
4366    --Start of BugNo: 4299785
4367    l('            AND( (l_search_merged =''Y'' )  ');
4368    l('             OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4369    l('             OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4370    --End of BugNo: 4299785
4371   l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4372   l('      END IF;');
4373 
4374   /**** Restrict_sql is not null. Retrieve using intermedia ****/
4375   l('    ELSE');
4376   ldbg_s('Restrict Sql is not null');
4377   l('       l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
4378   l('       l_check_dt := instrb(p_restrict_sql, ''SELECTIVE_CT''); ');
4379   l('       IF (l_check_dt > 0 ) THEN ');
4380   ldbg_s('Restrict sql has the selective_ct hint');
4381   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */''; ');
4382   l('       ELSIF (l_check > 0 ) THEN ');
4383   ldbg_s('Restrict sql has the selective hint');
4384   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */''; ');
4385   l('       END IF; ');
4386   l('       IF l_search_merged = ''Y'' THEN ');
4387   l('               l_status_sql := '' '' ;  ');
4388   l('       ELSIF l_search_merged = ''I'' THEN  ');
4389   l('               l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''', ''''I'''')''; ');
4390   l('       ELSE ');
4391   l('               l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''')''; ');
4392   l('       END IF; ');
4393   l('       l_sqlstr := ''SELECT   '' || l_hint || '' ORG_CONTACT_ID, PARTY_ID '|| l_c_select_list||'''||');
4394   l('                   '' FROM HZ_STAGED_CONTACTS stage''||');
4395   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4396   IF l_dyn_party_filter_str IS NOT NULL THEN
4397     l('                 '' AND EXISTS (''||');
4398     l('                 '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4399     l('                 '' WHERE p.party_id = stage.party_id '' || ');
4400     l('                 '' AND ('||l_dyn_party_filter_str||') ''|| l_status_sql ||'' ) '' || ');
4401   END IF;
4402   --Start of BugNo: 4299785
4403    l('                  '' AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''||');
4404    l('                  '' OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''||');
4405    l('                  '' OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''||');
4406   --End of BugNo: 4299785
4407   l('                   '' AND (''||p_restrict_sql||'')'' ||');
4408   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4409   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4410   FOR I in 1..l_party_filt_bind.COUNT LOOP
4411     l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4412   END LOOP;
4413   l('                    ,p_dup_party_id, p_dup_party_id;');
4414   l('    END IF;');
4415   l(' 	    output_long_strings(''----------------------------------------------------------'');');
4416   l('       output_long_strings(''Contacts Contains String = ''||p_contains_str);');
4417   l('		output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
4418   l('  exception');
4419   l('    when others then');
4420   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
4421   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
4422   l('        FND_MSG_PUB.ADD;');
4423   l('        RAISE FND_API.G_EXC_ERROR;');
4424   --Start Bug No: 3032742.
4425   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
4426   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4427   l('        FND_MSG_PUB.ADD;');
4428   l('        RAISE FND_API.G_EXC_ERROR;');
4429   --Bug: 3392837
4430   l('      elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
4431   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4432   l('        FND_MSG_PUB.ADD;');
4433   l('        RAISE FND_API.G_EXC_ERROR;');
4434   --End Bug No : 3032742.
4435   l('      else ');
4436   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
4437   l('    	 FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4438   l('    	 FND_MSG_PUB.ADD;');
4439   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4440   l('      end if;');
4441   l('  END;');
4442   l('');
4443   l('  PROCEDURE open_contact_pt_cursor(');
4444   l('            p_dup_party_id NUMBER, ');
4445   l('            p_party_id NUMBER, ');
4446   l('            p_restrict_sql VARCHAR2, ');
4447   l('            p_contains_str  VARCHAR2, ');
4448   l('            p_search_ctx_id  NUMBER, ');
4449   l('            p_search_merged  VARCHAR2, ');
4450   l('            p_search_rel_cpts  VARCHAR2, ');
4451   l('            p_person_api  VARCHAR2, ');
4452   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,');
4453   l('            p_restrict_entity VARCHAR2 DEFAULT NULL) IS');
4454   l('  l_sqlstr VARCHAR2(4000);');
4455   l('  l_hint VARCHAR2(100); ');
4456   l('  l_check NUMBER; ');
4457   l('  l_check_dt NUMBER; ');
4458   l('  l_search_merged VARCHAR2(1); ');
4459   l('  l_status_sql VARCHAR2(100); ');
4460   l('  p_restrict_sql1 VARCHAR2(4000); ');
4461   l(' ');
4462   l('  BEGIN');
4463   ldbg_s('-----------------','calling the procedure open_contact_pt_cursor');
4464   l('     IF (p_search_merged is null) then ');
4465   l('        l_search_merged := ''N'';  ');
4466   l('     ELSE ');
4467   l('        l_search_merged := p_search_merged; ');
4468   l('     END IF; ');
4469   l('  IF p_restrict_entity = ''CONTACTS''    ');
4470   l('  THEN');
4471   l('          OPEN x_cursor FOR ');
4472   l('          SELECT /*+ USE_NL(d stage) ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4473   l('          FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage ');
4474   l('          WHERE contains( concat_col, p_contains_str)>0 ');
4475   l('          AND d.search_context_id = p_search_ctx_id ');
4476   --Start of BugNo: 4299785
4477   l('          AND( (l_search_merged =''Y'' )  ');
4478   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4482   l('   END IF; ');
4479   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4480   --End of BugNo: 4299785
4481   l('          AND d.party_id = stage.org_contact_id ; ');
4483 
4484   l('  IF p_restrict_entity = ''PARTY_SITES''    ');
4485   l('  THEN');
4486   l('          OPEN x_cursor FOR ');
4487   l('          SELECT /*+ USE_NL(d stage) ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N3) */ CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4488   l('          FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage ');
4489   l('          WHERE contains( concat_col, p_contains_str)>0 ');
4490   l('          AND d.search_context_id = p_search_ctx_id ');
4491   --Start of BugNo: 4299785
4492   l('          AND( (l_search_merged =''Y'' )  ');
4493   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4494   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4495   --End of BugNo: 4299785
4496   l('          AND d.party_id = stage.party_site_id ; ');
4497   l('   END IF; ');
4498 
4499   l(' IF p_restrict_entity IS NULL');
4500   l(' THEN');
4501 
4502   /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
4503   l('     IF p_party_id IS NOT NULL THEN');
4504   ldbg_s('Single Party Scenario');
4505   l('       IF p_search_rel_cpts = ''N'' THEN');
4506   l('         OPEN x_cursor FOR ');
4507   l('          SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4508   l('          FROM HZ_STAGED_CONTACT_POINTS stage');
4509   l('          WHERE contains( concat_col, p_contains_str)>0');
4510   --Start of BugNo: 4299785
4511   l('          AND( (l_search_merged =''Y'' )  ');
4512   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4513   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4514   --End of BugNo: 4299785
4515   l('          AND stage.party_id = p_party_id; ');
4516   l('       ELSE');
4517   l('         OPEN x_cursor FOR ');
4518   l('          SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4519   l('          FROM HZ_STAGED_CONTACT_POINTS stage');
4520   l('          WHERE contains( concat_col, p_contains_str)>0');
4521   --Start of BugNo: 4299785
4522   l('          AND( (l_search_merged =''Y'' )  ');
4523   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4524   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4525   --End of BugNo: 4299785
4526   l('          AND stage.party_id = p_party_id ');
4527   l('          UNION');
4528   l('          SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ stage.CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '|| l_cpt_select_list);
4529   l('          FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc');
4530   l('          WHERE contains( concat_col, p_contains_str)>0');
4531   l('          AND r.object_id = p_party_id ');
4532   --Start of BugNo: 4299785
4533   l('          AND( (l_search_merged =''Y'' )  ');
4534   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4535   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4536   --End of BugNo: 4299785
4537   l('                    AND r.subject_id = stage.party_id ');
4538   l('                    AND r.SUBJECT_TABLE_NAME = ''HZ_PARTIES'' ' );
4539   l('                    AND r.OBJECT_TABLE_NAME = ''HZ_PARTIES'' ');
4540   l('                    AND r.relationship_id = oc.party_relationship_id');
4541   l('                    AND oc.org_contact_id = stage.org_contact_id; ');
4542   l('      END IF;');
4543 
4544   /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
4545   l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
4546   ldbg_s('Either Restrict sql is null or search_context_id is not null');
4547   /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
4548   l('      IF p_search_ctx_id IS NULL THEN');
4549   ldbg_s('Either Search context id is null');
4550   l('        OPEN x_cursor FOR ');
4551   l('          SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4552   l('          FROM HZ_STAGED_CONTACT_POINTS stage');
4553   IF l_party_filter_str IS NOT NULL THEN
4554     l('        WHERE contains( concat_col, p_contains_str)>0');
4555     l('        AND EXISTS (');
4556     l('          SELECT 1 FROM HZ_STAGED_PARTIES p');
4557     l('          WHERE p.PARTY_ID = stage.PARTY_ID');
4558     l('          AND( (l_search_merged =''Y'' )  ');
4559     l('          OR (l_search_merged = ''I'' AND nvl(p.status, ''A'') in (''A'', ''I''))  ');
4560     l('          OR (l_search_merged = ''N'' AND nvl(p.status, ''A'') in (''A''))       )  ');
4561     l('          AND ('||l_party_filter_str||'))');
4562   ELSE
4563     l('        WHERE contains( concat_col, p_contains_str)>0');
4564   END IF;
4565   --Start of BugNo: 4299785
4566   l('          AND( (l_search_merged =''Y'' )  ');
4567   l('           OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4568   l('           OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4569   --End of BugNo: 4299785
4570   l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4571 
4572   /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
4573   l('      ELSE');
4574   ldbg_s('Search_context_id is not null');
4575   l('        IF p_person_api = ''Y'' THEN');
4576   l('          OPEN x_cursor FOR ');
4577   l('            SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4578   l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage');
4579   l('            WHERE contains( concat_col, p_contains_str)>0');
4580   l('            AND d.search_context_id = p_search_ctx_id');
4581   l('            AND d.party_id = stage.party_id');
4582   --Start of BugNo: 4299785
4583   l('            AND( (l_search_merged =''Y'' )  ');
4584   l('             OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4585   l('             OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4586   --End of BugNo: 4299785
4587   l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
4588   l('            UNION ');
4589   l('            SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, r.subject_id, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '|| l_cpt_select_list);
4590   l('            FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage');
4591   l('            WHERE contains( concat_col, p_contains_str)>0');
4592   l('            AND d.search_context_id = p_search_ctx_id');
4593   l('            AND d.party_id = r.subject_id');
4594   l('            AND r.relationship_id = oc.party_relationship_id');
4595   l('            AND oc.org_contact_id = stage.org_contact_id');
4596   --Start of BugNo: 4299785
4597   l('            AND( (l_search_merged =''Y'' )  ');
4598   l('             OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4599   l('             OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4600   --End of BugNo: 4299785
4601   l('            AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);');
4602   l('        ELSE');
4603   l('          OPEN x_cursor FOR ');
4604   l('            SELECT  CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '|| l_cpt_select_list);
4605   l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage');
4606   l('            WHERE contains( concat_col, p_contains_str)>0');
4607   l('            AND d.search_context_id = p_search_ctx_id');
4608   l('            AND d.party_id = stage.party_id');
4609   --Start of BugNo: 4299785
4610   l('            AND( (l_search_merged =''Y'' )  ');
4611   l('             OR (l_search_merged = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I''))  ');
4612   l('             OR (l_search_merged = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'')       )  ');
4613   --End of BugNo: 4299785
4614   l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
4615   l('        END IF;');
4616 
4617   l('      END IF;');
4618 
4619   /**** Restrict_sql is not null. Retrieve using intermedia ****/
4620   l('    ELSE');
4621   ldbg_s('Restrict sql is not null');
4622   l('       l_check := instrb(p_restrict_sql, ''SELECTIVE''); ');
4623   l('       l_check_dt := instrb(p_restrict_sql, ''SELECTIVE_CPT''); ');
4624   l('       IF (l_check_dt > 0 ) THEN ');
4625   ldbg_s('Restrict Sql has the selective_cpt hint');
4626   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */''; ');
4627   l('       ELSIF (l_check > 0 ) THEN ');
4628   ldbg_s('Restrict Sql has the selective hint');
4629   l('           l_hint := ''/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */''; ');
4630   l('       END IF; ');
4631   l('       IF l_search_merged = ''Y'' THEN ');
4632   l('               l_status_sql := '' '' ;  ');
4633   l('       ELSIF l_search_merged = ''I'' THEN  ');
4634   l('               l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''', ''''I'''')''; ');
4635   l('       ELSE ');
4636   l('               l_status_sql := '' AND nvl(p.status,''''A'''') in (''''A'''')''; ');
4637   l('       END IF; ');
4638  /* IT Performance Bug:4589953, if person API then check for relationship contact points */
4639   l('       IF p_person_api = ''Y'' THEN');
4640   l(' 		/*Performance fix for Bug:4589953*/ ');
4641   l('       IF (l_check > 0 ) THEN ');
4642      l('       IF instrb(p_restrict_sql, ''STAGE.'') > 0 THEN ');
4643      l('       	p_restrict_sql1 := replace( p_restrict_sql, ''STAGE.'', ''stage1.'');');
4644      l('       ELSIF instrb(p_restrict_sql, ''stage.'') > 0 THEN ');
4645      l('       	p_restrict_sql1 := replace( p_restrict_sql, ''stage.'', ''stage1.'');');
4646      l('       ELSE');
4647      l('		p_restrict_sql1 := ''stage1.''||p_restrict_sql;');
4648   l('       END IF; ');
4649   l('       	l_sqlstr := '' SELECT   /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  '|| l_cpt_select_list||'''||');
4650   l('                   '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4651   l('                   '' WHERE contains( concat_col, :cont)>0  ''||');
4652   l('                   '' AND (stage.org_contact_id is null ''||');
4653   --Start of BugNo: 4299785
4654   l('                   '' AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''||');
4655   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''||');
4656   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''||');
4657   --End of BugNo: 4299785
4658   l('                   '' AND (''||p_restrict_sql||''))'' ||');
4659   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) '' ||');
4660   l('                   '' UNION '' ||');
4661   l('                   '' SELECT   /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  '|| l_cpt_select_list||'''||');
4662   l('                   '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4663   l('                   '' WHERE contains( concat_col, :cont)>0  ''||');
4664   --Start of BugNo: 4299785
4665   l('                   '' AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''||');
4666   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''||');
4667   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''||');
4668   --End of BugNo: 4299785
4669     l('                 '' AND (stage.org_contact_id in '' || ');
4670     l('                 '' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r '' ||');
4671     l('                 '' where subject_type = ''''PERSON'''' AND object_type = ''''ORGANIZATION'''') stage1 '' || ');
4672     l('                 '' where stage1.relationship_id = oc.party_relationship_id '' || ');
4673 	l('                 '' and (''||p_restrict_sql1 || '') ) )'' ||') ;
4674     l('                 '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4675   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str,');
4676   l('                    p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;');
4677 
4678   l('       ELSE ');
4679   l('       	l_sqlstr := ''SELECT   '' || l_hint ||'' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  '|| l_cpt_select_list||'''||');
4680   l('                   '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4681   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4682   IF l_dyn_party_filter_str IS NOT NULL THEN
4683     l('                 '' AND EXISTS (''||');
4684     l('                 '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4685     l('                 '' WHERE p.party_id = stage.party_id '' || ');
4686     l('                 '' AND ('||l_dyn_party_filter_str||')  ''|| l_status_sql ||'' ) '' || ');
4687   END IF;
4688   --Start of BugNo: 4299785
4689   l('                   '' AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''||');
4690   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''||');
4691   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''||');
4692   --End of BugNo: 4299785
4693   l('                   '' AND (''||get_adjusted_restrict_sql(p_restrict_sql)||'')'' ||');
4694   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4695   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4696   FOR I in 1..l_party_filt_bind.COUNT LOOP
4697     l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4698   END LOOP;
4699   l('                    ,p_dup_party_id, p_dup_party_id;');
4700   l('       END IF; ');
4701 
4702   l('       ELSE ');
4703   l('       	l_sqlstr := ''SELECT   '' || l_hint ||'' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID  '|| l_cpt_select_list||'''||');
4704   l('                   '' FROM HZ_STAGED_CONTACT_POINTS stage''||');
4705   l('                   '' WHERE contains( concat_col, :cont)>0''||');
4706   IF l_dyn_party_filter_str IS NOT NULL THEN
4707     l('                 '' AND EXISTS (''||');
4708     l('                 '' SELECT 1 FROM HZ_STAGED_PARTIES p '' || ');
4709     l('                 '' WHERE p.party_id = stage.party_id '' || ');
4710     l('                 '' AND ('||l_dyn_party_filter_str||')  ''|| l_status_sql ||'' ) '' || ');
4711   END IF;
4712   --Start of BugNo: 4299785
4713   l('                   '' AND( (''''''||l_search_merged||'''''' =''''Y'''' )  ''||');
4714   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''I'''' AND nvl(stage.status_flag, ''''A'''') in (''''A'''', ''''I''''))  ''||');
4715   l('                   ''   OR (''''''||l_search_merged||'''''' = ''''N'''' AND nvl(stage.status_flag, ''''A'''') = ''''A'''')       )  ''||');
4716   --End of BugNo: 4299785
4717   l('                   '' AND (''||p_restrict_sql||'')'' ||');
4718   l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
4719   l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
4720   FOR I in 1..l_party_filt_bind.COUNT LOOP
4721     l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
4722   END LOOP;
4723   l('                    ,p_dup_party_id, p_dup_party_id;');
4724   l('       END IF; ');
4725   l('    END IF;');
4726   l('  END IF; ');
4727   l(' 	    output_long_strings(''----------------------------------------------------------'');');
4728   l('       output_long_strings(''Contact Points Contains String = ''||p_contains_str);');
4729   l('		output_long_strings(''Restrict Sql = ''||p_restrict_sql);');
4730   l('  exception');
4731   l('    when others then');
4732   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
4733   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
4734   l('        FND_MSG_PUB.ADD;');
4735   l('        RAISE FND_API.G_EXC_ERROR;');
4736   --Start Bug No: 3032742.
4737   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
4738   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4739   l('        FND_MSG_PUB.ADD;');
4740   l('        RAISE FND_API.G_EXC_ERROR;');
4741   --Bug: 3392837
4742   l('      elsif (instrb(SQLERRM,''ORA-20000'')>0) then ');
4743   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
4744   l('        FND_MSG_PUB.ADD;');
4745   l('        RAISE FND_API.G_EXC_ERROR;');
4746   --End Bug No : 3032742.
4747   l('      else ');
4748   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_API_OTHERS_EXCEP'');');
4749   l('    	 FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
4750   l('    	 FND_MSG_PUB.ADD;');
4751   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
4752   l('      end if;');
4753   l('  END;');
4754   l('');
4755 
4756  l('');
4757  l('  PROCEDURE return_direct_matches(p_restrict_sql VARCHAR2, p_match_str VARCHAR2, p_thresh NUMBER, p_search_ctx_id NUMBER, p_search_merged VARCHAR2, p_dup_party_id NUMBER, x_num_matches OUT NUMBER) IS');
4758 
4759   l('    l_sqlstr VARCHAR2(4000);');
4760   l('    l_search_merged VARCHAR2(1);');
4761   l('  BEGIN');
4762   l('    IF (p_search_merged is null) then ');
4763   l('       l_search_merged := ''N'';  ');
4764   l('    ELSE ');
4765   l('       l_search_merged := p_search_merged; ');
4766   l('    END IF; ');
4767   l('    IF p_restrict_sql IS NULL THEN');
4768   l('      INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
4769   l('      SELECT p_search_ctx_id, PARTY_ID, '||l_party_name_score);
4770   l('      FROM hz_staged_parties ');
4771   l('      WHERE TX8 LIKE g_party_stage_rec.TX8||'' %''');
4772   l('      AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||'' '' =  TX36))');
4773   l('      AND( (l_search_merged =''Y'' ) ');
4774   l('           OR (l_search_merged = ''I'' AND nvl(status, ''A'') in (''A'', ''I''))  ');
4775   l('           OR (l_search_merged = ''N'' AND nvl(status, ''A'') in (''A'')))  ');
4776   l('      AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)');
4777   l('      AND rownum <= p_thresh;');
4778   l('    ELSE');
4779   l_party_name_score:=replace(replace(l_party_name_score,'g_party_stage_rec.TX8',':TX8'),'''','''''');
4780   l('      l_sqlstr := ''INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) SELECT :ctx_id, PARTY_ID, '||l_party_name_score||' FROM hz_staged_parties stage '';');
4781   l('      l_sqlstr := l_sqlstr || '' WHERE TX8 like :TX8||'''' %'''' '';');
4782   l('      l_sqlstr := l_sqlstr || '' AND (:TX36 IS NULL OR :TX36||'''' '''' =  TX36) '';');
4783   l('      IF l_search_merged = ''N'' THEN');
4784   l('        l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''')=''''A'''' '';');
4785   l('      ELSIF l_search_merged = ''Y'' THEN');
4786   l('        l_sqlstr := l_sqlstr || '' AND nvl(status,''''A'''') in (''''A'''',''''I'''') '';');
4787   l('      END IF;');
4788   l('      l_sqlstr := l_sqlstr || '' AND (:p_dup IS NULL OR party_id <> :p_dup ) '';');
4789   l('     l_sqlstr := l_sqlstr || '' AND ''||p_restrict_sql||'' '';');
4790   l('     l_sqlstr := l_sqlstr || '' AND ROWNUM <= :thresh '';');
4791 
4792   IF l_purpose  IN ('S','W') THEN
4793     l('     EXECUTE IMMEDIATE l_sqlstr USING p_search_ctx_id, g_party_stage_rec.TX8,g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id,p_thresh;');
4794   ELSE
4795     l('     EXECUTE IMMEDIATE l_sqlstr USING p_search_ctx_id, g_party_stage_rec.TX8,g_party_stage_rec.TX36,g_party_stage_rec.TX36,p_dup_party_id,p_dup_party_id,p_thresh;');
4796   END IF;
4797 
4798   l('    END IF;');
4799   l('    x_num_matches := SQL%ROWCOUNT;');
4800   l('  END;');
4801   l('');
4802   l('  FUNCTION get_new_score_rec (');
4803   l('    	 p_init_total_score NUMBER,');
4804   l('    	 p_init_party_score NUMBER,');
4805   l('    	 p_init_party_site_score NUMBER,');
4806   l('    	 p_init_contact_score NUMBER,');
4807   l('    	 p_init_contact_point_score NUMBER, ');
4808   l('    	 p_party_id NUMBER, ');
4809   l('    	 p_party_site_id NUMBER, ');
4810   l('    	 p_org_contact_id NUMBER, ');
4811   l('    	 p_contact_point_id NUMBER) ');
4812   l('     RETURN HZ_PARTY_SEARCH.score_rec IS');
4813   l('    l_score_rec HZ_PARTY_SEARCH.score_rec;');
4814   l('  BEGIN');
4815   ldbg_s('-----------------','calling the function get_new_score_rec to set the l_score_rec structure');
4816   l('    l_score_rec.TOTAL_SCORE := p_init_total_score;');
4817   l('    l_score_rec.PARTY_SCORE := p_init_party_score;');
4818   l('    l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;');
4819   l('    l_score_rec.CONTACT_SCORE := p_init_contact_score;');
4820   l('    l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;');
4821   l('    l_score_rec.PARTY_ID := p_party_id;');
4822   l('    l_score_rec.PARTY_SITE_ID := p_party_site_id;');
4823   l('    l_score_rec.ORG_CONTACT_ID := p_org_contact_id;');
4824   l('    l_score_rec.CONTACT_POINT_ID := p_contact_point_id;');
4825   l('    RETURN l_score_rec;');
4826   l('  END;');
4827 END IF; ---Code Change for Match Rule Set
4828   l('');
4829   l('   /**********************************************************');
4830   l('   This procedure finds the set of parties that match the search');
4831   l('   criteria and returns a scored set of parties');
4832   l('');
4833   l('   The steps in executing the search are as follows');
4834   l('    1. Initialization and error checks');
4835   l('    2. Setup of intermedia query strings for Acquisition query');
4836   l('    3. Execution of Acquisition query');
4837   l('    4. Execution of Secondary queries to score results');
4838   l('    5. Setup of data temporary table to return search results');
4839   l('   **********************************************************/');
4840   l('');
4841   -- Generated
4842   l('PROCEDURE find_parties (');
4843   l('      p_rule_id               IN      NUMBER,');
4844   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
4845   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
4846   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
4847   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
4848   l('      p_restrict_sql          IN      VARCHAR2,');
4849   l('      p_match_type            IN      VARCHAR2,');
4850   l('      p_search_merged         IN      VARCHAR2,');
4851   l('      p_dup_party_id          IN      NUMBER,');
4852   l('      p_dup_set_id            IN      NUMBER,');
4853   l('      p_dup_batch_id          IN      NUMBER,');
4854   l('      p_ins_details           IN      VARCHAR2,');
4855   l('      x_search_ctx_id         OUT     NUMBER,');
4856   l('      x_num_matches           OUT     NUMBER');
4857   l(') IS');
4858   l('');
4859 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
4860   l('  -- Strings to hold the generated Intermedia query strings');
4861   l('  l_party_contains_str VARCHAR2(32000); ');
4862   l('  l_party_site_contains_str VARCHAR2(32000);');
4863   l('  l_contact_contains_str VARCHAR2(32000);');
4864   l('  l_contact_pt_contains_str VARCHAR2(32000);');
4865   l('  l_denorm_str VARCHAR2(32000);');
4866   l('  l_ps_denorm_str VARCHAR2(32000);');
4867   l('  l_ct_denorm_str VARCHAR2(32000);');
4868   l('  l_cpt_denorm_str VARCHAR2(32000);');
4869 
4870   l('');
4871   l('  -- Other local variables');
4872   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
4873   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
4874   l('  -- For Score calculation');
4875   l('  l_max_score NUMBER;');
4876   l('  l_match_idx NUMBER;');
4877   l('  l_entered_max_score NUMBER;');
4878   l('  FIRST BOOLEAN;');
4879   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
4880   l('');
4881   FOR TX IN (
4882       SELECT distinct f.staged_attribute_column
4883       FROM hz_trans_functions_vl f, hz_secondary_trans st,
4884            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
4885       WHERE sa.match_rule_id = p_rule_id
4886       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
4887       AND st.function_id = f.function_id
4888       AND a.attribute_id = sa.attribute_id) LOOP
4889     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
4890   END LOOP;
4891   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
4892   l('  H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
4893   l('  H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
4894   l('');
4895   l('  l_score NUMBER;');
4896   l('  l_idx NUMBER;');
4897   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
4898   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
4899   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
4900   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
4901   l('  l_party_id NUMBER;');
4902   l('  l_ps_party_id NUMBER;');
4903   l('  l_ct_party_id NUMBER;');
4904   l('  l_cpt_party_id NUMBER;');
4905   l('  l_cpt_ps_id NUMBER;');
4906   l('  l_cpt_contact_id NUMBER;');
4907   l('  l_cpt_type VARCHAR2(100);');
4908   l('  l_party_site_id NUMBER;');
4909   l('  l_org_contact_id NUMBER;');
4910   l('  l_contact_pt_id NUMBER;');
4911   l('  l_ps_contact_id NUMBER;');
4912   l('  l_party_max_score NUMBER;');
4913   l('  l_ps_max_score NUMBER;');
4914   l('  l_contact_max_score NUMBER;');
4915   l('  l_cpt_max_score NUMBER;');
4916   l('  l_denorm_max_score NUMBER;');
4917   l('  l_non_denorm_max_score NUMBER;');
4918   l('');
4919   l('  defpt NUMBER :=0;');
4920   l('  defps NUMBER :=0;');
4921   l('  defct NUMBER :=0;');
4922   l('  defcpt NUMBER :=0;');
4923   l('  l_index NUMBER;');
4924   l('  l_max_thresh NUMBER;');
4925   l('  l_tmp NUMBER;');
4926   l('  l_merge_flag VARCHAR2(1);');
4927   l('  l_num_eval NUMBER:=0;');
4928   l('');
4929   l('  --Fix for bug 4417124 ');
4930   l('  l_use_contact_addr_info BOOLEAN := TRUE;');
4931   l('  l_use_contact_cpt_info BOOLEAN  := TRUE;');
4932   l('  l_use_contact_addr_flag VARCHAR2(1) := ''Y'';');
4933   l('  l_use_contact_cpt_flag  VARCHAR2(1) := ''Y'';');
4934   l('');
4935   l('  L_RETURN_IMM_EXC EXCEPTION;');
4936   l('');
4937   l('  ');
4938   l('  /********************* Find Parties private procedures *******/');
4939 
4940   l('  PROCEDURE push_eval IS');
4941   l('  BEGIN');
4942   ldbg_s('-----------------','calling the procedure push_eval');
4943   ldbg_s('Emptying the lists H_PARTY_ID, H_PARTY_ID_LIST and H_SCORES');
4944   l('    H_PARTY_ID.DELETE;');
4945   l('    H_PARTY_ID_LIST.DELETE;');
4946   l('    H_SCORES.DELETE;        ');
4947   l('    g_mappings.DELETE;');
4948   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
4949   l('    call_order(5) := call_order(1);');
4950   l('    call_type(5) := ''AND'';');
4951   l('    call_max_score(5) := call_max_score(1);');
4952   l('    call_type(2) := ''OR'';');
4953   l('  END;');
4954 
4955   l('');
4956   l('  /**  Private procedure to acquire and score at party level  ***/');
4957   l('  PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
4958   l('    l_party_id_idx NUMBER:=1;');
4959   l('    l_ctx_id NUMBER;');
4960   l('    l_precalc_score BOOLEAN := FALSE;');
4961   l('    l_TX35_new varchar2(4000);');--9155543
4962   l('  BEGIN');
4963   ldbg_s('-----------------','calling the procedure eval_party_level');
4964   l('    SAVEPOINT eval_start;');
4965   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
4966   l('      l_ctx_id := l_search_ctx_id;');
4967   ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
4968   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
4969   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
4970   l('             l_search_ctx_id,H_PARTY_ID(I));');
4971   l('      H_PARTY_ID.DELETE;');
4972   l('      H_PARTY_ID_LIST.DELETE;');
4973   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
4974   ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
4975   l('      l_ctx_id := l_search_ctx_id;');
4976   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
4977   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
4978   l('             l_search_ctx_id,H_PARTY_ID(I));');
4979   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
4980   l('    ELSE');
4981   l('      IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
4982   l('         and check_estimate_hits(''PARTY'',p_party_contains_str)>l_max_thresh THEN');
4983   ldbg_s('In eval party level estimated hits exceed threshold');
4984   l('        IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' AND p_dup_batch_id IS NULL THEN');
4985   ldbg_s('In eval party level resolution options is set to SQL search.');
4986   l('          IF (l_party_site_contains_str IS NULL AND');
4987   l('             l_contact_contains_str IS NULL AND');
4988   l('             l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN');
4989   l('            return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,p_search_merged,p_dup_party_id, x_num_matches);');
4990   l('            RAISE L_RETURN_IMM_EXC;');
4991   l('          ELSE');
4992   l('            open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);');
4993   l('          END IF;');
4994   l('        ELSE');
4995   l('          IF p_index>1 THEN');
4996   ldbg_s('In eval party level number of matches found exceeded threshold');
4997   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
4998   l('            FND_MSG_PUB.ADD;');
4999   l('            RAISE FND_API.G_EXC_ERROR;');
5000   l('          ELSE');
5001   l('            push_eval;');
5002   l('            RETURN;');
5003   l('          END IF;');
5004   l('        END IF;');
5005   l('      END IF;');
5006   l('      l_ctx_id := NULL;');
5007   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5008   l('    END IF;');
5009   ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_CURSOR ================');
5010   l('    IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN');
5011   l('      open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);');
5012   l('    END IF;');
5013   l('    LOOP ');
5014   l('      FETCH l_party_cur INTO');
5015   l('         l_party_id '||l_p_into_list||';');
5016   l('      EXIT WHEN l_party_cur%NOTFOUND;');
5017   l('      l_index := map_id(l_party_id);');
5018      IF(l_p_param_list LIKE '%TX35%') THEN--9155543
5019   l('  l_TX35_new:=RTRIM(LTRIM(l_TX35));');
5020  	l('  l_TX35_new:=(CASE l_TX35_new WHEN ''SYNC'' THEN HZ_STAGE_MAP_TRANSFORM.den_acc_number (l_party_id) ELSE l_TX35_new END);');
5021  	            l_p_param_list:=replace(l_p_param_list,'l_TX35','l_TX35_new');
5022  	   END IF;
5023   l('      l_score := GET_PARTY_SCORE('||l_p_param_list||');');
5024     l_p_param_list:=replace(l_p_param_list,'l_TX35_new','l_TX35');
5025   l('      IF NOT H_SCORES.EXISTS(l_index) THEN');
5026   l('        H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
5027   l('      ELSE');
5028   l('        H_SCORES(l_index).TOTAL_SCORE := ');
5029   l('                H_SCORES(l_index).TOTAL_SCORE+l_score;');
5030   l('        H_SCORES(l_index).PARTY_SCORE := l_score;');
5031   l('      END IF;');
5032   l('      IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5033   l('        H_PARTY_ID_LIST(l_index) := 1;');
5034   l('        H_PARTY_ID(l_party_id_idx) := l_party_id;');
5035   l('        l_party_id_idx:= l_party_id_idx+1;');
5036   l('      END IF;');
5037   l('      IF (l_party_id_idx-1)>l_max_thresh THEN');
5038   l('        IF p_index=1 AND call_order(2) = ''PARTY_SITE'' ');
5039   l('          AND call_type(2) = ''AND'' AND l_contact_contains_str IS NULL');
5040   l('          AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' ');
5041   l('          AND l_contact_pt_contains_str IS NULL THEN');
5042   l('            EXIT;');
5043   l('        END IF;');
5044   l('	      CLOSE l_party_cur;'); --Bug No: 3872745
5045   l('        IF p_index>1 THEN');
5046   ldbg_s('In eval party level estimated hits exceed threshold');
5047   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5048   l('          FND_MSG_PUB.ADD;');
5049   l('          RAISE FND_API.G_EXC_ERROR;');
5050   l('        ELSE');
5051   l('          push_eval;');
5052   l('          RETURN;');
5053   l('        END IF;');
5054   l('      END IF;');
5055   ds(fnd_log.level_statement);
5056   dc(fnd_log.level_statement,'In eval_party_level l_party_id = ','l_party_id');
5057   dc(fnd_log.level_statement,'In eval_party_level l_score = ','l_score');
5058   de;
5059   l('    END LOOP;');
5060   ldbg_s('===========END of LOOP=====================');
5061   l('    CLOSE l_party_cur;');
5062   l('    ROLLBACK to eval_start;');
5063   l('  END;');
5064   l('');
5065   l('  /**  Private procedure to acquire and score at party site level  ***/');
5066   l('  PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
5067   l('    l_party_id_idx NUMBER:=1;');
5068   l('    l_ctx_id NUMBER;');
5069   l('    h_ps_id HZ_PARTY_SEARCH.IDList;');
5070   l('    h_ps_party_id HZ_PARTY_SEARCH.IDList;');
5071   l('    h_ps_score HZ_PARTY_SEARCH.IDList;');
5072   l('    detcnt NUMBER := 1;');
5073   l('  BEGIN');
5074   ldbg_s('-----------------','calling the procedure eval_party_site_level');
5075   l('  IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,''D_PS'')>0');
5076   l('      AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and');
5077   l('      l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> ''Y'' THEN');
5078   l('    l_party_id := H_SCORES.FIRST;');
5079   l('    WHILE l_party_id IS NOT NULL LOOP');
5080   l('      H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;');
5081   l('      l_party_id:=H_SCORES.NEXT(l_party_id);');
5082   l('    END LOOP;');
5083   l('    RETURN;');
5084 
5085   l('  END IF;');
5086 
5087   l('    SAVEPOINT eval_start;');
5088   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
5089   ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5090   l('      l_ctx_id := l_search_ctx_id;');
5091   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5092   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5093   l('             l_search_ctx_id,H_PARTY_ID(I));');
5094   l('      H_PARTY_ID.DELETE;');
5095   l('      H_PARTY_ID_LIST.DELETE;');
5096   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5097   ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5098   l('      l_ctx_id := l_search_ctx_id;');
5099   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5100   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5101   l('             l_search_ctx_id,H_PARTY_ID(I));');
5102   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5103   l('    ELSE');
5104   l('      IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5105   l('         and check_estimate_hits(''PARTY_SITES'',p_party_site_contains_str)>l_max_thresh THEN');
5106   ldbg_s('In eval party site level estimated hits exceed threshold');
5107   l('        IF p_index>1 THEN');
5108   ldbg_s('In eval party site level number of matches found exceeded threshold');
5109   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5110   l('          FND_MSG_PUB.ADD;');
5111   l('          RAISE FND_API.G_EXC_ERROR;');
5112   l('        ELSE');
5113   l('          push_eval;');
5114   l('          RETURN;');
5115   l('        END IF;');
5116   l('      END IF;');
5117 
5118   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5119   l('      l_ctx_id := NULL;');
5120   l('    END IF;');
5121   ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_SITE_CURSOR ================');
5122   l('    open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id,  p_search_merged, ''N'',''N'',l_party_site_cur);');
5123   l('    LOOP ');
5124   l('      FETCH l_party_site_cur INTO');
5125   l('         l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
5126   l('      EXIT WHEN l_party_site_cur%NOTFOUND;');
5127   l('      --Fix for bug 4417124 ');
5128   l('      IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN');
5129   l('        l_index := map_id(l_ps_party_id);');
5130   l('        l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
5131 
5132   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
5133   l('          H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);');
5134   l('        ELSE');
5135   l('          IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
5136   l('            H_SCORES(l_index).TOTAL_SCORE := ');
5137   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
5138   l('            H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
5139   l('          END IF;');
5140   l('        END IF;');
5141   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5142   l('          H_PARTY_ID_LIST(l_index) := 1;');
5143   l('          H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
5144   l('          l_party_id_idx:= l_party_id_idx+1;');
5145   l('        END IF;');
5146   l('        IF p_ins_details = ''Y'' THEN');
5147   l('          h_ps_id(detcnt) := l_party_site_id;');
5148   l('          h_ps_party_id(detcnt) := l_ps_party_id;');
5149   l('          IF (p_emax_score > 0) THEN ');
5150   l('              h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
5151   l('          ELSE ');
5152   l('              h_ps_score(detcnt) := 0; ');
5153   l('          END IF; ');
5154   l('          detcnt := detcnt +1;');
5155   l('        END IF;');
5156   ds(fnd_log.level_statement);
5157   dc(fnd_log.level_statement,'In eval_party_site_level l_party_site_id = ','l_party_site_id');
5158   dc(fnd_log.level_statement,'In eval_paty_site_level l_ps_party_id = ','l_ps_party_id');
5159   dc(fnd_log.level_statement,'In eval_party_site_level l_score = ','l_score');
5160   de;
5161   l('      END IF;');
5162   l('    END LOOP;');
5163   ldbg_s('===========END of LOOP=====================');
5164   l('    CLOSE l_party_site_cur;');
5165   l('    ROLLBACK to eval_start;');
5166   l('    IF p_ins_details = ''Y'' THEN');
5167  ldbg_s('In eval_party_site_level inserting into HZ_MATCHED_PARTY_SITES_GT from the H_PS_ID list');
5168   l('      FORALL I in 1..h_ps_id.COUNT ');
5169   l('        INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
5170   l('          l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
5171   l('    END IF;');
5172   l('  END;');
5173   l('');
5174   l('  /**  Private procedure to acquire and score at contact point level  ***/');
5175   l('  PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
5176   l('    l_party_id_idx NUMBER:=1;');
5180   l('    h_ct_score HZ_PARTY_SEARCH.IDList;');
5177   l('    l_ctx_id NUMBER;');
5178   l('    h_ct_id HZ_PARTY_SEARCH.IDList;');
5179   l('    h_ct_party_id HZ_PARTY_SEARCH.IDList;');
5181   l('    detcnt NUMBER := 1;');
5182   l('  BEGIN');
5183   ldbg_s('-----------------','calling the procedure eval_contact_level');
5184   l('    SAVEPOINT eval_start;');
5185   l('    IF l_match_str = '' AND '' AND p_call_type=''AND'' THEN');
5186   ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5187   l('      l_ctx_id := l_search_ctx_id;');
5188   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5189   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5190   l('             l_search_ctx_id,H_PARTY_ID(I));');
5191   l('      H_PARTY_ID.DELETE;');
5192   l('      H_PARTY_ID_LIST.DELETE;');
5193   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5194   ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5195   l('      l_ctx_id := l_search_ctx_id;');
5196   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5197   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5198   l('             l_search_ctx_id,H_PARTY_ID(I));');
5199   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5200   l('    ELSE');
5201   l('      IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5202   l('         and check_estimate_hits(''CONTACTS'',p_contact_contains_str)>l_max_thresh THEN');
5203   ldbg_s('In eval contact level estimated hits exceed threshold');
5204   l('        IF p_index>1 THEN');
5205   ldbg_s('In eval contact level number of matches found exceeded threshold');
5206   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5207   l('          FND_MSG_PUB.ADD;');
5208   l('          RAISE FND_API.G_EXC_ERROR;');
5209   l('        ELSE');
5210   l('          push_eval;');
5211   l('          RETURN;');
5212   l('        END IF;');
5213   l('      END IF;');
5214   l('      l_ctx_id := NULL;');
5215   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5216   l('    END IF;');
5217   ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_CURSOR ================');
5218   l('    open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id,  p_search_merged, l_contact_cur);');
5219   l('    LOOP ');
5220   l('      FETCH l_contact_cur INTO');
5221   l('         l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
5222   l('      EXIT WHEN l_contact_cur%NOTFOUND;');
5223   l('      l_index := map_id(l_ct_party_id);');
5224   l('      l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
5225 
5226   l('      IF NOT H_SCORES.EXISTS(l_index) THEN');
5227   l('        H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id,null);');
5228   l('      ELSE');
5229   l('        IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
5230   l('          H_SCORES(l_index).TOTAL_SCORE := ');
5231   l('                H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
5232   l('          H_SCORES(l_index).CONTACT_SCORE := l_score;');
5233   l('        END IF;');
5234   l('      END IF;');
5235   l('      IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5236   l('        H_PARTY_ID_LIST(l_index) := 1;');
5237   l('        H_PARTY_ID(l_party_id_idx) := l_ct_party_id;');
5238   l('        l_party_id_idx:= l_party_id_idx+1;');
5239   l('      END IF;');
5240   l('      IF p_ins_details = ''Y'' THEN');
5241   l('        h_ct_id(detcnt) := l_org_contact_id;');
5245   l('        ELSE ');
5242   l('        h_ct_party_id(detcnt) := l_ct_party_id;');
5243   l('        IF (p_emax_score > 0) THEN ');
5244   l('            h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
5246   l('            h_ct_score(detcnt) := 0; ');
5247   l('        END IF; ');
5248   l('        detcnt := detcnt +1;');
5249   l('      END IF;');
5250   ds(fnd_log.level_statement);
5251   dc(fnd_log.level_statement,'In eval_contact_level l_org_contact_id = ','l_org_contact_id');
5252   dc(fnd_log.level_statement,'In eval_contact_level l_ct_party_id = ','l_ct_party_id');
5253   dc(fnd_log.level_statement,'In eval_contact_level l_score = ','l_score');
5254   de;
5255   l('    END LOOP;');
5256   ldbg_s('===========END of LOOP=====================');
5257   l('    CLOSE l_contact_cur;');
5258   l('    ROLLBACK to eval_start;');
5259   l('    IF p_ins_details = ''Y'' THEN');
5260   ldbg_s('In eval_contact_level inserting into HZ_MATCHED_CONTACTS_GT from the H_CT_ID list');
5261   l('      FORALL I in 1..h_ct_id.COUNT ');
5262   l('        INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
5263   l('          l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
5264   l('    END IF;');
5265   l('  END;');
5266   l('');
5267   l('  /**  Private procedure to acquire and score at contact point level  ***/');
5268   l('  PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
5269   l('    l_party_id_idx NUMBER:=1;');
5270   l('    l_ctx_id NUMBER;');
5271   l('    h_cpt_id HZ_PARTY_SEARCH.IDList;');
5272   l('    h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
5273   l('    h_cpt_score HZ_PARTY_SEARCH.IDList;');
5274   l('    detcnt NUMBER := 1;');
5275   l('    l_cpt_flag VARCHAR2(1) := ''N'';');
5276 
5277   --l('    l_continue VARCHAR2(1) := ''Y'';');
5278   l('    is_a_match VARCHAR2(1) := ''Y'';');
5279   l('  BEGIN');
5280   ldbg_s('-----------------','calling the procedure eval_cpt_level');
5281   l('    SAVEPOINT eval_start;');
5282   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
5283   ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5284   l('      l_ctx_id := l_search_ctx_id;');
5285   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5286   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5287   l('             l_search_ctx_id,H_PARTY_ID(I));');
5288   l('      H_PARTY_ID.DELETE;');
5289   l('      H_PARTY_ID_LIST.DELETE;');
5290   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5291   ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
5292   l('      l_ctx_id := l_search_ctx_id;');
5293   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5294   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5295   l('             l_search_ctx_id,H_PARTY_ID(I));');
5296   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5297   l('    ELSE');
5298   l('      IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
5299   l('         and check_estimate_hits(''CONTACT_POINTS'',p_contact_pt_contains_str)>l_max_thresh THEN');
5300   ldbg_s('In eval contact point level estimated hits exceed threshold');
5301   l('        IF p_index>1 THEN');
5302   ldbg_s('In eval contact point level number of matches found exceeded threshold');
5303   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5304   l('          FND_MSG_PUB.ADD;');
5305   l('          RAISE FND_API.G_EXC_ERROR;');
5306   l('        ELSE');
5307   l('          push_eval;');
5308   l('          RETURN;');
5309   l('        END IF;');
5310   l('      END IF;');
5311 
5312   l('      l_ctx_id := NULL;');
5313   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
5314   l('    END IF;');
5315   ldbg_s('========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR ================');
5316   l('    open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id,  p_search_merged, ''N'', ''N'',l_contact_pt_cur);');
5317   l('    LOOP ');
5318   l('      FETCH l_contact_pt_cur INTO');
5319   l('         l_contact_pt_id,  l_cpt_type, l_cpt_party_id,  l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
5320   l('      EXIT WHEN l_contact_pt_cur%NOTFOUND;');
5321   ldbg_s('----------------------------------------------------------------------------------');
5322   ldbg_sv('Processing party_id - ','l_cpt_party_id');
5323   ldbg_sv('Contact Point Type - ','l_cpt_type');
5324   l('      --Fix for bug 4417124 ');
5325   l('      IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN');
5326   l('        l_index := map_id(l_cpt_party_id);');
5327   l('        l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
5328 
5329   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
5330   l('          H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);');
5331   if l_purpose IN ('S','W') then
5332     l('          H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
5333     ldbg_s('Processing second Time for this party');
5334   else
5335    	ldbg_s('Processing First Time for this party');
5336   end if;
5337   ldbg_sv('l_index is - ','l_index');
5338 
5339    l('        ELSE');
5340   if l_purpose IN ('S','W') then
5341     l('          IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then');
5342     l('            IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then');
5343     l('              H_SCORES(l_index).TOTAL_SCORE :=');
5344     l('              H_SCORES(l_index).TOTAL_SCORE-(H_SCORES(l_index).CONTACT_POINT_SCORE-H_SCORES(l_index).cpt_type_match(l_cpt_type))+l_score;');
5345     l('              H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE-H_SCORES(l_index).cpt_type_match(l_cpt_type) + l_score;');
5346     l('              H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
5347     ldbg_s('Passed in score greater than existing score');
5348     ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ' , 'H_SCORES(l_index).TOTAL_SCORE' );
5349     ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ' , 'H_SCORES(l_index).CONTACT_POINT_SCORE' );
5350     ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ', 'H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
5351     l('            END IF;');
5352     l('          ELSE');
5353     ldbg_s('Passed in score less than or equal to the existing score ');
5354     l('            H_SCORES(l_index).TOTAL_SCORE :=');
5355     l('            		H_SCORES(l_index).TOTAL_SCORE+l_score;');
5356     l('            H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
5357     l('            H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
5358     ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ','H_SCORES(l_index).TOTAL_SCORE' );
5362   else
5359     ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ','H_SCORES(l_index).CONTACT_POINT_SCORE' );
5360     ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
5361     l('          END IF;');
5363 
5364   l('          IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
5365   l('            H_SCORES(l_index).TOTAL_SCORE := ');
5369  end if;
5366   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
5367   l('            H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
5368   l('          END IF;');
5370   l('        END IF;');
5371   ldbg_sv('call type is - ','p_call_type'  );
5372   ldbg_sv('match string is - ','l_match_str' );
5373   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
5374   if l_purpose  IN ('S','W')then
5375     l('          -- If rule is match all ');
5376     l('          IF l_match_str = '' AND '' THEN');
5377     ldbg_s('Match string is AND ');
5378     l('            IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
5379     l('              is_a_match := ''Y'';');
5380     ldbg_sv('is_a_match is ' , 'is_a_match');
5381     l('            ELSE');
5382     l('              is_a_match := ''N'';');
5383     ldbg_sv('is_a_match is ' , 'is_a_match');
5384     l('            END IF;');
5385     l('          -- Else it is construed to be a match anyway');
5386     l('          ELSE');
5387     l('            is_a_match := ''Y'';');
5388     ldbg_sv('is_a_match is ' , 'is_a_match');
5389     l('          END IF;');
5390     l('        IF (is_a_match=''Y'') then');
5391  end if;
5392 
5393   l('          H_PARTY_ID_LIST(l_index) := 1;');
5394   l('          H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;');
5395   l('          l_party_id_idx:= l_party_id_idx+1;');
5396   if l_purpose IN ('S','W') then
5397   l('      end if;');
5398   end if;
5399   l('        END IF;');
5400   l('        IF p_ins_details = ''Y'' THEN');
5401  if l_purpose  IN ('S','W') then
5402     l('          IF l_match_str = '' AND '' THEN');
5403     ldbg_s('Match string is AND ');
5404     l('            IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
5405     l('              is_a_match := ''Y'';');
5406     ldbg_sv('is_a_match is ' , 'is_a_match');
5407     l('            ELSE');
5408     l('              is_a_match := ''N'';');
5409     ldbg_sv('is_a_match is ' , 'is_a_match');
5410     l('            END IF;');
5411     l('          ELSE');
5412     l('            is_a_match := ''Y'';');
5413     ldbg_sv('is_a_match is ' , 'is_a_match');
5414     l('          END IF;');
5415     l('          IF (is_a_match=''Y'') THEN');
5416  end if;
5417   l('          FOR I IN 1..h_cpt_id.COUNT LOOP');
5418   l('          IF h_cpt_id(I)=l_contact_pt_id THEN');
5419   l('          	 l_cpt_flag := ''Y'';');
5420   l('          END IF;');
5421   l('          END LOOP;');
5422   l('          IF l_cpt_flag = ''Y'' THEN');
5423   l('          	 NULL;');
5424   l('          ELSE');
5425   l('         	 h_cpt_id(detcnt) := l_contact_pt_id;');
5426   l('          	 h_cpt_party_id(detcnt) := l_cpt_party_id;');
5427   l('          	 IF (p_emax_score > 0) THEN ');
5428   l('              h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
5429   l('            ELSE ');
5430   l('              h_cpt_score(detcnt) := 0; ');
5431   l('          	 END IF; ');
5432   l('            detcnt := detcnt +1;');
5433   l('          END IF;');
5434 
5435   if l_purpose IN ('S','W') then
5436   l('      end if;');
5437   end if;
5438 
5439   l('        END IF;');
5440   ds(fnd_log.level_statement);
5441   dc(fnd_log.level_statement,'In eval_cpt_level l_contact_pt_id = ','l_contact_pt_id');
5442   dc(fnd_log.level_statement,'In eval_cpt_level l_cpt_party_id = ','l_cpt_party_id');
5443   dc(fnd_log.level_statement,'In eval_cpt_level l_score = ','l_score');
5444   de;
5445   l('      END IF;');
5446   l('    END LOOP;');
5447   ldbg_s('===========END of LOOP=====================');
5448   l('    CLOSE l_contact_pt_cur;');
5449   l('    ROLLBACK to eval_start;');
5450   l('    IF p_ins_details = ''Y'' THEN');
5451   ldbg_s('In eval_contact_point_level inserting into HZ_MATCHED_CPTS_GT from the H_CPT_ID list');
5452   l('      FORALL I in 1..h_cpt_id.COUNT ');
5453   l('        INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
5454   l('          l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
5455   l('    END IF;');
5456   l('  END eval_cpt_level;');
5457   l('');
5458   l('  /**  Private procedure to call the eval procedure at each entity in the correct order ***/');
5459   l('  PROCEDURE do_eval (p_index NUMBER) IS');
5460   l('    l_ctx_id NUMBER;');
5461   l('    l_threshold NUMBER;'); --Bug No: 4407425
5462   l('    other_acq_criteria_exists BOOLEAN; '); --Bug No: 4407425
5463   l('    acq_cnt NUMBER; '); --Bug No:5218095
5464   l('  BEGIN');
5465   ldbg_s('-----------------','calling the procedure do_eval');
5466   --Start of Bug No: 4407425
5467   l('    IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
5468   IF(l_purpose ='S') THEN
5469   l('     l_threshold :=  round(( l_entered_max_score / '|| l_max_score ||') * '|| l_match_threshold ||'); ');
5470   ELSE
5471   l('     l_threshold := '|| l_match_threshold ||';  ');
5472   END IF;
5473   l('    other_acq_criteria_exists := TRUE ;');
5474   --Start of Bug No:5218095
5475   /*l('    IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
5476   l('     other_criteria_exists := FALSE; ');
5477   l('    END IF ; ');*/
5478   l('    --check if acquisition criteria exists for any other entity');
5479   l('    IF l_party_contains_str IS NOT NULL THEN ');
5480   l('    	acq_cnt := 1; ');
5481   l('    END IF; ');
5482   l('    IF l_party_site_contains_str IS NOT NULL THEN ');
5483   l('    	acq_cnt := acq_cnt+1; ');
5484   l('    END IF; ');
5485   l('    IF l_contact_contains_str IS NOT NULL THEN ');
5486   l('    	acq_cnt := acq_cnt+1; ');
5490   l('    END IF;  ');
5487   l('    END IF;');
5488   l('    IF l_contact_pt_contains_str IS NOT NULL THEN ');
5489   l('    	acq_cnt := acq_cnt+1; ');
5491 
5492   l('    IF acq_cnt>1 THEN ');
5493   l('    	other_acq_criteria_exists := TRUE; ');
5494   l('    ELSE');
5495   l('    	other_acq_criteria_exists := FALSE; ');
5496   l('    END IF;  ');
5497   dc(fnd_log.level_statement,'count of entities having acquisition attributes = ','acq_cnt');
5498   dc(fnd_log.level_statement,'call_max_score(p_index) = ','call_max_score(p_index)');
5499   dc(fnd_log.level_statement,'l_threshold = ','l_threshold');
5500   --End of Bug No:5218095
5501   l('    IF(l_match_str = '' AND '' AND other_acq_criteria_exists) THEN');
5502   --start of Bug No:5218095
5506   l('    	ELSE ');
5503   l('    	IF ( call_max_score(p_index) < l_threshold) THEN ');
5504   ldbg_s('When max score of entity level<l_threshold, do not evaluate ');
5505   l('	     	RETURN;	');
5507   ldbg_s('In do eval number of matches found exceeded threshold');
5508   l('	     	FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED''); ');
5509   l('	     	FND_MSG_PUB.ADD; ');
5510   l('	     	RAISE FND_API.G_EXC_ERROR; ');
5511   l('    	END IF; ');
5512   --end of Bug No:5218095
5513   l('    ELSE');
5514   ldbg_s('In do eval number of matches found exceeded threshold');
5515   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5516   l('      FND_MSG_PUB.ADD;');
5517   l('      RAISE FND_API.G_EXC_ERROR;');
5518   l('     END IF; ');
5519   l('    END IF;');
5520   --End of Bug No: 4407425
5521   /*l('    IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
5522   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
5523   l('      FND_MSG_PUB.ADD;');
5524   l('      RAISE FND_API.G_EXC_ERROR;');
5525   l('    END IF;');
5526   */
5527   l('    IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
5528   l('      eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
5529   l('    ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
5530   l('      eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
5531   l('    ELSIF call_order(p_index) = ''CONTACT'' AND l_contact_contains_str IS NOT NULL THEN');
5532   l('      eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
5533   l('    ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
5534   l('      eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
5535   l('    END IF;');
5536   l('  END;');
5537   l('  /************ End of find_parties private procedures **********/ ');
5538   l('');
5539   l('  BEGIN');
5540   l('');
5541 
5542   ldbg_s('--------------------------------');
5543   ldbg_s('Entering Procedure find_parties');
5544   ds(fnd_log.level_statement);
5545   dc(fnd_log.level_statement,'Input Parameters are :');
5546   dc(fnd_log.level_statement,'p_match_type = ','p_match_type');
5547   dc(fnd_log.level_statement,'p_restrict_sql = ','p_restrict_sql');
5548   dc(fnd_log.level_statement,'p_dup_set_id = ','p_dup_set_id');
5549   dc(fnd_log.level_statement,'p_search_merged = ','p_search_merged');
5550   dc(fnd_log.level_statement,'p_dup_party_id = ','p_dup_party_id');
5551   de;
5552 
5553   l('    -- ************************************');
5554   l('    -- STEP 1. Initialization and error checks');
5555   l('');
5556 
5557   l('    l_match_str := ''' || l_match_str || ''';');
5558   l('    IF p_match_type = ''AND'' THEN');
5559   l('      l_match_str := '' AND '';');
5560   l('    ELSIF p_match_type = ''OR'' THEN');
5561   l('      l_match_str := '' OR '';');
5562   l('    END IF;');
5563   l('    l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
5564   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
5565   l('');
5566   IF l_purpose = 'D' THEN
5567     ldbg_s('This is Duplicate Identification match rule');
5568     l('  IF l_entered_max_score < '||l_match_threshold||' THEN');
5569     l('    x_num_matches:=0;');
5570     l('    x_search_ctx_id:=0;');
5571     ldbg_s('Returning since maximum obtainable score of input search criteria < threshold');
5572     l('    RETURN;');
5573     l('  END IF;');
5574   END IF;
5575   l('');
5576   l('    --Fix for bug 4417124 ');
5577   l('');
5578   l('    SELECT use_contact_addr_flag, use_contact_cpt_flag ');
5579   l('    INTO l_use_contact_addr_flag, l_use_contact_cpt_flag ');
5580   l('    FROM hz_match_rules_b ');
5581   l('    WHERE match_rule_id = '||p_rule_id||'; ');
5582   l('');
5586   l('');
5583   l('    IF NVL(l_use_contact_addr_flag, ''Y'') = ''N'' THEN');
5584   l('      l_use_contact_addr_info := FALSE; ');
5585   l('    END IF; ');
5587   l('    IF NVL(l_use_contact_cpt_flag, ''Y'') = ''N'' THEN');
5588   l('      l_use_contact_cpt_info := FALSE; ');
5589   l('    END IF; ');
5590   l('');
5591   l('   --End fix for bug 4417124');
5592   l('');
5593   l('    IF p_dup_batch_id IS NOT NULL THEN');
5594   l('      l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH_BATCH''),10000);');
5595   l('    ELSE');
5596   l('      l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
5597   l('    END IF;');
5598 
5599   l('    IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
5600   l('      g_score_until_thresh := true;');
5601   ldbg_s('g_score_until_thresh is true');
5602   l('    ELSE');
5603   l('      g_score_until_thresh := false;');
5604   ldbg_s('g_score_until_thresh is false');
5605   l('    END IF;');
5606   ldbg_sv('Maximum records that will be evaluated is ', 'l_max_thresh');
5607 
5608   l('    -- ************************************************************');
5609   l('    -- STEP 2. Setup of intermedia query strings for Acquisition query');
5610 
5611   l('    l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);');
5612   l('    l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);');
5613   l('    l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);');
5614   ldbg_s('Commencing the DENORM LOGIC in find_parties');
5615   l('    l_denorm_max_score:=0;');
5616   l('    l_non_denorm_max_score:=0;');
5617   l('    IF l_ps_denorm_str IS NOT NULL THEN');
5618   l('      l_denorm_max_score := l_denorm_max_score+l_ps_max_score;');
5619   l('      l_denorm_str := l_ps_denorm_str;');
5620   l('    ELSE');
5621   l('      l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;');
5622   l('    END IF;');
5623 
5624   l('    IF l_ct_denorm_str IS NOT NULL THEN');
5625   l('      l_denorm_max_score := l_denorm_max_score+l_contact_max_score;');
5626   l('      IF l_denorm_str IS NOT NULL THEN');
5627   l('        l_denorm_str := l_denorm_str || '' OR '' ||l_ct_denorm_str;');
5628   l('      ELSE');
5629   l('        l_denorm_str := l_ct_denorm_str;');
5630   l('      END IF;');
5631   l('    ELSE');
5632   l('      l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;');
5633   l('    END IF;');
5634 
5635   l('    IF l_cpt_denorm_str IS NOT NULL THEN');
5636   l('      l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;');
5637   l('      IF l_denorm_str IS NOT NULL THEN');
5638   l('        l_denorm_str := l_denorm_str || '' OR '' ||l_cpt_denorm_str;');
5639   l('      ELSE');
5640   l('        l_denorm_str := l_cpt_denorm_str;');
5641   l('      END IF;');
5642   l('    ELSE');
5643   l('      l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;');
5644   l('    END IF;');
5645 
5649   l('');
5646   l('    l_party_contains_str := INIT_PARTY_QUERY(l_match_str, l_denorm_str, l_party_max_score, l_denorm_max_score, l_non_denorm_max_score, round(('||l_match_threshold||'/'||l_max_score||')*l_entered_max_score));');
5647 
5648   l('    init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
5650   l('    -- Setup Search Context ID');
5651   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
5652   l('    x_search_ctx_id := l_search_ctx_id;');
5653   l('');
5654   ldbg_sv('Search context id in find_parties is ', 'x_search_ctx_id');
5655   l('    IF l_party_contains_str IS NULL THEN');
5656   l('      defpt := 1;');
5657   l('    END IF;');
5658   l('    IF l_party_site_contains_str IS NULL THEN');
5659   l('      defps := 1;');
5660   l('    END IF;');
5661   l('    IF l_contact_contains_str IS NULL THEN');
5662   l('      defct := 1;');
5663   l('    END IF;');
5664   l('    IF l_contact_pt_contains_str IS NULL THEN');
5665   l('      defcpt := 1;');
5666   l('    END IF;');
5667   l('');
5668 
5669   ds(fnd_log.level_statement);
5670   ldbg_s('------------------------');
5671   dc(fnd_log.level_statement,'In find_parties l_match_str =  ','l_match_str');
5672   dc(fnd_log.level_statement,'In find_parties l_party_contains_str = ','l_party_contains_str');
5673   dc(fnd_log.level_statement,'In find_parties l_party_site_contains_str = ','l_party_site_contains_str');
5674   dc(fnd_log.level_statement,'In find_parties l_contact_contains_str = ','l_contact_contains_str');
5675   dc(fnd_log.level_statement,'In find_parties l_contact_pt_contains_str = ','l_contact_pt_contains_str');
5676   dc(fnd_log.level_statement,'In find_parties l_search_ctx_id = ','l_search_ctx_id');
5677   de;
5678 
5679   IF l_max_score=1 THEN
5680     ldbg_s('In find_parties l_max_score = 1');
5681     l('    FOR I in 1..3 LOOP');
5682     l('      IF (call_order(I) = ''PARTY'' AND l_party_contains_str IS NULL)');
5683     l('         OR (call_order(I) = ''PARTY_SITE'' AND l_party_site_contains_str IS NULL)');
5684     l('         OR (call_order(I) = ''CONTACT'' AND l_contact_contains_str IS NULL)');
5685     l('         OR (call_order(I) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NULL) THEN');
5686     l('        IF call_type(I)=''OR'' THEN');
5687     l('          call_type(I+1):=''OR'';');
5688     l('        END IF;');
5689     l('      END IF;');
5690     l('    END LOOP;');
5691   END IF;
5692 
5693   /**** Call all 4 evaluation procedures ***********/
5694   l('    FOR I in 1..5 LOOP');
5695   l('      do_eval(I);');
5696   l('    END LOOP;');
5697 
5698   IF l_purpose  IN ('S','W') THEN
5699     d(fnd_log.level_statement,'In find_parties. This is a Search Rule. Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
5700   ELSE
5701     d(fnd_log.level_statement,'In find_parties. This is a Duplicate Identification Rule. Evaluating Matches. Threshold : '||l_match_threshold);
5702   END IF;
5703 
5704   l('    x_num_matches := 0;');
5705   l('    l_num_eval := 0;');
5706   l('    IF l_match_str = '' OR '' THEN');
5707   l('      l_party_id := H_SCORES.FIRST;');
5708   l('    ELSE');
5709   l('      l_party_id := H_PARTY_ID_LIST.FIRST;');
5710   l('    END IF;');
5711 
5712   l('    WHILE l_party_id IS NOT NULL LOOP');
5713   l('      l_num_eval:= l_num_eval+1;');
5714   ds(fnd_log.level_statement);
5715   ldbg_s('----------------------');
5716   dc(fnd_log.level_statement,'In find_parties Match Party ID = ','H_SCORES(l_party_id).PARTY_ID');
5717   IF l_purpose = 'S' THEN
5718     dc(fnd_log.level_statement,'In find_parties Score = ','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
5719   ELSE
5720     dc(fnd_log.level_statement,'In find_parties Score = ','H_SCORES(l_party_id).TOTAL_SCORE');
5721   END IF;
5722   de;
5723   IF l_purpose  = ('S') THEN
5724   ldbg_s('In find_parties inserting Search Rule results into HZ_MATCHED_PARTIES_GT');
5725     l('      IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
5726     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
5727     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100));');
5728     l('            x_num_matches := x_num_matches+1;');
5729     ldbg_s('----------------------');
5730   ELSIF l_purpose  = ('W') THEN
5731 
5732   ldbg_s('In find_parties inserting Webservice  Rule results into HZ_MATCHED_PARTIES_GT');
5733     l('      IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
5734     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
5735     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/'||l_max_score||')*100));');
5736     l('            x_num_matches := x_num_matches+1;');
5737     ldbg_s('----------------------');
5738   ELSE
5739     ldbg_s('In find_parties inserting Duplicate Identification results into HZ_MATCHED_PARTIES_GT');
5740     l('      IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
5741     l('          IF p_dup_set_id IS NULL THEN');
5742     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
5743     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);');
5744     l('             x_num_matches := x_num_matches+1;');
5745     l('          ELSE');
5746     ldbg_s('Before Inserting Duplicate Identification results into HZ_DUP_SET_PARTIES, if dup party already exists');
5747     l('            BEGIN');
5748     l('              SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES'); --Bug No: 4244529
5749     l('              WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID');
5750     l('              AND DUP_SET_BATCH_ID = p_dup_batch_id '); --Bug No: 4244529
5751     l('              AND ROWNUM=1;');
5752     l('            EXCEPTION ');
5753     l('              WHEN NO_DATA_FOUND THEN');
5754     l('                IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_auto_merge_score||' THEN');
5755     l('                  l_merge_flag := ''Y'';');
5756     l('                ELSE');
5757     l('                  l_merge_flag := ''N'';');
5758     l('                END IF;');
5759     ldbg_s('In find_parties inserting Duplicate Identification results into HZ_DUP_SET_PARTIES');
5760     ldbg_s('----------------------');
5761     l('                INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
5762     l('                    MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
5763     l('                    LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
5764     l('                VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,');
5765     l('                    H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,');
5766     l('                    hz_utility_pub.created_by,hz_utility_pub.creation_date,');
5767     l('                    hz_utility_pub.last_update_login,');
5768     l('                    hz_utility_pub.last_update_date,');
5769     l('                    hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
5770     l('                x_num_matches := x_num_matches+1;');
5771     l('            END;');
5772     l('          END IF;');
5773   END IF;
5774   l('      END IF;');
5775   l('      IF l_match_str = '' OR '' THEN');
5776   l('        l_party_id:=H_SCORES.NEXT(l_party_id);');
5777   l('      ELSE');
5778   l('        l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
5779   l('      END IF;');
5780   l('    END LOOP;');
5781   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
5782   ldbg_s('Exiting Procedure find_parties');
5783   ldbg_s('--------------------------------');
5784   l('EXCEPTION');
5785   l('  WHEN L_RETURN_IMM_EXC THEN');
5786   l('    RETURN;');
5787 ELSE ---Start of Code Change for Match Rule Set
5788   l('  BEGIN');
5789   l('');
5790 
5791   d(fnd_log.level_procedure,'find_parties(+)');
5792   ds(fnd_log.level_statement);
5793   dc(fnd_log.level_statement,'Input Parameters:');
5794   dc(fnd_log.level_statement,'p_match_type','p_match_type');
5795   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
5796   dc(fnd_log.level_statement,'p_dup_set_id','p_dup_set_id');
5797   dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
5798   dc(fnd_log.level_statement,'p_dup_party_id','p_dup_party_id');
5799   de;
5800   pop_conditions(p_rule_id,'find_parties','p_rule_id,p_party_search_rec,p_party_site_list,
5801   p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,p_dup_party_id,
5802   p_dup_set_id,p_dup_batch_id,p_ins_details,x_search_ctx_id,x_num_matches','PARTY');
5803 
5804   d(fnd_log.level_procedure,'find_parties(-)');
5805   l('EXCEPTION');
5806 
5807 END IF; ---End of Code Change for Match Rule Set
5808 
5809   l('  WHEN FND_API.G_EXC_ERROR THEN');
5810   l('    RAISE FND_API.G_EXC_ERROR;');
5811   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
5812   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
5813   l('  WHEN OTHERS THEN');
5814   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
5815   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_parties'');');
5816   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
5817   l('    FND_MSG_PUB.ADD;');
5818   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
5819   l('END find_parties;');
5820   l('');
5821 
5822   l('PROCEDURE find_persons (');
5823   l('      p_rule_id               IN      NUMBER,');
5824   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
5825   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
5826   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
5827   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
5828   l('      p_restrict_sql          IN      VARCHAR2,');
5829   l('      p_match_type            IN      VARCHAR2,');
5830   l('      p_search_merged         IN      VARCHAR2,');
5831   l('      p_dup_party_id          IN      NUMBER,');
5832   l('      p_dup_set_id            IN      NUMBER,');
5833   l('      p_dup_batch_id          IN      NUMBER,');
5834   l('      p_ins_details           IN      VARCHAR2,');
5835   l('      x_search_ctx_id         OUT     NUMBER,');
5836   l('      x_num_matches           OUT     NUMBER');
5837   l(') IS');
5838 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
5839   l('');
5840   l('  -- Strings to hold the generated Intermedia query strings');
5841   l('  l_party_contains_str VARCHAR2(32000); ');
5842   l('  l_party_site_contains_str VARCHAR2(32000);');
5843   l('  l_contact_contains_str VARCHAR2(32000);');
5847   l('  l_ct_denorm_str VARCHAR2(32000);');
5844   l('  l_contact_pt_contains_str VARCHAR2(32000);');
5845   l('  l_denorm_str VARCHAR2(32000);');
5846   l('  l_ps_denorm_str VARCHAR2(32000);');
5848   l('  l_cpt_denorm_str VARCHAR2(32000);');
5849 
5850   l('');
5851   l('  -- Other local variables');
5852   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
5853   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
5854   l('  -- For Score calculation');
5855   l('  l_max_score NUMBER;');
5856   l('  l_match_idx NUMBER;');
5857   l('  l_entered_max_score NUMBER;');
5858   l('  FIRST BOOLEAN;');
5859   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
5860   l('');
5861   FOR TX IN (
5862       SELECT distinct f.staged_attribute_column
5863       FROM hz_trans_functions_vl f, hz_secondary_trans st,
5864            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
5865       WHERE sa.match_rule_id = p_rule_id
5866       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
5867       AND st.function_id = f.function_id
5868       AND a.attribute_id = sa.attribute_id) LOOP
5869     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
5870   END LOOP;
5871   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
5872   l('  H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
5873   l('  H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
5874   l('');
5875   l('  l_score NUMBER;');
5876   l('  l_idx NUMBER;');
5877   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
5878   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
5879   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
5880   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
5881   l('  l_party_id NUMBER;');
5882   l('  l_ps_party_id NUMBER;');
5883   l('  l_ct_party_id NUMBER;');
5884   l('  l_cpt_party_id NUMBER;');
5885   l('  l_cpt_ps_id NUMBER;');
5886   l('  l_cpt_contact_id NUMBER;');
5887   l('  l_cpt_type VARCHAR2(100);');
5888   l('  l_party_site_id NUMBER;');
5889   l('  l_org_contact_id NUMBER;');
5890   l('  l_contact_pt_id NUMBER;');
5891   l('  l_cpt_level VARCHAR2(100);');
5892   l('  l_ps_contact_id NUMBER;');
5893   l('  l_party_max_score NUMBER;');
5894   l('  l_ps_max_score NUMBER;');
5895   l('  l_contact_max_score NUMBER;');
5896   l('  l_cpt_max_score NUMBER;');
5897   l('  l_denorm_max_score NUMBER;');
5898   l('  l_non_denorm_max_score NUMBER;');
5899   l('');
5900   l('  defpt NUMBER :=0;');
5901   l('  defps NUMBER :=0;');
5902   l('  defct NUMBER :=0;');
5903   l('  defcpt NUMBER :=0;');
5904   l('  l_index NUMBER;');
5905   l('  l_max_thresh NUMBER;');
5906   l('  l_tmp NUMBER;');
5907   l('  l_merge_flag VARCHAR2(1);');
5908   l('  l_num_eval NUMBER:=0;');
5909   l('');
5910   l('  L_RETURN_IMM_EXC Exception;');
5911   l('');
5912   l('  ');
5913   l('  /********************* Find Parties private procedures *******/');
5914   FOR TX IN (
5915     SELECT a.attribute_name,
5916                f.PROCEDURE_NAME,
5917                f.STAGED_ATTRIBUTE_COLUMN
5918         FROM HZ_TRANS_FUNCTIONS_VL f,
5919             HZ_TRANS_ATTRIBUTES_VL a
5920         WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
5921         AND a.entity_name = 'PARTY'
5922         AND a.attribute_name='PARTY_TYPE'
5923         AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
5924         AND nvl(f.active_flag,'Y')='Y'
5925         AND ROWNUM=1
5926   ) LOOP
5927     l('  PROCEDURE set_person_party_type IS');
5928     l('  BEGIN');
5929     l('    g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||':= ');
5930     l('        HZ_TRANS_PKG.EXACT(');
5931     l('             ''PERSON''');
5932     l('             ,null,''PARTY_TYPE''');
5933     l('             ,''PARTY'');');
5934     l('  END;');
5935     l('    ');
5936     l('  PROCEDURE unset_person_party_type IS');
5937     l('  BEGIN');
5938     l('    g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||' := '''';');
5939     l('  END;');
5940   END LOOP;
5941   l('  ');
5942   l('  FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) ');
5943   l('  RETURN NUMBER IS');
5944   l('    l_party_type VARCHAR2(255);');
5945   l('    l_person_id NUMBER(15);');
5946   l('  BEGIN');
5947   l('    SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;');
5948   l('    IF l_party_type = ''PERSON'' THEN');
5949   l('      RETURN p_party_id;');
5950   l('    ELSIF p_contact_id IS NULL THEN');
5951   l('      RETURN NULL;');
5952   l('    ELSE');
5953   l('      BEGIN ');
5954   l('        SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p');
5955   l('        WHERE oc.org_contact_id = p_contact_id');
5956   l('        AND r.relationship_id = oc.party_relationship_id ');
5957   l('        AND r.object_id = p_party_id');
5958   l('        AND p.party_id = r.subject_id ');
5959   l('        AND p.party_type = ''PERSON''');
5960   l('        AND ROWNUM=1;');
5961   l('        ');
5962   l('        RETURN l_person_id;');
5963   l('      EXCEPTION');
5964   l('        WHEN NO_DATA_FOUND THEN');
5965   l('          RETURN NULL;');
5966   l('      END;      ');
5967   l('    END IF;');
5968   l('  END;  ');
5969   l('');
5970   l('  PROCEDURE push_eval IS');
5971   l('  BEGIN');
5972   l('    H_PARTY_ID.DELETE;');
5973   l('    H_PARTY_ID_LIST.DELETE;');
5974   l('    H_SCORES.DELETE;        ');
5975   l('    g_mappings.DELETE;');
5976   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
5977   l('    call_order(5) := call_order(1);');
5978   l('    call_type(5) := ''AND'';');
5979   l('    call_max_score(5) := call_max_score(1);');
5980   l('    call_type(2) := ''OR'';');
5981   l('  END;');
5982   l('');
5983   l('  /**  Private procedure to acquire and score at party level  ***/');
5984   l('  PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
5985   l('    l_party_id_idx NUMBER:=1;');
5986   l('    l_ctx_id NUMBER;');
5987   l('    l_TX35_new varchar2(4000);'); --9155543
5988   l('  BEGIN');
5989   l('    SAVEPOINT eval_start;');
5990   l('    set_person_party_type;');
5991   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
5992   l('      l_ctx_id := l_search_ctx_id;');
5993   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
5994   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
5995   l('             l_search_ctx_id,H_PARTY_ID(I));');
5996   l('      H_PARTY_ID.DELETE;');
5997   l('      H_PARTY_ID_LIST.DELETE;');
5998   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
5999   l('      l_ctx_id := l_search_ctx_id;');
6000   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
6001   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6002   l('             l_search_ctx_id,H_PARTY_ID(I));');
6003   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6004   l('    ELSE');
6005   l('      IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, ''SELECTIVE'')=0)');
6006   l('         and check_estimate_hits(''PARTY'',p_party_contains_str)>l_max_thresh THEN');
6007   ldbg_s('In eval party level estimated hits exceed threshold');
6008   l('        IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' THEN');
6009   ldbg_s('In eval party level resolution option is set to SQL search.');
6010   l('          IF (l_party_site_contains_str IS NULL AND');
6011   l('             l_contact_contains_str IS NULL AND');
6012   l('             l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN');
6013   l('            return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);');
6014   l('            RAISE L_RETURN_IMM_EXC;');
6015   l('          ELSE');
6016   l('            open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);');
6017   l('          END IF;');
6018   l('        ELSE');
6019   l('          IF p_index>1 THEN');
6020   ldbg_s('In eval party level number of matches found exceeded threshold');
6021   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6022   l('            FND_MSG_PUB.ADD;');
6023   l('            RAISE FND_API.G_EXC_ERROR;');
6024   l('          ELSE');
6025   l('            push_eval;');
6026   l('            RETURN;');
6027   l('          END IF;');
6028   l('        END IF;');
6029   l('      END IF;');
6030   l('      l_ctx_id := NULL;');
6031   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6032   l('    END IF;');
6033   l('    IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN');
6034   l('      open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);');
6035   l('    END IF;');
6036   l('    LOOP ');
6037   l('      FETCH l_party_cur INTO');
6038   l('         l_party_id '||l_p_into_list||';');
6039   l('      EXIT WHEN l_party_cur%NOTFOUND;');
6040   l('      l_index := map_id(l_party_id);');
6041   IF(l_p_param_list LIKE '%TX35%') THEN --9155543
6042  	   l('  l_TX35_new:=RTRIM(LTRIM(l_TX35));');
6043  	   l('  l_TX35_new:=(CASE l_TX35_new WHEN ''SYNC'' THEN HZ_STAGE_MAP_TRANSFORM.den_acc_number (l_party_id) ELSE l_TX35_new END);');
6044  	   l_p_param_list:=replace(l_p_param_list,'l_TX35','l_TX35_new');
6045  	       END IF;
6046   l('      l_score := GET_PARTY_SCORE('||l_p_param_list||');');
6047   l_p_param_list:=replace(l_p_param_list,'l_TX35_new','l_TX35');
6048   l('      IF NOT H_SCORES.EXISTS(l_index) THEN');
6049   l('        H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
6050   l('      ELSE');
6051   l('        H_SCORES(l_index).TOTAL_SCORE := ');
6052   l('                H_SCORES(l_index).TOTAL_SCORE+l_score;');
6053   l('        H_SCORES(l_index).PARTY_SCORE := l_score;');
6054   l('      END IF;');
6055   l('      IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
6056   l('        H_PARTY_ID_LIST(l_index) := 1;');
6057   l('        H_PARTY_ID(l_party_id_idx) := l_party_id;');
6058   l('        l_party_id_idx:= l_party_id_idx+1;');
6059   l('      END IF;');
6060   l('      IF (l_party_id_idx-1)>l_max_thresh THEN');
6061   l('         IF p_index=1 AND call_order(2) = ''PARTY_SITE'' ');
6062   l('          AND call_type(2) = ''AND'' AND l_contact_contains_str IS NULL');
6063   l('          AND nvl(FND_PROFILE.VALUE(''HZ_DQM_PN_THRESH_RESOLUTION''),''NONE'')=''SQL'' ');
6064   l('          AND l_contact_pt_contains_str IS NULL THEN');
6068   l('          EXIT;');
6065   l('          H_PARTY_ID.DELETE(l_party_id_idx-1);');
6066   l('          H_PARTY_ID_LIST.DELETE(l_index);');
6067   l('          H_SCORES.DELETE(l_index);');
6069   l('        END IF;');
6070 
6071   l('        CLOSE l_party_cur;'); --Bug No: 3872745
6072   l('        IF p_index>1 THEN');
6073   ldbg_s('In eval party level number of matches found exceeded threshold');
6074   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6075   l('          FND_MSG_PUB.ADD;');
6076   l('          RAISE FND_API.G_EXC_ERROR;');
6077   l('        ELSE');
6078   l('          push_eval;');
6079   l('          RETURN;');
6080   l('        END IF;');
6081   l('      END IF;');
6082   ds(fnd_log.level_statement);
6083   dc(fnd_log.level_statement,'Party Level Matches');
6084   dc(fnd_log.level_statement,'l_party_id','l_party_id');
6085   dc(fnd_log.level_statement,'l_score','l_score');
6086   de;
6087   l('    END LOOP;');
6088   l('    CLOSE l_party_cur;');
6089   l('    ROLLBACK to eval_start;');
6090   l('  END;');
6091   l('  PROCEDURE open_person_contact_cursor(');
6092   l('            p_contains_str  VARCHAR2, ');
6093   l('            p_search_ctx_id  NUMBER, ');
6094   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
6095   l('  BEGIN');
6096   l('    OPEN x_cursor FOR ');
6097   l('      SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
6098   l('      FROM HZ_STAGED_CONTACTS stage');
6099   l('      WHERE contains( concat_col, p_contains_str)>0');
6100   l('      AND ORG_CONTACT_ID in (');
6101   l('            SELECT  /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ ');
6102   l('            org_contact_id');
6103   l('            from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc');
6104   l('            where d.party_id = r.subject_id');
6105   l('            and oc.party_relationship_id = r.relationship_id');
6106   l('            and d.search_context_id = p_search_ctx_id);   ');
6107 --bug 4959719 start
6108   l('  exception');
6109   l('    when others then');
6110   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
6111   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
6112   l('        FND_MSG_PUB.ADD;');
6113   l('        RAISE FND_API.G_EXC_ERROR;');
6114    --Start Bug No: 3032742.
6115   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
6116   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
6117   l('        FND_MSG_PUB.ADD;');
6118   l('        RAISE FND_API.G_EXC_ERROR;');
6119   --End Bug No : 3032742.
6120   l('      else ');
6121   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6122   l('      end if;');
6123 --bug 4959719 end
6124   l('  END;');
6125 
6126   l('');
6127   l('  /**  Private procedure to acquire and score at party site level  ***/');
6128   l('  PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
6129   l('    l_party_id_idx NUMBER:=1;');
6130   l('    l_ctx_id NUMBER;');
6131   l('    h_ps_id HZ_PARTY_SEARCH.IDList;');
6132   l('    h_ps_party_id HZ_PARTY_SEARCH.IDList;');
6133   l('    h_ps_score HZ_PARTY_SEARCH.IDList;');
6134   l('    detcnt NUMBER := 1;');
6135   l('    l_person_id NUMBER;');
6136   l('  BEGIN');
6137   l('    SAVEPOINT eval_start;');
6138   l('    unset_person_party_type;');
6139   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
6140   l('      l_ctx_id := l_search_ctx_id;');
6141   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
6142   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6143   l('             l_search_ctx_id,H_PARTY_ID(I));');
6144   l('      H_PARTY_ID.DELETE;');
6145   l('      H_PARTY_ID_LIST.DELETE;');
6146   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
6147   l('      l_ctx_id := l_search_ctx_id;');
6148   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
6149   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6150   l('             l_search_ctx_id,H_PARTY_ID(I));');
6151   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6152   l('    ELSE');
6153   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6154   l('      l_ctx_id := NULL;');
6155   l('    END IF;');
6156   l('    open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, p_search_merged,''N'', ''Y'',l_party_site_cur);');
6157   l('    LOOP ');
6158   l('      FETCH l_party_site_cur INTO');
6159   l('         l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
6160   l('      EXIT WHEN l_party_site_cur%NOTFOUND;');
6161   l('      IF l_ctx_id IS NULL THEN');
6162   l('        l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);');
6163   l('      ELSE');
6164   l('        l_person_id := l_ps_party_id;');
6165   l('      END IF;');
6166 
6167   l('      IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN');
6168   l('        l_index := map_id(l_person_id);');
6169   l('        l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
6170 
6171   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
6172   l('          IF l_ctx_id IS NULL THEN');
6173   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);');
6174   l('          END IF;');
6175   l('        ELSE');
6176   l('          IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
6177   l('            H_SCORES(l_index).TOTAL_SCORE := ');
6178   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
6179   l('            H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
6180   l('          END IF;');
6181   l('        END IF;');
6182   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
6183   l('          H_PARTY_ID_LIST(l_index) := 1;');
6184   --l('          H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
6185   --Bug:4995382: SDIB BATCH W/ RULE DL ORG/PERSON DUPLICATES' ERRORS OUT
6186   l('          H_PARTY_ID(l_party_id_idx) := l_person_id;');
6187   l('          l_party_id_idx:= l_party_id_idx+1;');
6188   l('        END IF;');
6189   l('        IF (l_party_id_idx-1)>l_max_thresh THEN');
6190   l('          CLOSE l_party_site_cur;'); --Bug No: 3872745
6191   l('          IF p_index>1 THEN');
6192   ldbg_s('In eval party site level number of matches found exceeded threshold');
6193   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6194   l('            FND_MSG_PUB.ADD;');
6195   l('            RAISE FND_API.G_EXC_ERROR;');
6196   l('          ELSE');
6197   l('            push_eval;');
6198   l('            RETURN;');
6199   l('          END IF;');
6200   l('        END IF;');
6201   l('        IF p_ins_details = ''Y'' THEN');
6202   l('          h_ps_id(detcnt) := l_party_site_id;');
6203   l('          h_ps_party_id(detcnt) := l_person_id;');
6204   l('          IF (p_emax_score > 0) THEN ');
6205   l('              h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
6206   l('          ELSE ');
6207   l('              h_ps_score(detcnt) := 0; ');
6208   l('          END IF; ');
6209   l('          detcnt := detcnt +1;');
6210   l('        END IF;');
6211   ds(fnd_log.level_statement);
6212   dc(fnd_log.level_statement,'Party Site Level Matches');
6213   dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
6214   dc(fnd_log.level_statement,'l_ps_party_id','l_person_id');
6215   dc(fnd_log.level_statement,'l_score','l_score');
6216   de;
6217   l('      END IF;');
6218   l('    END LOOP;');
6219   l('    CLOSE l_party_site_cur;');
6220   l('    ROLLBACK to eval_start;');
6221   l('    IF p_ins_details = ''Y'' THEN');
6222   l('      FORALL I in 1..h_ps_id.COUNT ');
6223   l('        INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
6224   l('          l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
6225   l('    END IF;');
6226   l('  END;');
6227   l('');
6228   l('  /**  Private procedure to acquire and score at party site level  ***/');
6229   l('  PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
6230   l('    l_party_id_idx NUMBER:=1;');
6231   l('    l_ctx_id NUMBER;');
6232   l('    h_ct_id HZ_PARTY_SEARCH.IDList;');
6233   l('    h_ct_party_id HZ_PARTY_SEARCH.IDList;');
6234   l('    h_ct_score HZ_PARTY_SEARCH.IDList;');
6235   l('    detcnt NUMBER := 1;');
6236   l('    l_person_id NUMBER;');
6237   l('  BEGIN');
6238   l('    SAVEPOINT eval_start;');
6239   l('    l_ctx_id := l_search_ctx_id;');
6240   l('    unset_person_party_type;');
6241   l('    FORALL I in 1..H_PARTY_ID.COUNT ');
6242   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6243   l('             l_search_ctx_id,H_PARTY_ID(I));');
6244   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6245   l('    open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);');
6246   l('    LOOP ');
6247   l('      FETCH l_contact_cur INTO');
6248   l('         l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
6249   l('      EXIT WHEN l_contact_cur%NOTFOUND;');
6250   l('      l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);');
6251   l('      l_index := map_id(l_person_id);');
6252   l('      IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN');
6253   l('        l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
6254   l('        IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
6255   l('          H_SCORES(l_index).TOTAL_SCORE := ');
6256   l('                H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
6257   l('          H_SCORES(l_index).CONTACT_SCORE := l_score;');
6258   l('        END IF;');
6259   l('      END IF;');
6260   l('      IF p_ins_details = ''Y'' THEN');
6261   l('        h_ct_id(detcnt) := l_org_contact_id;');
6262   l('        h_ct_party_id(detcnt) := l_person_id;');
6263   l('        IF (p_emax_score > 0) THEN ');
6264   l('            h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
6265   l('        ELSE ');
6266   l('            h_ct_score(detcnt) := 0; ');
6267   l('        END IF; ');
6268   l('        detcnt := detcnt +1;');
6269   l('      END IF;');
6270   ds(fnd_log.level_statement);
6271   dc(fnd_log.level_statement,'Contact Level Matches');
6272   dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
6273   dc(fnd_log.level_statement,'l_ct_party_id','l_person_id');
6274   dc(fnd_log.level_statement,'l_score','l_score');
6275   de;
6276   l('    END LOOP;');
6277   l('    CLOSE l_contact_cur;');
6278   l('    ROLLBACK to eval_start;');
6279   l('    IF p_ins_details = ''Y'' THEN');
6280   l('      FORALL I in 1..h_ct_id.COUNT ');
6281   l('        INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
6282   l('          l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
6283   l('    END IF;');
6284   l('  END;');
6285   l('');
6286   l('  /**  Private procedure to acquire and score at contact point level  ***/');
6287   l('  PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
6288   l('    l_party_id_idx NUMBER:=1;');
6289   l('    l_ctx_id NUMBER;');
6290   l('    h_cpt_id HZ_PARTY_SEARCH.IDList;');
6291   l('    h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
6292   l('    h_cpt_score HZ_PARTY_SEARCH.IDList;');
6293   l('    detcnt NUMBER := 1;');
6294   l('    l_person_id NUMBER;');
6295   --l('    l_continue VARCHAR2(1) := ''Y'';');
6296   l('    is_a_match VARCHAR2(1) := ''Y'';');
6297   l('    l_cpt_flag VARCHAR2(1) := ''N'';');
6298   l('  BEGIN');
6299   ldbg_s('-----------------');
6300   ldbg_s('calling the procedure eval_cpt_level - from find_persons');
6301   l('    SAVEPOINT eval_start;');
6302   l('    unset_person_party_type;');
6303   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
6304   l('      l_ctx_id := l_search_ctx_id;');
6305   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
6306   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6307   l('             l_search_ctx_id,H_PARTY_ID(I));');
6308   l('      H_PARTY_ID.DELETE;');
6309   l('      H_PARTY_ID_LIST.DELETE;');
6310   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
6311   ldbg_s('Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
6312   l('      l_ctx_id := l_search_ctx_id;');
6313   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
6314   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
6315   l('             l_search_ctx_id,H_PARTY_ID(I));');
6316   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6317   l('    ELSE');
6318   ldbg_s('Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list');
6319   l('      l_ctx_id := NULL;');
6320   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
6321   l('    END IF;');
6322   ldbg_s('====== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR =======');
6323   l('    open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, p_search_merged,''N'', ''Y'',l_contact_pt_cur);');
6324   l('    LOOP ');
6325   l('      FETCH l_contact_pt_cur INTO');
6326   l('         l_contact_pt_id, l_cpt_type, l_cpt_party_id,  l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
6327   l('      EXIT WHEN l_contact_pt_cur%NOTFOUND;');
6328   ldbg_s(' ------------------------------------' );
6329   ldbg_sv('Processing party_id - ','l_cpt_party_id' );
6330   ldbg_sv('contact point type - ','l_cpt_type' );
6331   l('      IF l_ctx_id IS NULL THEN');
6332   l('        l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);');
6333   l('      ELSE');
6334   l('        l_person_id := l_cpt_party_id;');
6338   l('        l_index := map_id(l_person_id);');
6335   l('      END IF;');
6336 
6337   l('      IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN');
6339   l('        l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
6340 
6341   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
6342   l('          IF l_ctx_id IS NULL THEN');
6343   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_person_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);');
6344   if l_purpose IN ('S','W') then
6345     l('           H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
6346     ldbg_s('Processing first time for this party');
6347     ldbg_sv('l_index is - ','l_index' );
6348     ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
6349   end if;
6350   l('          END IF;');
6351   l('        ELSE');
6352   if l_purpose IN ('S','W') then
6353 	ldbg_s('Processing Second time for this party');
6354     l('          IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then');
6355     l('            IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then');
6356     l('              H_SCORES(l_index).TOTAL_SCORE :=');
6357     l('              H_SCORES(l_index).TOTAL_SCORE-(H_SCORES(l_index).CONTACT_POINT_SCORE - H_SCORES(l_index).cpt_type_match(l_cpt_type) )+l_score;');
6358     l('              H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE - H_SCORES(l_index).cpt_type_match(l_cpt_type) + l_score;');
6359     l('              H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
6360     ldbg_s('Passed in score greater than existing score');
6361     ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ','H_SCORES(l_index).TOTAL_SCORE' );
6362     ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ','H_SCORES(l_index).CONTACT_POINT_SCORE' );
6363     ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
6364     l('            END IF;');
6365     l('          ELSE');
6366     ldbg_s('Passed in score less than or equal to the existing score ');
6367     l('            H_SCORES(l_index).TOTAL_SCORE :=');
6368     l('            H_SCORES(l_index).TOTAL_SCORE+l_score;');
6369     l('            H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
6370     l('            H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;');
6371     ldbg_sv('H_SCORES(l_index).TOTAL_SCORE is - ','H_SCORES(l_index).TOTAL_SCORE' );
6372     ldbg_sv('H_SCORES(l_index).CONTACT_POINT_SCORE is - ','H_SCORES(l_index).CONTACT_POINT_SCORE' );
6373     ldbg_sv('H_SCORES(l_index).cpt_type_match(l_cpt_type) is - ','H_SCORES(l_index).cpt_type_match(l_cpt_type)' );
6374     l('          END IF;');
6375   else
6376   	l('          IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
6377   	l('            H_SCORES(l_index).TOTAL_SCORE := ');
6378   	l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
6379   	l('            H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
6380   	l('          END IF;');
6381   end if;
6382   l('        END IF;');
6383   ldbg_sv('call type is - ','p_call_type'  );
6384   ldbg_sv('match string is - ','l_match_str' );
6385   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
6386   if l_purpose  IN ('S','W') then
6387     l('          -- If rule is match all ');
6388     l('          IF l_match_str = '' AND '' THEN');
6389     ldbg_s('Match String is - AND ');
6390     l('            IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
6391     l('              is_a_match := ''Y'';');
6392     ldbg_sv('is_a_match is ', 'is_a_match');
6393     l('            ELSE');
6394     l('              is_a_match := ''N'';');
6395     ldbg_sv('is_a_match is ', 'is_a_match');
6396     l('            END IF;');
6397     l('          -- Else it is construed as a match anyway ');
6398     l('          ELSE');
6399     l('            is_a_match := ''Y'';');
6400     ldbg_sv('is_a_match is ', 'is_a_match');
6401     l('          END IF;');
6402     l('          IF (is_a_match=''Y'') THEN');
6403  end if;
6404   l('          H_PARTY_ID_LIST(l_index) := 1;');
6405   l('          H_PARTY_ID(l_party_id_idx) := l_person_id;');
6406   l('          l_party_id_idx:= l_party_id_idx+1;');
6407   if l_purpose IN ('S','W') then
6408     l('      end if;');
6409   end if;
6410   l('        END IF;');
6411   l('        IF (l_party_id_idx-1)>l_max_thresh THEN');
6412   l('          CLOSE l_contact_pt_cur;'); --Bug No: 3872745
6413   l('          IF p_index>1 THEN');
6414   ldbg_s('In eval contact point level number of matches found exceeded threshold');
6415   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6416   l('            FND_MSG_PUB.ADD;');
6417   l('            RAISE FND_API.G_EXC_ERROR;');
6418   l('          ELSE');
6419   l('            push_eval;');
6420   l('            RETURN;');
6421   l('          END IF;');
6422   l('        END IF;');
6423   l('        IF p_ins_details = ''Y'' THEN');
6424  if l_purpose  IN ('S','W') then
6425     l('          -- If rule is match all ');
6426     l('          IF l_match_str = '' AND '' THEN');
6427     ldbg_s('Match String is - AND ');
6428     l('            IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then');
6429     l('              is_a_match := ''Y'';');
6430     ldbg_sv('is_a_match is ', 'is_a_match');
6431     l('            ELSE');
6432     l('              is_a_match := ''N'';');
6433     ldbg_sv('is_a_match is ', 'is_a_match');
6434     l('            END IF;');
6435 	l('          -- Else it is construed as a match anyway ');
6436     l('          ELSE');
6437     l('            is_a_match := ''Y'';');
6438     ldbg_sv('is_a_match is ', 'is_a_match');
6439     l('          END IF;');
6440     l('          IF (is_a_match=''Y'') THEN');
6441  end if;
6442   ldbg_sv('Inserting into the final array, the person_id - ','l_person_id');
6443   l('          FOR I IN 1..h_cpt_id.COUNT LOOP');
6444   l('          IF h_cpt_id(I)=l_contact_pt_id THEN');
6445   l('          	 l_cpt_flag := ''Y'';');
6446   l('          END IF;');
6447   l('          END LOOP;');
6448   l('          IF l_cpt_flag = ''Y'' THEN');
6449   l('          	 NULL;');
6450   l('          ELSE ');
6451   l('         	 h_cpt_id(detcnt) := l_contact_pt_id;');
6452   l('          h_cpt_party_id(detcnt) := l_person_id;');
6453   l('          	 IF (p_emax_score > 0) THEN ');
6454   l('              h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
6455   l('            ELSE ');
6456   l('              h_cpt_score(detcnt) := 0; ');
6457   l('          	 END IF; ');
6458   l('            detcnt := detcnt +1;');
6459   l('          END IF;');
6460   if l_purpose IN ('S','W') then
6461   l('      end if;');
6462   end if;
6463 
6464   l('        END IF;');
6465   ds(fnd_log.level_statement);
6466   dc(fnd_log.level_statement,'Contact pt Level Matches');
6467   dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
6468   dc(fnd_log.level_statement,'l_cpt_party_id','l_person_id');
6469   dc(fnd_log.level_statement,'l_score','l_score');
6470   de;
6471   l('      END IF;');
6472   l('    END LOOP;');
6473   l('    CLOSE l_contact_pt_cur;');
6474   l('    ROLLBACK to eval_start;');
6475   l('    IF p_ins_details = ''Y'' THEN');
6476   l('      FORALL I in 1..h_cpt_id.COUNT ');
6477   l('        INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
6478   l('          l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
6479   l('    END IF;');
6480   l('  END;');
6481   l('');
6482   l('  /**  Private procedure to call the eval procedure at each entity in the correct order ***/');
6483   l('  PROCEDURE do_eval (p_index NUMBER) IS');
6484   l('    l_ctx_id NUMBER;');
6485   l('    l_threshold NUMBER;'); --Bug No: 4407425
6486   l('    other_acq_criteria_exists BOOLEAN; '); --Bug No: 4407425
6487   l('    acq_cnt NUMBER; '); --Bug No:5218095
6488   l('  BEGIN');
6489   --Start of Bug No: 4407425
6490   l('    IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
6491   IF(l_purpose ='S') THEN
6492   l('     l_threshold :=  round(( l_entered_max_score / '|| l_max_score ||') * '|| l_match_threshold ||'); ');
6493   ELSE
6494   l('     l_threshold := '|| l_match_threshold ||';  ');
6495   END IF;
6496   l('    other_acq_criteria_exists := TRUE ;');
6497   --Start of Bug No:5218095
6498   /*l('    IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
6499   l('     other_criteria_exists := FALSE; ');
6500   l('    END IF ; ');*/
6501   l('    --check if acquisition criteria exists for any other entity');
6502   l('    IF l_party_contains_str IS NOT NULL THEN ');
6503   l('    	acq_cnt := 1; ');
6504   l('    END IF; ');
6505   l('    IF l_party_site_contains_str IS NOT NULL THEN ');
6506   l('    	acq_cnt := acq_cnt+1; ');
6507   l('    END IF; ');
6508   l('    IF l_contact_contains_str IS NOT NULL THEN ');
6509   l('    	acq_cnt := acq_cnt+1; ');
6510   l('    END IF;');
6511   l('    IF l_contact_pt_contains_str IS NOT NULL THEN ');
6512   l('    	acq_cnt := acq_cnt+1; ');
6513   l('    END IF;  ');
6514 
6515   l('    IF acq_cnt>1 THEN ');
6516   l('    	other_acq_criteria_exists := TRUE; ');
6517   l('    ELSE');
6518   l('    	other_acq_criteria_exists := FALSE; ');
6519   l('    END IF;  ');
6523   --End of Bug No:5218095
6520   dc(fnd_log.level_statement,'count of entities having acquisition attributes = ','acq_cnt');
6521   dc(fnd_log.level_statement,'call_max_score(p_index) = ','call_max_score(p_index)');
6522   dc(fnd_log.level_statement,'l_threshold = ','l_threshold');
6524   l('    IF(l_match_str = '' AND '' AND other_acq_criteria_exists) THEN');
6525   --start of Bug No:5218095
6526   l('    	IF ( call_max_score(p_index) < l_threshold) THEN ');
6527   ldbg_s('When max score of entity level<l_threshold, do not evaluate ');
6528   l('	     	RETURN;	');
6529   l('    	ELSE ');
6530   ldbg_s('In do eval number of matches found exceeded threshold');
6531   l('	     	FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED''); ');
6532   l('	     	FND_MSG_PUB.ADD; ');
6533   l('	     	RAISE FND_API.G_EXC_ERROR; ');
6534   l('    	END IF; ');
6535   --end of Bug No:5218095
6536   l('	  ELSE');
6537   ldbg_s('In do eval number of matches found exceeded threshold');
6538   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6539   l('      FND_MSG_PUB.ADD;');
6540   l('      RAISE FND_API.G_EXC_ERROR;');
6541   l('     END IF; ');
6542   l('    END IF;');
6543   --End of Bug No: 4407425
6544   /*l('    IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
6545   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
6546   l('      FND_MSG_PUB.ADD;');
6547   l('      RAISE FND_API.G_EXC_ERROR;');
6548   l('    END IF;');
6549   */
6550   l('    IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
6551   l('      eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
6552   l('    ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
6553   l('      eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
6554   l('    ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
6555   l('      eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
6556   l('    END IF;');
6557   l('  END;');
6558   l('  /************ End of find_persons private procedures **********/ ');
6559   l('');
6560   l('  BEGIN');
6561   l('');
6562 
6563 
6564   d(fnd_log.level_procedure,'find_persons(+)');
6565   ds(fnd_log.level_statement);
6566   dc(fnd_log.level_statement,'Input Parameters:');
6567   dc(fnd_log.level_statement,'p_match_type','p_match_type');
6568   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6569   de;
6570 
6571   l('    -- ************************************');
6572   l('    -- STEP 1. Initialization and error checks');
6573   l('');
6574 
6575   l('    l_match_str := ''' || l_match_str || ''';');
6576   l('    IF p_match_type = ''AND'' THEN');
6577   l('      l_match_str := '' AND '';');
6578   l('    ELSIF p_match_type = ''OR'' THEN');
6579   l('      l_match_str := '' OR '';');
6580   l('    END IF;');
6581   l('    l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
6582   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
6583   l('');
6584   l('    l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
6585   l('    IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
6586   l('      g_score_until_thresh := true;');
6587   l('    ELSE');
6588   l('      g_score_until_thresh := false;');
6589   l('    END IF;');
6590 
6591 
6592   l('    -- ************************************************************');
6593   l('    -- STEP 2. Setup of intermedia query strings for Acquisition query');
6594 
6595   l('    l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);');
6596   l('    l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);');
6597   l('    l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);');
6598   l('    l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);');
6599   l('    init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
6600   l('');
6601   l('    -- Setup Search Context ID');
6602   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
6603   l('    x_search_ctx_id := l_search_ctx_id;');
6604   l('');
6605 
6606   l('    IF l_party_contains_str IS NULL THEN');
6607   l('      defpt := 1;');
6608   l('    END IF;');
6609   l('    IF l_party_site_contains_str IS NULL THEN');
6610   l('      defps := 1;');
6611   l('    END IF;');
6612   l('    IF l_contact_contains_str IS NULL THEN');
6613   l('      defct := 1;');
6614   l('    END IF;');
6615   l('    IF l_contact_pt_contains_str IS NULL THEN');
6616   l('      defcpt := 1;');
6617   l('    END IF;');
6618   l('');
6619 
6620   ds(fnd_log.level_statement);
6621   dc(fnd_log.level_statement,'l_match_str','l_match_str');
6622   dc(fnd_log.level_statement,'l_party_contains_str','l_party_contains_str');
6623   dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
6624   dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
6625   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
6626   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
6627   de;
6628 
6629   /**** Call all 4 evaluation procedures ***********/
6630   l('    FOR I in 1..5 LOOP');
6631   l('      do_eval(I);');
6632   l('    END LOOP;');
6633   l('    IF l_contact_contains_str IS NOT NULL THEN');
6634   l('      eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);');
6638   l('    x_num_matches := 0;');
6635   l('    END IF;');
6636   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
6637 
6639   l('    l_num_eval := 0;');
6640   l('    IF l_match_str = '' OR '' THEN');
6641   l('      l_party_id := H_SCORES.FIRST;');
6642   l('    ELSE');
6643   l('      l_party_id := H_PARTY_ID_LIST.FIRST;');
6644   l('    END IF;');
6645 
6646 
6647   l('    WHILE l_party_id IS NOT NULL LOOP');
6648   l('      l_num_eval:= l_num_eval+1;');
6649   ds(fnd_log.level_statement);
6650   dc(fnd_log.level_statement,'Match Party ID','H_SCORES(l_party_id).PARTY_ID');
6651   IF l_purpose = 'S' THEN
6652     dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
6653   ELSE
6654     dc(fnd_log.level_statement,'Score','H_SCORES(l_party_id).TOTAL_SCORE');
6655   END IF;
6656   de;
6657   IF l_purpose  = ('S') THEN
6658     l('      IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
6659     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
6660     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100));');
6661     l('            x_num_matches := x_num_matches+1;');
6662 
6663     ELSIF l_purpose  = ('W') THEN
6664 
6665 
6666     l('      IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
6667     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
6668     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/'||l_max_score||')*100));');
6669     l('            x_num_matches := x_num_matches+1;');
6670 
6671 
6672   ELSE
6673     l('      IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
6674     l('          IF p_dup_set_id IS NULL THEN');
6675     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
6676     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);');
6677     l('             x_num_matches := x_num_matches+1;');
6678     l('          ELSE');
6679     l('            BEGIN');
6680     l('              SELECT  1 INTO l_tmp FROM HZ_DUP_SET_PARTIES');  --Bug No: 4244529
6681     l('              WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID');
6682     l('              AND DUP_SET_BATCH_ID = p_dup_batch_id ');  --Bug No: 4244529
6683     l('              AND ROWNUM=1;');
6684     l('            EXCEPTION ');
6685     l('              WHEN NO_DATA_FOUND THEN');
6686     l('                IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_auto_merge_score||' THEN');
6687     l('                  l_merge_flag := ''Y'';');
6688     l('                ELSE');
6689     l('                  l_merge_flag := ''N'';');
6690     l('                END IF;');
6691     l('                INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
6692     l('                    MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
6693     l('                    LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
6694     l('                VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,');
6695     l('                    H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,');
6696     l('                    hz_utility_pub.created_by,hz_utility_pub.creation_date,');
6697     l('                    hz_utility_pub.last_update_login,');
6698     l('                    hz_utility_pub.last_update_date,');
6699     l('                    hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
6700     l('                x_num_matches := x_num_matches+1;');
6701     l('            END;');
6702     l('          END IF;');
6703   END IF;
6704   l('      END IF;');
6705   l('      IF l_match_str = '' OR '' THEN');
6706   l('        l_party_id:=H_SCORES.NEXT(l_party_id);');
6707   l('      ELSE');
6708   l('        l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
6709   l('      END IF;');
6710   l('    END LOOP;');
6711 
6712   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
6713   d(fnd_log.level_procedure,'find_persons(-)');
6714 
6715 
6716   l('EXCEPTION');
6717   l('  WHEN L_RETURN_IMM_EXC THEN');
6718   l('    RETURN;');
6719   l('  WHEN FND_API.G_EXC_ERROR THEN');
6720   l('    RAISE FND_API.G_EXC_ERROR;');
6721   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6722   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6723   l('  WHEN OTHERS THEN');
6724   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6725   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_persons'');');
6726   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6727   l('    FND_MSG_PUB.ADD;');
6728   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6729   l('END find_persons;');
6730   l('');
6731 ELSE ---Start of Code Change for Match Rule Set
6732   l('BEGIN');
6733   d(fnd_log.level_procedure,'find_persons(+)');
6734   ds(fnd_log.level_statement);
6735   dc(fnd_log.level_statement,'Input Parameters:');
6736   dc(fnd_log.level_statement,'p_match_type','p_match_type');
6737   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6738   de;
6739   pop_conditions(p_rule_id,'find_persons','p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,p_ins_details,x_search_ctx_id,x_num_matches','PARTY');
6740   d(fnd_log.level_procedure,'find_persons(-)');
6741    l('EXCEPTION');
6742   l('  WHEN FND_API.G_EXC_ERROR THEN');
6743   l('    RAISE FND_API.G_EXC_ERROR;');
6744   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6745   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6749   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6746   l('  WHEN OTHERS THEN');
6747   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6748   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_persons'');');
6750   l('    FND_MSG_PUB.ADD;');
6751   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6752   l('END find_persons;');
6753 END IF; ---End of Code Change for Match Rule Set
6754 
6755 l('PROCEDURE find_persons (');
6756   l('      p_rule_id               IN      NUMBER,');
6757   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
6758   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
6759   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
6760   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
6761   l('      p_restrict_sql          IN      VARCHAR2,');
6762   l('      p_match_type            IN      VARCHAR2,');
6763   l('      p_search_merged         IN      VARCHAR2,');
6764   l('      p_ins_details           IN      VARCHAR2,');
6765   l('      x_search_ctx_id         OUT     NUMBER,');
6766   l('      x_num_matches           OUT     NUMBER');
6767   l(') IS');
6768   l('');
6769   l('  BEGIN');
6770   l('     find_persons(p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_search_merged,null,null,null,p_ins_details,x_search_ctx_id,x_num_matches);');
6771   l('  END;');
6772 
6773 
6774   /************** find_party_details API ***************/
6775   l('PROCEDURE find_party_details (');
6776   l('      p_rule_id               IN      NUMBER,');
6777   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
6778   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
6779   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
6780   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
6781   l('      p_restrict_sql          IN      VARCHAR2,');
6782   l('      p_match_type            IN      VARCHAR2,');
6783   l('      p_search_merged         IN      VARCHAR2,');
6784   l('      x_search_ctx_id         OUT     NUMBER,');
6785   l('      x_num_matches           OUT     NUMBER');
6786   l(') IS');
6787   l('');
6788   l('  BEGIN');
6789 
6790 
6791   d(fnd_log.level_procedure,'find_party_details(+)');
6792   ds(fnd_log.level_statement);
6793   dc(fnd_log.level_statement,'Input Parameters:');
6794   dc(fnd_log.level_statement,'p_match_type','p_match_type');
6795   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6796   dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
6797   de;
6798 
6799   l('  find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,');
6800   l('               p_restrict_sql,p_match_type,p_search_merged,null,null, null,''Y'',');
6801   l('               x_search_ctx_id,x_num_matches);');
6802   l('  DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
6803   l('  AND NOT EXISTS ');
6804   l('       (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);');
6805   l('  DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
6806   l('  AND NOT EXISTS ');
6807   l('       (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);');
6808   l('  DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
6809   l('  AND NOT EXISTS ');
6810   l('       (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);');
6811 
6812   d(fnd_log.level_procedure,'find_party_details(-)');
6813 
6814 
6815   l('EXCEPTION');
6816   l('  WHEN FND_API.G_EXC_ERROR THEN');
6817   l('    RAISE FND_API.G_EXC_ERROR;');
6818   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6819   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6820   l('  WHEN OTHERS THEN');
6821   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6822   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_party_details'');');
6823   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6824   l('    FND_MSG_PUB.ADD;');
6825   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6826   l('END find_party_details;');
6827   l('');
6828   /************** find_duplicate_parties API ***************/
6829   l('PROCEDURE find_duplicate_parties (');
6830   l('      p_rule_id               IN      NUMBER,');
6831   l('      p_party_id              IN      NUMBER,');
6832   l('      p_restrict_sql          IN      VARCHAR2,');
6833   l('      p_match_type            IN      VARCHAR2,');
6834   l('      p_dup_batch_id          IN      NUMBER,');
6835   l('      p_search_merged         IN      VARCHAR2,');
6836   l('      x_dup_set_id            OUT     NUMBER,');
6837   l('      x_search_ctx_id         OUT     NUMBER,');
6838   l('      x_num_matches           OUT     NUMBER');
6839   l(') IS');
6840   l('  l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
6841   l('  l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
6842   l('  l_contact_list HZ_PARTY_SEARCH.contact_list;');
6843   l('  l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
6844   l('  l_match_idx NUMBER;');
6845   l('');
6846   l('  --Fix for bug 4417124');
6847   l('  l_use_contact_addr_info BOOLEAN := TRUE;');
6848   l('  l_use_contact_cpt_info BOOLEAN  := TRUE;');
6849   l('  l_use_contact_addr_flag VARCHAR2(1) := ''Y'';');
6850   l('  l_use_contact_cpt_flag  VARCHAR2(1) := ''Y'';');
6851   l('');
6852   l('BEGIN');
6853   l('');
6854   d(fnd_log.level_procedure,'find_duplicate_parties(+)');
6855   ds(fnd_log.level_statement);
6859   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6856   dc(fnd_log.level_statement,'Input Parameters:');
6857   dc(fnd_log.level_statement,'p_party_id','p_party_id');
6858   dc(fnd_log.level_statement,'p_match_type','p_match_type');
6860   dc(fnd_log.level_statement,'p_dup_batch_id','p_dup_batch_id');
6861   dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
6862   de;
6863   l('');
6864   l('  --Fix for bug 4417124 ');
6865   l('');
6866   l('  SELECT use_contact_addr_flag, use_contact_cpt_flag ');
6867   l('  INTO l_use_contact_addr_flag, l_use_contact_cpt_flag ');
6868   l('  FROM hz_match_rules_b ');
6869   l('  WHERE match_rule_id = '||p_rule_id||'; ');
6870   l('');
6871   l('  IF NVL(l_use_contact_addr_flag, ''Y'') = ''N'' THEN');
6872   l('    l_use_contact_addr_info := FALSE; ');
6873   l('  END IF; ');
6874   l('');
6875   l('  IF NVL(l_use_contact_cpt_flag, ''Y'') = ''N'' THEN');
6876   l('    l_use_contact_cpt_info := FALSE; ');
6877   l('  END IF; ');
6878   l('');
6879   l(' --End fix for bug 4417124');
6880   l('');
6881 
6882   l('  get_party_for_search(');
6883   l('              p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);');
6884   l('');
6885   l('    IF NOT check_prim_cond (l_party_rec,');
6886   l('                            l_party_site_list,');
6887   l('                            l_contact_list,');
6888   l('                            l_cpt_list) THEN');
6889   l('      x_dup_set_id:=NULL;');
6890   l('      x_search_ctx_id:=NULL;');
6891   l('      x_num_matches:=0;');
6892   l('      RETURN;');
6893   l('    END IF;');
6894 
6895   l('  x_dup_set_id := NULL;');
6896   l('  IF p_dup_batch_id IS NOT NULL THEN');
6897   l('    SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;');
6898   l('  END IF;');
6899   l('');
6900   l('  --Fix for bug 4417124 ');
6901   l('  IF l_party_rec.PARTY_TYPE = ''PERSON'' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN');
6902   l('    find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
6903   l('               p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,''N'',');
6904   l('               x_search_ctx_id,x_num_matches);');
6905   l('  ELSE');
6906   l('    find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
6907   l('               p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,''N'',');
6908   l('               x_search_ctx_id,x_num_matches);');
6909   l('  END IF;');
6910   l('');
6911   l('  IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN');
6912   l('    INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,');
6913   l('      STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,');
6914   l('      LAST_UPDATE_DATE, LAST_UPDATED_BY) ');
6915   l('    VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, ''SYSBATCH'',');
6916   l('      ''PARTY_MERGE'', hz_utility_pub.created_by, hz_utility_pub.creation_date,');
6917   l('      hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,');
6918   l('      hz_utility_pub.user_id);');
6919   l('');
6920   l('    INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
6921   l('      MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
6922   l('      LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
6923   l('    VALUES (p_party_id,x_dup_set_id,0,0,');
6924   l('      ''Y'',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,');
6925   l('      hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,');
6926   l('      hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
6927   l('  ELSE');
6928   l('    x_dup_set_id := NULL;');
6929   l('  END IF;');
6930   d(fnd_log.level_procedure,'find_duplicate_parties(-)');
6931 
6932 
6933   l('EXCEPTION');
6934   l('  WHEN FND_API.G_EXC_ERROR THEN');
6935   l('    RAISE FND_API.G_EXC_ERROR;');
6936   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
6937   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6938   l('  WHEN OTHERS THEN');
6939   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
6940   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_parties'');');
6941   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
6942   l('    FND_MSG_PUB.ADD;');
6943   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
6944   l('END find_duplicate_parties;');
6945 
6946 
6947   l('');
6948   /************** find_duplicate_party_sites API ***************/
6949   l('PROCEDURE find_duplicate_party_sites (');
6950   l('      p_rule_id               IN      NUMBER,');
6951   l('      p_party_site_id         IN      NUMBER,');
6952   l('      p_party_id              IN      NUMBER,');
6953   l('      p_restrict_sql          IN      VARCHAR2,');
6954   l('      p_match_type            IN      VARCHAR2,');
6955   l('      x_search_ctx_id         OUT     NUMBER,');
6956   l('      x_num_matches           OUT     NUMBER');
6957   l(') IS');
6958   l('');
6959 
6960 
6961   l('   l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
6962   l('   l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
6963   l('   l_contact_list HZ_PARTY_SEARCH.contact_list; ');
6964   l('   l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
6965   l('   contact_point_ids HZ_PARTY_SEARCH.IDList; ');
6966   l('   p_party_site_list HZ_PARTY_SEARCH.IDList;  ');
6967   l('   p_contact_ids HZ_PARTY_SEARCH.IDList; ');
6968   l('  l_match_idx NUMBER;');
6969 
6970   l('   cursor get_cpts_for_party_sites is select contact_point_id  ');
6971   l('                         from hz_contact_points ');
6972   l('                         where owner_table_name = ''HZ_PARTY_SITES'' ');
6973   l('                         and primary_flag=''Y''');
6974   l('                         and owner_table_id = p_party_site_id; ');
6975 
6976   l('   BEGIN ');
6977 
6978 
6979   d(fnd_log.level_procedure,'find_duplicate_party_sites(+)');
6980   ds(fnd_log.level_statement);
6981   dc(fnd_log.level_statement,'Input Parameters:');
6982   dc(fnd_log.level_statement,'p_party_site_id','p_party_site_id');
6983   dc(fnd_log.level_statement,'p_party_id','p_party_id');
6984   dc(fnd_log.level_statement,'p_match_type','p_match_type');
6985   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
6986   de;
6987 
6988   l('     p_party_site_list(1) := p_party_site_id; ');
6989   l('     OPEN get_cpts_for_party_sites;');
6990   l('     LOOP       ');
6991   l('     FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; ');
6992   l('         EXIT WHEN get_cpts_for_party_sites%NOTFOUND; ');
6993   l('     END LOOP;  ');
6994   l('     CLOSE get_cpts_for_party_sites; ');
6995   l('  ');
6996   l('     get_search_criteria (');
6997   l('         null,');
6998   l('         p_party_site_list,');
6999   l('         HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
7000   l('         contact_point_ids, ');
7001   l('         l_party_search_rec,');
7002   l('         l_party_site_list,');
7003   l('         l_contact_list,');
7004   l('         l_contact_point_list) ;');
7005   l('    IF NOT check_prim_cond (l_party_search_rec,');
7006   l('                            l_party_site_list,');
7007   l('                            l_contact_list,');
7008   l('                            l_contact_point_list) THEN');
7009   l('      x_search_ctx_id:=NULL;');
7010   l('      x_num_matches:=0;');
7011   l('      RETURN;');
7012   l('    END IF;');
7013   l(' ');
7014   l('     get_matching_party_sites (p_rule_id, ');
7015   l('         p_party_id, ');
7016   l('         l_party_site_list, ');
7017   l('         l_contact_point_list,');
7018   l('         p_restrict_sql, ');
7019   l('         p_match_type, ');
7020   l('         p_party_site_id, ');
7021   l('         x_search_ctx_id,');
7022   l('         x_num_matches);');
7023   d(fnd_log.level_procedure,'find_duplicate_party_sites(-)');
7024 
7025 
7026   l('EXCEPTION');
7027   l('  WHEN FND_API.G_EXC_ERROR THEN');
7028   l('    RAISE FND_API.G_EXC_ERROR;');
7029   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7030   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7031   l('  WHEN OTHERS THEN');
7032   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7033   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_party_sites'');');
7034   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7035   l('    FND_MSG_PUB.ADD;');
7036   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7037   l('END find_duplicate_party_sites; ');
7038   l(' ');
7039 
7040   /************** find_duplicate_contacts API ***************/
7041   l('PROCEDURE find_duplicate_contacts (');
7042   l('      p_rule_id               IN      NUMBER,');
7043   l('      p_org_contact_id        IN      NUMBER,');
7044   l('      p_party_id              IN      NUMBER,');
7045   l('      p_restrict_sql          IN      VARCHAR2,');
7046   l('      p_match_type            IN      VARCHAR2,');
7047   l('      x_search_ctx_id         OUT     NUMBER,');
7048   l('      x_num_matches           OUT     NUMBER');
7049   l(') IS');
7050   l('');
7051 
7052   l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;');
7053   l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
7054   l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
7055   l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
7056   l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
7057   l(' p_party_site_list HZ_PARTY_SEARCH.IDList;   ');
7058   l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
7059   l('  l_match_idx NUMBER;');
7060 
7061   l(' cursor get_cpt_for_contact_id is select  contact_point_id ');
7062   l('   from hz_org_contacts a, hz_relationships b, hz_contact_points c ');
7063   l('   where a.party_relationship_id = b.relationship_id ');
7064   l('     and c.owner_table_name = ''HZ_PARTIES'' ');
7065   l('     and c.primary_flag=''Y''');
7066   l('     and c.owner_table_id = b.party_id ');
7067   l('     and b.directional_flag = ''F''  ');
7068   l('     and a.org_contact_id = p_org_contact_id; ');
7069 
7070   l('BEGIN ');
7071 
7072 
7073   d(fnd_log.level_procedure,'find_duplicate_contacts(+)');
7074   ds(fnd_log.level_statement);
7075   dc(fnd_log.level_statement,'Input Parameters:');
7076   dc(fnd_log.level_statement,'p_org_contact_id','p_org_contact_id');
7077   dc(fnd_log.level_statement,'p_party_id','p_party_id');
7078   dc(fnd_log.level_statement,'p_match_type','p_match_type');
7079   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7080   de;
7081 
7082 
7083   l('    p_contact_ids(1) := p_org_contact_id; ');
7084   l('    OPEN get_cpt_for_contact_id; ');
7085   l('    LOOP ');
7086   l('    FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; ');
7087   l('        EXIT WHEN get_cpt_for_contact_id%NOTFOUND; ');
7088   l('    END LOOP;  ');
7089   l('    CLOSE get_cpt_for_contact_id; ');
7090   l(' ');
7091   l('    get_search_criteria (');
7092   l('        null,');
7093   l('        HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
7094   l('        p_contact_ids,');
7095   l('        contact_point_ids, ');
7096   l('        l_party_search_rec,');
7097   l('        l_party_site_list, ');
7098   l('        l_contact_list,');
7099   l('        l_contact_point_list) ;');
7100   l('    IF NOT check_prim_cond (l_party_search_rec,');
7101   l('                            l_party_site_list,');
7102   l('                            l_contact_list,');
7103   l('                            l_contact_point_list) THEN');
7104   l('      x_search_ctx_id:=NULL;');
7105   l('      x_num_matches:=0;');
7106   l('      RETURN;');
7107   l('    END IF;');
7108   l(' ');
7109   l('    get_matching_contacts (p_rule_id, ');
7110   l('        p_party_id, ');
7111   l('        l_contact_list, ');
7112   l('        l_contact_point_list, ');
7113   l('        p_restrict_sql, ');
7114   l('        p_match_type, ');
7115   l('        p_org_contact_id, ');
7116   l('        x_search_ctx_id, ');
7117   l('        x_num_matches);');
7118   l(' ');
7119   d(fnd_log.level_procedure,'find_duplicate_contacts(-)');
7120 
7121 
7122   l('EXCEPTION');
7123   l('  WHEN FND_API.G_EXC_ERROR THEN');
7124   l('    RAISE FND_API.G_EXC_ERROR;');
7125   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7126   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7127   l('  WHEN OTHERS THEN');
7128   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7129   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contacts'');');
7130   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7131   l('    FND_MSG_PUB.ADD;');
7132   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7133   l('END find_duplicate_contacts; ');
7134   l('');
7135   /************** find_duplicate_contact_points API ***************/
7136   l('PROCEDURE find_duplicate_contact_points (');
7137   l('      p_rule_id               IN      NUMBER,');
7138   l('      p_contact_point_id      IN      NUMBER,');
7139   l('      p_party_id              IN      NUMBER,');
7140   l('      p_restrict_sql          IN      VARCHAR2,');
7141   l('      p_match_type            IN      VARCHAR2,');
7142   l('      x_search_ctx_id         OUT     NUMBER,');
7143   l('      x_num_matches           OUT     NUMBER');
7144   l(') IS');
7145   l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
7146   l('  l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
7147   l('   l_contact_list HZ_PARTY_SEARCH.contact_list;  ');
7148   l('   l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;  ');
7149   l('   contact_point_ids HZ_PARTY_SEARCH.IDList;  ');
7150   l('  p_party_site_list HZ_PARTY_SEARCH.IDList;   ');
7151   l('  p_contact_ids HZ_PARTY_SEARCH.IDList;  ');
7152   l('  l_match_idx NUMBER;');
7153 
7154   l('');
7155   l('BEGIN');
7156 
7157 
7158   d(fnd_log.level_procedure,'find_duplicate_contact_points(+)');
7159   ds(fnd_log.level_statement);
7160   dc(fnd_log.level_statement,'Input Parameters:');
7161   dc(fnd_log.level_statement,'p_contact_point_id','p_contact_point_id');
7162   dc(fnd_log.level_statement,'p_party_id','p_party_id');
7163   dc(fnd_log.level_statement,'p_match_type','p_match_type');
7164   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7165   de;
7166 
7167   l('  contact_point_ids(1) := p_contact_point_id;   ');
7168   l('  get_search_criteria (   ');
7169   l('      null, ');
7170   l('      HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
7171   l('      HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
7172   l('      contact_point_ids,   ');
7173   l('      l_party_search_rec, ');
7174   l('      l_party_site_list, ');
7175   l('      l_contact_list, ');
7176   l('      l_contact_point_list ); ');
7177   l('    ');
7178   l('    IF NOT check_prim_cond (l_party_search_rec,');
7179   l('                            l_party_site_list,');
7180   l('                            l_contact_list,');
7181   l('                            l_contact_point_list) THEN');
7182   l('      x_search_ctx_id:=NULL;');
7183   l('      x_num_matches:=0;');
7184   l('      RETURN;');
7185   l('    END IF;');
7186   l('   get_matching_contact_points ( ');
7187   l('      p_rule_id, ');
7188   l('      p_party_id, ');
7189   l('     l_contact_point_list, ');
7190   l('      p_restrict_sql, ');
7191   l('      p_match_type, ');
7192   l('      p_contact_point_id, ');
7193   l('      x_search_ctx_id, ');
7194   l('      x_num_matches );  ');
7195   d(fnd_log.level_procedure,'find_duplicate_contact_points(-)');
7196 
7197 
7198   l('EXCEPTION');
7199   l('  WHEN FND_API.G_EXC_ERROR THEN');
7200   l('    RAISE FND_API.G_EXC_ERROR;');
7201   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7202   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7203   l('  WHEN OTHERS THEN');
7204   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7205   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contact_points'');');
7206   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7207   l('    FND_MSG_PUB.ADD;');
7208   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7209   l('END find_duplicate_contact_points;');
7210   l('');
7211   l('PROCEDURE find_parties_dynamic (');
7212   l('        p_rule_id               IN      NUMBER,');
7213   l('        p_attrib_id1            IN      NUMBER,');
7214   l('        p_attrib_id2            IN      NUMBER,');
7215   l('        p_attrib_id3            IN      NUMBER,');
7216   l('        p_attrib_id4            IN      NUMBER,');
7217   l('        p_attrib_id5            IN      NUMBER,');
7218   l('        p_attrib_id6            IN      NUMBER,');
7219   l('        p_attrib_id7            IN      NUMBER,');
7220   l('        p_attrib_id8            IN      NUMBER,');
7221   l('        p_attrib_id9            IN      NUMBER,');
7222   l('        p_attrib_id10           IN      NUMBER,');
7223   l('        p_attrib_id11           IN      NUMBER,');
7224   l('        p_attrib_id12           IN      NUMBER,');
7225   l('        p_attrib_id13           IN      NUMBER,');
7226   l('        p_attrib_id14           IN      NUMBER,');
7227   l('        p_attrib_id15           IN      NUMBER,');
7228   l('        p_attrib_id16           IN      NUMBER,');
7229   l('        p_attrib_id17           IN      NUMBER,');
7230   l('        p_attrib_id18           IN      NUMBER,');
7231   l('        p_attrib_id19           IN      NUMBER,');
7232   l('        p_attrib_id20           IN      NUMBER,');
7233   l('        p_attrib_val1           IN      VARCHAR2,');
7234   l('        p_attrib_val2           IN      VARCHAR2,');
7235   l('        p_attrib_val3           IN      VARCHAR2,');
7236   l('        p_attrib_val4           IN      VARCHAR2,');
7237   l('        p_attrib_val5           IN      VARCHAR2,');
7238   l('        p_attrib_val6           IN      VARCHAR2,');
7239   l('        p_attrib_val7           IN      VARCHAR2,');
7240   l('        p_attrib_val8           IN      VARCHAR2,');
7241   l('        p_attrib_val9           IN      VARCHAR2,');
7242   l('        p_attrib_val10          IN      VARCHAR2,');
7243   l('        p_attrib_val11          IN      VARCHAR2,');
7244   l('        p_attrib_val12          IN      VARCHAR2,');
7245   l('        p_attrib_val13          IN      VARCHAR2,');
7246   l('        p_attrib_val14          IN      VARCHAR2,');
7247   l('        p_attrib_val15          IN      VARCHAR2,');
7248   l('        p_attrib_val16          IN      VARCHAR2,');
7249   l('        p_attrib_val17          IN      VARCHAR2,');
7250   l('        p_attrib_val18          IN      VARCHAR2,');
7251   l('        p_attrib_val19          IN      VARCHAR2,');
7252   l('        p_attrib_val20          IN      VARCHAR2,');
7253   l('        p_restrict_sql          IN      VARCHAR2,');
7254   l('        p_match_type            IN      VARCHAR2,');
7255   l('        p_search_merged         IN      VARCHAR2,');
7256   l('        x_search_ctx_id         OUT     NUMBER,');
7257   l('        x_num_matches           OUT     NUMBER');
7258   l(') IS');
7259   l('  BEGIN');
7260   l('    call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
7261   l('                     p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
7262   l('                     p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
7263   l('                     p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
7264   l('                     p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
7265   l('                     p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
7266   l('                     p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
7267   l('                     p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
7268   l('                     p_restrict_sql,''FIND_PARTIES'',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);');
7269   l(' END;');
7270 
7271   l('');
7272   /************** call_api_dynamic API ***************/
7273   l('PROCEDURE call_api_dynamic (');
7274   l('        p_rule_id               IN      NUMBER,');
7275   l('        p_attrib_id1            IN      NUMBER,');
7276   l('        p_attrib_id2            IN      NUMBER,');
7277   l('        p_attrib_id3            IN      NUMBER,');
7278   l('        p_attrib_id4            IN      NUMBER,');
7279   l('        p_attrib_id5            IN      NUMBER,');
7280   l('        p_attrib_id6            IN      NUMBER,');
7281   l('        p_attrib_id7            IN      NUMBER,');
7282   l('        p_attrib_id8            IN      NUMBER,');
7283   l('        p_attrib_id9            IN      NUMBER,');
7284   l('        p_attrib_id10           IN      NUMBER,');
7285   l('        p_attrib_id11           IN      NUMBER,');
7286   l('        p_attrib_id12           IN      NUMBER,');
7287   l('        p_attrib_id13           IN      NUMBER,');
7288   l('        p_attrib_id14           IN      NUMBER,');
7289   l('        p_attrib_id15           IN      NUMBER,');
7290   l('        p_attrib_id16           IN      NUMBER,');
7291   l('        p_attrib_id17           IN      NUMBER,');
7292   l('        p_attrib_id18           IN      NUMBER,');
7293   l('        p_attrib_id19           IN      NUMBER,');
7294   l('        p_attrib_id20           IN      NUMBER,');
7295   l('        p_attrib_val1           IN      VARCHAR2,');
7296   l('        p_attrib_val2           IN      VARCHAR2,');
7297   l('        p_attrib_val3           IN      VARCHAR2,');
7298   l('        p_attrib_val4           IN      VARCHAR2,');
7299   l('        p_attrib_val5           IN      VARCHAR2,');
7300   l('        p_attrib_val6           IN      VARCHAR2,');
7301   l('        p_attrib_val7           IN      VARCHAR2,');
7302   l('        p_attrib_val8           IN      VARCHAR2,');
7303   l('        p_attrib_val9           IN      VARCHAR2,');
7304   l('        p_attrib_val10          IN      VARCHAR2,');
7305   l('        p_attrib_val11          IN      VARCHAR2,');
7306   l('        p_attrib_val12          IN      VARCHAR2,');
7307   l('        p_attrib_val13          IN      VARCHAR2,');
7308   l('        p_attrib_val14          IN      VARCHAR2,');
7309   l('        p_attrib_val15          IN      VARCHAR2,');
7310   l('        p_attrib_val16          IN      VARCHAR2,');
7311   l('        p_attrib_val17          IN      VARCHAR2,');
7312   l('        p_attrib_val18          IN      VARCHAR2,');
7313   l('        p_attrib_val19          IN      VARCHAR2,');
7314   l('        p_attrib_val20          IN      VARCHAR2,');
7315   l('        p_restrict_sql          IN      VARCHAR2,');
7316   l('        p_api_name              IN      VARCHAR2,');
7317   l('        p_match_type            IN      VARCHAR2,');
7318   l('        p_party_id              IN      NUMBER,');
7319   l('        p_search_merged         IN      VARCHAR2,');
7320   l('        x_search_ctx_id         OUT     NUMBER,');
7321   l('        x_num_matches           OUT     NUMBER');
7322   l(') IS');
7323   l('  TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;');
7324   l('  l_match_idx NUMBER;');
7325   l('  AttrVals AttrList;');
7326   l('  l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
7327   l('  l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
7328   l('  l_contact_list HZ_PARTY_SEARCH.contact_list;');
7329   l('  l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
7330   l('  l_dup_set_id NUMBER;');
7331   l('  l_idx NUMBER;');
7332   l('  l_cpt_type VARCHAR2(255);');
7333   l('  FIRST BOOLEAN := TRUE; ');
7334   l('');
7335   l('BEGIN');
7336 
7337   d(fnd_log.level_procedure,'call_api_dynamic(+)');
7338   l('');
7339   FOR I in 1..20 LOOP
7340     l('  IF p_attrib_id'||I||' IS NOT NULL THEN');
7341     l('    AttrVals(p_attrib_id'||I||'):=p_attrib_val'||I||';');
7342     l('  END IF;');
7343   END LOOP;
7344 
7345   FIRST := TRUE;
7346   FOR ATTRS IN (
7347       SELECT a.attribute_id, a.attribute_name, a.entity_name
7348       FROM HZ_TRANS_ATTRIBUTES_VL a,
7349          HZ_MATCH_RULE_PRIMARY p
7350       WHERE p.match_rule_id = p_rule_id
7351       AND p.attribute_id = a.attribute_id
7352 
7353       UNION
7354 
7355       SELECT a.attribute_id, a.attribute_name, a.entity_name
7356       FROM HZ_TRANS_ATTRIBUTES_VL a,
7357          HZ_MATCH_RULE_SECONDARY s
7358       WHERE s.match_rule_id = p_rule_id
7359       AND s.attribute_id = a.attribute_id) LOOP
7360     l('  IF AttrVals.EXISTS('||ATTRS.attribute_id||') THEN');
7361     IF ATTRS.entity_name='PARTY' THEN
7362         l('    l_party_rec.'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7363         d(fnd_log.level_statement,'l_party_rec.'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7364     ELSIF ATTRS.entity_name='PARTY_SITES' THEN
7365         l('    l_party_site_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7366         d(fnd_log.level_statement,'l_party_site_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7367     ELSIF ATTRS.entity_name='CONTACTS' THEN
7368         l('    l_contact_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7369         d(fnd_log.level_statement,'l_contact_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7370     ELSIF ATTRS.entity_name='CONTACT_POINTS' THEN
7371       BEGIN
7372         SELECT tag INTO l_cpt_type FROM fnd_lookup_values
7373         WHERE lookup_type = 'HZ_DQM_CPT_ATTR_TYPE'
7374         AND lookup_code = ATTRS.attribute_name
7375         AND ROWNUM=1;
7376       EXCEPTION
7377         WHEN NO_DATA_FOUND THEN
7378           l_cpt_type:='PHONE';
7379       END;
7380 
7381       l('    l_cpt_type := '''||l_cpt_type||''';');
7382       l('    FIRST := FALSE;');
7383       l('    FOR I in 1..l_cpt_list.COUNT LOOP');
7384       l('      IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN');
7385       l('        l_cpt_list(I).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7386       l('        FIRST := TRUE;');
7387       ds(fnd_log.level_statement);
7388       dc(fnd_log.level_statement,'l_cpt_list(''||I||'').CONTACT_POINT_TYPE','l_cpt_type');
7389       dc(fnd_log.level_statement,'l_cpt_list(''||I||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7390       de;
7391       l('      END IF;');
7392       l('    END LOOP;');
7393       l('    IF not FIRST THEN');
7394       l('      l_idx := l_cpt_list.COUNT+1;');
7395       l('      l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;');
7396       l('      l_cpt_list(l_idx).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
7397       ds(fnd_log.level_statement);
7398       dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').CONTACT_POINT_TYPE','l_cpt_type');
7399       dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
7400       de;
7401       l('    END IF;');
7402     END IF;
7403     l('  END IF;');
7404     l('');
7405   END LOOP;
7406   l('');
7407 
7408   l('  IF AttrVals.EXISTS(14) THEN');
7409   l('     l_party_rec.PARTY_TYPE:= AttrVals(14); ');
7410   l('  END IF; ');
7411 
7412   l('  IF upper(p_api_name) = ''FIND_PARTIES'' THEN');
7413   l('    find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
7414   l('               p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,''N'',');
7415   l('               x_search_ctx_id,x_num_matches);');
7416   l('  ELSIF upper(p_api_name) = ''FIND_PARTY_DETAILS'' THEN');
7417   l('    find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
7418   l('               p_restrict_sql,p_match_type,p_search_merged,');
7419   l('               x_search_ctx_id,x_num_matches);');
7420   l('  ELSIF upper(p_api_name) = ''FIND_PERSONS'' THEN');
7421   l('    find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
7422   l('               p_restrict_sql,p_match_type,p_search_merged,''N'',');
7423   l('               x_search_ctx_id,x_num_matches);');
7424   l('  ELSIF upper(p_api_name) = ''GET_MATCHING_PARTY_SITES'' THEN');
7425   l('    get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,');
7426   l('               p_restrict_sql,p_match_type,NULL,');
7427   l('               x_search_ctx_id,x_num_matches);');
7428   l('  ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACTS'' THEN');
7429   l('    get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,');
7430   l('               p_restrict_sql,p_match_type,NULL,');
7431   l('               x_search_ctx_id,x_num_matches);');
7432   l('  ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACT_POINTS'' THEN');
7433   l('    get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,');
7434   l('               p_restrict_sql,p_match_type,NULL,');
7435   l('               x_search_ctx_id,x_num_matches);');
7436   l('  END IF;');
7437   d(fnd_log.level_procedure,'call_api_dynamic(-)');
7438 
7439 
7440   l('EXCEPTION');
7441   l('  WHEN FND_API.G_EXC_ERROR THEN');
7442   l('    RAISE FND_API.G_EXC_ERROR;');
7443   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7444   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7445   l('  WHEN OTHERS THEN');
7446   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7447   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.call_api_dynamic'');');
7448   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7449   l('    FND_MSG_PUB.ADD;');
7450   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7451 
7452 
7453   l('END call_api_dynamic; ');
7454   l('');
7455 
7456   /************** get_matching_party_sites API ***************/
7457   l('');
7458   l('PROCEDURE get_matching_party_sites (');
7459   l('        p_rule_id               IN      NUMBER,');
7460   l('        p_party_id              IN      NUMBER,');
7461   l('        p_party_site_list       IN      HZ_PARTY_SEARCH.PARTY_SITE_LIST,');
7462   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
7463   l('        p_restrict_sql          IN      VARCHAR2,');
7464   l('        p_match_type            IN      VARCHAR2,');
7465   l('        p_dup_party_site_id     IN      NUMBER, ');
7466   l('        x_search_ctx_id         OUT     NUMBER,');
7467   l('        x_num_matches           OUT     NUMBER');
7468   l(') IS');
7469   l('  ');
7470 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
7471   l('  -- Strings to hold the generated Intermedia query strings');
7472   l('  l_party_contains_str VARCHAR2(32000); ');
7473   l('  l_match_idx NUMBER;');
7474   l('  l_party_site_contains_str VARCHAR2(32000);');
7475   l('  l_contact_contains_str VARCHAR2(32000);');
7476   l('  l_contact_pt_contains_str VARCHAR2(32000);');
7477   l('  l_tmp VARCHAR2(32000);');
7478   l('');
7479   l('  -- Other local variables');
7480   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
7481   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
7482   l('  -- For Score calculation');
7483   l('  l_max_score NUMBER;');
7484   l('  l_entered_max_score NUMBER;');
7485   l('  FIRST BOOLEAN;');
7486   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
7487   l('');
7488   FOR TX IN (
7489       SELECT distinct f.staged_attribute_column
7490       FROM hz_trans_functions_vl f, hz_secondary_trans st,
7491            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
7492       WHERE sa.match_rule_id = p_rule_id
7493       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
7494       AND st.function_id = f.function_id
7495       AND (a.ENTITY_NAME='PARTY_SITES' OR a.ENTITY_NAME='CONTACT_POINTS')
7496       AND a.attribute_id = sa.attribute_id) LOOP
7497     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
7498   END LOOP;
7499   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
7500   l('');
7501   l('  l_score NUMBER;');
7502   l('  l_idx NUMBER;');
7503   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
7504   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
7505   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
7506   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
7507   l('  l_party_id NUMBER;');
7508   l('  l_ps_party_id NUMBER;');
7509   l('  l_ct_party_id NUMBER;');
7510   l('  l_cpt_party_id NUMBER;');
7511   l('  l_cpt_ps_id NUMBER;');
7512   l('  l_cpt_contact_id NUMBER;');
7513   l('  l_cpt_type VARCHAR2(100);');
7514   l('  l_cpt_level VARCHAR2(100);');
7515   l('  l_party_site_id NUMBER;');
7516   l('  l_org_contact_id NUMBER;');
7517   l('  l_contact_pt_id NUMBER;');
7518   l('  l_cpt_level VARCHAR2(100);');
7519   l('  l_ps_contact_id NUMBER;');
7520   l('  l_party_max_score NUMBER;');
7521   l('  l_ps_max_score NUMBER;');
7522   l('  l_contact_max_score NUMBER;');
7523   l('  l_cpt_max_score NUMBER;');
7524   l('');
7525   l('  defpt NUMBER :=0;');
7526   l('  defps NUMBER :=0;');
7527   l('  defct NUMBER :=0;');
7528   l('  defcpt NUMBER :=0;');
7529   l('  l_index NUMBER;');
7530   l('  l_match_ps_list HZ_PARTY_SEARCH.IDList;');
7531   l('  l_cnt NUMBER:=1;');
7532   l('');
7533   l('  ');
7534   l('  BEGIN');
7535 
7536 
7537   d(fnd_log.level_procedure,'get_matching_party_sites(+)');
7538   ds(fnd_log.level_statement);
7539   dc(fnd_log.level_statement,'Input Parameters:');
7540   dc(fnd_log.level_statement,'p_match_type','p_match_type');
7541   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7542   dc(fnd_log.level_statement,'p_dup_party_site_id','p_dup_party_site_id');
7543   de;
7544   l('');
7545   l('    -- ************************************');
7546   l('    -- STEP 1. Initialization and error checks');
7547   l('');
7548   l('    l_match_str := ''' || l_match_str || ''';');
7549   l('    IF p_match_type = ''AND'' THEN');
7550   l('      l_match_str := '' AND '';');
7551   l('    ELSIF p_match_type = ''OR'' THEN');
7552   l('      l_match_str := '' OR '';');
7553   l('    END IF;');
7554   l('    l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, p_party_site_list, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
7555   l('    g_score_until_thresh := false;');
7556   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
7557 
7558   l('');
7559 
7560   l('    -- ************************************************************');
7561   l('    -- STEP 2. Setup of intermedia query strings for Acquisition query');
7562   l('    l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);');
7563   l('    l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
7564   l('    init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,p_party_site_list,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);');
7565   l('');
7566   l('    -- Setup Search Context ID');
7567   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
7568   l('    x_search_ctx_id := l_search_ctx_id;');
7569   l('');
7570 
7571   ds(fnd_log.level_statement);
7572   dc(fnd_log.level_statement,'l_match_str','l_match_str');
7576   de;
7573   dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
7574   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
7575   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
7577 
7578   l('    IF l_party_site_contains_str IS NULL THEN');
7579   l('      defps := 1;');
7580   l('    END IF;');
7581   l('    IF l_contact_pt_contains_str IS NULL THEN');
7582   l('      defcpt := 1;');
7583   l('    END IF;');
7584   l('');
7585   l('    IF l_party_site_contains_str IS NOT NULL THEN');
7586   l('      open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,''N'', ''N'',l_party_site_cur);');
7587   l('      LOOP');
7588   l('        FETCH l_party_site_cur INTO ');
7589   l('            l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
7590   l('        EXIT WHEN l_party_site_cur%NOTFOUND;');
7591   l('      IF (p_dup_party_site_id IS NULL OR (');
7592   l('                p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND ');
7593   l('                l_party_site_id <> p_dup_party_site_id)) THEN  ');
7594   l('            l_index := map_id(l_party_site_id);');
7595   l('            l_match_ps_list(l_cnt):= l_party_site_id ;');
7596   l('            l_cnt:=l_cnt+1;');
7597   l('            l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
7598   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);');
7599   ds(fnd_log.level_statement);
7600   dc(fnd_log.level_statement,'Party Site Level Matches');
7601   dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
7602   dc(fnd_log.level_statement,'l_score','l_score');
7603   de;
7604 
7605   l('      END IF; ');
7606   l('      END LOOP;');
7607   l('      CLOSE l_party_site_cur;');
7608   l('    END IF;');
7609   l('');
7610   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
7611   l('    SAVEPOINT eval_start;');
7612   l('    IF l_match_str = '' AND '' OR (');
7613   l('        ((l_cpt_max_score/l_entered_max_score)<' ||'('||l_match_threshold||'/'||l_max_score || '))' );
7614   l('        ) THEN');
7615   l('      FORALL I in 1..l_match_ps_list.COUNT');
7616   l('           INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)');
7617   l('           values (l_search_ctx_id,l_match_ps_list(I));');
7618   l('        open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur,''PARTY_SITES'');');
7619   l('    ELSE');
7620   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur);');
7621   l('    END IF;');
7622   l('      LOOP');
7623   l('        FETCH l_contact_pt_cur INTO ');
7624   l('            l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
7625   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
7626   l('      IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (');
7627   l('         p_dup_party_site_id IS NOT NULL AND l_cpt_contact_id IS NULL AND p_dup_party_site_id <> l_cpt_ps_id))) THEN   ');
7628   l('        l_index := map_id(l_cpt_ps_id);');
7629   l('        IF l_match_str = '' OR '' THEN');
7630   l('          l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7631   l('          IF NOT H_SCORES.EXISTS(l_index) THEN');
7632   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
7633   l('          ELSE');
7634   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7635   l('               H_SCORES(l_index).TOTAL_SCORE := ');
7636   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7637   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7638   l('            END IF;');
7639   l('          END IF;');
7640   l('        ELSE');
7641   l('          IF H_SCORES.EXISTS(l_index) THEN');
7642   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7643   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7644   l('               H_SCORES(l_index).TOTAL_SCORE := ');
7645   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7646   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7647   l('            END IF;');
7648   l('          ELSIF defps=1 THEN');
7649   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7650   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
7651   l('          END IF;');
7652   l('        END IF;');
7653   l('      END IF; ');
7654   ds(fnd_log.level_statement);
7655   dc(fnd_log.level_statement,'Contact_point Level Matches');
7656   dc(fnd_log.level_statement,'l_party_site_id','l_cpt_ps_id');
7657   dc(fnd_log.level_statement,'l_score','l_score');
7658   de;
7659   l('      END LOOP;');
7660   l('      CLOSE l_contact_pt_cur;');
7661   l('    ROLLBACK TO eval_start;');
7662   l('    END IF;');
7663   l('    x_num_matches := 0;');
7664   l('    l_party_site_id := H_SCORES.FIRST;');
7665   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
7666   l('    WHILE l_party_site_id IS NOT NULL LOOP');
7667   ds(fnd_log.level_statement);
7668   dc(fnd_log.level_statement,'Match Party Site ID','H_SCORES(l_party_site_id).PARTY_SITE_ID');
7669   dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100)');
7670   de;
7671 l(' IF l_match_str = '' OR '' THEN');
7672   --Start of Bug No: 4162385
7673   IF l_purpose = 'D' THEN
7674     l_entity_score_lh := 'H_SCORES(l_party_site_id).TOTAL_SCORE';
7675     l_entity_score_rh := 'ROUND(('||get_entity_level_score(p_rule_id,'PARTY_SITES')||'/'||l_max_score||') * '|| l_match_threshold || ')';
7676   ELSE
7677     l_entity_score_lh := 'H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score';
7678     l_entity_score_rh := l_match_threshold||'/'||l_max_score;
7679   END IF;
7680   --End of Bug No: 4162385
7681     l('IF ('||l_entity_score_lh||')>=( '||l_entity_score_rh||' ) THEN'); --Bug No: 4162385
7682     l('    INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
7683     l('    VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100);');
7684   l('      x_num_matches := x_num_matches+1;');
7685   l(' END IF;');
7686 l(' ELSE');
7687     l('    IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND');
7688     l('       H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND');
7689     l('       ('||l_entity_score_lh||')>=('||l_entity_score_rh||') THEN'); --Bug No: 4162385
7690     l('      INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
7691     l('      VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100));');
7692   l('       x_num_matches := x_num_matches+1;');
7693   l('      END IF;');
7694 l(' END IF;');
7695   l('      l_party_site_id:=H_SCORES.NEXT(l_party_site_id);');
7696   l('    END LOOP;');
7697 ELSE ---Start of Code Change for Match Rule Set
7698   l('  ');
7699   l('  BEGIN');
7700   d(fnd_log.level_procedure,'get_matching_party_sites(+)');
7701   ds(fnd_log.level_statement);
7702   dc(fnd_log.level_statement,'Input Parameters:');
7703   dc(fnd_log.level_statement,'p_match_type','p_match_type');
7704   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7705   dc(fnd_log.level_statement,'p_dup_party_site_id','p_dup_party_site_id');
7706   de;
7707   l('');
7708   pop_conditions(p_rule_id,'get_matching_party_sites','p_rule_id,p_party_id,p_party_site_list,p_contact_point_list,p_restrict_sql,p_match_type,p_dup_party_site_id,x_search_ctx_id,x_num_matches','PARTY_SITES');
7709 
7710 END IF; ---End of Code Change for Match Rule Set
7711   d(fnd_log.level_procedure,'get_matching_party_sites(-)');
7712 
7713   l('EXCEPTION');
7714   l('  WHEN FND_API.G_EXC_ERROR THEN');
7715   l('    RAISE FND_API.G_EXC_ERROR;');
7716   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7717   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7718   l('  WHEN OTHERS THEN');
7719   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7720   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_party_sites'');');
7721   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7722   l('    FND_MSG_PUB.ADD;');
7723   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7724   l('END get_matching_party_sites;');
7725   l('');
7726 
7727 --  l('  NULL;');
7728 --  l('END;');
7729 
7730   /************** get_matching_contacts API ***************/
7731   l('');
7732   l('PROCEDURE get_matching_contacts (');
7733   l('        p_rule_id               IN      NUMBER,');
7734   l('        p_party_id              IN      NUMBER,');
7735   l('        p_contact_list          IN      HZ_PARTY_SEARCH.CONTACT_LIST,');
7736   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
7737   l('        p_restrict_sql          IN      VARCHAR2,');
7738   l('        p_match_type            IN      VARCHAR2,');
7739   l('        p_dup_contact_id        IN      NUMBER, ');
7740   l('        x_search_ctx_id         OUT     NUMBER,');
7741   l('        x_num_matches           OUT     NUMBER');
7742   l(') IS');
7743   l('  ');
7744 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
7745   l('  -- Strings to hold the generated Intermedia query strings');
7746   l('  l_party_contains_str VARCHAR2(32000); ');
7747   l('  l_party_site_contains_str VARCHAR2(32000);');
7748   l('  l_contact_contains_str VARCHAR2(32000);');
7749   l('  l_contact_pt_contains_str VARCHAR2(32000);');
7750   l('  l_tmp VARCHAR2(32000);');
7751   l('');
7752   l('  -- Other local variables');
7753   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
7754   l('  l_match_idx NUMBER;');
7755   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
7756   l('  -- For Score calculation');
7757   l('  l_max_score NUMBER;');
7758   l('  l_entered_max_score NUMBER;');
7759   l('  FIRST BOOLEAN;');
7760   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
7761   l('');
7762   FOR TX IN (
7763       SELECT distinct f.staged_attribute_column
7764       FROM hz_trans_functions_vl f, hz_secondary_trans st,
7765            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
7766       WHERE sa.match_rule_id = p_rule_id
7767       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
7771     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
7768       AND st.function_id = f.function_id
7769       AND (a.ENTITY_NAME='CONTACTS' OR a.ENTITY_NAME='CONTACT_POINTS')
7770       AND a.attribute_id = sa.attribute_id) LOOP
7772   END LOOP;
7773   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
7774   l('');
7775   l('  l_score NUMBER;');
7776   l('  l_idx NUMBER;');
7777   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
7778   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
7779   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
7780   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
7781   l('  l_party_id NUMBER;');
7782   l('  l_ps_party_id NUMBER;');
7783   l('  l_ct_party_id NUMBER;');
7784   l('  l_cpt_party_id NUMBER;');
7785   l('  l_cpt_ps_id NUMBER;');
7786   l('  l_cpt_contact_id NUMBER;');
7787   l('  l_cpt_type VARCHAR2(100);');
7788   l('  l_party_site_id NUMBER;');
7789   l('  l_org_contact_id NUMBER;');
7790   l('  l_contact_pt_id NUMBER;');
7791   l('');
7792   l('  defpt NUMBER :=0;');
7793   l('  defps NUMBER :=0;');
7794   l('  defct NUMBER :=0;');
7795   l('  defcpt NUMBER :=0;');
7796   l('  l_index NUMBER;');
7797   l('  l_party_max_score NUMBER;');
7798   l('  l_ps_max_score NUMBER;');
7799   l('  l_contact_max_score NUMBER;');
7800   l('  l_cpt_max_score NUMBER;');
7801   l('  l_match_contact_list HZ_PARTY_SEARCH.IDList;');
7802   l('  l_cnt NUMBER:=1;');
7803   l('');
7804   l('  ');
7805   l('  BEGIN');
7806 
7807 
7808   d(fnd_log.level_procedure,'get_matching_contacts(+)');
7809   ds(fnd_log.level_statement);
7810   dc(fnd_log.level_statement,'Input Parameters:');
7811   dc(fnd_log.level_statement,'p_match_type','p_match_type');
7812   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7813   dc(fnd_log.level_statement,'p_dup_contact_id','p_dup_contact_id');
7814   de;
7815 
7816   l('');
7817   l('    -- ************************************');
7818   l('    -- STEP 1. Initialization and error checks');
7819   l('');
7820   l('    l_match_str := ''' || l_match_str || ''';');
7821   l('    IF p_match_type = ''AND'' THEN');
7822   l('      l_match_str := '' AND '';');
7823   l('    ELSIF p_match_type = ''OR'' THEN');
7824   l('      l_match_str := '' OR '';');
7825   l('    END IF;');
7826   l('    l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, p_contact_list, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
7827   l('    g_score_until_thresh := false;');
7828   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
7829   l('');
7830 
7831   l('    -- ************************************************************');
7832   l('    -- STEP 2. Setup of intermedia query strings for Acquisition query');
7833   l('    l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);');
7834   l('    l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
7835   l('    init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,p_contact_list,p_contact_point_list);');
7836 
7837   l('');
7838   l('    -- Setup Search Context ID');
7839   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
7840   l('    x_search_ctx_id := l_search_ctx_id;');
7841   l('');
7842 
7843   ds(fnd_log.level_statement);
7844   dc(fnd_log.level_statement,'l_match_str','l_match_str');
7845   dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
7846   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
7847   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
7848   de;
7849 
7853   l('    IF l_contact_pt_contains_str IS NULL THEN');
7850   l('    IF l_contact_contains_str IS NULL THEN');
7851   l('      defct := 1;');
7852   l('    END IF;');
7854   l('      defcpt := 1;');
7855   l('    END IF;');
7856   l('');
7857   l('    IF l_contact_contains_str IS NOT NULL THEN');
7858   l('      open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);');
7859   l('      LOOP');
7860   l('        FETCH l_contact_cur INTO ');
7861   l('            l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
7862   l('        EXIT WHEN l_contact_cur%NOTFOUND;');
7863   l('      IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN ');
7864   l('        l_index := map_id(l_org_contact_id);');
7865   l('        l_match_contact_list(l_cnt):=l_org_contact_id;');
7866   l('        l_cnt:=l_cnt+1;');
7867 
7868   l('          l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
7869   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id, null);');
7870 
7871   ds(fnd_log.level_statement);
7872   dc(fnd_log.level_statement,'Contact Level Matches');
7873   dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
7874   dc(fnd_log.level_statement,'l_score','l_score');
7875   de;
7876 
7877   l('      END IF; ');
7878   l('      END LOOP;');
7879   l('      CLOSE l_contact_cur;');
7880   l('    END IF;');
7881 
7882   l('');
7883   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
7884   l('    SAVEPOINT eval_start;');
7885   l('    IF l_match_str = '' AND '' OR (');
7886   l('        ((l_cpt_max_score/l_entered_max_score)<' ||'('||l_match_threshold||'/'||l_max_score || '))' );
7887   l('        ) THEN');
7888   l('      FORALL I in 1..l_match_contact_list.COUNT');
7889   l('           INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)');
7890   l('           values (l_search_ctx_id,l_match_contact_list(I));');
7891   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur,''CONTACTS'');');
7892   l('    ELSE');
7893   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur);');
7894   l('    END IF;');
7895   l('      LOOP');
7896   l('        FETCH l_contact_pt_cur INTO ');
7897   l('            l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
7898   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
7899   l('      IF (l_cpt_contact_id IS NOT NULL AND (p_dup_contact_id IS NULL OR l_cpt_contact_id <>  p_dup_contact_id)) THEN ');
7900   l('        l_index := map_id(l_cpt_contact_id);');
7901   l('        IF l_match_str = '' OR '' THEN');
7902   l('          l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7903   l('          IF NOT H_SCORES.EXISTS(l_index) THEN');
7904   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
7905   l('          ELSE');
7906   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7907   l('               H_SCORES(l_index).TOTAL_SCORE := ');
7908   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7909   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7910   l('            END IF;');
7911   l('          END IF;');
7912   l('        ELSE');
7913   l('          IF H_SCORES.EXISTS(l_index) THEN');
7914   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7915   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
7916   l('               H_SCORES(l_index).TOTAL_SCORE := ');
7917   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
7918   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
7919   l('            END IF;');
7920   l('          ELSIF defps=1 THEN');
7921   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
7922   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
7923   l('          END IF;');
7924   l('        END IF;');
7925   l('        END IF; ');
7926   l('      END LOOP;');
7927   ds(fnd_log.level_statement);
7928   dc(fnd_log.level_statement,'Contact_point Level Matches');
7929   dc(fnd_log.level_statement,'l_org_contact_id','l_cpt_contact_id');
7930   dc(fnd_log.level_statement,'l_score','l_score');
7931   de;
7932   l('      CLOSE l_contact_pt_cur;');
7933   l('    END IF;');
7934   l('    x_num_matches := 0;');
7935   l('    l_org_contact_id := H_SCORES.FIRST;');
7936   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
7937   l('    WHILE l_org_contact_id IS NOT NULL LOOP');
7938   l('      IF l_match_str = '' OR '' THEN');
7939   ds(fnd_log.level_statement);
7940   dc(fnd_log.level_statement,'Match Contact ID','H_SCORES(l_org_contact_id).ORG_CONTACT_ID');
7944   IF l_purpose = 'D' THEN
7941   dc(fnd_log.level_statement,'Score','round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100)');
7942   de;
7943    --Start of Bug No: 4162385
7945     l_entity_score_lh := 'H_SCORES(l_org_contact_id).TOTAL_SCORE';
7946     l_entity_score_rh := 'ROUND(('||get_entity_level_score(p_rule_id,'CONTACTS')||'/'||l_max_score||') * '|| l_match_threshold || ')';
7947   ELSE
7948     l_entity_score_lh := 'H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score';
7949     l_entity_score_rh := l_match_threshold||'/'||l_max_score;
7950   END IF;
7951   --End of Bug No: 4162385
7952 --  IF l_purpose = 'S' THEN
7953     l('        IF (' || l_entity_score_lh ||')>=('|| l_entity_score_rh ||') THEN'); --Bug No: 4162385
7954     l('            INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
7955     l('            VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100);');
7956 --  ELSE
7957 --  END IF;
7958   l('          x_num_matches := x_num_matches+1;');
7959   l('        END IF;');
7960   l('      ELSE');
7961 --  IF l_purpose = 'S' THEN
7962     l('           IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND');
7963     l('           H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND');
7964     l('           (' || l_entity_score_lh ||')>=('|| l_entity_score_rh ||') THEN');  --Bug No: 4162385
7965     l('          INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
7966     l('          VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100));');
7967 --  ELSE
7968 --  END IF;
7969   l('          x_num_matches := x_num_matches+1;');
7970   l('        END IF;');
7971   l('      END IF;');
7972   l('      l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);');
7973   l('    END LOOP;');
7974 ELSE ---Start of Code Change for Match Rule Set
7975   l('  ');
7976   l('  BEGIN');
7977   d(fnd_log.level_procedure,'get_matching_contacts(+)');
7978   ds(fnd_log.level_statement);
7979   dc(fnd_log.level_statement,'Input Parameters:');
7980   dc(fnd_log.level_statement,'p_match_type','p_match_type');
7981   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
7982   dc(fnd_log.level_statement,'p_dup_contact_id','p_dup_contact_id');
7983   de;
7984   pop_conditions(p_rule_id,'get_matching_contacts','p_rule_id,p_party_id,p_contact_list,p_contact_point_list,p_restrict_sql,p_match_type,p_dup_contact_id,x_search_ctx_id,x_num_matches','CONTACTS');
7985 END IF; ---End of Code Change for Match Rule Set
7986 
7987   d(fnd_log.level_procedure,'get_matching_contacts(-)');
7988 
7989   l('EXCEPTION');
7990   l('  WHEN FND_API.G_EXC_ERROR THEN');
7991   l('    RAISE FND_API.G_EXC_ERROR;');
7992   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
7993   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
7994   l('  WHEN OTHERS THEN');
7995   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
7996   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contacts'');');
7997   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
7998   l('    FND_MSG_PUB.ADD;');
7999   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8000   l('END get_matching_contacts;');
8001   l('');
8002 
8003 
8004   /************** get_matching_contact_points API ***************/
8005   l('');
8006   l('PROCEDURE get_matching_contact_points (');
8007   l('        p_rule_id               IN      NUMBER,');
8008   l('        p_party_id              IN      NUMBER,');
8009   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
8010   l('        p_restrict_sql          IN      VARCHAR2,');
8011   l('        p_match_type            IN      VARCHAR2,');
8012   l('        p_dup_contact_point_id  IN      NUMBER, ');
8013   l('        x_search_ctx_id         OUT     NUMBER,');
8014   l('        x_num_matches           OUT     NUMBER');
8015   l(') IS');
8016   l('');
8017 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
8018   l('');
8019   l('  -- Strings to hold the generated Intermedia query strings');
8020   l('  l_contact_pt_contains_str VARCHAR2(32000);');
8021   l('  l_tmp VARCHAR2(32000);');
8022   l('');
8023   l('  -- Other local variables');
8024   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
8025   l('  l_match_idx NUMBER;');
8026   l('  -- For Score calculation');
8027   l('  l_entered_max_score NUMBER;');
8028   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
8029   l('');
8030   FOR TX IN (
8031       SELECT distinct f.staged_attribute_column
8032       FROM hz_trans_functions_vl f, hz_secondary_trans st,
8033            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8034       WHERE sa.match_rule_id = p_rule_id
8035       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8036       AND st.function_id = f.function_id
8037       AND a.ENTITY_NAME='CONTACT_POINTS'
8038       AND a.attribute_id = sa.attribute_id) LOOP
8039     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
8040   END LOOP;
8041   l('');
8042   l('  l_score NUMBER;');
8043   l('  l_idx NUMBER;');
8044   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
8045   l('  l_cpt_party_id NUMBER;');
8046   l('  l_cpt_ps_id NUMBER;');
8047   l('  l_cpt_contact_id NUMBER;');
8048   l('  l_contact_pt_id NUMBER;');
8049   l('  l_cpt_type VARCHAR2(100);');
8050   l('  H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
8051   l('  H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;');
8052   l('  H_SCORE  HZ_PARTY_SEARCH.IDList;');
8053   l('');
8054   l('  cnt NUMBER :=0;');
8055   l('  l_party_max_score NUMBER;');
8056   l('  l_ps_max_score NUMBER;');
8057   l('  l_contact_max_score NUMBER;');
8058   l('  l_cpt_max_score NUMBER;');
8059   l('');
8060   l('  ');
8061   l('  BEGIN');
8062 
8063 
8064 
8065   d(fnd_log.level_procedure,'get_matching_contact_points(+)');
8066   ds(fnd_log.level_statement);
8067   dc(fnd_log.level_statement,'Input Parameters:');
8068   dc(fnd_log.level_statement,'p_match_type','p_match_type');
8069   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
8070   dc(fnd_log.level_statement,'p_dup_contact_point_id','p_dup_contact_point_id');
8071   de;
8072 
8073   l('');
8074   l('    -- ************************************');
8075   l('    -- STEP 1. Initialization and error checks');
8076   l('');
8077 
8078   l('    l_match_str := ''' || l_match_str || ''';');
8079   l('    IF p_match_type = ''AND'' THEN');
8080   l('      l_match_str := '' AND '';');
8081   l('    ELSIF p_match_type = ''OR'' THEN');
8082   l('      l_match_str := '' OR '';');
8083   l('    END IF;');
8084   l('    l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, ');
8088   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
8085   l('       HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
8086   l('       p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
8087   l('    g_score_until_thresh := false;');
8089   l('');
8090 
8091   l('    -- ************************************************************');
8092   l('    -- STEP 2. Setup of intermedia query strings for Acquisition query');
8093   l('    l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
8094   l('    init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);');
8095 
8096   l('');
8097   l('    -- Setup Search Context ID');
8098   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
8099   l('    x_search_ctx_id := l_search_ctx_id;');
8100 
8101   ds(fnd_log.level_statement);
8102   dc(fnd_log.level_statement,'l_match_str','l_match_str');
8103   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
8104   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
8105   de;
8106 
8107   l('');
8108   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
8109   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,''N'', ''N'',l_contact_pt_cur);');
8110   l('      cnt := 1;');
8111   l('      LOOP');
8112   l('        FETCH l_contact_pt_cur INTO ');
8113   l('            l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
8114   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
8115   l('        IF (p_dup_contact_point_id IS NULL OR (');
8116   l('               p_dup_contact_point_id IS NOT NULL AND ');
8117   l('               l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND ');
8118   l('               p_dup_contact_point_id <>  l_contact_pt_id)) THEN   ');
8119   l('            H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;');
8120   l('            H_PARTY_ID(cnt) := l_cpt_party_id;');
8121   l('            H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
8122   l('            cnt := cnt+1;');
8123   ds(fnd_log.level_statement);
8124   dc(fnd_log.level_statement,'Contact Point Matches');
8125   dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
8126   dc(fnd_log.level_statement,'l_score','l_score');
8127   de;
8128 
8129   l('        END IF; ');
8130   l('      END LOOP;');
8131   l('      CLOSE l_contact_pt_cur;');
8132 
8133   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
8134   l('      x_num_matches := 0; ');
8135   l('      FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP');
8136   ds(fnd_log.level_statement);
8137   dc(fnd_log.level_statement,'Match Contact Point ID','H_CONTACT_POINT_ID(I)');
8138   dc(fnd_log.level_statement,'Score','round((H_SCORE(I)/l_entered_max_score)*100)');
8139   de;
8140   --Start of Bug No: 4162385
8141    IF l_purpose = 'D' THEN
8142     l_entity_score_lh := 'H_SCORE(I)';
8143     l_entity_score_rh := 'ROUND(('||get_entity_level_score(p_rule_id,'CONTACT_POINTS')||'/'||l_max_score||') * '|| l_match_threshold || ')';
8144   ELSE
8145     l_entity_score_lh := 'H_SCORE(I)/l_entered_max_score';
8146     l_entity_score_rh := l_match_threshold||'/'||l_max_score;
8147   END IF;
8148   --End of Bug No: 4162385
8149 
8150   l('        IF ('|| l_entity_score_lh ||') >= ('|| l_entity_score_rh ||') THEN'); --Bug No: 4162385
8151   l('        INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
8152   l('            l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);');
8153   l('            x_num_matches := x_num_matches + 1; ');
8154   l('        END IF;');
8155   l('      END LOOP; ');
8156   l('    END IF;');
8157 ELSE ---Start of Code Change for Match Rule Set
8158   l('  BEGIN');
8159   d(fnd_log.level_procedure,'get_matching_contact_points(+)');
8160   ds(fnd_log.level_statement);
8161   dc(fnd_log.level_statement,'Input Parameters:');
8162   dc(fnd_log.level_statement,'p_match_type','p_match_type');
8163   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
8164   dc(fnd_log.level_statement,'p_dup_contact_point_id','p_dup_contact_point_id');
8165   de;
8166   pop_conditions(p_rule_id,'get_matching_contact_points','p_rule_id,p_party_id,p_contact_point_list,p_restrict_sql,p_match_type,p_dup_contact_point_id,x_search_ctx_id,x_num_matches','CONTACT_POINTS');
8167 
8168 END IF; ---End of Code Change for Match Rule Set
8169   d(fnd_log.level_procedure,'get_matching_contact_points(-)');
8170 
8171   l('EXCEPTION');
8172   l('  WHEN FND_API.G_EXC_ERROR THEN');
8173   l('    RAISE FND_API.G_EXC_ERROR;');
8174   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
8175   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8176   l('  WHEN OTHERS THEN');
8177   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8178   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contact_points'');');
8179   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8180   l('    FND_MSG_PUB.ADD;');
8181   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8182   l('END get_matching_contact_points;');
8183 
8184   l('');
8185   l('   /**********************************************************');
8186   l('   This procedure finds the score details for a specific party that ');
8187   l('   matched ');
8188   l('');
8189   l('   **********************************************************/');
8190   l('');
8191   l('PROCEDURE get_score_details (');
8192   l('        p_rule_id               IN      NUMBER,');
8193   l('        p_party_id              IN      NUMBER,');
8194   l('        p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
8195   l('        p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
8196   l('        p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
8197   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
8198   l('        x_search_ctx_id         IN OUT  NUMBER');
8199   l(') IS');
8200   l('');
8201 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
8202   l('  -- Strings to hold the generated Intermedia query strings');
8203   l('  l_party_contains_str VARCHAR2(32000); ');
8204   l('  l_party_site_contains_str VARCHAR2(32000);');
8205   l('  l_contact_contains_str VARCHAR2(32000);');
8206   l('  l_contact_pt_contains_str VARCHAR2(32000);');
8207   l('  l_tmp VARCHAR2(32000);');
8208   l('');
8209   l('  -- Other local variables');
8210   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
8211   l('  -- For Score calculation');
8212   l('  l_max_score NUMBER;');
8213   l('  l_entered_max_score NUMBER;');
8214   l('  FIRST BOOLEAN;');
8215   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
8216   l('');
8217   FOR TX IN (
8218       SELECT distinct f.staged_attribute_column
8219       FROM hz_trans_functions_vl f, hz_secondary_trans st,
8220            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8221       WHERE sa.match_rule_id = p_rule_id
8222       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8223       AND st.function_id = f.function_id
8224       AND a.attribute_id = sa.attribute_id) LOOP
8225     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
8226     l('  l_max_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
8227   END LOOP;
8228   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
8229   l('');
8230   l('  l_score NUMBER;');
8231   l('  l_match_idx NUMBER;');
8232   l('  l_idx NUMBER;');
8236   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
8233   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
8234   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
8235   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
8237   l('  l_party_id NUMBER;');
8238   l('  l_ps_party_id NUMBER;');
8239   l('  l_ct_party_id NUMBER;');
8240   l('  l_cpt_party_id NUMBER;');
8241   l('  l_cpt_ps_id NUMBER;');
8242   l('  l_cpt_contact_id NUMBER;');
8243   l('  l_cpt_type VARCHAR2(100);');
8244   l('  l_party_site_id NUMBER;');
8245   l('  l_org_contact_id NUMBER;');
8246   l('  l_contact_pt_id NUMBER;');
8247   l('  l_ps_contact_id NUMBER;');
8248   l('  l_max_id NUMBER;');
8249   l('  l_max_idx NUMBER;');
8250   l('');
8251   l('  l_index NUMBER;');
8252   l('  l_party_max_score NUMBER;');
8253   l('  l_ps_max_score NUMBER;');
8254   l('  l_contact_max_score NUMBER;');
8255   l('  l_cpt_max_score NUMBER;');
8256   l('');
8257   l('  --Fix for bug 4417124 ');
8258   l('  l_use_contact_addr_info BOOLEAN:=TRUE;');
8259   l('  l_use_contact_cpt_info  BOOLEAN:=TRUE;');
8260   l('  l_TX35_new VARCHAR2(4000);'); --9155543
8261   l('');
8262   l('  BEGIN');
8263   l('');
8264   d(fnd_log.level_statement,'get_score_details(+)');
8265   l('    -- ************************************');
8266   l('    -- STEP 1. Initialization and error checks');
8267   l('');
8268   l('    l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,'' OR '', l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
8269   l('    g_score_until_thresh := false;');
8270   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
8271 
8272   l('    -- ************************************************************');
8273   l('    -- STEP 2. Setup of intermedia query strings for Acquisition query');
8274 
8275   l('    l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);');
8276   l('    l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);');
8277   l('    l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);');
8278 
8279   l('    init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
8280   l('');
8281   l('    -- Setup Search Context ID');
8282   l('    IF x_search_ctx_id IS NULL THEN');
8283   l('      SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
8284   l('      x_search_ctx_id := l_search_ctx_id;');
8285   l('    ELSE');
8286   l('      l_search_ctx_id := x_search_ctx_id;');
8287   l('    END IF;');
8288   l('');
8289   l('    open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);');
8290   l('    LOOP ');
8291   l('        FETCH l_party_cur INTO');
8292   l('           l_party_id '||l_p_into_list||';');
8293   l('        EXIT WHEN l_party_cur%NOTFOUND;');
8294     IF(l_p_param_list LIKE '%TX35%') THEN --9155543
8295   l('  l_TX35_new:=RTRIM(LTRIM(l_TX35));');
8296  	l('  l_TX35_new:=(CASE l_TX35_new WHEN ''SYNC'' THEN HZ_STAGE_MAP_TRANSFORM.den_acc_number (l_party_id) ELSE l_TX35_new END);');
8297  	   l_p_param_list:=replace(l_p_param_list,'l_TX35','l_TX35_new');
8298  	       END IF;
8299   IF l_p_param_list IS NOT NULL THEN
8300     l('          INSERT_PARTY_SCORE(p_party_id, p_party_id, l_search_ctx_id, p_party_search_rec, g_party_stage_rec, '||l_p_param_list||',1);');
8301   END IF;
8302   l_p_param_list:=replace(l_p_param_list,'l_TX35_new','l_TX35'); --9155543
8303   l('    END LOOP;');
8304   l('    CLOSE l_party_cur;');
8305   l('');
8306   l('    IF l_party_site_contains_str IS NOT NULL THEN');
8307   l('      l_max_score := 0;');
8308   l('      l_max_id := 0;');
8309   l('      l_max_idx := 0;');
8310   l('      IF p_party_search_rec.PARTY_TYPE = ''PERSON'' AND l_use_contact_addr_info THEN');
8311   l('        open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, ''Y'',''N'',l_party_site_cur);');
8312   l('      ELSE');
8313   l('        open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, ''N'',''N'',l_party_site_cur);');
8314   l('      END IF;');
8315   l('      LOOP');
8316   l('        FETCH l_party_site_cur INTO ');
8317   l('            l_party_site_id, l_ps_party_id,l_ps_contact_id '||l_ps_into_list||';');
8318   l('        EXIT WHEN l_party_site_cur%NOTFOUND;');
8319   l('        l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
8320   l('        IF l_score > l_max_score THEN');
8321   l('          l_max_score := l_score;');
8322   l('          l_max_id := l_party_site_id;');
8323   l('          l_max_idx := l_match_idx;');
8324   FOR TX IN (
8325       SELECT distinct f.staged_attribute_column
8326       FROM hz_trans_functions_vl f, hz_secondary_trans st,
8327            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8328       WHERE sa.match_rule_id = p_rule_id
8329       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8330       AND st.function_id = f.function_id
8331       AND a.entity_name = 'PARTY_SITES'
8332       AND a.attribute_id = sa.attribute_id) LOOP
8333     l('          l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
8334   END LOOP;
8335   l('        END IF;');
8336   l('      END LOOP;');
8337   l('      CLOSE l_party_site_cur;');
8338   l('      IF l_max_score>0 THEN');
8339   l('        INSERT_PARTY_SITES_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_party_site_list(l_max_idx), g_party_site_stage_list(l_max_idx) '||replace(l_ps_param_list,'l_TX','l_max_TX')||',l_max_idx);');
8340   l('      END IF;');
8341   l('    END IF;');
8342   l('');
8343   l('    IF l_contact_contains_str IS NOT NULL THEN');
8344   l('      l_max_score := 0;');
8345   l('      l_max_id := 0;');
8346   l('      l_max_idx := 0;');
8347   l('      open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);');
8348   l('      LOOP');
8349   l('        FETCH l_contact_cur INTO ');
8353   l('        IF l_score > l_max_score THEN');
8350   l('            l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
8351   l('        EXIT WHEN l_contact_cur%NOTFOUND;');
8352   l('        l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
8354   l('          l_max_score := l_score;');
8355   l('          l_max_id := l_org_contact_id;');
8356   l('          l_max_idx := l_match_idx;');
8357   FOR TX IN (
8358       SELECT distinct f.staged_attribute_column
8359       FROM hz_trans_functions_vl f, hz_secondary_trans st,
8360            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8361       WHERE sa.match_rule_id = p_rule_id
8362       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8363       AND st.function_id = f.function_id
8364       AND a.entity_name = 'CONTACTS'
8365       AND a.attribute_id = sa.attribute_id) LOOP
8366     l('          l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
8367   END LOOP;
8368   l('        END IF;');
8369   l('      END LOOP;');
8370   l('      CLOSE l_contact_cur;');
8371   l('      IF l_max_score>0 THEN');
8372   l('        INSERT_CONTACTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_list(l_max_idx), g_contact_stage_list(l_max_idx) '||replace(l_c_param_list,'l_TX','l_max_TX')||',l_max_idx);');
8373   l('      END IF;');
8374   l('    END IF;');
8375   l('');
8376   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
8377   l('      l_max_score := 0;');
8378   l('      l_max_id := 0;');
8379   l('      l_max_idx := 0;');
8380   l('      IF p_party_search_rec.PARTY_TYPE = ''PERSON'' AND l_use_contact_cpt_info THEN');
8381   l('        open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, ''Y'',''N'',l_contact_pt_cur);');
8382   l('      ELSE');
8383   l('        open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, ''N'',''N'',l_contact_pt_cur);');
8384   l('      END IF;');
8385   l('      LOOP');
8386   l('        FETCH l_contact_pt_cur INTO ');
8387   l('            l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
8388   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
8389   l('        l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
8390   l('        IF l_score > l_max_score THEN');
8391   l('          l_max_score := l_score;');
8392   l('          l_max_id := l_contact_pt_id;');
8393   l('          l_max_idx := l_match_idx;');
8394   FOR TX IN (
8395       SELECT distinct f.staged_attribute_column
8396       FROM hz_trans_functions_vl f, hz_secondary_trans st,
8397            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8398       WHERE sa.match_rule_id = p_rule_id
8399       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8400       AND st.function_id = f.function_id
8401       AND a.entity_name = 'CONTACT_POINTS'
8402       AND a.attribute_id = sa.attribute_id) LOOP
8403     l('          l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
8404   END LOOP;
8405   l('        END IF;');
8406   l('      END LOOP;');
8407   l('      IF l_max_score>0 THEN');
8408   l('        INSERT_CONTACT_POINTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_point_list(l_max_idx), g_contact_pt_stage_list(l_max_idx) '||replace(l_cpt_param_list,'l_TX','l_max_TX')||',l_max_idx);');
8409   l('      END IF;');
8410   l('      CLOSE l_contact_pt_cur;');
8411   l('    END IF;');
8412   d(fnd_log.level_procedure,'get_score_details(-)');
8413 ELSE ---Start of Code Change for Match Rule Set
8414   l('  BEGIN');
8415   l('');
8416   d(fnd_log.level_statement,'get_score_details(+)');
8417     pop_conditions(p_rule_id,'get_score_details','p_rule_id,p_party_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,x_search_ctx_id','PARTY');
8418   d(fnd_log.level_procedure,'get_score_details(-)');
8419 END IF; ---End of Code Change for Match Rule Set
8420 
8421   l('EXCEPTION');
8422   l('  WHEN FND_API.G_EXC_ERROR THEN');
8423   l('    RAISE FND_API.G_EXC_ERROR;');
8424   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
8425   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8426   l('  WHEN OTHERS THEN');
8427   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8428   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_score_details'');');
8429   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8430   l('    FND_MSG_PUB.ADD;');
8431   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8432   l('END get_score_details;');
8433   l('');
8434 
8435   generate_acquire_proc(p_rule_id, NULL);
8436 
8437 
8438   generate_party_map_proc('MAP_PARTY_REC', p_rule_id);
8439   l('');
8440   generate_map_proc('PARTY_SITES', 'MAP_PARTY_SITE_REC', p_rule_id);
8441   l('');
8442   generate_map_proc('CONTACTS', 'MAP_CONTACT_REC', p_rule_id);
8443   l('');
8444   generate_map_proc('CONTACT_POINTS', 'MAP_CONTACT_POINT_REC', p_rule_id);
8445   l('');
8446   generate_check_proc(p_rule_id);
8447   generate_check_staged (p_rule_id);
8448   /*l('  PROCEDURE enable_debug IS');
8449 
8450   l('  BEGIN');
8451   l('    g_debug_count := g_debug_count + 1;');
8452 
8453   l('    IF g_debug_count = 1 THEN');
8454   l('      IF fnd_profile.value(''HZ_API_FILE_DEBUG_ON'') = ''Y'' OR');
8455   l('         fnd_profile.value(''HZ_API_DBMS_DEBUG_ON'') = ''Y''');
8456   l('      THEN');
8457   l('        hz_utility_v2pub.enable_debug;');
8458   l('        g_debug := TRUE;');
8459   d('PKG: '||p_pkg_name||' (+)');
8460   l('      END IF;');
8461   l('    END IF;');
8462   l('  END enable_debug;');
8463 
8464   l('  PROCEDURE disable_debug IS');
8465 
8466   l('  BEGIN');
8467 
8468   l('    IF g_debug THEN');
8469   l('      g_debug_count := g_debug_count - 1;');
8470 
8471   l('      IF g_debug_count = 0 THEN');
8472   d('PKG: '||p_pkg_name||' (-)');
8473   l('        hz_utility_v2pub.disable_debug;');
8477 
8474   l('        g_debug := FALSE;');
8475   l('      END IF;');
8476   l('    END IF;');
8478   l('  END disable_debug;');
8479   */
8480 
8481   l('END;');
8482   l('');
8483 END;
8484 
8485 
8486 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8487 -- which would essentially return a 'Y' or null to signify the corresponding
8488 -- XXX_contains_string contains user passed information or not.
8489 
8490 PROCEDURE generate_check_parties_bulk (
8491 	p_rule_id	NUMBER) IS
8492 FIRST BOOLEAN;
8493 BEGIN
8494   l('');
8495   l('/************************************************');
8496   l('  This procedure checks if the input search criteria ');
8497   l('  is valid. It checks if : ');
8498   l('   1. At least one primary condition is passed');
8499   l('************************************************/');
8500   l('');
8501 
8502   l('FUNCTION check_parties_bulk(');
8503   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type)');
8504   l('RETURN VARCHAR2 IS');
8505   l('  BEGIN');
8506 
8507   FIRST := TRUE;
8508   FOR PRIMATTRS IN (
8509        SELECT ATTRIBUTE_NAME
8510        FROM HZ_TRANS_ATTRIBUTES_VL a,
8511             HZ_MATCH_RULE_PRIMARY p
8512        WHERE p.match_rule_id = p_rule_id
8513        AND p.attribute_id = a.attribute_id
8514        AND a.ENTITY_NAME = 'PARTY'
8515        AND nvl(p.FILTER_FLAG,'N') = 'N') LOOP
8516     l('    IF p_party_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
8517     l('      RETURN ''Y'' ;');
8518     l('    END IF;');
8519   END LOOP;
8520 
8521   l('RETURN null;');
8522 
8523   l('EXCEPTION');
8524   l('  WHEN OTHERS THEN');
8525   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8526   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_parties_bulk'');');
8527   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8528   l('    FND_MSG_PUB.ADD;');
8529   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8530   l('  END check_parties_bulk ;');
8531   l('');
8532 END generate_check_parties_bulk ;
8533 
8534 
8535 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8536 -- which would essentially return a 'Y' or null to signify the corresponding
8537 -- XXX_contains_string contains user passed information or not.
8538 
8539 PROCEDURE generate_check_partysites_bulk (
8540 	p_rule_id	NUMBER) IS
8541 FIRST BOOLEAN;
8542 BEGIN
8543   l('/************************************************');
8544   l('  This procedure checks if the input search condition ');
8545   l('  has party site criteria. ');
8546   l('************************************************/');
8547 
8548   l('');
8549   l('FUNCTION check_party_sites_bulk(');
8550   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list');
8551   l(')');
8552   l('RETURN VARCHAR2 IS');
8553   l('    x_primary boolean := FALSE;');
8554   l('  BEGIN');
8555   l('    FOR I IN 1..p_party_site_list.COUNT LOOP');
8556   FIRST := TRUE;
8557   FOR PRIMATTRS IN (
8558        SELECT ATTRIBUTE_NAME
8559        FROM HZ_TRANS_ATTRIBUTES_VL a,
8560             HZ_MATCH_RULE_PRIMARY p
8561        WHERE p.match_rule_id = p_rule_id
8562        AND a.ENTITY_NAME = 'PARTY_SITES'
8563        AND p.attribute_id = a.attribute_id)
8564   LOOP
8565     IF FIRST THEN
8566       l('      IF p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
8567       FIRST := FALSE;
8568     ELSE
8569       l('         OR p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
8570     END IF;
8571   END LOOP;
8572   IF NOT FIRST THEN
8573     l('      THEN');
8574     l('        x_primary := TRUE;');
8575     l('      END IF;');
8576     l('      EXIT WHEN x_primary;');
8577   ELSE
8578     l('      NULL;');
8579   END IF;
8580   l('    END LOOP;');
8581 
8582   l('');
8583 
8584   l(' IF x_primary = TRUE THEN RETURN ''Y''; ELSE RETURN null; END IF; ');
8585   l('EXCEPTION');
8586   l('  WHEN OTHERS THEN');
8587   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8588   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_party_sites_bulk'');');
8589   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8590   l('    FND_MSG_PUB.ADD;');
8591   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8592   l('  END check_party_sites_bulk ;');
8593   l('');
8594 
8595 END generate_check_partysites_bulk ;
8596 
8597 
8598 
8599 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8600 -- which would essentially return a 'Y' or null to signify the corresponding
8601 -- XXX_contains_string contains user passed information or not.
8602 
8603 PROCEDURE generate_check_contacts_bulk (
8604 	p_rule_id	NUMBER) IS
8605 FIRST BOOLEAN;
8606 BEGIN
8607   l('/************************************************');
8608   l('  This procedure checks if the input search condition ');
8609   l('  has contact criteria. ');
8610   l('************************************************/');
8611 
8612   l('');
8613   l('FUNCTION check_contacts_bulk (');
8614   l('      p_contact_list       IN      HZ_PARTY_SEARCH.contact_list');
8615   l(')');
8616   l('RETURN VARCHAR2 IS');
8617   l('    x_primary boolean := FALSE;');
8618   l('  BEGIN');
8619   l('    FOR I IN 1..p_contact_list.COUNT LOOP');
8620   FIRST := TRUE;
8621   FOR PRIMATTRS IN (
8622        SELECT ATTRIBUTE_NAME
8623        FROM HZ_TRANS_ATTRIBUTES_VL a,
8624             HZ_MATCH_RULE_PRIMARY p
8625        WHERE p.match_rule_id = p_rule_id
8626        AND a.ENTITY_NAME = 'CONTACTS'
8627        AND p.attribute_id = a.attribute_id)
8628   LOOP
8629     IF FIRST THEN
8630       l('      IF p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
8631       FIRST := FALSE;
8632     ELSE
8633       l('         OR p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
8634     END IF;
8635   END LOOP;
8636   IF NOT FIRST THEN
8637     l('      THEN');
8638     l('        x_primary := TRUE;');
8639     l('      END IF;');
8640     l('      EXIT WHEN x_primary;');
8641   ELSE
8642     l('      NULL;');
8643   END IF;
8644   l('    END LOOP;');
8645 
8646   l('');
8647 
8648   l(' IF x_primary = TRUE THEN RETURN ''Y''; ELSE RETURN null; END IF; ');
8649   l('EXCEPTION');
8650   l('  WHEN OTHERS THEN');
8651   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8652   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_contacts_bulk'');');
8653   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8654   l('    FND_MSG_PUB.ADD;');
8655   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8656   l('  END check_contacts_bulk ;');
8657   l('');
8658 
8659 END generate_check_contacts_bulk ;
8660 
8661 -- VJN introduced procedure that will generate the procedure check_proc_bulk
8662 -- which would essentially return a 'Y' or null to signify the corresponding
8663 -- XXX_contains_string contains user passed information or not.
8664 
8665 PROCEDURE generate_check_cpts_bulk (
8666 	p_rule_id	NUMBER) IS
8667 FIRST BOOLEAN;
8668 BEGIN
8669   l('/************************************************');
8670   l('  This procedure checks if the input search condition ');
8671   l('  has contact criteria. ');
8672   l('************************************************/');
8673 
8674   l('');
8675   l('FUNCTION check_cpts_bulk (');
8676   l('      p_contact_point_list       IN      HZ_PARTY_SEARCH.contact_point_list');
8677   l(')');
8678   l('RETURN VARCHAR2 IS');
8679   l('    x_primary boolean := FALSE;');
8680   l('  BEGIN');
8681   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
8682   FIRST := TRUE;
8683   FOR PRIMATTRS IN (
8684        SELECT ATTRIBUTE_NAME
8685        FROM HZ_TRANS_ATTRIBUTES_VL a,
8686             HZ_MATCH_RULE_PRIMARY p
8687        WHERE p.match_rule_id = p_rule_id
8688        AND a.ENTITY_NAME = 'CONTACT_POINTS'
8689        AND p.attribute_id = a.attribute_id)
8690   LOOP
8691     IF FIRST THEN
8692       l('      IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
8693       FIRST := FALSE;
8694     ELSE
8695       l('         OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
8696     END IF;
8697   END LOOP;
8698   IF NOT FIRST THEN
8699     l('      THEN');
8700     l('        x_primary := TRUE;');
8701     l('      END IF;');
8702     l('      EXIT WHEN x_primary;');
8703   ELSE
8704     l('      NULL;');
8705   END IF;
8706   l('    END LOOP;');
8707 
8708   l('');
8709 
8710   l(' IF x_primary = TRUE THEN RETURN ''Y''; ELSE RETURN null; END IF; ');
8711   l('EXCEPTION');
8712   l('  WHEN OTHERS THEN');
8713   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
8714   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_cpts_bulk'');');
8715   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
8716   l('    FND_MSG_PUB.ADD;');
8717   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
8718   l('  END check_cpts_bulk  ;');
8719   l('');
8720 
8721 END generate_check_cpts_bulk ;
8722 
8723 
8724 
8725 /**
8726 * VJN introduced Private procedure to generate the body of the Public Match Rule API
8727 * for a bulk match rule. This will generate Package Body for the following kind of Match rules:
8728 *    HZ_IMP_MATCH_RULE_<p_rule_id>
8729 *
8730 *
8731 **/
8732 PROCEDURE gen_pkg_body_bulk (
8733         p_pkg_name      IN      VARCHAR2,
8734         p_rule_id	IN	NUMBER
8735 ) IS
8736 
8737   -- Local Variables
8738   FIRST boolean;
8739   FIRST1 boolean;
8740   UPSTMT boolean;
8741   l_match_str VARCHAR2(255);
8742   l_attrib_cnt NUMBER;
8743   l_party_filter VARCHAR2(1) := null;
8744   l_ps_filter VARCHAR2(1) := null;
8745   l_contact_filter VARCHAR2(1) := null;
8746   l_cpt_filter VARCHAR2(1) := null;
8747   l_num_primary NUMBER;
8748   l_num_secondary NUMBER;
8749   l_ent VARCHAR2(30);
8750   l_max_score NUMBER;
8751   l_match_threshold NUMBER;
8752 
8753   l_purpose VARCHAR2(30);
8754   TYPE NumberList IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
8755   TYPE CharList IS TABLE OF VARCHAR2(255) INDEX BY BINARY_INTEGER;
8756   attribList NumberList;
8757 
8758   l_party_filter_str VARCHAR2(2000);
8759   l_dyn_party_filter_str VARCHAR2(2000);
8760   l_p_select_list VARCHAR2(1000);
8761   l_p_param_list VARCHAR2(1000);
8762   l_p_into_list VARCHAR2(1000);
8763   l_ps_select_list VARCHAR2(1000);
8764   l_ps_param_list VARCHAR2(1000);
8765   l_ps_into_list VARCHAR2(1000);
8766   l_c_select_list VARCHAR2(1000);
8767   l_c_param_list VARCHAR2(1000);
8768   l_c_into_list VARCHAR2(1000);
8769   l_cpt_select_list VARCHAR2(1000);
8770   l_cpt_param_list VARCHAR2(1000);
8771   l_cpt_into_list VARCHAR2(1000);
8772   cnt NUMBER;
8773   l_party_filt_bind CharList;
8774   l_cpt_type VARCHAR2(255);
8775   l_trans VARCHAR2(4000);
8776   l_auto_merge_score NUMBER;
8777   tmp VARCHAR2(30);
8778   attrib_count NUMBER;
8779 BEGIN
8780 
8781   -- Query match thresholds and search type
8782   SELECT RULE_PURPOSE, MATCH_SCORE, nvl(AUTO_MERGE_SCORE,99999), decode(MATCH_ALL_FLAG,'Y',' AND ',' OR ')
8783   INTO l_purpose, l_match_threshold, l_auto_merge_score, l_match_str
8784   FROM HZ_MATCH_RULES_VL
8785   WHERE match_rule_id = p_rule_id;
8786 
8787   SELECT nvl(SUM(SCORE),1) INTO l_max_score
8788   FROM HZ_MATCH_RULE_SECONDARY
8789   WHERE match_rule_id = p_rule_id;
8790 
8791   l('CREATE or REPLACE PACKAGE BODY ' || p_pkg_name || ' AS');
8792   l('/*=======================================================================+');
8793   l(' |  Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|');
8794   l(' |                          All rights reserved.                         |');
8795   l(' +=======================================================================+');
8796   l(' | NAME');
8797   l(' |      ' || p_pkg_name);
8798   l(' |');
8799   l(' | DESCRIPTION');
8800   l(' |');
8801   l(' | Compiled by the HZ Match Rule Compiler');
8802   l(' | -- Do Not Modify --');
8803   l(' |');
8804   l(' | PUBLIC PROCEDURES');
8805   l(' |    find_parties');
8806   l(' |    get_matching_party_sites');
8807   l(' |    get_matching_contacts');
8808   l(' |    get_matching_contact_points');
8809   l(' |    get_score_details');
8810   l(' |    ');
8811   l(' | HISTORY');
8812   l(' |      '||TO_CHAR(SYSDATE,'DD-MON-YYYY') || ' Generated by HZ Match Rule Compiler');
8813   l(' |');
8814   l(' *=======================================================================*/');
8815   l('');
8816   l('-- ==========================================================================================');
8817   l('-- ============MATCH RULE COMPILER GENERATED CODE FOR BULK MATCH RULES ======================');
8818   l('-- ==========================================================================================');
8819   l('');
8820   l('  TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;');
8821   l('  call_order vlisttype;');
8822   l('  call_max_score HZ_PARTY_SEARCH.IDList;');
8823   l('  call_type vlisttype;');
8824   l('  g_party_stage_rec  HZ_PARTY_STAGE.party_stage_rec_type;');
8825   l('  g_party_site_stage_list  HZ_PARTY_STAGE.party_site_stage_list;');
8826   l('  g_contact_stage_list  HZ_PARTY_STAGE.contact_stage_list;');
8827   l('  g_contact_pt_stage_list  HZ_PARTY_STAGE.contact_pt_stage_list;');
8828   l('  g_mappings  HZ_PARTY_SEARCH.IDList;');
8829   l('  g_max_id NUMBER:=2000000000;');
8830   l('');
8831   l('  g_debug_count                        NUMBER := 0;');
8832   --l('  g_debug                              BOOLEAN := FALSE;');
8833   l('  g_score_until_thresh BOOLEAN:=false;');
8834   l(' ');
8835   l('  g_thres_score NUMBER:=1000;');
8836   --l('  PROCEDURE enable_debug;');
8837   --l('  PROCEDURE disable_debug;');
8838 
8839   -- VJN introduced for bulk_match_rule
8840   generate_check_parties_bulk(p_rule_id);
8841   generate_check_partysites_bulk(p_rule_id);
8842   generate_check_contacts_bulk(p_rule_id);
8843   generate_check_cpts_bulk(p_rule_id);
8844 
8845   /***********************************************************************
8846   * Private procedure to map IDs greater than the max allowed by PLSQL
8847   * Index-by tables.
8848   ************************************************************************/
8849   l('  FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS');
8850   l('    l_newidx NUMBER;');
8851   l('  BEGIN ');
8852   l('    IF in_id<g_max_id THEN ');
8853   l('      RETURN in_id;');
8854   l('    ELSE');
8855   l('      FOR I in 1..g_mappings.COUNT LOOP');
8856   l('        IF in_id = g_mappings(I) THEN');
8857   l('          RETURN (g_max_id+I);');
8858   l('        END IF;');
8859   l('      END LOOP;');
8860   l('      l_newidx := g_mappings.COUNT+1;');
8861   l('      g_mappings(l_newidx) := in_id;');
8862   l('      RETURN (g_max_id+l_newidx);');
8863   l('    END IF;');
8864   l('  END;');
8865 
8866   l('  FUNCTION GET_PARTY_SCORE ');
8867   FIRST := TRUE;
8868   FOR TX IN (
8869       SELECT f.staged_attribute_column
8870       FROM hz_trans_functions_vl f, hz_secondary_trans st,
8871            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
8872       WHERE sa.match_rule_id = p_rule_id
8873       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
8874       AND st.function_id = f.function_id
8875       AND a.attribute_id = sa.attribute_id
8876       AND a.entity_name= 'PARTY'
8877       ORDER BY sa.attribute_id) LOOP
8878      IF FIRST THEN
8879        l('       (');
8880        l('       p_table_'||TX.staged_attribute_column||' VARCHAR2');
8881        FIRST := FALSE;
8882      ELSE
8883        l('      ,p_table_'||TX.staged_attribute_column||' VARCHAR2');
8884      END IF;
8885   END LOOP;
8886   IF FIRST THEN
8887     l('   RETURN NUMBER IS');
8888   ELSE
8889     l('  ) RETURN NUMBER IS');
8890   END IF;
8891   l('    total NUMBER := 0;');
8892   l('  BEGIN');
8893   d(fnd_log.level_procedure,'GET_PARTY_SCORE  ');
8894   l('    IF g_score_until_thresh AND (total)>=g_thres_score THEN');
8895   l('      RETURN total;');
8896   l('    END IF;');
8897   FOR SECATTRS IN (
8898         SELECT SECONDARY_ATTRIBUTE_ID, SCORE, ATTRIBUTE_NAME, ENTITY_NAME, a.attribute_id
8899         FROM HZ_TRANS_ATTRIBUTES_VL a,
8900              HZ_MATCH_RULE_SECONDARY s
8901         WHERE s.match_rule_id = p_rule_id
8902         AND s.attribute_id = a.attribute_id
8903         AND a.entity_name = 'PARTY') LOOP
8904       FIRST := TRUE;
8905       FOR SECTRANS IN (
8906           SELECT TRANSFORMATION_NAME, STAGED_ATTRIBUTE_COLUMN, f.FUNCTION_ID,
8907                  TRANSFORMATION_WEIGHT, SIMILARITY_CUTOFF
8908           FROM HZ_SECONDARY_TRANS s,
8909                HZ_TRANS_FUNCTIONS_VL f
8910           WHERE s.SECONDARY_ATTRIBUTE_ID = SECATTRS.SECONDARY_ATTRIBUTE_ID
8911           AND s.FUNCTION_ID = f.FUNCTION_ID
8912           ORDER BY TRANSFORMATION_WEIGHT desc) LOOP
8913         IF FIRST THEN
8914            FIRST := FALSE;
8915            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
8916              l('    IF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8917                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
8918            ELSE
8919              l('    IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8920                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
8921            END IF;
8922         ELSE
8923            IF SECTRANS.SIMILARITY_CUTOFF IS NOT NULL THEN
8924              l('    ELSIF HZ_DQM_SEARCH_UTIL.is_similar_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8925                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||', '||SECTRANS.SIMILARITY_CUTOFF||','||SECTRANS.FUNCTION_ID||') THEN');
8926            ELSE
8927              l('    ELSIF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||
8928                ', p_table_'||SECTRANS.STAGED_ATTRIBUTE_COLUMN||','||SECTRANS.FUNCTION_ID||') THEN');
8929            END IF;
8930         END IF;
8931         l('      total := total+'||ROUND(SECATTRS.SCORE*(SECTRANS.TRANSFORMATION_WEIGHT/100))||';');
8932         l('      IF g_score_until_thresh AND (total)>=g_thres_score THEN ');
8933         l('        RETURN total;');
8934         l('      END IF;');
8935       END LOOP;
8936       l('    END IF;');
8937   END LOOP;
8938   l('    RETURN total;');
8939   l('  END;');
8940 
8941   add_score_function('PARTY_SITES',p_rule_id);
8942   add_score_function('CONTACTS',p_rule_id);
8943   add_score_function('CONTACT_POINTS',p_rule_id);
8944   add_get_attrib_func(p_rule_id);
8945   add_insert_function('PARTY',p_rule_id);
8946   add_insert_function('PARTY_SITES',p_rule_id);
8947   add_insert_function('CONTACTS',p_rule_id);
8948   add_insert_function('CONTACT_POINTS',p_rule_id);
8949 
8950   --- VJN Introduced for conditional Word Replacements
8951   --- Populate the global condition record before doing the mapping
8952   --- so that mapping takes into account conditional word replacements if any
8953   generate_ent_cond_pop_rec_proc('PARTY', p_rule_id);
8954   l('');
8955   generate_ent_cond_pop_rec_proc('PARTY_SITES', p_rule_id);
8956   l('');
8957   generate_ent_cond_pop_rec_proc('CONTACTS', p_rule_id);
8958   l('');
8959   generate_ent_cond_pop_rec_proc('CONTACT_POINTS', p_rule_id);
8960   l('');
8961 
8962 
8963   l('  PROCEDURE init_score_context (');
8964   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type:=');
8965   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
8966   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list:=');
8967   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
8968   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list:= ');
8969   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
8970   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list:=');
8971   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST');
8972   l('  ) IS');
8973   l('   l_dummy NUMBER;');
8974   l('  BEGIN');
8975   l('    -- Transform search criteria');
8976   l('    HZ_TRANS_PKG.clear_globals;');
8977   l('    MAP_PARTY_REC(FALSE,p_party_search_rec, l_dummy, g_party_stage_rec);');
8978   l('    MAP_PARTY_SITE_REC(FALSE,p_party_site_list, l_dummy, g_party_site_stage_list);');
8979   l('    MAP_CONTACT_REC(FALSE,p_contact_list, l_dummy, g_contact_stage_list);');
8980   l('    MAP_CONTACT_POINT_REC(FALSE,p_contact_point_list, l_dummy, g_contact_pt_stage_list);');
8981   l('');
8982   l('  END;');
8983 
8984 
8985   l('  FUNCTION init_search(');
8986   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type:=');
8987   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,');
8988   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list:=');
8989   l('                                  HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,');
8990   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list:= ');
8991   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
8992   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list:=');
8993   l('                                  HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,');
8994   l('      p_match_type            IN  VARCHAR2,');
8995   l('      x_party_max_score       OUT NUMBER,');
8996   l('      x_ps_max_score       OUT NUMBER,');
8997   l('      x_contact_max_score       OUT NUMBER,');
8998   l('      x_cpt_max_score       OUT NUMBER');
8999   l('  ) RETURN NUMBER IS ');
9000   l('  l_entered_max_score NUMBER:=0;');
9001   l('  l_ps_entered_max_score NUMBER:=0;');
9002   l('  l_ct_entered_max_score NUMBER:=0;');
9003   l('  l_cpt_entered_max_score NUMBER:=0;');
9004   l('  vlist vlisttype;');
9005   l('  maxscore HZ_PARTY_SEARCH.IDList;');
9006   l('  l_name VARCHAR2(200);');
9007   l('  l_idx NUMBER; ');
9008   l('  l_num NUMBER; ');
9009   l('  total NUMBER; ');
9010   l('  threshold NUMBER; ');
9011   l('  BEGIN');
9012   l('    IF NOT check_prim_cond (p_party_search_rec,');
9013   l('                            p_party_site_list,');
9014   l('                            p_contact_list,');
9015   l('                            p_contact_point_list) THEN');
9016   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_PRIMARY_COND'');');
9017   l('      FND_MSG_PUB.ADD;');
9018   l('      RAISE FND_API.G_EXC_ERROR;');
9019   l('    END IF;');
9020   IF l_max_score=1 THEN
9021     l('    HZ_DQM_SEARCH_UTIL.set_no_score;');
9022   ELSE
9023     l('    HZ_DQM_SEARCH_UTIL.set_score;');
9024   END IF;
9025   l('    g_mappings.DELETE;');
9026   l('    g_party_site_stage_list.DELETE;');
9027   l('    g_contact_stage_list.DELETE;');
9028   l('    g_contact_pt_stage_list.DELETE;');
9029   l('    call_order.DELETE;');
9030   l('    call_max_score.DELETE;');
9031   l('    HZ_DQM_SEARCH_UTIL.new_search;');
9032   l('    HZ_TRANS_PKG.set_party_type(p_party_search_rec.PARTY_TYPE);');
9033   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
9034   l('');
9035   l('    -- Transform search criteria');
9036   l('    MAP_PARTY_REC(TRUE,p_party_search_rec, l_entered_max_score, g_party_stage_rec);');
9037   l('    MAP_PARTY_SITE_REC(TRUE,p_party_site_list, l_ps_entered_max_score, g_party_site_stage_list);');
9038   l('    MAP_CONTACT_REC(TRUE,p_contact_list, l_ct_entered_max_score, g_contact_stage_list);');
9039   l('    MAP_CONTACT_POINT_REC(TRUE,p_contact_point_list, l_cpt_entered_max_score, g_contact_pt_stage_list);');
9040   l('');
9041   l('      ');
9042   l('    l_idx := l_entered_max_score+1;');
9043   l('    vlist (l_idx) := ''PARTY'';');
9044   l('    maxscore (l_idx) := l_entered_max_score;');
9045 
9046   l('    l_idx := l_ps_entered_max_score+1;');
9047   l('    WHILE vlist.EXISTS(l_idx) LOOP');
9048   l('      l_idx := l_idx+1;');
9049   l('    END LOOP;');
9053   l('    l_idx := l_ct_entered_max_score+1;');
9050   l('    vlist (l_idx) := ''PARTY_SITE'';');
9051   l('    maxscore (l_idx) := l_ps_entered_max_score;');
9052   l('');
9054   l('    WHILE vlist.EXISTS(l_idx) LOOP');
9055   l('      l_idx := l_idx+1;');
9056   l('    END LOOP;');
9057   l('    vlist (l_idx) := ''CONTACT'';');
9058   l('    maxscore (l_idx) := l_ct_entered_max_score;');
9059   l('');
9060   l('    l_idx := l_cpt_entered_max_score+1;');
9061   l('    WHILE vlist.EXISTS(l_idx) LOOP');
9062   l('      l_idx := l_idx+1;');
9063   l('    END LOOP;');
9064   l('    vlist (l_idx) := ''CONTACT_POINT'';');
9065   l('    maxscore (l_idx) := l_cpt_entered_max_score;');
9066   l('');
9067   l('    l_num := 1;');
9068   l('    l_idx := vlist.LAST;');
9069   l('    WHILE l_idx IS NOT NULL LOOP');
9070   l('      call_order(l_num) := vlist(l_idx);');
9071   l('      call_max_score(l_num) := maxscore(l_idx);');
9072   l('      l_idx := vlist.PRIOR(l_idx);');
9073   l('      l_num := l_num+1;');
9074   l('    END LOOP;  ');
9075   l('    call_order(5):=''NONE'';');
9076   l('    IF p_match_type = '' OR '' THEN');
9077   IF l_purpose = 'S' THEN
9078     l('      threshold := round(('||l_match_threshold||'/'||l_max_score||')*(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score));');
9079   ELSE
9080     l('      threshold := '||l_match_threshold||';');
9081   END IF;
9082 
9083   l('      l_idx := vlist.FIRST;');
9084   l('      total := 0;');
9085   l('      l_num := 4;');
9086   l('      WHILE l_idx IS NOT NULL LOOP');
9087   l('        total := total+maxscore(l_idx);');
9088   l('        IF total<threshold THEN');
9089   l('          call_type(l_num) := ''AND'';');
9090   l('        ELSE');
9091   l('          call_type(l_num) := ''OR'';');
9092   l('        END IF;');
9093   l('        l_idx := vlist.NEXT(l_idx);');
9094   l('        l_num := l_num-1;');
9095   l('      END LOOP;');
9096   l('    ELSE');
9097   l('      call_type(1) := ''OR'';');
9098   l('      call_type(2) := ''AND'';');
9099   l('      call_type(3) := ''AND'';');
9100   l('      call_type(4) := ''AND'';');
9101   l('    END IF;');
9102   l('    x_party_max_score := l_entered_max_score;');
9103   l('    x_ps_max_score := l_ps_entered_max_score;');
9104   l('    x_contact_max_score := l_ct_entered_max_score;');
9105   l('    x_cpt_max_score := l_cpt_entered_max_score;');
9106 
9107   l('    RETURN (l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score);');
9108   l('  END;');
9109 
9110 
9111 
9112                 FIRST := TRUE;
9113                 g_party_or_query := null;
9114                 g_party_and_query := null;
9115                 cnt := cnt+1;
9116                 FOR PRIMATTRS IN (
9117                   SELECT a.ATTRIBUTE_ID, PRIMARY_ATTRIBUTE_ID, ATTRIBUTE_NAME, nvl(SCORE,0) SCORE
9118                   FROM HZ_TRANS_ATTRIBUTES_VL a,
9119                        HZ_MATCH_RULE_PRIMARY p,
9120                        HZ_MATCH_RULE_SECONDARY s
9121                   WHERE p.match_rule_id = p_rule_id
9122                   AND s.match_rule_id (+) = p_rule_id
9123                   AND s.attribute_id (+) = a.attribute_id
9124                   AND p.attribute_id = a.attribute_id
9125                   AND a.ENTITY_NAME = 'PARTY'
9126                   AND nvl(FILTER_FLAG,'N') <> 'Y'
9127                   ORDER BY SCORE) LOOP
9128                   FIRST1 := TRUE;
9129                   FOR PRIMTRANS IN (
9130                     SELECT f.STAGED_ATTRIBUTE_COLUMN, f.TRANSFORMATION_NAME, nvl(f.PRIMARY_FLAG,'N') PRIMARY_FLAG
9131                     FROM HZ_TRANS_FUNCTIONS_VL f,
9132                        HZ_PRIMARY_TRANS pt
9133                   WHERE pt.PRIMARY_ATTRIBUTE_ID = PRIMATTRS.PRIMARY_ATTRIBUTE_ID
9134                   AND pt.FUNCTION_ID = f.FUNCTION_ID)
9135                   LOOP
9136                       IF FIRST1 THEN
9137                         l_trans := '(g_party_stage_rec.'||
9138                                    PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
9139                                    PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
9140                                    PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
9141                         FIRST1 := FALSE;
9142                       ELSE
9143                         l_trans := l_trans||' OR (g_party_stage_rec.'||
9144                                    PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||' IS NULL OR '' ''||'||
9145                                    PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' '' like ''% ''||g_party_stage_rec.'||
9146                                    PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||'||'' %'')';
9147                       END IF;
9148                         IF PRIMTRANS.PRIMARY_FLAG = 'Y' THEN
9149                           tmp := '''A'||PRIMATTRS.ATTRIBUTE_ID||'''';
9150                         ELSE
9151                           tmp := 'NULL';
9152                         END IF;
9153 
9154                   END LOOP;
9155 
9156                  l('');
9157 
9158 
9159 
9160                 END LOOP;
9161 
9162                 get_column_list(p_rule_id, 'PARTY',l_p_select_list,l_p_param_list, l_p_into_list);
9163                 get_column_list(p_rule_id, 'PARTY_SITES',l_ps_select_list,l_ps_param_list, l_ps_into_list);
9164                 get_column_list(p_rule_id, 'CONTACTS',l_c_select_list,l_c_param_list, l_c_into_list);
9165                 get_column_list(p_rule_id, 'CONTACT_POINTS',l_cpt_select_list,l_cpt_param_list, l_cpt_into_list);
9166 
9167                 l_party_filter_str := NULL;
9168                 l_dyn_party_filter_str := NULL;
9169                 FIRST := TRUE;
9170                 cnt := 1;
9171                 for PRIMTRANS IN (
9172                       SELECT f.STAGED_ATTRIBUTE_COLUMN
9173                       FROM HZ_TRANS_FUNCTIONS_VL f,
9174                            HZ_TRANS_ATTRIBUTES_VL a,
9175                            HZ_MATCH_RULE_PRIMARY pattr,
9176                            HZ_PRIMARY_TRANS pfunc
9177                       WHERE pattr.MATCH_RULE_ID = p_rule_id
9178                       AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9179                       AND a.ENTITY_NAME = 'PARTY'
9180                       AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
9181                       AND pfunc.FUNCTION_ID = f.FUNCTION_ID
9182                       AND nvl(FILTER_FLAG,'N')  = 'Y'
9183 
9184                       UNION
9185 
9186                       SELECT f.STAGED_ATTRIBUTE_COLUMN
9187                       FROM HZ_TRANS_FUNCTIONS_VL f,
9188                           HZ_TRANS_ATTRIBUTES_VL a
9189                       WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
9190                       AND a.entity_name = 'PARTY'
9191                       AND a.attribute_name='PARTY_TYPE'
9192                       AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
9193                       AND nvl(f.active_flag,'Y')='Y'
9194                       AND ROWNUM=1
9195                 ) LOOP
9196 
9197                       IF FIRST THEN
9198                         l_party_filter_str := '(g_party_stage_rec.'||
9199                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9200                              ' IS NULL OR g_party_stage_rec.'||
9201                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' =  p.' ||
9202                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9203                         l_dyn_party_filter_str := '(:'||
9204                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9205                              ' IS NULL OR :'||
9206                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' =  p.' ||
9207                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9208                         FIRST := FALSE;
9209                       ELSE
9210                         l_dyn_party_filter_str := l_dyn_party_filter_str || ' AND ' ||
9211                              '(:'||
9212                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9213                              ' IS NULL OR :'||
9214                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'''' '''' =  p.' ||
9215                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9216                         l_party_filter_str := l_party_filter_str || ' AND ' ||
9217                              '(g_party_stage_rec.'||
9218                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN ||
9219                              ' IS NULL OR g_party_stage_rec.'||
9220                              PRIMTRANS.STAGED_ATTRIBUTE_COLUMN || '||'' '' =  p.' ||
9221                               PRIMTRANS.STAGED_ATTRIBUTE_COLUMN||')';
9222                       END IF;
9223                       l_party_filt_bind(cnt) := 'g_party_stage_rec.'||PRIMTRANS.STAGED_ATTRIBUTE_COLUMN;
9224                       cnt:=cnt+1;
9225                 END LOOP;
9226 
9227 
9228 
9229 
9230    /*********************************************************************************
9231    * Match rule private procedures to open a cursor for performing B-tree index queries.
9232    *   open_party_cursor - B-tree index query on HZ_STAGED_PARTIES
9233    *   open_party_site_cursor - B-tree index query on HZ_STAGED_PARTY_SITES
9234    *   open_contact_cursor - B-tree index query on HZ_STAGED_CONTACTS
9235    *   open_contact_pt_cursor - B-tree index query on HZ_STAGED_CONTACT_POINTS
9236    *
9237    * Input:
9238    * p_dup_party_id : Called in the duplicate identification case, to filter off
9239    *                  the party for which we are trying find duplicates.
9240    * p_restrict_sql : restrict_sql criteria passed to match rule
9241    * p_contains_str : null or 'Y'
9242    * p_search_ctx_id : Only to called from find_party_details, for filtering against
9243    *                  party_ids returned by the party query
9244    * p_party_id : USed in the get_matching_party_sites, get_matching_contacts and
9245    *              get_matching_cpts procedures, to only find records belonging to the specified
9246    *              party_id
9247    *********************************************************************************/
9248 
9249   -- VJN: Introduced the code generation of match rules based on rule purpose
9250   --      so that Expanded Duplicate Identification Match rules uses intermedia indexes
9251   --      where as the bulk duplicate identification match rules use the conventional
9252   --      B-tree indexes.
9253         l('  PROCEDURE open_party_cursor(');
9254         l('            p_dup_party_id NUMBER, ');
9255         l('            p_restrict_sql VARCHAR2, ');
9256         l('            p_contains_str  VARCHAR2, ');
9257         l('            p_search_ctx_id NUMBER,');
9258         l('            p_match_str VARCHAR2,');
9259         l('            p_search_merged VARCHAR2,');
9260         l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9261         l('  l_sqlstr VARCHAR2(4000);');
9262         l('  BEGIN');
9263         IF has_acquisition_attribs (p_rule_id, 'PARTY')
9264         THEN
9265         l('    IF p_contains_str IS NULL THEN');
9266         /**** To query based on party_id .. from the get_score_details flow ***/
9267         l('      OPEN x_cursor FOR ');
9268         l('        SELECT PARTY_ID '|| l_p_select_list);
9269         l('        FROM HZ_STAGED_PARTIES stage');
9270         l('        WHERE PARTY_ID = p_dup_party_id;');
9271 
9272         /**** Static queries when restrict_sql is null OR if p_search_ctx_id IS NOT NULL *****/
9273         l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9274 
9275         /**** When search context ID is null .. Retrieve rows using B-tree indexes ****/
9276         l('      IF p_search_ctx_id IS NULL THEN');
9277         l('        OPEN x_cursor FOR ');
9278         l('          SELECT /*+ ORDERED */ stage.PARTY_ID '|| replace(l_p_select_list,'T','stage.T'));
9279         l('          FROM HZ_SRCH_PARTIES srch, HZ_STAGED_PARTIES stage');
9280         l('          WHERE');
9281 
9282         generate_bulk_predicate(p_rule_id,'N',l_match_str,'PARTY');
9283 
9284              IF l_party_filter_str IS NOT NULL THEN
9285           l('          AND ('||replace(l_party_filter_str,'p.','stage.')||')');
9286         END IF;
9287         l('          AND (nvl(p_search_merged,''N'')=''Y'' OR nvl(stage.status,''A'') in (''A''))');
9288         l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9289 
9290 
9291         /**** When search context ID is not null .. Query using DQM_PARTIES_GT. Filter using
9292               B-tree index ****/
9293         l('      ELSE');
9294         l('        OPEN x_cursor FOR ');
9295         l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTIES_U1) */ stage.PARTY_ID '|| replace(l_p_select_list,'T','stage.T'));
9296         l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTIES stage, HZ_SRCH_PARTIES srch');
9297         l('            WHERE');
9298 
9299         generate_bulk_predicate(p_rule_id,'N',l_match_str,'PARTY');
9300 
9301         l('            AND d.SEARCH_CONTEXT_ID=p_search_ctx_id');
9302         l('            AND d.party_id = stage.party_id');
9303         IF l_party_filter_str IS NOT NULL THEN
9304           l('            AND ('||replace(l_party_filter_str,'p.','stage.')||')');
9305         END IF;
9306         l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)');
9307         l('            AND (nvl(p_search_merged,''N'')=''Y'' OR nvl(stage.status,''A'') in (''A''));');
9308         l('      END IF;');
9309 
9310         /**** When restrict_sql is not null *****/
9311         l('    ELSE');
9312 
9313         /**** When search context ID is null .. Access using B-tree index ***/
9314         l('     IF p_search_ctx_id IS NULL THEN');
9315         l('       l_sqlstr := ''SELECT /*+ ORDERED */ stage.PARTY_ID '|| replace(l_p_select_list,'T','stage.T')||'''||');
9316         l('                   '' FROM HZ_SRCH_PARTIES srch, HZ_STAGED_PARTIES stage''||');
9317         l('                   '' WHERE''||');
9318 
9319         generate_bulk_predicate(p_rule_id,'Y',l_match_str,'PARTY');
9320 
9321         IF l_dyn_party_filter_str IS NOT NULL THEN
9322           l('                   '' AND ('||replace(l_dyn_party_filter_str,'p.','stage.')||')''||');
9323         END IF;
9324         l('                   '' AND (''||p_restrict_sql||'')'' ||');
9325         l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9326         l('       IF p_search_merged IS NULL OR p_search_merged <> ''Y'' THEN');
9327         l('         l_sqlstr := l_sqlstr ||'' AND nvl(stage.status,''''A'''') in (''''A'''')'';');
9328         l('       END IF;');
9329         l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9330         FOR I in 1..l_party_filt_bind.COUNT LOOP
9331             l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9332         END LOOP;
9333         l('                    ,p_dup_party_id, p_dup_party_id;');
9334         l('     END IF;');
9335         l('   END IF;');
9336         l('  exception');
9337         l('    when others then');
9338         l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9339         l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9340         l('        FND_MSG_PUB.ADD;');
9341         l('        RAISE FND_API.G_EXC_ERROR;');
9342         l('      else ');
9343         l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9344         l('      end if;');
9345         ELSE
9346            l('NULL ;');
9347         END IF;
9348         l('  END;');
9349         l('');
9350 
9351 
9352   l('  PROCEDURE open_party_site_cursor(');
9353   l('            p_dup_party_id NUMBER, ');
9354   l('            p_party_id NUMBER, ');
9355   l('            p_restrict_sql VARCHAR2, ');
9356   l('            p_contains_str  VARCHAR2, ');
9357   l('            p_search_ctx_id  NUMBER, ');
9358   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9359   l('  l_sqlstr VARCHAR2(4000);');
9360   l('  BEGIN');
9361   IF has_acquisition_attribs (p_rule_id, 'PARTY_SITES')
9362   THEN
9363 
9364                       /**** For a single party_id scenario. Retrieve using party_id ****/
9365             l('     IF p_party_id IS NOT NULL THEN');
9366             l('       OPEN x_cursor FOR ');
9367             l('          SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'||
9368                                                        replace(l_ps_select_list,'T','stage.T') );
9369             l('          FROM HZ_STAGED_PARTY_SITES stage,HZ_SRCH_PSITES srch');
9370             l('WHERE');
9371             generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9372             IF l_party_filter_str IS NOT NULL THEN
9373               l('        AND EXISTS (');
9374               l('          SELECT  /*+ INDEX(p HZ_STAGED_PARTIES_U1) */  1 FROM HZ_STAGED_PARTIES p');
9375               l('          WHERE p.PARTY_ID = stage.PARTY_ID');
9376               l('          AND ('||l_party_filter_str||'))');
9377             END IF;
9378             l('          AND stage.party_id = p_party_id;');
9379             /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
9380             l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9381 
9382             -- VJN new hints introduced for performance
9383             IF l_party_filter_str IS NOT NULL THEN
9384                    /**** When p_search_ctx_id IS NULL, retreive using B-tree index ***/
9385                   l('      IF p_search_ctx_id IS NULL THEN');
9386                   l('        OPEN x_cursor FOR ');
9387                   l('          SELECT /*+ ORDERED USE_NL(srch stage p) */  stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'||
9388                                                           replace(l_ps_select_list,'T','stage.T'));
9389                   l('          FROM  HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage, HZ_STAGED_PARTIES p');
9390                   l('WHERE');
9391                   generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9392                   l('    AND  p.PARTY_ID = stage.PARTY_ID');
9393                   l('    AND ('||l_party_filter_str||')');
9394             ELSE
9395                    /**** When p_search_ctx_id IS NULL, retreive using B-tree index ***/
9396                   l('      IF p_search_ctx_id IS NULL THEN');
9397                   l('        OPEN x_cursor FOR ');
9398                   l('          SELECT /*+ USE_NL(srch stage)  */  stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'||
9399                                                           replace(l_ps_select_list,'T','stage.T'));
9400                   l('          FROM  HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage');
9401                   l('WHERE');
9402                   generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9403             END IF;
9404 
9405 
9406             l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9407 
9408             /***** Search_ctx_id is not null. Retreive using HZ_DQM_PARTIES_GT ****/
9409             l('      ELSE');
9410             l('          OPEN x_cursor FOR ');
9411             l('            SELECT  stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID'
9412                                || replace(l_ps_select_list,'T','stage.T'));
9413             l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage, HZ_SRCH_PSITES srch');
9414             l('WHERE');
9415             generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'PARTY_SITES');
9416             l('            AND d.search_context_id = p_search_ctx_id');
9417             l('            AND d.party_id = stage.party_id');
9418             l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9419             l('      END IF;');
9420 
9421              -- VJN new hints introduced for performance
9422             IF l_dyn_party_filter_str IS NOT NULL THEN
9423                    /**** Restrict_sql is not null  ****/
9424                   l('    ELSE');
9425                   l('       l_sqlstr := ''SELECT /*+ ORDERED USE_NL(srch stage p) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID ' ||
9426                                     replace(l_ps_select_list,'T','stage.T')||'''||');
9427                   l('                   '' FROM HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage, HZ_STAGED_PARTIES p''||');
9428                   l('                   '' WHERE'' ||');
9429                   generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'PARTY_SITES');
9430                   l('                 '' AND p.party_id = stage.party_id '' || ');
9431                   l('                 '' AND ('||l_dyn_party_filter_str||')) '' || ');
9432             ELSE
9433                    /**** Restrict_sql is not null  ****/
9434                   l('    ELSE');
9435                   l('       l_sqlstr := ''SELECT /*+ USE_NL(srch stage)  */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID ' ||
9436                                     replace(l_ps_select_list,'T','stage.T')||'''||');
9437                   l('                   '' FROM HZ_SRCH_PSITES srch, HZ_STAGED_PARTY_SITES stage''||');
9438                   l('                   '' WHERE'' ||');
9439                   generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'PARTY_SITES');
9440             END IF;
9441             l('                   '' AND (''||p_restrict_sql||'')'' ||');
9442             l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9443             l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9444             FOR I in 1..l_party_filt_bind.COUNT LOOP
9445               l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9446             END LOOP;
9447             l('                    ,p_dup_party_id, p_dup_party_id;');
9448             l('    END IF;');
9449             l('  exception');
9450             l('    when others then');
9451             l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9452             l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9453             l('        FND_MSG_PUB.ADD;');
9454             l('        RAISE FND_API.G_EXC_ERROR;');
9455             l('      else ');
9456             l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9457             l('      end if;');
9458      ELSE
9459           l('NULL ;');
9460      END IF;
9461           l('  END;');
9462 
9463   l('');
9464   l('  PROCEDURE open_contact_cursor(');
9465   l('            p_dup_party_id NUMBER, ');
9466   l('            p_party_id NUMBER, ');
9467   l('            p_restrict_sql VARCHAR2, ');
9468   l('            p_contains_str  VARCHAR2, ');
9469   l('            p_search_ctx_id  NUMBER, ');
9470   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9471   l('  l_sqlstr VARCHAR2(4000);');
9472   l('  BEGIN');
9473   IF has_acquisition_attribs (p_rule_id, 'CONTACTS')
9474   THEN
9475                   /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
9476           l('     IF p_party_id IS NOT NULL THEN');
9477           l('       OPEN x_cursor FOR ');
9478           l('          SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ stage.ORG_CONTACT_ID, stage.PARTY_ID'||
9479                                                        replace(l_c_select_list,'T' , 'stage.T') );
9480           l('          FROM HZ_STAGED_CONTACTS stage, HZ_SRCH_CONTACTS srch');
9481           l('          WHERE');
9482           generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACTS');
9483           IF l_party_filter_str IS NOT NULL THEN
9484             l('        AND EXISTS (');
9485             l('          SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */  1 FROM HZ_STAGED_PARTIES p');
9486             l('          WHERE p.PARTY_ID = stage.PARTY_ID');
9487             l('          AND ('||l_party_filter_str||'))');
9488           END IF;
9489           l('          AND stage.party_id = p_party_id;');
9490           /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
9491           l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9492 
9493           /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
9494           l('      IF p_search_ctx_id IS NULL THEN');
9495           l('        OPEN x_cursor FOR ');
9496           l('          SELECT /*+ USE_NL(srch stage)  */ stage.ORG_CONTACT_ID, stage.PARTY_ID'|| replace(l_c_select_list,'T','stage.T') );
9497           l('          FROM  HZ_SRCH_CONTACTS srch, HZ_STAGED_CONTACTS stage');
9498           l('          WHERE');
9499           generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACTS');
9500           IF l_party_filter_str IS NOT NULL THEN
9501             l('        AND EXISTS (');
9502             l('          SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9503             l('          WHERE p.PARTY_ID = stage.PARTY_ID');
9504             l('          AND ('||l_party_filter_str||'))');
9505           END IF;
9506           l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9507 
9508           /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
9509           l('      ELSE');
9510           l('          OPEN x_cursor FOR ');
9511           l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ stage.ORG_CONTACT_ID, stage.PARTY_ID'
9512                                       || replace(l_c_select_list,'T' , 'stage.T') );
9513           l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage, HZ_SRCH_CONTACTS srch');
9514           l('            WHERE');
9515           generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACTS');
9516           l('            AND d.search_context_id = p_search_ctx_id');
9517           l('            AND d.party_id = stage.party_id');
9518         /*
9519           IF l_party_filter_str IS NOT NULL THEN
9520             l('          AND EXISTS (');
9521             l('            SELECT 1 FROM HZ_STAGED_PARTIES p');
9522             l('            WHERE p.PARTY_ID = stage.PARTY_ID');
9523             l('            AND ('||l_party_filter_str||'))');
9524           END IF;
9525         */
9526           l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9527           l('      END IF;');
9528 
9529           /**** Restrict_sql is not null. Retrieve using intermedia ****/
9530           l('    ELSE');
9531           l('       l_sqlstr := ''SELECT /*+ USE_NL(srch stage)  */  stage.ORG_CONTACT_ID, stage.PARTY_ID '||
9532                                                  replace(l_c_select_list,'T','stage.T')||'''||');
9533           l('                   '' FROM HZ_SRCH_CONTACTS srch, HZ_STAGED_CONTACTS stage''||');
9534           l('                   '' WHERE ''||');
9535           generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'CONTACTS');
9536           IF l_dyn_party_filter_str IS NOT NULL THEN
9537             l('                 '' AND EXISTS (''||');
9538             l('                 '' SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p '' || ');
9539             l('                 '' WHERE p.party_id = stage.party_id '' || ');
9540             l('                 '' AND ('||l_dyn_party_filter_str||')) '' || ');
9541           END IF;
9542           l('                   '' AND (''||p_restrict_sql||'')'' ||');
9543           l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9544           l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9545           FOR I in 1..l_party_filt_bind.COUNT LOOP
9546             l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9547           END LOOP;
9548           l('                    ,p_dup_party_id, p_dup_party_id;');
9549           l('    END IF;');
9550           l('  exception');
9551           l('    when others then');
9552           l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9553           l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9554           l('        FND_MSG_PUB.ADD;');
9555           l('        RAISE FND_API.G_EXC_ERROR;');
9556           l('      else ');
9557           l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9558           l('      end if;');
9559    ELSE
9560          l('NULL ;');
9561    END IF;
9562           l('  END;');
9563   l('');
9564 
9565 
9566   l('  PROCEDURE open_contact_pt_cursor(');
9567   l('            p_dup_party_id NUMBER, ');
9568   l('            p_party_id NUMBER, ');
9569   l('            p_restrict_sql VARCHAR2, ');
9570   l('            p_contains_str  VARCHAR2, ');
9571   l('            p_search_ctx_id  NUMBER, ');
9572   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
9573   l('  l_sqlstr VARCHAR2(4000);');
9574   l('  BEGIN');
9575 
9576   IF has_acquisition_attribs (p_rule_id, 'CONTACT_POINTS')
9577   THEN
9578 
9579             /**** For a single party_id scenario. Retrieve using party_id, filter using intermedia ****/
9580             l('     IF p_party_id IS NOT NULL THEN');
9581             l('       OPEN x_cursor FOR ');
9582             l('          SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ stage.CONTACT_POINT_ID, stage.PARTY_ID,'
9583                                   ||   'stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9584                                   || replace(l_cpt_select_list,'T','stage.T') );
9585             l('          FROM HZ_STAGED_CONTACT_POINTS stage, HZ_SRCH_CPTS srch');
9586             l('            WHERE');
9587             generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACT_POINTS');
9588             IF l_party_filter_str IS NOT NULL THEN
9589 
9590               l('        AND EXISTS (');
9591               l('          SELECT /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9592               l('          WHERE p.PARTY_ID = stage.PARTY_ID');
9593               l('          AND ('||l_party_filter_str||'))');
9594             END IF;
9595             l('          AND stage.party_id = p_party_id;');
9596             /**** If restrict_sql is NULL or if p_search_ctx_id is not null, execute static queries **/
9597             l('    ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN');
9598 
9599             /**** When p_search_ctx_id IS NULL, retreive using intermedia index ***/
9600             l('      IF p_search_ctx_id IS NULL THEN');
9601             l('        OPEN x_cursor FOR ');
9602             l('          SELECT /*+ USE_NL(srch stage)  */  stage.CONTACT_POINT_ID, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9603                                           || replace(l_cpt_select_list,'T','stage.T') );
9604             l('          FROM  HZ_SRCH_CPTS srch, HZ_STAGED_CONTACT_POINTS stage');
9605             l('            WHERE');
9606             generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACT_POINTS');
9607             IF l_party_filter_str IS NOT NULL THEN
9608               l('        AND EXISTS (');
9609               l('          SELECT  /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p');
9610               l('          WHERE p.PARTY_ID = stage.PARTY_ID');
9611               l('          AND ('||l_party_filter_str||'))');
9612             END IF;
9613             l('          AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9614 
9615             /***** Search_ctx_id is not null. Reteive using HZ_DQM_PARTIES_GT ****/
9616             l('      ELSE');
9617             l('          OPEN x_cursor FOR ');
9618             l('            SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ stage.CONTACT_POINT_ID, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID '
9619                                           || replace(l_cpt_select_list,'T','stage.T') );
9620             l('            FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage, HZ_SRCH_CPTS srch');
9621             l('            WHERE');
9622             generate_bulk_predicate(p_rule_id, 'N', l_match_str, 'CONTACT_POINTS');
9623             l('            AND d.search_context_id = p_search_ctx_id');
9624             l('            AND d.party_id = stage.party_id');
9625           /*
9626             IF l_party_filter_str IS NOT NULL THEN
9627               l('          AND EXISTS (');
9628               l('            SELECT 1 FROM HZ_STAGED_PARTIES p');
9629               l('            WHERE p.PARTY_ID = stage.PARTY_ID');
9630               l('            AND ('||l_party_filter_str||'))');
9631             END IF;
9632           */
9633             l('            AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);');
9634             l('      END IF;');
9635 
9636             /**** Restrict_sql is not null. Retrieve using intermedia ****/
9637             l('    ELSE');
9638             l('       l_sqlstr := ''SELECT /*+ USE_NL(srch stage)  */ stage.CONTACT_POINT_ID, stage.PARTY_ID, stage.PARTY_SITE_ID, stage.ORG_CONTACT_ID  '
9639                                                          || replace(l_cpt_select_list,'T','stage.T')||'''||');
9640             l('                   '' FROM HZ_SRCH_CPTS srch, HZ_STAGED_CONTACT_POINTS stage''||');
9641             l('                   '' WHERE''||');
9642             generate_bulk_predicate(p_rule_id, 'Y', l_match_str, 'CONTACT_POINTS');
9643             IF l_dyn_party_filter_str IS NOT NULL THEN
9644               l('                 '' AND EXISTS (''||');
9645               l('                 '' SELECT  /*+ INDEX(p HZ_STAGED_PARTIES_U1) */ 1 FROM HZ_STAGED_PARTIES p '' || ');
9646               l('                 '' WHERE p.party_id = stage.party_id '' || ');
9647               l('                 '' AND ('||l_dyn_party_filter_str||')) '' || ');
9648             END IF;
9649             l('                   '' AND (''||p_restrict_sql||'')'' ||');
9650             l('                   '' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ''; ');
9651             l('       OPEN x_cursor FOR l_sqlstr USING p_contains_str');
9652             FOR I in 1..l_party_filt_bind.COUNT LOOP
9653               l('                              ,'||l_party_filt_bind(I)||','||l_party_filt_bind(I));
9654             END LOOP;
9655             l('                    ,p_dup_party_id, p_dup_party_id;');
9656             l('    END IF;');
9657             l('  exception');
9658             l('    when others then');
9659             l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
9660             l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
9661             l('        FND_MSG_PUB.ADD;');
9662             l('        RAISE FND_API.G_EXC_ERROR;');
9663             l('      else ');
9664             l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
9665             l('      end if;');
9666      ELSE
9667           l('NULL ;');
9668      END IF;
9669           l('  END;');
9670 
9671   l('');
9672   l('  FUNCTION get_new_score_rec (');
9673   l('    	 p_init_total_score NUMBER,');
9674   l('    	 p_init_party_score NUMBER,');
9675   l('    	 p_init_party_site_score NUMBER,');
9676   l('    	 p_init_contact_score NUMBER,');
9677   l('    	 p_init_contact_point_score NUMBER, ');
9678   l('    	 p_party_id NUMBER, ');
9679   l('    	 p_party_site_id NUMBER, ');
9680   l('    	 p_org_contact_id NUMBER, ');
9681   l('    	 p_contact_point_id NUMBER) ');
9682   l('     RETURN HZ_PARTY_SEARCH.score_rec IS');
9683   l('    l_score_rec HZ_PARTY_SEARCH.score_rec;');
9684   l('  BEGIN');
9685   l('    l_score_rec.TOTAL_SCORE := p_init_total_score;');
9686   l('    l_score_rec.PARTY_SCORE := p_init_party_score;');
9687   l('    l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;');
9688   l('    l_score_rec.CONTACT_SCORE := p_init_contact_score;');
9689   l('    l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;');
9690   l('    l_score_rec.PARTY_ID := p_party_id;');
9691   l('    l_score_rec.PARTY_SITE_ID := p_party_site_id;');
9692   l('    l_score_rec.ORG_CONTACT_ID := p_org_contact_id;');
9693   l('    l_score_rec.CONTACT_POINT_ID := p_contact_point_id;');
9694   l('    RETURN l_score_rec;');
9695   l('  END;');
9696 
9697   l('');
9698   l('   /**********************************************************');
9699   l('   This procedure finds the set of parties that match the search');
9700   l('   criteria and returns a scored set of parties');
9701   l('');
9702   l('   The steps in executing the search are as follows');
9703   l('    1. Initialization and error checks');
9704   l('    2. Setup of intermedia query strings for Acquisition query');
9705   l('    3. Execution of Acquisition query');
9706   l('    4. Execution of Secondary queries to score results');
9707   l('    5. Setup of data temporary table to return search results');
9708   l('   **********************************************************/');
9709   l('');
9710   l('-------------------------------------------------------------------------------------');
9711   l('--------------------  BULK MATCH RULE ::: find_parties ------------------------------');
9712   l('-------------------------------------------------------------------------------------');
9713   l('PROCEDURE find_parties (');
9714   l('      p_rule_id               IN      NUMBER,');
9715   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
9716   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
9717   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
9718   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
9719   l('      p_restrict_sql          IN      VARCHAR2,');
9720   l('      p_match_type            IN      VARCHAR2,');
9721   l('      p_search_merged         IN      VARCHAR2,');
9722   l('      p_dup_party_id          IN      NUMBER,');
9723   l('      p_dup_set_id            IN      NUMBER,');
9724   l('      p_dup_batch_id          IN      NUMBER,');
9725   l('      p_ins_details           IN      VARCHAR2,');
9726   l('      x_search_ctx_id         OUT     NUMBER,');
9727   l('      x_num_matches           OUT     NUMBER');
9728   l(') IS');
9729   l('');
9730   l('  -- Strings to hold the generated Intermedia query strings');
9731   l('  l_party_contains_str VARCHAR2(32000); ');
9732   l('  l_party_site_contains_str VARCHAR2(32000);');
9733   l('  l_contact_contains_str VARCHAR2(32000);');
9734   l('  l_contact_pt_contains_str VARCHAR2(32000);');
9735   l('  l_denorm_str VARCHAR2(32000);');
9736   l('  l_ps_denorm_str VARCHAR2(32000);');
9737   l('  l_ct_denorm_str VARCHAR2(32000);');
9738   l('  l_cpt_denorm_str VARCHAR2(32000);');
9739 
9740   l('');
9741   l('  -- Other local variables');
9742   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
9743   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
9744   l('  -- For Score calculation');
9745   l('  l_max_score NUMBER;');
9746   l('  l_match_idx NUMBER;');
9747   l('  l_entered_max_score NUMBER;');
9748   l('  FIRST BOOLEAN;');
9749   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
9750   l('');
9751   FOR TX IN (
9752       SELECT distinct f.staged_attribute_column
9753       FROM hz_trans_functions_vl f, hz_secondary_trans st,
9754            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
9755       WHERE sa.match_rule_id = p_rule_id
9756       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
9757       AND st.function_id = f.function_id
9758       AND a.attribute_id = sa.attribute_id) LOOP
9759     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
9760   END LOOP;
9761   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
9762   l('  H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
9763   l('  H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
9764   l('');
9765   l('  l_score NUMBER;');
9766   l('  l_idx NUMBER;');
9767   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
9768   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
9769   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
9770   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
9771   l('  l_party_id NUMBER;');
9772   l('  l_ps_party_id NUMBER;');
9773   l('  l_ct_party_id NUMBER;');
9774   l('  l_cpt_party_id NUMBER;');
9775   l('  l_cpt_ps_id NUMBER;');
9776   l('  l_cpt_contact_id NUMBER;');
9777   l('  l_party_site_id NUMBER;');
9778   l('  l_org_contact_id NUMBER;');
9779   l('  l_contact_pt_id NUMBER;');
9780   l('  l_ps_contact_id NUMBER;');
9781   l('  l_party_max_score NUMBER;');
9782   l('  l_ps_max_score NUMBER;');
9783   l('  l_contact_max_score NUMBER;');
9784   l('  l_cpt_max_score NUMBER;');
9785   l('  l_denorm_max_score NUMBER;');
9786   l('  l_non_denorm_max_score NUMBER;');
9787   l('');
9788   l('  defpt NUMBER :=0;');
9789   l('  defps NUMBER :=0;');
9790   l('  defct NUMBER :=0;');
9791   l('  defcpt NUMBER :=0;');
9792   l('  l_index NUMBER;');
9793   l('  l_max_thresh NUMBER;');
9794   l('  l_tmp NUMBER;');
9795   l('  l_merge_flag VARCHAR2(1);');
9796   l('  l_num_eval NUMBER:=0;');
9797   l('');
9798   l('  --Fix for bug 4417124 ');
9799   l('  l_use_contact_addr_info BOOLEAN := TRUE;');
9800   l('  l_use_contact_cpt_info BOOLEAN  := TRUE;');
9801   l('  l_use_contact_addr_flag VARCHAR2(1) := ''Y'';');
9802   l('  l_use_contact_cpt_flag  VARCHAR2(1) := ''Y'';');
9803   l('');
9804   l('    h_ps_id HZ_PARTY_SEARCH.IDList;');
9805   l('    h_ps_party_id HZ_PARTY_SEARCH.IDList;');
9806   l('    h_ps_score HZ_PARTY_SEARCH.IDList;');
9807   l('    h_ct_id HZ_PARTY_SEARCH.IDList;');
9808   l('    h_ct_party_id HZ_PARTY_SEARCH.IDList;');
9809   l('    h_ct_score HZ_PARTY_SEARCH.IDList;');
9810   l('    h_cpt_id HZ_PARTY_SEARCH.IDList;');
9811   l('    h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
9812   l('    h_cpt_score HZ_PARTY_SEARCH.IDList;');
9813   l('    detcnt NUMBER := 1;');
9814   l('');
9815   l('  ');
9816   l('  /********************* Find Parties private procedures *******/');
9817 
9818   l('  PROCEDURE push_eval IS');
9819   l('  BEGIN');
9820   l('    H_PARTY_ID.DELETE;');
9821   l('    H_PARTY_ID_LIST.DELETE;');
9822   l('    H_SCORES.DELETE;        ');
9823   l('    g_mappings.DELETE;');
9824   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
9825   l('    call_order(5) := call_order(1);');
9826   l('    call_type(5) := ''AND'';');
9827   l('    call_max_score(5) := call_max_score(1);');
9828   l('    call_type(2) := ''OR'';');
9829   l('  END;');
9830 
9831   l('');
9832   l('  /**  Private procedure to acquire and score at party level  ***/');
9833   l('  PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
9834   l('    l_party_id_idx NUMBER:=1;');
9835   l('    l_ctx_id NUMBER;');
9836   l('  BEGIN');
9837   l('    SAVEPOINT eval_start;');
9838   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
9839   l('      l_ctx_id := l_search_ctx_id;');
9840   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
9841   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9842   l('             l_search_ctx_id,H_PARTY_ID(I));');
9843   l('      H_PARTY_ID.DELETE;');
9844   l('      H_PARTY_ID_LIST.DELETE;');
9845   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
9846   l('      l_ctx_id := l_search_ctx_id;');
9847   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
9848   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9849   l('             l_search_ctx_id,H_PARTY_ID(I));');
9850   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
9851   l('    ELSE');
9852   l('      l_ctx_id := NULL;');
9853   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
9854   l('    END IF;');
9855   l('    open_party_cursor(p_dup_party_id, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,p_search_merged,l_party_cur);');
9856   l('    LOOP ');
9857   l('      FETCH l_party_cur INTO');
9858   l('         l_party_id '||l_p_into_list||';');
9859   l('      EXIT WHEN l_party_cur%NOTFOUND;');
9860   l('      l_index := map_id(l_party_id);');
9861   l('      l_score := GET_PARTY_SCORE('||l_p_param_list||');');
9862 
9863   l('      IF NOT H_SCORES.EXISTS(l_index) THEN');
9864   l('        H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
9865   l('      ELSE');
9866   l('        H_SCORES(l_index).TOTAL_SCORE := ');
9867   l('                H_SCORES(l_index).TOTAL_SCORE+l_score;');
9868   l('        H_SCORES(l_index).PARTY_SCORE := l_score;');
9869   l('      END IF;');
9870   l('      IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
9871   l('        H_PARTY_ID_LIST(l_index) := 1;');
9872   l('        H_PARTY_ID(l_party_id_idx) := l_party_id;');
9873   l('        l_party_id_idx:= l_party_id_idx+1;');
9874   l('      END IF;');
9875   l('      IF l_party_id_idx>l_max_thresh THEN');
9876   l('        CLOSE l_party_cur;'); --Bug No: 3872745
9877   l('        IF p_index>1 THEN');
9878   ldbg_s('In eval party level number of matches found exceeded threshold');
9879   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
9880   l('          FND_MSG_PUB.ADD;');
9881   l('          RAISE FND_API.G_EXC_ERROR;');
9882   l('        ELSE');
9883   l('          push_eval;');
9884   l('          RETURN;');
9885   l('        END IF;');
9886   l('      END IF;');
9887   ds(fnd_log.level_statement);
9888   dc(fnd_log.level_statement,'Party Level Matches');
9889   dc(fnd_log.level_statement,'l_party_id','l_party_id');
9890   dc(fnd_log.level_statement,'l_score','l_score');
9891   de;
9892   l('    END LOOP;');
9893   l('    CLOSE l_party_cur;');
9894   l('    ROLLBACK to eval_start;');
9895   l('  END;');
9896   l('');
9897   l('  /**  Private procedure to acquire and score at party site level  ***/');
9898   l('  PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
9899   l('    l_party_id_idx NUMBER:=1;');
9900   l('    l_ctx_id NUMBER;');
9901   --l('    h_ps_id HZ_PARTY_SEARCH.IDList;');
9902   --l('    h_ps_party_id HZ_PARTY_SEARCH.IDList;');
9903   --l('    h_ps_score HZ_PARTY_SEARCH.IDList;');
9904   --l('    detcnt NUMBER := 1;');
9905   l('  BEGIN');
9909   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
9906   l('    SAVEPOINT eval_start;');
9907   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
9908   l('      l_ctx_id := l_search_ctx_id;');
9910   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9911   l('             l_search_ctx_id,H_PARTY_ID(I));');
9912   l('      H_PARTY_ID.DELETE;');
9913   l('      H_PARTY_ID_LIST.DELETE;');
9914   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
9915   l('      l_ctx_id := l_search_ctx_id;');
9916   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
9917   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9918   l('             l_search_ctx_id,H_PARTY_ID(I));');
9919   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
9920   l('    ELSE');
9921   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
9922   l('      l_ctx_id := NULL;');
9923   l('    END IF;');
9924   l('    open_party_site_cursor(p_dup_party_id,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, l_party_site_cur);');
9925   l('    LOOP ');
9926   l('      FETCH l_party_site_cur INTO');
9927   l('         l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
9928   l('      EXIT WHEN l_party_site_cur%NOTFOUND;');
9929   l('      IF l_use_contact_addr_info OR l_ps_contact_id IS NOT NULL THEN');
9930   l('        l_index := map_id(l_ps_party_id);');
9931   l('        l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
9932 
9933   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
9934   l('          H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);');
9935   l('        ELSE');
9936   l('          IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
9937   l('            H_SCORES(l_index).TOTAL_SCORE := ');
9938   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
9939   l('            H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
9940   l('          END IF;');
9941   l('        END IF;');
9942   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
9943   l('          H_PARTY_ID_LIST(l_index) := 1;');
9944   l('          H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
9945   l('          l_party_id_idx:= l_party_id_idx+1;');
9946   l('        END IF;');
9947   l('        IF l_party_id_idx>l_max_thresh THEN');
9948   l('        CLOSE l_party_site_cur;'); --Bug No: 3872745
9949   l('          IF p_index>1 THEN');
9950   ldbg_s('In eval party site level number of matches found exceeded threshold');
9951   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
9952   l('            FND_MSG_PUB.ADD;');
9953   l('            RAISE FND_API.G_EXC_ERROR;');
9954   l('          ELSE');
9955   l('            push_eval;');
9956   l('            RETURN;');
9957   l('          END IF;');
9958   l('        END IF;');
9959   l('        IF p_ins_details = ''Y'' THEN');
9960   l('          h_ps_id(detcnt) := l_party_site_id;');
9961   l('          h_ps_party_id(detcnt) := l_ps_party_id;');
9962   l('          h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
9963   l('          detcnt := detcnt +1;');
9964   l('        END IF;');
9965   ds(fnd_log.level_statement);
9966   dc(fnd_log.level_statement,'Party Site Level Matches');
9967   dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
9968   dc(fnd_log.level_statement,'l_ps_party_id','l_ps_party_id');
9969   dc(fnd_log.level_statement,'l_score','l_score');
9970   de;
9971   l('      END IF;');
9972   l('    END LOOP;');
9973   l('    CLOSE l_party_site_cur;');
9974   l('    ROLLBACK to eval_start;');
9975   -- l('    IF p_ins_details = ''Y'' THEN');
9976   -- l('      FORALL I in 1..h_ps_id.COUNT ');
9977   -- l('        INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
9978   -- l('          l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
9979   -- l('    END IF;');
9980   l('  END;');
9981   l('');
9982   l('  /**  Private procedure to acquire and score at party site level  ***/');
9983   l('  PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
9984   l('    l_party_id_idx NUMBER:=1;');
9985   l('    l_ctx_id NUMBER;');
9986  -- l('    h_ct_id HZ_PARTY_SEARCH.IDList;');
9987  -- l('    h_ct_party_id HZ_PARTY_SEARCH.IDList;');
9988  -- l('    h_ct_score HZ_PARTY_SEARCH.IDList;');
9989  -- l('    detcnt NUMBER := 1;');
9990   l('  BEGIN');
9991   l('    SAVEPOINT eval_start;');
9992   l('    IF l_match_str = '' AND '' AND p_call_type=''AND'' THEN');
9993   l('      l_ctx_id := l_search_ctx_id;');
9994   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
9995   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
9996   l('             l_search_ctx_id,H_PARTY_ID(I));');
9997   l('      H_PARTY_ID.DELETE;');
9998   l('      H_PARTY_ID_LIST.DELETE;');
9999   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10000   l('      l_ctx_id := l_search_ctx_id;');
10001   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10002   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10003   l('             l_search_ctx_id,H_PARTY_ID(I));');
10004   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10005   l('    ELSE');
10006   l('      l_ctx_id := NULL;');
10007   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10008   l('    END IF;');
10009   l('    open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id, l_contact_cur);');
10010   l('    LOOP ');
10011   l('      FETCH l_contact_cur INTO');
10012   l('         l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
10013   l('      EXIT WHEN l_contact_cur%NOTFOUND;');
10014   l('      l_index := map_id(l_ct_party_id);');
10015   l('      l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
10016 
10017   l('      IF NOT H_SCORES.EXISTS(l_index) THEN');
10018   l('        H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id,null);');
10019   l('      ELSE');
10020   l('        IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
10021   l('          H_SCORES(l_index).TOTAL_SCORE := ');
10022   l('                H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
10023   l('          H_SCORES(l_index).CONTACT_SCORE := l_score;');
10024   l('        END IF;');
10025   l('      END IF;');
10026   l('      IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
10027   l('        H_PARTY_ID_LIST(l_index) := 1;');
10028   l('        H_PARTY_ID(l_party_id_idx) := l_ct_party_id;');
10029   l('        l_party_id_idx:= l_party_id_idx+1;');
10030   l('      END IF;');
10031   l('      IF l_party_id_idx>l_max_thresh THEN');
10032   l('        CLOSE l_contact_cur;'); --Bug No: 3872745
10033   l('        IF p_index>1 THEN');
10034   ldbg_s('In eval contact level number of matches found exceeded threshold');
10035   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10036   l('          FND_MSG_PUB.ADD;');
10037   l('          RAISE FND_API.G_EXC_ERROR;');
10038   l('        ELSE');
10039   l('          push_eval;');
10040   l('          RETURN;');
10041   l('        END IF;');
10042   l('      END IF;');
10043   l('      IF p_ins_details = ''Y'' THEN');
10044   l('        h_ct_id(detcnt) := l_org_contact_id;');
10045   l('        h_ct_party_id(detcnt) := l_ct_party_id;');
10046   l('        h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
10047   l('        detcnt := detcnt +1;');
10048   l('      END IF;');
10049   ds(fnd_log.level_statement);
10050   dc(fnd_log.level_statement,'Contact Level Matches');
10051   dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
10052   dc(fnd_log.level_statement,'l_ct_party_id','l_ct_party_id');
10053   dc(fnd_log.level_statement,'l_score','l_score');
10054   de;
10055   l('    END LOOP;');
10056   l('    CLOSE l_contact_cur;');
10057   l('    ROLLBACK to eval_start;');
10058   -- l('    IF p_ins_details = ''Y'' THEN');
10059   -- l('      FORALL I in 1..h_ct_id.COUNT ');
10060   -- l('        INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
10061   -- l('          l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
10062   -- l('    END IF;');
10063   l('  END;');
10064   l('');
10065   l('  /**  Private procedure to acquire and score at contact point level  ***/');
10066   l('  PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10067   l('    l_party_id_idx NUMBER:=1;');
10068   l('    l_ctx_id NUMBER;');
10069   -- l('    h_cpt_id HZ_PARTY_SEARCH.IDList;');
10070   -- l('    h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
10071   -- l('    h_cpt_score HZ_PARTY_SEARCH.IDList;');
10072   -- l('    detcnt NUMBER := 1;');
10073   l('  BEGIN');
10074   l('    SAVEPOINT eval_start;');
10075   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10076   l('      l_ctx_id := l_search_ctx_id;');
10077   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10078   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10079   l('             l_search_ctx_id,H_PARTY_ID(I));');
10080   l('      H_PARTY_ID.DELETE;');
10081   l('      H_PARTY_ID_LIST.DELETE;');
10082   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10083   l('      l_ctx_id := l_search_ctx_id;');
10084   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10085   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10086   l('             l_search_ctx_id,H_PARTY_ID(I));');
10087   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10088   l('    ELSE');
10089   l('      l_ctx_id := NULL;');
10090   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10091   l('    END IF;');
10092   l('    open_contact_pt_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, l_contact_pt_cur);');
10093   l('    LOOP ');
10094   l('      FETCH l_contact_pt_cur INTO');
10095   l('         l_contact_pt_id, l_cpt_party_id,  l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
10096   l('      EXIT WHEN l_contact_pt_cur%NOTFOUND;');
10097   l('      IF l_use_contact_cpt_info OR l_ps_contact_id IS NOT NULL THEN');
10098   l('        l_index := map_id(l_cpt_party_id);');
10099   l('        l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
10100 
10101   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
10102   l('          H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);');
10103   l('        ELSE');
10104   l('          IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
10105   l('            H_SCORES(l_index).TOTAL_SCORE := ');
10106   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
10107   l('            H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
10108   l('          END IF;');
10109   l('        END IF;');
10110   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN');
10111   l('          H_PARTY_ID_LIST(l_index) := 1;');
10112   l('          H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;');
10113   l('          l_party_id_idx:= l_party_id_idx+1;');
10114   l('        END IF;');
10115   l('        IF l_party_id_idx>l_max_thresh THEN');
10116   l('        CLOSE l_contact_pt_cur;'); --Bug No: 3872745
10117   l('          IF p_index>1 THEN');
10118   ldbg_s('In eval contact point level number of matches found exceeded threshold');
10119   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10120   l('            FND_MSG_PUB.ADD;');
10121   l('            RAISE FND_API.G_EXC_ERROR;');
10122   l('          ELSE');
10123   l('            push_eval;');
10124   l('            RETURN;');
10125   l('          END IF;');
10126   l('        END IF;');
10127   l('        IF p_ins_details = ''Y'' THEN');
10128   l('          h_cpt_id(detcnt) := l_contact_pt_id;');
10129   l('          h_cpt_party_id(detcnt) := l_cpt_party_id;');
10130   l('          h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
10131   l('          detcnt := detcnt +1;');
10132   l('        END IF;');
10133   ds(fnd_log.level_statement);
10134   dc(fnd_log.level_statement,'Contact pt Level Matches');
10135   dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
10136   dc(fnd_log.level_statement,'l_cpt_party_id','l_cpt_party_id');
10137   dc(fnd_log.level_statement,'l_score','l_score');
10138   de;
10139   l('      END IF;');
10140   l('    END LOOP;');
10141   l('    CLOSE l_contact_pt_cur;');
10142   l('    ROLLBACK to eval_start;');
10143   -- l('    IF p_ins_details = ''Y'' THEN');
10144   -- l('      FORALL I in 1..h_cpt_id.COUNT ');
10145   -- l('        INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
10146   -- l('          l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
10147   -- l('    END IF;');
10148   l('  END;');
10149   l('');
10150   l('  /**  Private procedure to call the eval procedure at each entity in the correct order ***/');
10151   l('  PROCEDURE do_eval (p_index NUMBER) IS');
10152   l('    l_ctx_id NUMBER;');
10153   l('    l_threshold NUMBER;'); --Bug No: 4407425
10154   l('    other_criteria_exists BOOLEAN; '); --Bug No: 4407425
10155   l('  BEGIN');
10156   --Start of Bug No: 4407425
10157   l('    IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
10158   l('     l_threshold := '|| l_match_threshold ||';  ');
10159   l('     other_criteria_exists := TRUE ;');
10160   l('     IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
10161   l('      other_criteria_exists := FALSE; ');
10162   l('     END IF ; ');
10163   l('    IF( (l_match_str = '' AND '' AND other_criteria_exists) OR ( call_max_score(p_index) < l_threshold) )THEN');
10164   l('	     RETURN;	');
10165   l('	  ELSE');
10166   ldbg_s('In do eval number of matches found exceeded threshold');
10167   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10168   l('      FND_MSG_PUB.ADD;');
10169   l('      RAISE FND_API.G_EXC_ERROR;');
10170   l('     END IF; ');
10171   l('    END IF;');
10172   --End of Bug No: 4407425
10173   /*l('    IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
10174   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10175   l('      FND_MSG_PUB.ADD;');
10176   l('      RAISE FND_API.G_EXC_ERROR;');
10177   l('    END IF;');
10178   */
10179   l('    IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
10180   l('      eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
10181   l('    ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
10182   l('      eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10183   l('    ELSIF call_order(p_index) = ''CONTACT'' AND l_contact_contains_str IS NOT NULL THEN');
10184   l('      eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10185   l('    ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
10186   l('      eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
10187   l('    END IF;');
10188   l('  END;');
10189   l('  /************ End of find_parties private procedures **********/ ');
10190   l('');
10191   l('  BEGIN');
10192   l('');
10193 
10194 
10195   d(fnd_log.level_procedure,'find_parties(+)');
10196   ds(fnd_log.level_statement);
10197   dc(fnd_log.level_statement,'Input Parameters:');
10198   dc(fnd_log.level_statement,'p_match_type','p_match_type');
10199   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
10200   dc(fnd_log.level_statement,'p_dup_set_id','p_dup_set_id');
10201   dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
10202   dc(fnd_log.level_statement,'p_dup_party_id','p_dup_party_id');
10203   de;
10204 
10205   l('    -- ************************************');
10206   l('    -- STEP 1. Initialization and error checks');
10207   l('');
10208 
10209   l('    l_match_str := ''' || l_match_str || ''';');
10210   l('    IF p_match_type = ''AND'' THEN');
10211   l('      l_match_str := '' AND '';');
10212   l('    ELSIF p_match_type = ''OR'' THEN');
10213   l('      l_match_str := '' OR '';');
10214   l('    END IF;');
10215   l('    SAVEPOINT find_parties;');
10216   l('    l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
10217   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
10218   l('');
10219   IF l_purpose = 'D' THEN
10220   l('');
10221     l('    IF l_entered_max_score < '||l_match_threshold||' THEN');
10222     l('      x_num_matches:=0;');
10223     l('      x_search_ctx_id:=0;');
10224     l('      RETURN;');
10225     l('    END IF;');
10226   l('');
10227   END IF;
10228   l('');
10229   l('    --Fix for bug 4417124 ');
10230   l('');
10231   l('    SELECT use_contact_addr_flag, use_contact_cpt_flag ');
10232   l('    INTO l_use_contact_addr_flag, l_use_contact_cpt_flag ');
10233   l('    FROM hz_match_rules_b ');
10234   l('    WHERE match_rule_id = '||p_rule_id||'; ');
10235   l('');
10239   l('');
10236   l('    IF p_dup_batch_id IS NOT NULL AND NVL(l_use_contact_addr_flag, ''Y'') = ''N'' THEN');
10237   l('      l_use_contact_addr_info := FALSE; ');
10238   l('    END IF; ');
10240   l('    IF p_dup_batch_id IS NOT NULL AND NVL(l_use_contact_cpt_flag, ''Y'') = ''N'' THEN');
10241   l('      l_use_contact_cpt_info := FALSE; ');
10242   l('    END IF; ');
10243   l('');
10244   l('   --End fix for bug 4417124');
10245   l('');
10246   l('    l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
10247   l('    IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
10248   l('      g_score_until_thresh := true;');
10249   l('    ELSE');
10250   l('      g_score_until_thresh := false;');
10251   l('    END IF;');
10252 
10253   l('    l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
10254   l('    l_contact_contains_str := check_contacts_bulk (p_contact_list);');
10255   l('    l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
10256   /*
10257   l('    l_denorm_max_score:=0;');
10258   l('    l_non_denorm_max_score:=0;');
10259   l('    IF l_ps_denorm_str IS NOT NULL THEN');
10260   l('      l_denorm_max_score := l_denorm_max_score+l_ps_max_score;');
10261   l('      l_denorm_str := l_ps_denorm_str;');
10262   l('    ELSE');
10263   l('      l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;');
10264   l('    END IF;');
10265 
10266   l('    IF l_ct_denorm_str IS NOT NULL THEN');
10267   l('      l_denorm_max_score := l_denorm_max_score+l_contact_max_score;');
10268   l('      IF l_denorm_str IS NOT NULL THEN');
10269   l('        l_denorm_str := l_denorm_str || '' OR '' ||l_ct_denorm_str;');
10270   l('      ELSE');
10271   l('        l_denorm_str := l_ct_denorm_str;');
10272   l('      END IF;');
10273   l('    ELSE');
10274   l('      l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;');
10275   l('    END IF;');
10276 
10277   l('    IF l_cpt_denorm_str IS NOT NULL THEN');
10278   l('      l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;');
10279   l('      IF l_denorm_str IS NOT NULL THEN');
10280   l('        l_denorm_str := l_denorm_str || '' OR '' ||l_cpt_denorm_str;');
10281   l('      ELSE');
10282   l('        l_denorm_str := l_cpt_denorm_str;');
10283   l('      END IF;');
10284   l('    ELSE');
10285   l('      l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;');
10286   l('    END IF;');
10287   */
10288   l('    l_party_contains_str := check_parties_bulk (p_party_search_rec) ;');
10289   l('    init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
10290   l('');
10291   l('    -- Setup Search Context ID');
10292   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
10293   l('    x_search_ctx_id := l_search_ctx_id;');
10294   l('');
10295 
10296   l('    IF l_party_contains_str IS NULL THEN');
10297   l('      defpt := 1;');
10298   l('    END IF;');
10299   l('    IF l_party_site_contains_str IS NULL THEN');
10300   l('      defps := 1;');
10301   l('    END IF;');
10302   l('    IF l_contact_contains_str IS NULL THEN');
10303   l('      defct := 1;');
10304   l('    END IF;');
10305   l('    IF l_contact_pt_contains_str IS NULL THEN');
10306   l('      defcpt := 1;');
10307   l('    END IF;');
10308   l('');
10309 
10310   ds(fnd_log.level_statement);
10311   dc(fnd_log.level_statement,'l_match_str','l_match_str');
10312   dc(fnd_log.level_statement,'l_party_contains_str','l_party_contains_str');
10313   dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
10314   dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
10315   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
10316   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
10317   de;
10318 
10319   IF l_max_score=1 THEN
10320     l('    FOR I in 1..3 LOOP');
10321     l('      IF (call_order(I) = ''PARTY'' AND l_party_contains_str IS NULL)');
10322     l('         OR (call_order(I) = ''PARTY_SITE'' AND l_party_site_contains_str IS NULL)');
10323     l('         OR (call_order(I) = ''CONTACT'' AND l_contact_contains_str IS NULL)');
10324     l('         OR (call_order(I) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NULL) THEN');
10325     l('        IF call_type(I)=''OR'' THEN');
10326     l('          call_type(I+1):=''OR'';');
10327     l('        END IF;');
10328     l('      END IF;');
10329     l('    END LOOP;');
10330   END IF;
10331 
10332   /**** Call all 4 evaluation procedures ***********/
10333   l('    FOR I in 1..5 LOOP');
10334   l('      do_eval(I);');
10335   l('    END LOOP;');
10336   l('ROLLBACK to find_parties;');
10337   IF l_purpose = 'S' THEN
10338     d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
10339   ELSE
10340     d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||l_match_threshold);
10341   END IF;
10342 
10343   l('    x_num_matches := 0;');
10344   l('    l_num_eval := 0;');
10345   l('    IF l_match_str = '' OR '' THEN');
10346   l('      l_party_id := H_SCORES.FIRST;');
10347   l('    ELSE');
10348   l('      l_party_id := H_PARTY_ID_LIST.FIRST;');
10349   l('    END IF;');
10350 
10351   l('    WHILE l_party_id IS NOT NULL LOOP');
10352   l('      l_num_eval:= l_num_eval+1;');
10353   ds(fnd_log.level_statement);
10354   dc(fnd_log.level_statement,'Match Party ID','H_SCORES(l_party_id).PARTY_ID');
10355   IF l_purpose = 'S' THEN
10356     dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
10357   ELSE
10358     dc(fnd_log.level_statement,'Score','H_SCORES(l_party_id).TOTAL_SCORE');
10359   END IF;
10360   de;
10361   IF l_purpose  = ('S') THEN
10365     l('            x_num_matches := x_num_matches+1;');
10362     l('      IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
10363     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
10364     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100));');
10366 
10367     ELSIF l_purpose  = ('W') THEN
10368 
10369 
10370     l('      IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
10371     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
10372     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/'||l_max_score||')*100));');
10373     l('            x_num_matches := x_num_matches+1;');
10374 
10375 
10376   ELSE
10377     l('      IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_match_threshold||' THEN');
10378     l('          IF p_dup_set_id IS NULL THEN');
10379     l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
10380     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);');
10381     l('             x_num_matches := x_num_matches+1;');
10382     l('          ELSE');
10383     l('            BEGIN');
10384     l('              SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES'); --Bug No: 4244529
10385     l('              WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID');
10386     l('              AND DUP_SET_BATCH_ID = p_dup_batch_id '); --Bug No: 4244529
10387     l('              AND ROWNUM=1;');
10388     l('            EXCEPTION ');
10389     l('              WHEN NO_DATA_FOUND THEN');
10390     l('                IF H_SCORES(l_party_id).TOTAL_SCORE>='||l_auto_merge_score||' THEN');
10391     l('                  l_merge_flag := ''Y'';');
10392     l('                ELSE');
10393     l('                  l_merge_flag := ''N'';');
10394     l('                END IF;');
10395     l('                INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
10396     l('                    MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
10397     l('                    LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
10398     l('                VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,');
10399     l('                    H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,');
10400     l('                    hz_utility_pub.created_by,hz_utility_pub.creation_date,');
10401     l('                    hz_utility_pub.last_update_login,');
10402     l('                    hz_utility_pub.last_update_date,');
10403     l('                    hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
10404     l('                x_num_matches := x_num_matches+1;');
10405     l('            END;');
10406     l('          END IF;');
10407   END IF;
10408   l('      END IF;');
10409   l('      IF l_match_str = '' OR '' THEN');
10410   l('        l_party_id:=H_SCORES.NEXT(l_party_id);');
10411   l('      ELSE');
10412   l('        l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
10413   l('      END IF;');
10414   l('    END LOOP;');
10415   l('');
10416     l('----------INSERT INTO HZ_MATCHED_PARTY_SITES -----');
10417     l('    IF p_ins_details = ''Y'' THEN');
10418     l('      FORALL I in 1..h_ps_id.COUNT ');
10419     l('        INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
10420     l('          l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
10421     l('    END IF;');
10422     l('----------INSERT INTO HZ_MATCHED_CONTACTS-----');
10423     l('    IF p_ins_details = ''Y'' THEN');
10424     l('      FORALL I in 1..h_ct_id.COUNT ');
10425     l('        INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
10426     l('          l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
10427     l('    END IF;');
10428     l('----------INSERT INTO HZ_MATCHED_CPTS-----');
10429     l('    IF p_ins_details = ''Y'' THEN');
10430     l('      FORALL I in 1..h_cpt_id.COUNT ');
10431     l('        INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
10432     l('          l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
10433     l('    END IF;');
10434   l('');
10435   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
10436   d(fnd_log.level_procedure,'find_parties(-)');
10437 
10438 
10439   l('EXCEPTION');
10440   l('  WHEN FND_API.G_EXC_ERROR THEN');
10441   l('    ROLLBACK to find_parties;');
10442   l('    RAISE FND_API.G_EXC_ERROR;');
10443   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
10444   l('    ROLLBACK to find_parties;');
10445   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
10446   l('  WHEN OTHERS THEN');
10447   l('    ROLLBACK to find_parties;');
10448   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
10449   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_parties'');');
10450   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
10451   l('    FND_MSG_PUB.ADD;');
10452   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
10453   l('END find_parties;');
10454   l('');
10455 
10456   l('-------------------------------------------------------------------------------------');
10457   l('--------------------  BULK MATCH RULE ::: find_persons ------------------------------');
10458   l('-------------------------------------------------------------------------------------');
10459 
10460   l('PROCEDURE find_persons (');
10461   l('      p_rule_id               IN      NUMBER,');
10462   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
10463   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
10464   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
10468   l('      p_search_merged         IN      VARCHAR2,');
10465   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
10466   l('      p_restrict_sql          IN      VARCHAR2,');
10467   l('      p_match_type            IN      VARCHAR2,');
10469   l('      p_ins_details           IN      VARCHAR2,');
10470   l('      x_search_ctx_id         OUT     NUMBER,');
10471   l('      x_num_matches           OUT     NUMBER');
10472   l(') IS');
10473   l('');
10474   IF l_purpose <> 'D' THEN
10475   l('  -- Strings to hold the generated Intermedia query strings');
10476   l('  l_party_contains_str VARCHAR2(32000); ');
10477   l('  l_party_site_contains_str VARCHAR2(32000);');
10478   l('  l_contact_contains_str VARCHAR2(32000);');
10479   l('  l_contact_pt_contains_str VARCHAR2(32000);');
10480   l('  l_denorm_str VARCHAR2(32000);');
10481   l('  l_ps_denorm_str VARCHAR2(32000);');
10482   l('  l_ct_denorm_str VARCHAR2(32000);');
10483   l('  l_cpt_denorm_str VARCHAR2(32000);');
10484 
10485   l('');
10486   l('  -- Other local variables');
10487   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
10488   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
10489   l('  -- For Score calculation');
10490   l('  l_max_score NUMBER;');
10491   l('  l_match_idx NUMBER;');
10492   l('  l_entered_max_score NUMBER;');
10493   l('  FIRST BOOLEAN;');
10494   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
10495   l('');
10496   FOR TX IN (
10497       SELECT distinct f.staged_attribute_column
10498       FROM hz_trans_functions_vl f, hz_secondary_trans st,
10499            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
10500       WHERE sa.match_rule_id = p_rule_id
10501       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
10502       AND st.function_id = f.function_id
10503       AND a.attribute_id = sa.attribute_id) LOOP
10504     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
10505   END LOOP;
10506   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
10507   l('  H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
10508   l('  H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;');
10509   l('');
10510   l('  l_score NUMBER;');
10511   l('  l_idx NUMBER;');
10512   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
10513   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
10514   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
10515   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
10516   l('  l_party_id NUMBER;');
10517   l('  l_ps_party_id NUMBER;');
10518   l('  l_ct_party_id NUMBER;');
10519   l('  l_cpt_party_id NUMBER;');
10520   l('  l_cpt_ps_id NUMBER;');
10521   l('  l_cpt_contact_id NUMBER;');
10522   l('  l_party_site_id NUMBER;');
10523   l('  l_org_contact_id NUMBER;');
10524   l('  l_contact_pt_id NUMBER;');
10525   l('  l_ps_contact_id NUMBER;');
10526   l('  l_party_max_score NUMBER;');
10527   l('  l_ps_max_score NUMBER;');
10528   l('  l_contact_max_score NUMBER;');
10529   l('  l_cpt_max_score NUMBER;');
10530   l('  l_denorm_max_score NUMBER;');
10531   l('  l_non_denorm_max_score NUMBER;');
10532   l('');
10533   l('  defpt NUMBER :=0;');
10534   l('  defps NUMBER :=0;');
10535   l('  defct NUMBER :=0;');
10536   l('  defcpt NUMBER :=0;');
10537   l('  l_index NUMBER;');
10538   l('  l_max_thresh NUMBER;');
10539   l('  l_tmp NUMBER;');
10540   l('  l_merge_flag VARCHAR2(1);');
10541   l('  l_num_eval NUMBER:=0;');
10542   l('');
10543   l('    h_ps_id HZ_PARTY_SEARCH.IDList;');
10544   l('    h_ps_party_id HZ_PARTY_SEARCH.IDList;');
10545   l('    h_ps_score HZ_PARTY_SEARCH.IDList;');
10546   l('    h_ct_id HZ_PARTY_SEARCH.IDList;');
10547   l('    h_ct_party_id HZ_PARTY_SEARCH.IDList;');
10548   l('    h_ct_score HZ_PARTY_SEARCH.IDList;');
10549   l('    h_cpt_id HZ_PARTY_SEARCH.IDList;');
10550   l('    h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
10551   l('    h_cpt_score HZ_PARTY_SEARCH.IDList;');
10552   l('    detcnt NUMBER := 1;');
10553   l('    l_person_id NUMBER;');
10554 
10555   l('  ');
10556   l('  /********************* Find Parties private procedures *******/');
10557   FOR TX IN (
10558     SELECT a.attribute_name,
10559                f.PROCEDURE_NAME,
10560                f.STAGED_ATTRIBUTE_COLUMN
10561         FROM HZ_TRANS_FUNCTIONS_VL f,
10562             HZ_TRANS_ATTRIBUTES_VL a
10563         WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
10564         AND a.entity_name = 'PARTY'
10565         AND a.attribute_name='PARTY_TYPE'
10566         AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
10567         AND nvl(f.active_flag,'Y')='Y'
10568         AND ROWNUM=1
10569   ) LOOP
10570     l('  PROCEDURE set_person_party_type IS');
10571     l('  BEGIN');
10572     l('    g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||':= ');
10573     l('        HZ_TRANS_PKG.EXACT(');
10574     l('             ''PERSON''');
10575     l('             ,null,''PARTY_TYPE''');
10576     l('             ,''PARTY'');');
10577     l('  END;');
10578     l('    ');
10579     l('  PROCEDURE unset_person_party_type IS');
10580     l('  BEGIN');
10581     l('    g_party_stage_rec.'||TX.STAGED_ATTRIBUTE_COLUMN||' := '''';');
10582     l('  END;');
10583   END LOOP;
10584   l('  ');
10585   l('  FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER) ');
10586   l('  RETURN NUMBER IS');
10587   l('    l_party_type VARCHAR2(255);');
10588   l('    l_person_id NUMBER(15);');
10589   l('  BEGIN');
10590   l('    SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;');
10591   l('    IF l_party_type = ''PERSON'' THEN');
10592   l('      RETURN p_party_id;');
10593   l('    ELSIF p_contact_id IS NULL THEN');
10594   l('      RETURN NULL;');
10595   l('    ELSE');
10596   l('      BEGIN ');
10597   l('        SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p');
10601   l('        AND p.party_id = r.subject_id ');
10598   l('        WHERE oc.org_contact_id = p_contact_id');
10599   l('        AND r.relationship_id = oc.party_relationship_id ');
10600   l('        AND r.object_id = p_party_id');
10602   l('        AND p.party_type = ''PERSON''');
10603   l('        AND ROWNUM=1;');
10604   l('        ');
10605   l('        RETURN l_person_id;');
10606   l('      EXCEPTION');
10607   l('        WHEN NO_DATA_FOUND THEN');
10608   l('          RETURN NULL;');
10609   l('      END;      ');
10610   l('    END IF;');
10611   l('  END;  ');
10612   l('');
10613   l('  PROCEDURE push_eval IS');
10614   l('  BEGIN');
10615   l('    H_PARTY_ID.DELETE;');
10616   l('    H_PARTY_ID_LIST.DELETE;');
10617   l('    H_SCORES.DELETE;        ');
10618   l('    g_mappings.DELETE;');
10619   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(0);');
10620   l('    call_order(5) := call_order(1);');
10621   l('    call_type(5) := ''AND'';');
10622   l('    call_max_score(5) := call_max_score(1);');
10623   l('    call_type(2) := ''OR'';');
10624   l('  END;');
10625   l('');
10626   l('  /**  Private procedure to acquire and score at party level  ***/');
10627   l('  PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS');
10628   l('    l_party_id_idx NUMBER:=1;');
10629   l('    l_ctx_id NUMBER;');
10630   l('  BEGIN');
10631   l('    SAVEPOINT eval_start;');
10632   l('    set_person_party_type;');
10633   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10634   l('      l_ctx_id := l_search_ctx_id;');
10635   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10636   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10637   l('             l_search_ctx_id,H_PARTY_ID(I));');
10638   l('      H_PARTY_ID.DELETE;');
10639   l('      H_PARTY_ID_LIST.DELETE;');
10640   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10641   l('      l_ctx_id := l_search_ctx_id;');
10642   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10643   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10644   l('             l_search_ctx_id,H_PARTY_ID(I));');
10645   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10646   l('    ELSE');
10647   l('      l_ctx_id := NULL;');
10648   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10649   l('    END IF;');
10650   l('    open_party_cursor(null, p_restrict_sql, p_party_contains_str,l_ctx_id, l_match_str,null,l_party_cur);');
10651   l('    LOOP ');
10652   l('      FETCH l_party_cur INTO');
10653   l('         l_party_id '||l_p_into_list||';');
10654   l('      EXIT WHEN l_party_cur%NOTFOUND;');
10655   l('      l_index := map_id(l_party_id);');
10656   l('      l_score := GET_PARTY_SCORE('||l_p_param_list||');');
10657 
10658   l('      IF NOT H_SCORES.EXISTS(l_index) THEN');
10659   l('        H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);');
10660   l('      ELSE');
10661   l('        H_SCORES(l_index).TOTAL_SCORE := ');
10662   l('                H_SCORES(l_index).TOTAL_SCORE+l_score;');
10663   l('        H_SCORES(l_index).PARTY_SCORE := l_score;');
10664   l('      END IF;');
10665   l('      IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
10666   l('        H_PARTY_ID_LIST(l_index) := 1;');
10667   l('        H_PARTY_ID(l_party_id_idx) := l_party_id;');
10668   l('        l_party_id_idx:= l_party_id_idx+1;');
10669   l('      END IF;');
10670   l('      IF l_party_id_idx>l_max_thresh THEN');
10671   l('        CLOSE l_party_cur;'); --Bug No: 3872745
10672   l('        IF p_index>1 THEN');
10673   ldbg_s('In eval party level number of matches found exceeded threshold');
10674   l('          FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10675   l('          FND_MSG_PUB.ADD;');
10676   l('          RAISE FND_API.G_EXC_ERROR;');
10677   l('        ELSE');
10678   l('          push_eval;');
10679   l('          RETURN;');
10680   l('        END IF;');
10681   l('      END IF;');
10682   ds(fnd_log.level_statement);
10683   dc(fnd_log.level_statement,'Party Level Matches');
10684   dc(fnd_log.level_statement,'l_party_id','l_party_id');
10685   dc(fnd_log.level_statement,'l_score','l_score');
10686   de;
10687   l('    END LOOP;');
10688   l('    CLOSE l_party_cur;');
10689   l('    ROLLBACK to eval_start;');
10690   l('  END;');
10691   l('  PROCEDURE open_person_contact_cursor(');
10692   l('            p_contains_str  VARCHAR2, ');
10693   l('            p_search_ctx_id  NUMBER, ');
10694   l('            x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS');
10695   l('  BEGIN');
10696   l('    OPEN x_cursor FOR ');
10697   l('      SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID'|| l_c_select_list);
10698   l('      FROM HZ_STAGED_CONTACTS stage');
10699   l('      WHERE contains( concat_col, p_contains_str)>0');
10700   l('      AND ORG_CONTACT_ID in (');
10701   l('            SELECT  /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/ ');
10702   l('            org_contact_id');
10703   l('            from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc');
10704   l('            where d.party_id = r.subject_id');
10705   l('            and oc.party_relationship_id = r.relationship_id');
10706   l('            and d.search_context_id = p_search_ctx_id);   ');
10707 --bug 4959719 start
10708   l('  exception');
10709   l('    when others then');
10710   l('      if (instrb(SQLERRM,''DRG-51030'')>0) then ');
10711   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_WILDCARD_ERR'');');
10712   l('        FND_MSG_PUB.ADD;');
10713   l('        RAISE FND_API.G_EXC_ERROR;');
10714    --Start Bug No: 3032742.
10715   l('      elsif (instrb(SQLERRM,''DRG-50943'')>0) then ');
10716   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_SEARCH_ERROR'');');
10717   l('        FND_MSG_PUB.ADD;');
10718   l('        RAISE FND_API.G_EXC_ERROR;');
10722   l('      end if;');
10719   --End Bug No : 3032742.
10720   l('      else ');
10721   l('        RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
10723 --bug 4959719 end
10724   l('  END;');
10725 
10726   l('');
10727   l('  /**  Private procedure to acquire and score at party site level  ***/');
10728   l('  PROCEDURE eval_party_site_level(p_party_site_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10729   l('    l_party_id_idx NUMBER:=1;');
10730   l('    l_ctx_id NUMBER;');
10731  -- l('    h_ps_id HZ_PARTY_SEARCH.IDList;');
10732  -- l('    h_ps_party_id HZ_PARTY_SEARCH.IDList;');
10733  -- l('    h_ps_score HZ_PARTY_SEARCH.IDList;');
10734  -- l('    detcnt NUMBER := 1;');
10735   l('    l_person_id NUMBER;');
10736   l('  BEGIN');
10737   l('    SAVEPOINT eval_start;');
10738   l('    unset_person_party_type;');
10739   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10740   l('      l_ctx_id := l_search_ctx_id;');
10741   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10742   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10743   l('             l_search_ctx_id,H_PARTY_ID(I));');
10744   l('      INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10745   l('      SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10746   l('                               HZ_RELATIONSHIPS r');
10747   l('      WHERE oc.party_relationship_id = r.relationship_id');
10748   l('      AND r.object_id = d.party_id');
10749   l('      AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10750   l('      H_PARTY_ID.DELETE;');
10751   l('      H_PARTY_ID_LIST.DELETE;');
10752   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10753   l('      l_ctx_id := l_search_ctx_id;');
10754   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10755   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10756   l('             l_search_ctx_id,H_PARTY_ID(I));');
10757   l('      INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10758   l('      SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10759   l('                               HZ_RELATIONSHIPS r');
10760   l('      WHERE oc.party_relationship_id = r.relationship_id');
10761   l('      AND r.object_id = d.party_id');
10762   l('      AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10763   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10764   l('    ELSE');
10765   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10766   l('      l_ctx_id := NULL;');
10767   l('    END IF;');
10768   l('    open_party_site_cursor(null,NULL, p_restrict_sql, p_party_site_contains_str,l_ctx_id, l_party_site_cur);');
10769   l('    LOOP ');
10770   l('      FETCH l_party_site_cur INTO');
10771   l('         l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
10772   l('      EXIT WHEN l_party_site_cur%NOTFOUND;');
10773   l('      l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);');
10774   l('      IF l_person_id IS NOT NULL THEN');
10775   l('        l_index := map_id(l_person_id);');
10776   l('        l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
10777 
10778   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
10779   l('          IF l_ctx_id IS NULL THEN');
10780   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);');
10781   l('          END IF;');
10782   l('        ELSE');
10783   l('          IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN');
10784   l('            H_SCORES(l_index).TOTAL_SCORE := ');
10785   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;');
10786   l('            H_SCORES(l_index).PARTY_SITE_SCORE := l_score;');
10787   l('          END IF;');
10788   l('        END IF;');
10789   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
10790   l('          H_PARTY_ID_LIST(l_index) := 1;');
10791   l('          H_PARTY_ID(l_party_id_idx) := l_ps_party_id;');
10792   l('          l_party_id_idx:= l_party_id_idx+1;');
10793   l('        END IF;');
10794   l('        IF l_party_id_idx>l_max_thresh THEN');
10795   l('        CLOSE l_party_site_cur;'); --Bug No: 3872745
10796   l('          IF p_index>1 THEN');
10797   ldbg_s('In eval party site level number of matches found exceeded threshold');
10798   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10799   l('            FND_MSG_PUB.ADD;');
10800   l('            RAISE FND_API.G_EXC_ERROR;');
10801   l('          ELSE');
10802   l('            push_eval;');
10803   l('            RETURN;');
10804   l('          END IF;');
10805   l('        END IF;');
10806   l('        IF p_ins_details = ''Y'' THEN');
10807   l('          h_ps_id(detcnt) := l_party_site_id;');
10808   l('          h_ps_party_id(detcnt) := l_person_id;');
10809   l('          h_ps_score(detcnt) := round((l_score/p_emax_score)*100);');
10810   l('          detcnt := detcnt +1;');
10811   l('        END IF;');
10812   ds(fnd_log.level_statement);
10813   dc(fnd_log.level_statement,'Party Site Level Matches');
10814   dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
10815   dc(fnd_log.level_statement,'l_ps_party_id','l_person_id');
10816   dc(fnd_log.level_statement,'l_score','l_score');
10817   de;
10818   l('      END IF;');
10819   l('    END LOOP;');
10820   l('    CLOSE l_party_site_cur;');
10821   l('    ROLLBACK to eval_start;');
10822   --l('    IF p_ins_details = ''Y'' THEN');
10823   --l('      FORALL I in 1..h_ps_id.COUNT ');
10824   --l('        INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
10825   --l('          l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
10826   --l('    END IF;');
10827   l('  END;');
10828   l('');
10832   l('    l_ctx_id NUMBER;');
10829   l('  /**  Private procedure to acquire and score at party site level  ***/');
10830   l('  PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10831   l('    l_party_id_idx NUMBER:=1;');
10833   -- l('    h_ct_id HZ_PARTY_SEARCH.IDList;');
10834   -- l('    h_ct_party_id HZ_PARTY_SEARCH.IDList;');
10835   -- l('    h_ct_score HZ_PARTY_SEARCH.IDList;');
10836   -- l('    detcnt NUMBER := 1;');
10837   -- l('    l_person_id NUMBER;');
10838   l('  BEGIN');
10839   l('    SAVEPOINT eval_start;');
10840   l('    l_ctx_id := l_search_ctx_id;');
10841   l('    unset_person_party_type;');
10842   l('    FORALL I in 1..H_PARTY_ID.COUNT ');
10843   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10844   l('             l_search_ctx_id,H_PARTY_ID(I));');
10845   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10846   l('    open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);');
10847   l('    LOOP ');
10848   l('      FETCH l_contact_cur INTO');
10849   l('         l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
10850   l('      EXIT WHEN l_contact_cur%NOTFOUND;');
10851   l('      l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);');
10852   l('      l_index := map_id(l_person_id);');
10853   l('      IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) THEN');
10854   l('        l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
10855   l('        IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN');
10856   l('          H_SCORES(l_index).TOTAL_SCORE := ');
10857   l('                H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;');
10858   l('          H_SCORES(l_index).CONTACT_SCORE := l_score;');
10859   l('        END IF;');
10860   l('      END IF;');
10861   l('      IF p_ins_details = ''Y'' THEN');
10862   l('        h_ct_id(detcnt) := l_org_contact_id;');
10863   l('        h_ct_party_id(detcnt) := l_person_id;');
10864   l('        h_ct_score(detcnt) := round((l_score/p_emax_score)*100);');
10865   l('        detcnt := detcnt +1;');
10866   l('      END IF;');
10867   ds(fnd_log.level_statement);
10868   dc(fnd_log.level_statement,'Contact Level Matches');
10869   dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
10870   dc(fnd_log.level_statement,'l_ct_party_id','l_person_id');
10871   dc(fnd_log.level_statement,'l_score','l_score');
10872   de;
10873   l('    END LOOP;');
10874   l('    CLOSE l_contact_cur;');
10875   l('    ROLLBACK to eval_start;');
10876   -- l('    IF p_ins_details = ''Y'' THEN');
10877   -- l('      FORALL I in 1..h_ct_id.COUNT ');
10878   -- l('        INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
10879   -- l('          l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
10880   -- l('    END IF;');
10881   l('  END;');
10882   l('');
10883   l('  /**  Private procedure to acquire and score at contact point level  ***/');
10884   l('  PROCEDURE eval_cpt_level(p_contact_pt_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER, p_ins_details VARCHAR2,p_emax_score NUMBER) IS');
10885   l('    l_party_id_idx NUMBER:=1;');
10886   l('    l_ctx_id NUMBER;');
10887 --  l('    h_cpt_id HZ_PARTY_SEARCH.IDList;');
10888 --  l('    h_cpt_party_id HZ_PARTY_SEARCH.IDList;');
10889 --  l('    h_cpt_score HZ_PARTY_SEARCH.IDList;');
10890 --  l('    detcnt NUMBER := 1;');
10891 --  l('    l_person_id NUMBER;');
10892   l('  BEGIN');
10893   l('    SAVEPOINT eval_start;');
10894   l('    unset_person_party_type;');
10895   l('    IF l_match_str = '' AND '' AND p_call_type = ''AND'' THEN');
10896   l('      l_ctx_id := l_search_ctx_id;');
10897   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10898   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10899   l('             l_search_ctx_id,H_PARTY_ID(I));');
10900   l('      INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10901   l('      SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10902   l('                               HZ_RELATIONSHIPS r');
10903   l('      WHERE oc.party_relationship_id = r.relationship_id');
10904   l('      AND r.object_id = d.party_id');
10905   l('      AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10906   l('      H_PARTY_ID.DELETE;');
10907   l('      H_PARTY_ID_LIST.DELETE;');
10908   l('    ELSIF l_match_str = '' OR '' AND p_call_type = ''AND'' THEN');
10909   l('      l_ctx_id := l_search_ctx_id;');
10910   l('      FORALL I in 1..H_PARTY_ID.COUNT ');
10911   l('         INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (');
10912   l('             l_search_ctx_id,H_PARTY_ID(I));');
10913   l('      INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID)');
10914   l('      SELECT distinct l_search_ctx_id,r.subject_id from HZ_DQM_PARTIES_GT d, HZ_ORG_CONTACTS oc, ');
10915   l('                               HZ_RELATIONSHIPS r');
10916   l('      WHERE oc.party_relationship_id = r.relationship_id');
10917   l('      AND r.object_id = d.party_id');
10918   l('      AND d.SEARCH_CONTEXT_ID=l_search_ctx_id;');
10919   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10920   l('    ELSE');
10921   l('      l_ctx_id := NULL;');
10922   l('      l_party_id_idx := H_PARTY_ID.COUNT+1;');
10923   l('    END IF;');
10924   l('    open_contact_pt_cursor(null,NULL, p_restrict_sql, p_contact_pt_contains_str,l_ctx_id, l_contact_pt_cur);');
10925   l('    LOOP ');
10926   l('      FETCH l_contact_pt_cur INTO');
10927   l('         l_contact_pt_id, l_cpt_party_id,  l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
10928   l('      EXIT WHEN l_contact_pt_cur%NOTFOUND;');
10929   l('      l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);');
10930   l('      IF l_person_id IS NOT NULL THEN');
10931   l('        l_index := map_id(l_person_id);');
10932   l('        l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
10933 
10937   l('          END IF;');
10934   l('        IF NOT H_SCORES.EXISTS(l_index) THEN');
10935   l('          IF l_ctx_id IS NULL THEN');
10936   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score, l_person_id, l_cpt_ps_id, l_cpt_contact_id,l_contact_pt_id);');
10938   l('        ELSE');
10939   l('          IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
10940   l('            H_SCORES(l_index).TOTAL_SCORE := ');
10941   l('                  H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
10942   l('            H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
10943   l('          END IF;');
10944   l('        END IF;');
10945   l('        IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN');
10946   l('          H_PARTY_ID_LIST(l_index) := 1;');
10947   l('          H_PARTY_ID(l_party_id_idx) := l_person_id;');
10948   l('          l_party_id_idx:= l_party_id_idx+1;');
10949   l('        END IF;');
10950   l('        IF l_party_id_idx>l_max_thresh THEN');
10951   l('        CLOSE l_contact_pt_cur;'); --Bug No: 3872745
10952   l('          IF p_index>1 THEN');
10953   ldbg_s('In eval contact point level number of matches found exceeded threshold');
10954   l('            FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
10955   l('            FND_MSG_PUB.ADD;');
10956   l('            RAISE FND_API.G_EXC_ERROR;');
10957   l('          ELSE');
10958   l('            push_eval;');
10959   l('            RETURN;');
10960   l('          END IF;');
10961   l('        END IF;');
10962   l('        IF p_ins_details = ''Y'' THEN');
10963   l('          h_cpt_id(detcnt) := l_contact_pt_id;');
10964   l('          h_cpt_party_id(detcnt) := l_person_id;');
10965   l('          h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);');
10966   l('          detcnt := detcnt +1;');
10967   l('        END IF;');
10968   ds(fnd_log.level_statement);
10969   dc(fnd_log.level_statement,'Contact pt Level Matches');
10970   dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
10971   dc(fnd_log.level_statement,'l_cpt_party_id','l_person_id');
10972   dc(fnd_log.level_statement,'l_score','l_score');
10973   de;
10974   l('      END IF;');
10975   l('    END LOOP;');
10976   l('    CLOSE l_contact_pt_cur;');
10977   l('    ROLLBACK to eval_start;');
10978   l('    IF p_ins_details = ''Y'' THEN');
10979   l('      FORALL I in 1..h_cpt_id.COUNT ');
10980   l('        INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
10981   l('          l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
10982   l('    END IF;');
10983   l('  END;');
10984   l('');
10985   l('  /**  Private procedure to call the eval procedure at each entity in the correct order ***/');
10986   l('  PROCEDURE do_eval (p_index NUMBER) IS');
10987   l('    l_ctx_id NUMBER;');
10988   l('    l_threshold NUMBER;'); --Bug No: 4407425
10989   l('    other_criteria_exists BOOLEAN; '); --Bug No: 4407425
10990   l('  BEGIN');
10991   --Start of Bug No: 4407425
10992   l('    IF (p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0) THEN');
10993   l('     l_threshold := '|| l_match_threshold ||';  ');
10994   l('     other_criteria_exists := TRUE ;');
10995   l('     IF (call_max_score(2) = 0 and call_max_score(3) = 0 and call_max_score(4) = 0 ) THEN ');
10996   l('      other_criteria_exists := FALSE; ');
10997   l('     END IF ; ');
10998   l('    IF( (l_match_str = '' AND '' AND other_criteria_exists) OR ( call_max_score(p_index) < l_threshold) )THEN');
10999   l('	     RETURN;	');
11000   l('	  ELSE');
11001   ldbg_s('In do eval number of matches found exceeded threshold');
11002   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
11003   l('      FND_MSG_PUB.ADD;');
11004   l('      RAISE FND_API.G_EXC_ERROR;');
11005   l('     END IF; ');
11006   l('    END IF;');
11007   --End of Bug No: 4407425
11008   /*
11009   l('    IF p_index=5 AND call_order(5) <> ''NONE'' AND H_PARTY_ID.COUNT=0 THEN');
11010   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_THRESH_EXCEEDED'');');
11011   l('      FND_MSG_PUB.ADD;');
11012   l('      RAISE FND_API.G_EXC_ERROR;');
11013   l('    END IF;');
11014   */
11015   l('    IF call_order(p_index) = ''PARTY'' AND l_party_contains_str IS NOT NULL THEN');
11016   l('      eval_party_level(l_party_contains_str,call_type(p_index), p_index);');
11017   l('    ELSIF call_order(p_index) = ''PARTY_SITE'' AND l_party_site_contains_str IS NOT NULL THEN');
11018   l('      eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
11019   l('    ELSIF call_order(p_index) = ''CONTACT_POINT'' AND l_contact_pt_contains_str IS NOT NULL THEN');
11020   l('      eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));');
11021   l('    END IF;');
11022   l('  END;');
11023   l('  /************ End of find_persons private procedures **********/ ');
11024   l('');
11025   l('  BEGIN');
11026   l('');
11027 
11028 
11029   d(fnd_log.level_procedure,'find_persons(+)');
11030   ds(fnd_log.level_statement);
11031   dc(fnd_log.level_statement,'Input Parameters:');
11032   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11033   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11034   de;
11035 
11036   l('    -- ************************************');
11037   l('    -- STEP 1. Initialization and error checks');
11038   l('');
11039 
11040   l('    l_match_str := ''' || l_match_str || ''';');
11041   l('    IF p_match_type = ''AND'' THEN');
11042   l('      l_match_str := '' AND '';');
11043   l('    ELSIF p_match_type = ''OR'' THEN');
11044   l('      l_match_str := '' OR '';');
11045   l('    END IF;');
11046   l('    SAVEPOINT find_persons;');
11050   l('    l_max_thresh:=nvl(FND_PROFILE.VALUE(''HZ_DQM_MAX_EVAL_THRESH''),200);');
11047   l('    l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list, l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
11048   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
11049   l('');
11051   l('    IF nvl(FND_PROFILE.VALUE(''HZ_DQM_SCORE_UNTIL_THRESH''),''N'')=''Y'' THEN');
11052   l('      g_score_until_thresh := true;');
11053   l('    ELSE');
11054   l('      g_score_until_thresh := false;');
11055   l('    END IF;');
11056 
11057   l('    l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
11058   l('    l_contact_contains_str := check_contacts_bulk (p_contact_list);');
11059   l('    l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
11060   l('    l_party_contains_str := check_parties_bulk (p_party_search_rec) ;');
11061 
11062   l('    init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
11063   l('');
11064   l('    -- Setup Search Context ID');
11065   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
11066   l('    x_search_ctx_id := l_search_ctx_id;');
11067   l('');
11068 
11069   l('    IF l_party_contains_str IS NULL THEN');
11070   l('      defpt := 1;');
11071   l('    END IF;');
11072   l('    IF l_party_site_contains_str IS NULL THEN');
11073   l('      defps := 1;');
11074   l('    END IF;');
11075   l('    IF l_contact_contains_str IS NULL THEN');
11076   l('      defct := 1;');
11077   l('    END IF;');
11078   l('    IF l_contact_pt_contains_str IS NULL THEN');
11079   l('      defcpt := 1;');
11080   l('    END IF;');
11081   l('');
11082 
11083   ds(fnd_log.level_statement);
11084   dc(fnd_log.level_statement,'l_match_str','l_match_str');
11085   dc(fnd_log.level_statement,'l_party_contains_str','l_party_contains_str');
11086   dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
11087   dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
11088   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
11089   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
11090   de;
11091 
11092   /**** Call all 4 evaluation procedures ***********/
11093   l('    FOR I in 1..5 LOOP');
11094   l('      do_eval(I);');
11095   l('    END LOOP;');
11096   l('    ROLLBACK to find_persons;');
11097   l('    IF l_contact_contains_str IS NOT NULL THEN');
11098   l('      eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);');
11099   l('    END IF;');
11100   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
11101 
11102   l('    x_num_matches := 0;');
11103   l('    l_num_eval := 0;');
11104   l('    IF l_match_str = '' OR '' THEN');
11105   l('      l_party_id := H_SCORES.FIRST;');
11106   l('    ELSE');
11107   l('      l_party_id := H_PARTY_ID_LIST.FIRST;');
11108   l('    END IF;');
11109 
11110   l('    WHILE l_party_id IS NOT NULL LOOP');
11111   l('      l_num_eval:= l_num_eval+1;');
11112   ds(fnd_log.level_statement);
11113   dc(fnd_log.level_statement,'Match Party ID','H_SCORES(l_party_id).PARTY_ID');
11114   dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100)');
11115   de;
11116   l('      IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
11117   l('            INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) ');
11118   l('            VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)*100));');
11119   l('            x_num_matches := x_num_matches+1;');
11120   l('      END IF;');
11121   l('      IF l_match_str = '' OR '' THEN');
11122   l('        l_party_id:=H_SCORES.NEXT(l_party_id);');
11123   l('      ELSE');
11124   l('        l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);');
11125   l('      END IF;');
11126   l('    END LOOP;');
11127   l('');
11128   l('----------INSERT INTO HZ_MATCHED_PARTY_SITES -----');
11129   l('    IF p_ins_details = ''Y'' THEN');
11130   l('      FORALL I in 1..h_ps_id.COUNT ');
11131   l('        INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (');
11132   l('          l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));');
11133   l('    END IF;');
11134 
11135   l('----------INSERT INTO HZ_MATCHED_CONTACTS-----');
11136   l('    IF p_ins_details = ''Y'' THEN');
11137   l('      FORALL I in 1..h_ct_id.COUNT ');
11138   l('        INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (');
11139   l('          l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));');
11140   l('    END IF;');
11141   l('----------INSERT INTO HZ_MATCHED_CPTS-----');
11142   l('    IF p_ins_details = ''Y'' THEN');
11143   l('      FORALL I in 1..h_cpt_id.COUNT ');
11144   l('        INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
11145   l('          l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));');
11146   l('    END IF;');
11147   l('');
11148   l('    HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);');
11149   d(fnd_log.level_procedure,'find_persons(-)');
11150 
11151 
11152   l('EXCEPTION');
11153   l('  WHEN FND_API.G_EXC_ERROR THEN');
11154   l('    ROLLBACK to find_persons;');
11155   l('    RAISE FND_API.G_EXC_ERROR;');
11156   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11157   l('    ROLLBACK to find_persons;');
11158   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11159   l('  WHEN OTHERS THEN');
11160   l('    ROLLBACK to find_persons;');
11164   l('    FND_MSG_PUB.ADD;');
11161   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11162   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_persons'');');
11163   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11165   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11166   l('END find_persons;');
11167   ELSE
11168   l('BEGIN');
11169   l('      FND_MESSAGE.SET_NAME(''AR'', ''HZ_INVALID_MATCH_RULE'');');
11170   l('      FND_MSG_PUB.ADD;');
11171   l('      RAISE FND_API.G_EXC_ERROR;');
11172   l('END find_persons;');
11173   l('');
11174   END IF;
11175   l('PROCEDURE find_persons (');
11176   l('      p_rule_id               IN      NUMBER,');
11177   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
11178   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
11179   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
11180   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
11181   l('      p_restrict_sql          IN      VARCHAR2,');
11182   l('      p_match_type            IN      VARCHAR2,');
11183   l('      p_ins_details           IN      VARCHAR2,');
11184   l('      x_search_ctx_id         OUT     NUMBER,');
11185   l('      x_num_matches           OUT     NUMBER');
11186   l(')  IS');
11187   l('  BEGIN');
11188   l('      find_persons(p_rule_id,p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,');
11189   l('      	p_restrict_sql,p_match_type,NULL,p_ins_details,x_search_ctx_id,x_num_matches);');
11190   l('	END find_persons;');
11191   l('');
11192   l('-------------------------------------------------------------------------------------');
11193   l('--------------------  BULK MATCH RULE ::: find_party_details ------------------------');
11194   l('-------------------------------------------------------------------------------------');
11195   l('PROCEDURE find_party_details (');
11196   l('      p_rule_id               IN      NUMBER,');
11197   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
11198   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
11199   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
11200   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
11201   l('      p_restrict_sql          IN      VARCHAR2,');
11202   l('      p_match_type            IN      VARCHAR2,');
11203   l('      p_search_merged         IN      VARCHAR2,');
11204   l('      x_search_ctx_id         OUT     NUMBER,');
11205   l('      x_num_matches           OUT     NUMBER');
11206   l(') IS');
11207   l('');
11208   l('  BEGIN');
11209 
11210 
11211   d(fnd_log.level_procedure,'find_party_details(+)');
11212   ds(fnd_log.level_statement);
11213   dc(fnd_log.level_statement,'Input Parameters:');
11214   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11215   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11216   dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
11217   de;
11218 
11219   l('  find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,');
11220   l('               p_restrict_sql,p_match_type,p_search_merged,null,null, null,''Y'',');
11221   l('               x_search_ctx_id,x_num_matches);');
11222   l('  DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
11223   l('  AND NOT EXISTS ');
11224   l('       (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);');
11225   l('  DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
11226   l('  AND NOT EXISTS ');
11227   l('       (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);');
11228   l('  DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id ');
11229   l('  AND NOT EXISTS ');
11230   l('       (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);');
11231 
11232   d(fnd_log.level_procedure,'find_party_details(-)');
11233 
11234 
11235   l('EXCEPTION');
11236   l('  WHEN FND_API.G_EXC_ERROR THEN');
11237   l('    RAISE FND_API.G_EXC_ERROR;');
11238   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11239   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11240   l('  WHEN OTHERS THEN');
11241   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11242   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_party_details'');');
11243   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11244   l('    FND_MSG_PUB.ADD;');
11245   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11246   l('END find_party_details;');
11247   l('');
11248   l('-------------------------------------------------------------------------------------');
11249   l('--------------------  BULK MATCH RULE ::: find_duplicate_parties -------------------');
11250   l('-------------------------------------------------------------------------------------');
11251   l('PROCEDURE find_duplicate_parties (');
11252   l('      p_rule_id               IN      NUMBER,');
11253   l('      p_party_id              IN      NUMBER,');
11254   l('      p_restrict_sql          IN      VARCHAR2,');
11255   l('      p_match_type            IN      VARCHAR2,');
11256   l('      p_dup_batch_id          IN      NUMBER,');
11257   l('      p_search_merged         IN      VARCHAR2,');
11258   l('      x_dup_set_id            OUT     NUMBER,');
11259   l('      x_search_ctx_id         OUT     NUMBER,');
11260   l('      x_num_matches           OUT     NUMBER');
11261   l(') IS');
11262   l('  l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
11263   l('  l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
11264   l('  l_contact_list HZ_PARTY_SEARCH.contact_list;');
11265   l('  l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
11266   l('  l_match_idx NUMBER;');
11267 
11271 
11268   l('');
11269   l('BEGIN');
11270 
11272   d(fnd_log.level_procedure,'find_duplicate_parties(+)');
11273   ds(fnd_log.level_statement);
11274   dc(fnd_log.level_statement,'Input Parameters:');
11275   dc(fnd_log.level_statement,'p_party_id','p_party_id');
11276   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11277   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11278   dc(fnd_log.level_statement,'p_dup_batch_id','p_dup_batch_id');
11279   dc(fnd_log.level_statement,'p_search_merged','p_search_merged');
11280   de;
11281 
11282   l('');
11283   l('  get_party_for_search(');
11284   l('              p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);');
11285   l('');
11286   l('    IF NOT check_prim_cond (l_party_rec,');
11287   l('                            l_party_site_list,');
11288   l('                            l_contact_list,');
11289   l('                            l_cpt_list) THEN');
11290   l('      x_dup_set_id:=NULL;');
11291   l('      x_search_ctx_id:=NULL;');
11292   l('      x_num_matches:=0;');
11293   l('      RETURN;');
11294   l('    END IF;');
11295 
11296   l('  x_dup_set_id := NULL;');
11297   l('  IF p_dup_batch_id IS NOT NULL THEN');
11298   l('    SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;');
11299   l('  END IF;');
11300   l('');
11301 
11302   l('  find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11303   l('               p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,''N'',');
11304   l('               x_search_ctx_id,x_num_matches);');
11305   l('  IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN');
11306   l('    INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,');
11307   l('      STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,');
11308   l('      LAST_UPDATE_DATE, LAST_UPDATED_BY) ');
11309   l('    VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, ''SYSBATCH'',');
11310   l('      ''PARTY_MERGE'', hz_utility_pub.created_by, hz_utility_pub.creation_date,');
11311   l('      hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,');
11312   l('      hz_utility_pub.user_id);');
11313   l('');
11314   l('    INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,');
11315   l('      MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,');
11316   l('      LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID) '); --Bug No: 4244529
11317   l('    VALUES (p_party_id,x_dup_set_id,0,0,');
11318   l('      ''Y'',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,');
11319   l('      hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,');
11320   l('      hz_utility_pub.user_id,p_dup_batch_id);'); --Bug No: 4244529
11321   l('  ELSE');
11322   l('    x_dup_set_id := NULL;');
11323   l('  END IF;');
11324   d(fnd_log.level_procedure,'find_duplicate_parties(-)');
11325 
11326 
11327   l('EXCEPTION');
11328   l('  WHEN FND_API.G_EXC_ERROR THEN');
11329   l('    RAISE FND_API.G_EXC_ERROR;');
11330   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11331   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11332   l('  WHEN OTHERS THEN');
11333   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11334   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_parties'');');
11335   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11336   l('    FND_MSG_PUB.ADD;');
11337   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11338   l('END find_duplicate_parties;');
11339 
11340 
11341   l('');
11342   l('-------------------------------------------------------------------------------------');
11343   l('--------------------  BULK MATCH RULE ::: find_duplicate_party_sites-----------------');
11344   l('-------------------------------------------------------------------------------------');
11345   l('PROCEDURE find_duplicate_party_sites (');
11346   l('      p_rule_id               IN      NUMBER,');
11347   l('      p_party_site_id         IN      NUMBER,');
11348   l('      p_party_id              IN      NUMBER,');
11349   l('      p_restrict_sql          IN      VARCHAR2,');
11350   l('      p_match_type            IN      VARCHAR2,');
11351   l('      x_search_ctx_id         OUT     NUMBER,');
11352   l('      x_num_matches           OUT     NUMBER');
11353   l(') IS');
11354   l('');
11355 
11356 
11357   l('   l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
11358   l('   l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
11359   l('   l_contact_list HZ_PARTY_SEARCH.contact_list; ');
11360   l('   l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
11361   l('   contact_point_ids HZ_PARTY_SEARCH.IDList; ');
11362   l('   p_party_site_list HZ_PARTY_SEARCH.IDList;  ');
11363   l('   p_contact_ids HZ_PARTY_SEARCH.IDList; ');
11364   l('  l_match_idx NUMBER;');
11365 
11366   l('   cursor get_cpts_for_party_sites is select contact_point_id  ');
11367   l('                         from hz_contact_points ');
11368   l('                         where owner_table_name = ''HZ_PARTY_SITES'' ');
11369   l('                         and primary_flag=''Y''');
11370   l('                         and owner_table_id = p_party_site_id; ');
11371 
11372   l('   BEGIN ');
11373 
11374 
11375   d(fnd_log.level_procedure,'find_duplicate_party_sites(+)');
11376   ds(fnd_log.level_statement);
11377   dc(fnd_log.level_statement,'Input Parameters:');
11378   dc(fnd_log.level_statement,'p_party_site_id','p_party_site_id');
11379   dc(fnd_log.level_statement,'p_party_id','p_party_id');
11380   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11381   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11382   de;
11383 
11387   l('     FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids; ');
11384   l('     p_party_site_list(1) := p_party_site_id; ');
11385   l('     OPEN get_cpts_for_party_sites;');
11386   l('     LOOP       ');
11388   l('         EXIT WHEN get_cpts_for_party_sites%NOTFOUND; ');
11389   l('     END LOOP;  ');
11390   l('     CLOSE get_cpts_for_party_sites; ');
11391   l('  ');
11392   l('     get_search_criteria (');
11393   l('         null,');
11394   l('         p_party_site_list,');
11395   l('         HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
11396   l('         contact_point_ids, ');
11397   l('         l_party_search_rec,');
11398   l('         l_party_site_list,');
11399   l('         l_contact_list,');
11400   l('         l_contact_point_list) ;');
11401   l('    IF NOT check_prim_cond (l_party_search_rec,');
11402   l('                            l_party_site_list,');
11403   l('                            l_contact_list,');
11404   l('                            l_contact_point_list) THEN');
11405   l('      x_search_ctx_id:=NULL;');
11406   l('      x_num_matches:=0;');
11407   l('      RETURN;');
11408   l('    END IF;');
11409   l(' ');
11410   l('     get_matching_party_sites (p_rule_id, ');
11411   l('         p_party_id, ');
11412   l('         l_party_site_list, ');
11413   l('         l_contact_point_list,');
11414   l('         p_restrict_sql, ');
11415   l('         p_match_type, ');
11416   l('         p_party_site_id, ');
11417   l('         x_search_ctx_id,');
11418   l('         x_num_matches);');
11419   d(fnd_log.level_procedure,'find_duplicate_party_sites(-)');
11420 
11421 
11422   l('EXCEPTION');
11423   l('  WHEN FND_API.G_EXC_ERROR THEN');
11424   l('    RAISE FND_API.G_EXC_ERROR;');
11425   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11426   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11427   l('  WHEN OTHERS THEN');
11428   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11429   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_party_sites'');');
11430   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11431   l('    FND_MSG_PUB.ADD;');
11432   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11433   l('END find_duplicate_party_sites; ');
11434   l(' ');
11435 
11436   l('-------------------------------------------------------------------------------------');
11437   l('--------------------  BULK MATCH RULE ::: find_duplicate_contacts--------------------');
11438   l('-------------------------------------------------------------------------------------');
11439   l('PROCEDURE find_duplicate_contacts (');
11440   l('      p_rule_id               IN      NUMBER,');
11441   l('      p_org_contact_id        IN      NUMBER,');
11442   l('      p_party_id              IN      NUMBER,');
11443   l('      p_restrict_sql          IN      VARCHAR2,');
11444   l('      p_match_type            IN      VARCHAR2,');
11445   l('      x_search_ctx_id         OUT     NUMBER,');
11446   l('      x_num_matches           OUT     NUMBER');
11447   l(') IS');
11448   l('');
11449 
11450   l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;');
11451   l(' l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
11452   l(' l_contact_list HZ_PARTY_SEARCH.contact_list; ');
11453   l(' l_contact_point_list HZ_PARTY_SEARCH.contact_point_list; ');
11454   l(' contact_point_ids HZ_PARTY_SEARCH.IDList; ');
11455   l(' p_party_site_list HZ_PARTY_SEARCH.IDList;   ');
11456   l(' p_contact_ids HZ_PARTY_SEARCH.IDList; ');
11457   l('  l_match_idx NUMBER;');
11458 
11459   l(' cursor get_cpt_for_contact_id is select  contact_point_id ');
11460   l('   from hz_org_contacts a, hz_relationships b, hz_contact_points c ');
11461   l('   where a.party_relationship_id = b.relationship_id ');
11462   l('     and c.owner_table_name = ''HZ_PARTIES'' ');
11463   l('     and c.primary_flag=''Y''');
11464   l('     and c.owner_table_id = b.party_id ');
11465   l('     and b.directional_flag = ''F''  ');
11466   l('     and a.org_contact_id = p_org_contact_id; ');
11467 
11468   l('BEGIN ');
11469 
11470 
11471   d(fnd_log.level_procedure,'find_duplicate_contacts(+)');
11472   ds(fnd_log.level_statement);
11473   dc(fnd_log.level_statement,'Input Parameters:');
11474   dc(fnd_log.level_statement,'p_org_contact_id','p_org_contact_id');
11475   dc(fnd_log.level_statement,'p_party_id','p_party_id');
11476   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11477   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11478   de;
11479 
11480 
11481   l('    p_contact_ids(1) := p_org_contact_id; ');
11482   l('    OPEN get_cpt_for_contact_id; ');
11483   l('    LOOP ');
11484   l('    FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids; ');
11485   l('        EXIT WHEN get_cpt_for_contact_id%NOTFOUND; ');
11486   l('    END LOOP;  ');
11487   l('    CLOSE get_cpt_for_contact_id; ');
11488   l(' ');
11489   l('    get_search_criteria (');
11490   l('        null,');
11491   l('        HZ_PARTY_SEARCH.G_MISS_ID_LIST,');
11492   l('        p_contact_ids,');
11493   l('        contact_point_ids, ');
11494   l('        l_party_search_rec,');
11495   l('        l_party_site_list, ');
11496   l('        l_contact_list,');
11497   l('        l_contact_point_list) ;');
11498   l('    IF NOT check_prim_cond (l_party_search_rec,');
11499   l('                            l_party_site_list,');
11500   l('                            l_contact_list,');
11501   l('                            l_contact_point_list) THEN');
11502   l('      x_search_ctx_id:=NULL;');
11503   l('      x_num_matches:=0;');
11504   l('      RETURN;');
11505   l('    END IF;');
11506   l(' ');
11510   l('        l_contact_point_list, ');
11507   l('    get_matching_contacts (p_rule_id, ');
11508   l('        p_party_id, ');
11509   l('        l_contact_list, ');
11511   l('        p_restrict_sql, ');
11512   l('        p_match_type, ');
11513   l('        p_org_contact_id, ');
11514   l('        x_search_ctx_id, ');
11515   l('        x_num_matches);');
11516   l(' ');
11517   d(fnd_log.level_procedure,'find_duplicate_contacts(-)');
11518 
11519 
11520   l('EXCEPTION');
11521   l('  WHEN FND_API.G_EXC_ERROR THEN');
11522   l('    RAISE FND_API.G_EXC_ERROR;');
11523   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11524   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11525   l('  WHEN OTHERS THEN');
11526   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11527   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contacts'');');
11528   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11529   l('    FND_MSG_PUB.ADD;');
11530   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11531   l('END find_duplicate_contacts; ');
11532   l('');
11533   l('-------------------------------------------------------------------------------------');
11534   l('--------------------  BULK MATCH RULE ::: find_duplicate_contact_points -------------');
11535   l('-------------------------------------------------------------------------------------');
11536   l('PROCEDURE find_duplicate_contact_points (');
11537   l('      p_rule_id               IN      NUMBER,');
11538   l('      p_contact_point_id      IN      NUMBER,');
11539   l('      p_party_id              IN      NUMBER,');
11540   l('      p_restrict_sql          IN      VARCHAR2,');
11541   l('      p_match_type            IN      VARCHAR2,');
11542   l('      x_search_ctx_id         OUT     NUMBER,');
11543   l('      x_num_matches           OUT     NUMBER');
11544   l(') IS');
11545   l(' l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type; ');
11546   l('  l_party_site_list HZ_PARTY_SEARCH.party_site_list; ');
11547   l('   l_contact_list HZ_PARTY_SEARCH.contact_list;  ');
11548   l('   l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;  ');
11549   l('   contact_point_ids HZ_PARTY_SEARCH.IDList;  ');
11550   l('  p_party_site_list HZ_PARTY_SEARCH.IDList;   ');
11551   l('  p_contact_ids HZ_PARTY_SEARCH.IDList;  ');
11552   l('  l_match_idx NUMBER;');
11553 
11554   l('');
11555   l('BEGIN');
11556 
11557 
11558   d(fnd_log.level_procedure,'find_duplicate_contact_points(+)');
11559   ds(fnd_log.level_statement);
11560   dc(fnd_log.level_statement,'Input Parameters:');
11561   dc(fnd_log.level_statement,'p_contact_point_id','p_contact_point_id');
11562   dc(fnd_log.level_statement,'p_party_id','p_party_id');
11563   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11564   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11565   de;
11566 
11567   l('  contact_point_ids(1) := p_contact_point_id;   ');
11568   l('  get_search_criteria (   ');
11569   l('      null, ');
11570   l('      HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
11571   l('      HZ_PARTY_SEARCH.G_MISS_ID_LIST, ');
11572   l('      contact_point_ids,   ');
11573   l('      l_party_search_rec, ');
11574   l('      l_party_site_list, ');
11575   l('      l_contact_list, ');
11576   l('      l_contact_point_list ); ');
11577   l('    ');
11578   l('    IF NOT check_prim_cond (l_party_search_rec,');
11579   l('                            l_party_site_list,');
11580   l('                            l_contact_list,');
11581   l('                            l_contact_point_list) THEN');
11582   l('      x_search_ctx_id:=NULL;');
11583   l('      x_num_matches:=0;');
11584   l('      RETURN;');
11585   l('    END IF;');
11586   l('   get_matching_contact_points ( ');
11587   l('      p_rule_id, ');
11588   l('      p_party_id, ');
11589   l('     l_contact_point_list, ');
11590   l('      p_restrict_sql, ');
11591   l('      p_match_type, ');
11592   l('      p_contact_point_id, ');
11593   l('      x_search_ctx_id, ');
11594   l('      x_num_matches );  ');
11595   d(fnd_log.level_procedure,'find_duplicate_contact_points(-)');
11596 
11597 
11598   l('EXCEPTION');
11599   l('  WHEN FND_API.G_EXC_ERROR THEN');
11600   l('    RAISE FND_API.G_EXC_ERROR;');
11601   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11602   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11603   l('  WHEN OTHERS THEN');
11604   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11605   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.find_duplicate_contact_points'');');
11606   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11607   l('    FND_MSG_PUB.ADD;');
11608   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11609   l('END find_duplicate_contact_points;');
11610   l('');
11611 
11612   l('-------------------------------------------------------------------------------------');
11613   l('--------------------  BULK MATCH RULE ::: find_parties_dynamic-----------------------');
11614   l('-------------------------------------------------------------------------------------');
11615   l('PROCEDURE find_parties_dynamic (');
11616   l('        p_rule_id               IN      NUMBER,');
11617   l('        p_attrib_id1            IN      NUMBER,');
11618   l('        p_attrib_id2            IN      NUMBER,');
11619   l('        p_attrib_id3            IN      NUMBER,');
11620   l('        p_attrib_id4            IN      NUMBER,');
11621   l('        p_attrib_id5            IN      NUMBER,');
11622   l('        p_attrib_id6            IN      NUMBER,');
11623   l('        p_attrib_id7            IN      NUMBER,');
11624   l('        p_attrib_id8            IN      NUMBER,');
11625   l('        p_attrib_id9            IN      NUMBER,');
11626   l('        p_attrib_id10           IN      NUMBER,');
11627   l('        p_attrib_id11           IN      NUMBER,');
11628   l('        p_attrib_id12           IN      NUMBER,');
11632   l('        p_attrib_id16           IN      NUMBER,');
11629   l('        p_attrib_id13           IN      NUMBER,');
11630   l('        p_attrib_id14           IN      NUMBER,');
11631   l('        p_attrib_id15           IN      NUMBER,');
11633   l('        p_attrib_id17           IN      NUMBER,');
11634   l('        p_attrib_id18           IN      NUMBER,');
11635   l('        p_attrib_id19           IN      NUMBER,');
11636   l('        p_attrib_id20           IN      NUMBER,');
11637   l('        p_attrib_val1           IN      VARCHAR2,');
11638   l('        p_attrib_val2           IN      VARCHAR2,');
11639   l('        p_attrib_val3           IN      VARCHAR2,');
11640   l('        p_attrib_val4           IN      VARCHAR2,');
11641   l('        p_attrib_val5           IN      VARCHAR2,');
11642   l('        p_attrib_val6           IN      VARCHAR2,');
11643   l('        p_attrib_val7           IN      VARCHAR2,');
11644   l('        p_attrib_val8           IN      VARCHAR2,');
11645   l('        p_attrib_val9           IN      VARCHAR2,');
11646   l('        p_attrib_val10          IN      VARCHAR2,');
11647   l('        p_attrib_val11          IN      VARCHAR2,');
11648   l('        p_attrib_val12          IN      VARCHAR2,');
11649   l('        p_attrib_val13          IN      VARCHAR2,');
11650   l('        p_attrib_val14          IN      VARCHAR2,');
11651   l('        p_attrib_val15          IN      VARCHAR2,');
11652   l('        p_attrib_val16          IN      VARCHAR2,');
11653   l('        p_attrib_val17          IN      VARCHAR2,');
11654   l('        p_attrib_val18          IN      VARCHAR2,');
11655   l('        p_attrib_val19          IN      VARCHAR2,');
11656   l('        p_attrib_val20          IN      VARCHAR2,');
11657   l('        p_restrict_sql          IN      VARCHAR2,');
11658   l('        p_match_type            IN      VARCHAR2,');
11659   l('        p_search_merged         IN      VARCHAR2,');
11660   l('        x_search_ctx_id         OUT     NUMBER,');
11661   l('        x_num_matches           OUT     NUMBER');
11662   l(') IS');
11663   l('  BEGIN');
11664   l('    call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,');
11665   l('                     p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,');
11666   l('                     p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,');
11667   l('                     p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,');
11668   l('                     p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,');
11669   l('                     p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,');
11670   l('                     p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,');
11671   l('                     p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,');
11672   l('                     p_restrict_sql,''FIND_PARTIES'',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);');
11673   l(' END;');
11674 
11675   l('');
11676   l('-------------------------------------------------------------------------------------');
11677   l('--------------------  BULK MATCH RULE ::: call_api_dynamic---------------------------');
11678   l('-------------------------------------------------------------------------------------');
11679   l('PROCEDURE call_api_dynamic (');
11680   l('        p_rule_id               IN      NUMBER,');
11681   l('        p_attrib_id1            IN      NUMBER,');
11682   l('        p_attrib_id2            IN      NUMBER,');
11683   l('        p_attrib_id3            IN      NUMBER,');
11684   l('        p_attrib_id4            IN      NUMBER,');
11685   l('        p_attrib_id5            IN      NUMBER,');
11686   l('        p_attrib_id6            IN      NUMBER,');
11687   l('        p_attrib_id7            IN      NUMBER,');
11688   l('        p_attrib_id8            IN      NUMBER,');
11689   l('        p_attrib_id9            IN      NUMBER,');
11690   l('        p_attrib_id10           IN      NUMBER,');
11691   l('        p_attrib_id11           IN      NUMBER,');
11692   l('        p_attrib_id12           IN      NUMBER,');
11693   l('        p_attrib_id13           IN      NUMBER,');
11694   l('        p_attrib_id14           IN      NUMBER,');
11695   l('        p_attrib_id15           IN      NUMBER,');
11696   l('        p_attrib_id16           IN      NUMBER,');
11697   l('        p_attrib_id17           IN      NUMBER,');
11698   l('        p_attrib_id18           IN      NUMBER,');
11699   l('        p_attrib_id19           IN      NUMBER,');
11700   l('        p_attrib_id20           IN      NUMBER,');
11701   l('        p_attrib_val1           IN      VARCHAR2,');
11702   l('        p_attrib_val2           IN      VARCHAR2,');
11703   l('        p_attrib_val3           IN      VARCHAR2,');
11704   l('        p_attrib_val4           IN      VARCHAR2,');
11705   l('        p_attrib_val5           IN      VARCHAR2,');
11706   l('        p_attrib_val6           IN      VARCHAR2,');
11707   l('        p_attrib_val7           IN      VARCHAR2,');
11708   l('        p_attrib_val8           IN      VARCHAR2,');
11709   l('        p_attrib_val9           IN      VARCHAR2,');
11710   l('        p_attrib_val10          IN      VARCHAR2,');
11711   l('        p_attrib_val11          IN      VARCHAR2,');
11712   l('        p_attrib_val12          IN      VARCHAR2,');
11713   l('        p_attrib_val13          IN      VARCHAR2,');
11714   l('        p_attrib_val14          IN      VARCHAR2,');
11715   l('        p_attrib_val15          IN      VARCHAR2,');
11716   l('        p_attrib_val16          IN      VARCHAR2,');
11717   l('        p_attrib_val17          IN      VARCHAR2,');
11718   l('        p_attrib_val18          IN      VARCHAR2,');
11719   l('        p_attrib_val19          IN      VARCHAR2,');
11720   l('        p_attrib_val20          IN      VARCHAR2,');
11721   l('        p_restrict_sql          IN      VARCHAR2,');
11722   l('        p_api_name              IN      VARCHAR2,');
11726   l('        x_search_ctx_id         OUT     NUMBER,');
11723   l('        p_match_type            IN      VARCHAR2,');
11724   l('        p_party_id              IN      NUMBER,');
11725   l('        p_search_merged         IN      VARCHAR2,');
11727   l('        x_num_matches           OUT     NUMBER');
11728   l(') IS');
11729   l('  TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;');
11730   l('  l_match_idx NUMBER;');
11731   l('  AttrVals AttrList;');
11732   l('  l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;');
11733   l('  l_party_site_list HZ_PARTY_SEARCH.party_site_list;');
11734   l('  l_contact_list HZ_PARTY_SEARCH.contact_list;');
11735   l('  l_cpt_list HZ_PARTY_SEARCH.contact_point_list;');
11736   l('  l_dup_set_id NUMBER;');
11737   l('  l_idx NUMBER;');
11738   l('  l_cpt_type VARCHAR2(255);');
11739   l('  FIRST BOOLEAN := TRUE; ');
11740   l('');
11741   l('BEGIN');
11742 
11743   d(fnd_log.level_procedure,'call_api_dynamic(+)');
11744   l('');
11745   FOR I in 1..20 LOOP
11746     l('  IF p_attrib_id'||I||' IS NOT NULL THEN');
11747     l('    AttrVals(p_attrib_id'||I||'):=p_attrib_val'||I||';');
11748     l('  END IF;');
11749   END LOOP;
11750 
11751   FIRST := TRUE;
11752   FOR ATTRS IN (
11753       SELECT a.attribute_id, a.attribute_name, a.entity_name
11754       FROM HZ_TRANS_ATTRIBUTES_VL a,
11755          HZ_MATCH_RULE_PRIMARY p
11756       WHERE p.match_rule_id = p_rule_id
11757       AND p.attribute_id = a.attribute_id
11758 
11759       UNION
11760 
11761       SELECT a.attribute_id, a.attribute_name, a.entity_name
11762       FROM HZ_TRANS_ATTRIBUTES_VL a,
11763          HZ_MATCH_RULE_SECONDARY s
11764       WHERE s.match_rule_id = p_rule_id
11765       AND s.attribute_id = a.attribute_id) LOOP
11766     l('  IF AttrVals.EXISTS('||ATTRS.attribute_id||') THEN');
11767     IF ATTRS.entity_name='PARTY' THEN
11768         l('    l_party_rec.'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11769         d(fnd_log.level_statement,'l_party_rec.'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11770     ELSIF ATTRS.entity_name='PARTY_SITES' THEN
11771         l('    l_party_site_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11772         d(fnd_log.level_statement,'l_party_site_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11773     ELSIF ATTRS.entity_name='CONTACTS' THEN
11774         l('    l_contact_list(1).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11775         d(fnd_log.level_statement,'l_contact_list(1).'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11776     ELSIF ATTRS.entity_name='CONTACT_POINTS' THEN
11777       BEGIN
11778         SELECT tag INTO l_cpt_type FROM fnd_lookup_values
11779         WHERE lookup_type = 'HZ_DQM_CPT_ATTR_TYPE'
11780         AND lookup_code = ATTRS.attribute_name
11781         AND ROWNUM=1;
11782       EXCEPTION
11783         WHEN NO_DATA_FOUND THEN
11784           l_cpt_type:='PHONE';
11785       END;
11786 
11787       l('    l_cpt_type := '''||l_cpt_type||''';');
11788       l('    FIRST := FALSE;');
11789       l('    FOR I in 1..l_cpt_list.COUNT LOOP');
11790       l('      IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN');
11791       l('        l_cpt_list(I).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11792       l('        FIRST := TRUE;');
11793       ds(fnd_log.level_statement);
11794       dc(fnd_log.level_statement,'l_cpt_list(''||I||'').CONTACT_POINT_TYPE','l_cpt_type');
11795       dc(fnd_log.level_statement,'l_cpt_list(''||I||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11796       de;
11797       l('      END IF;');
11798       l('    END LOOP;');
11799       l('    IF not FIRST THEN');
11800       l('      l_idx := l_cpt_list.COUNT+1;');
11801       l('      l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;');
11802       l('      l_cpt_list(l_idx).'||ATTRS.attribute_name||':= AttrVals('||ATTRS.attribute_id||');');
11803       ds(fnd_log.level_statement);
11804       dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').CONTACT_POINT_TYPE','l_cpt_type');
11805       dc(fnd_log.level_statement,'l_cpt_list(''||l_idx||'').'||ATTRS.attribute_name,'AttrVals('||ATTRS.attribute_id||')');
11806       de;
11807       l('    END IF;');
11808     END IF;
11809     l('  END IF;');
11810     l('');
11811   END LOOP;
11812   l('');
11813   l('  IF upper(p_api_name) = ''FIND_PARTIES'' THEN');
11814   l('    find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11815   l('               p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,''N'',');
11816   l('               x_search_ctx_id,x_num_matches);');
11817   l('  ELSIF upper(p_api_name) = ''FIND_PARTY_DETAILS'' THEN');
11818   l('    find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11819   l('               p_restrict_sql,p_match_type,p_search_merged,');
11820   l('               x_search_ctx_id,x_num_matches);');
11821   l('  ELSIF upper(p_api_name) = ''FIND_PERSONS'' THEN');
11822   l('    find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,');
11823   l('               p_restrict_sql,p_match_type,''N'',');
11824   l('               x_search_ctx_id,x_num_matches);');
11825   l('  ELSIF upper(p_api_name) = ''GET_MATCHING_PARTY_SITES'' THEN');
11826   l('    get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,');
11827   l('               p_restrict_sql,p_match_type,NULL,');
11828   l('               x_search_ctx_id,x_num_matches);');
11829   l('  ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACTS'' THEN');
11830   l('    get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,');
11831   l('               p_restrict_sql,p_match_type,NULL,');
11832   l('               x_search_ctx_id,x_num_matches);');
11833   l('  ELSIF upper(p_api_name) = ''GET_MATCHING_CONTACT_POINTS'' THEN');
11837   l('  END IF;');
11834   l('    get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,');
11835   l('               p_restrict_sql,p_match_type,NULL,');
11836   l('               x_search_ctx_id,x_num_matches);');
11838   d(fnd_log.level_procedure,'call_api_dynamic(-)');
11839 
11840 
11841   l('EXCEPTION');
11842   l('  WHEN FND_API.G_EXC_ERROR THEN');
11843   l('    RAISE FND_API.G_EXC_ERROR;');
11844   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
11845   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11846   l('  WHEN OTHERS THEN');
11847   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
11848   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.call_api_dynamic'');');
11849   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
11850   l('    FND_MSG_PUB.ADD;');
11851   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
11852 
11853 
11854   l('END call_api_dynamic;');
11855   l('');
11856 
11857   l('-------------------------------------------------------------------------------------');
11858   l('--------------------  BULK MATCH RULE ::: get_matching_party_sites ------------------');
11859   l('-------------------------------------------------------------------------------------');
11860 
11861   l('');
11862   l('PROCEDURE get_matching_party_sites (');
11863   l('        p_rule_id               IN      NUMBER,');
11864   l('        p_party_id              IN      NUMBER,');
11865   l('        p_party_site_list       IN      HZ_PARTY_SEARCH.PARTY_SITE_LIST,');
11866   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
11867   l('        p_restrict_sql          IN      VARCHAR2,');
11868   l('        p_match_type            IN      VARCHAR2,');
11869   l('        p_dup_party_site_id     IN      NUMBER, ');
11870   l('        x_search_ctx_id         OUT     NUMBER,');
11871   l('        x_num_matches           OUT     NUMBER');
11872   l(') IS');
11873   l('  ');
11874   l('  -- Strings to hold the generated Intermedia query strings');
11875   l('  l_party_contains_str VARCHAR2(32000); ');
11876   l('  l_match_idx NUMBER;');
11877   l('  l_party_site_contains_str VARCHAR2(32000);');
11878   l('  l_contact_contains_str VARCHAR2(32000);');
11879   l('  l_contact_pt_contains_str VARCHAR2(32000);');
11880   l('  l_tmp VARCHAR2(32000);');
11881   l('');
11882   l('  -- Other local variables');
11883   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
11884   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
11885   l('  -- For Score calculation');
11886   l('  l_max_score NUMBER;');
11887   l('  l_entered_max_score NUMBER;');
11888   l('  FIRST BOOLEAN;');
11889   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
11890   l('');
11891   FOR TX IN (
11892       SELECT distinct f.staged_attribute_column
11893       FROM hz_trans_functions_vl f, hz_secondary_trans st,
11894            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
11895       WHERE sa.match_rule_id = p_rule_id
11896       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
11897       AND st.function_id = f.function_id
11898       AND (a.ENTITY_NAME='PARTY_SITES' OR a.ENTITY_NAME='CONTACT_POINTS')
11899       AND a.attribute_id = sa.attribute_id) LOOP
11900     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
11901   END LOOP;
11902   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
11903   l('');
11904   l('  l_score NUMBER;');
11905   l('  l_idx NUMBER;');
11906   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
11907   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
11908   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
11909   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
11910   l('  l_party_id NUMBER;');
11911   l('  l_ps_party_id NUMBER;');
11912   l('  l_ct_party_id NUMBER;');
11913   l('  l_cpt_party_id NUMBER;');
11914   l('  l_cpt_ps_id NUMBER;');
11915   l('  l_cpt_contact_id NUMBER;');
11916   l('  l_party_site_id NUMBER;');
11917   l('  l_org_contact_id NUMBER;');
11918   l('  l_contact_pt_id NUMBER;');
11919   l('  l_ps_contact_id NUMBER;');
11920   l('  l_party_max_score NUMBER;');
11921   l('  l_ps_max_score NUMBER;');
11922   l('  l_contact_max_score NUMBER;');
11923   l('  l_cpt_max_score NUMBER;');
11924   l('');
11925   l('  defpt NUMBER :=0;');
11926   l('  defps NUMBER :=0;');
11927   l('  defct NUMBER :=0;');
11928   l('  defcpt NUMBER :=0;');
11929   l('  l_index NUMBER;');
11930   l('');
11931   l('  ');
11932   l('  BEGIN');
11933 
11934 
11935   d(fnd_log.level_procedure,'get_matching_party_sites(+)');
11936   ds(fnd_log.level_statement);
11937   dc(fnd_log.level_statement,'Input Parameters:');
11938   dc(fnd_log.level_statement,'p_match_type','p_match_type');
11939   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
11940   dc(fnd_log.level_statement,'p_dup_party_site_id','p_dup_party_site_id');
11941   de;
11942   l('');
11943   l('    -- ************************************');
11944   l('    -- STEP 1. Initialization and error checks');
11945   l('');
11946   l('    l_match_str := ''' || l_match_str || ''';');
11947   l('    IF p_match_type = ''AND'' THEN');
11948   l('      l_match_str := '' AND '';');
11949   l('    ELSIF p_match_type = ''OR'' THEN');
11950   l('      l_match_str := '' OR '';');
11951   l('    END IF;');
11952   l('    SAVEPOINT get_matching_party_sites ;');
11953   l('    l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, p_party_site_list, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
11954   l('    g_score_until_thresh := false;');
11955   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
11956 
11957   l('');
11961   l('');
11958   l('    l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
11959   l('    l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
11960   l('    init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,p_party_site_list,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);');
11962   l('    -- Setup Search Context ID');
11963   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
11964   l('    x_search_ctx_id := l_search_ctx_id;');
11965   l('');
11966 
11967   ds(fnd_log.level_statement);
11968   dc(fnd_log.level_statement,'l_match_str','l_match_str');
11969   dc(fnd_log.level_statement,'l_party_site_contains_str','l_party_site_contains_str');
11970   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
11971   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
11972   de;
11973 
11974   l('    IF l_party_site_contains_str IS NULL THEN');
11975   l('      defps := 1;');
11976   l('    END IF;');
11977   l('    IF l_contact_pt_contains_str IS NULL THEN');
11978   l('      defcpt := 1;');
11979   l('    END IF;');
11980   l('');
11981   l('    IF l_party_site_contains_str IS NOT NULL THEN');
11982   l('      open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL,l_party_site_cur);');
11983   l('      LOOP');
11984   l('        FETCH l_party_site_cur INTO ');
11985   l('            l_party_site_id, l_ps_party_id, l_ps_contact_id '||l_ps_into_list||';');
11986   l('        EXIT WHEN l_party_site_cur%NOTFOUND;');
11987   l('      IF (p_dup_party_site_id IS NULL OR (');
11988   l('                p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND ');
11989   l('                l_party_site_id <> p_dup_party_site_id)) THEN  ');
11990   l('            l_index := map_id(l_party_site_id);');
11991   l('            l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
11992   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_ps_party_id, l_party_site_id, null,null);');
11993   ds(fnd_log.level_statement);
11994   dc(fnd_log.level_statement,'Party Site Level Matches');
11995   dc(fnd_log.level_statement,'l_party_site_id','l_party_site_id');
11996   dc(fnd_log.level_statement,'l_score','l_score');
11997   de;
11998 
11999   l('      END IF; ');
12000   l('      END LOOP;');
12001   l('      CLOSE l_party_site_cur;');
12002   l('    END IF;');
12003   l('');
12004   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
12005   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12006   l('      LOOP');
12007   l('        FETCH l_contact_pt_cur INTO ');
12008   l('            l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12009   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12010   l('      IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (');
12011   l('         p_dup_party_site_id IS NOT NULL AND l_cpt_contact_id IS NULL AND p_dup_party_site_id <> l_cpt_ps_id))) THEN   ');
12012   l('        l_index := map_id(l_cpt_ps_id);');
12013   l('        IF l_match_str = '' OR '' THEN');
12014   l('          l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12015   l('          IF NOT H_SCORES.EXISTS(l_index) THEN');
12016   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
12017   l('          ELSE');
12018   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
12019   l('               H_SCORES(l_index).TOTAL_SCORE := ');
12020   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
12021   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
12022   l('            END IF;');
12023   l('          END IF;');
12024   l('        ELSE');
12025   l('          IF H_SCORES.EXISTS(l_index) THEN');
12026   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12027   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
12028   l('               H_SCORES(l_index).TOTAL_SCORE := ');
12029   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
12030   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
12031   l('            END IF;');
12032   l('          ELSIF defps=1 THEN');
12033   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12034   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
12035   l('          END IF;');
12036   l('        END IF;');
12037   l('      END IF; ');
12038   ds(fnd_log.level_statement);
12039   dc(fnd_log.level_statement,'Contact_point Level Matches');
12040   dc(fnd_log.level_statement,'l_party_site_id','l_cpt_ps_id');
12041   dc(fnd_log.level_statement,'l_score','l_score');
12042   de;
12043   l('      END LOOP;');
12044   l('      CLOSE l_contact_pt_cur;');
12045   l('    END IF;');
12046   l('    ROLLBACK to get_matching_party_sites ;');
12047   l('    x_num_matches := 0;');
12048   l('    l_party_site_id := H_SCORES.FIRST;');
12049   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
12050   l('    WHILE l_party_site_id IS NOT NULL LOOP');
12051   ds(fnd_log.level_statement);
12052   dc(fnd_log.level_statement,'Match Party Site ID','H_SCORES(l_party_site_id).PARTY_SITE_ID');
12053   dc(fnd_log.level_statement,'Score','round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100)');
12054   de;
12055   l('      IF l_match_str = '' OR '' THEN');
12059 --  END IF;
12056     l('        IF (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12057     l('            INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
12058     l('            VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100);');
12060   l('          x_num_matches := x_num_matches+1;');
12061   l('        END IF;');
12062   l('      ELSE');
12063 --  IF l_purpose = 'S' THEN
12064     l('           IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND');
12065     l('           H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND');
12066     l('           (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12067     l('          INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE) ');
12068     l('          VALUES (l_search_ctx_id,H_SCORES(l_party_site_id).PARTY_ID, H_SCORES(l_party_site_id).PARTY_SITE_ID, round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100));');
12069 --  ELSE
12070 --  END IF;
12071   l('          x_num_matches := x_num_matches+1;');
12072   l('        END IF;');
12073   l('      END IF;');
12074   l('      l_party_site_id:=H_SCORES.NEXT(l_party_site_id);');
12075   l('    END LOOP;');
12076 
12077   d(fnd_log.level_procedure,'get_matching_party_sites(-)');
12078 
12079   l('EXCEPTION');
12080   l('  WHEN FND_API.G_EXC_ERROR THEN');
12081   l('    ROLLBACK to get_matching_party_sites ;');
12082   l('    RAISE FND_API.G_EXC_ERROR;');
12083   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12084   l('    ROLLBACK to get_matching_party_sites ;');
12085   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12086   l('  WHEN OTHERS THEN');
12087   l('    ROLLBACK to get_matching_party_sites ;');
12088   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12089   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_party_sites'');');
12090   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12091   l('    FND_MSG_PUB.ADD;');
12092   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12093   l('END get_matching_party_sites;');
12094   l('');
12095 
12096 --  l('  NULL;');
12097 --  l('END;');
12098 
12099   l('-------------------------------------------------------------------------------------');
12100   l('--------------------  BULK MATCH RULE ::: get_matching_contacts --------------------');
12101   l('-------------------------------------------------------------------------------------');
12102   l('');
12103   l('PROCEDURE get_matching_contacts (');
12104   l('        p_rule_id               IN      NUMBER,');
12105   l('        p_party_id              IN      NUMBER,');
12106   l('        p_contact_list          IN      HZ_PARTY_SEARCH.CONTACT_LIST,');
12107   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
12108   l('        p_restrict_sql          IN      VARCHAR2,');
12109   l('        p_match_type            IN      VARCHAR2,');
12110   l('        p_dup_contact_id        IN      NUMBER, ');
12111   l('        x_search_ctx_id         OUT     NUMBER,');
12112   l('        x_num_matches           OUT     NUMBER');
12113   l(') IS');
12114   l('  ');
12115   l('  -- Strings to hold the generated Intermedia query strings');
12116   l('  l_party_contains_str VARCHAR2(32000); ');
12117   l('  l_party_site_contains_str VARCHAR2(32000);');
12118   l('  l_contact_contains_str VARCHAR2(32000);');
12119   l('  l_contact_pt_contains_str VARCHAR2(32000);');
12120   l('  l_tmp VARCHAR2(32000);');
12121   l('');
12122   l('  -- Other local variables');
12123   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
12124   l('  l_match_idx NUMBER;');
12125   l('  l_sqlstr VARCHAR2(32000); -- Dynamic SQL String');
12126   l('  -- For Score calculation');
12127   l('  l_max_score NUMBER;');
12128   l('  l_entered_max_score NUMBER;');
12129   l('  FIRST BOOLEAN;');
12130   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
12131   l('');
12132   FOR TX IN (
12133       SELECT distinct f.staged_attribute_column
12134       FROM hz_trans_functions_vl f, hz_secondary_trans st,
12135            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12136       WHERE sa.match_rule_id = p_rule_id
12137       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12138       AND st.function_id = f.function_id
12139       AND (a.ENTITY_NAME='CONTACTS' OR a.ENTITY_NAME='CONTACT_POINTS')
12140       AND a.attribute_id = sa.attribute_id) LOOP
12141     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12142   END LOOP;
12143   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
12144   l('');
12145   l('  l_score NUMBER;');
12146   l('  l_idx NUMBER;');
12147   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
12148   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
12149   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
12150   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
12151   l('  l_party_id NUMBER;');
12152   l('  l_ps_party_id NUMBER;');
12153   l('  l_ct_party_id NUMBER;');
12154   l('  l_cpt_party_id NUMBER;');
12155   l('  l_cpt_ps_id NUMBER;');
12156   l('  l_cpt_contact_id NUMBER;');
12157   l('  l_party_site_id NUMBER;');
12158   l('  l_org_contact_id NUMBER;');
12159   l('  l_contact_pt_id NUMBER;');
12160   l('');
12161   l('  defpt NUMBER :=0;');
12162   l('  defps NUMBER :=0;');
12163   l('  defct NUMBER :=0;');
12164   l('  defcpt NUMBER :=0;');
12165   l('  l_index NUMBER;');
12166   l('  l_party_max_score NUMBER;');
12167   l('  l_ps_max_score NUMBER;');
12168   l('  l_contact_max_score NUMBER;');
12169   l('  l_cpt_max_score NUMBER;');
12170   l('');
12174 
12171   l('  ');
12172   l('  BEGIN');
12173 
12175   d(fnd_log.level_procedure,'get_matching_contacts(+)');
12176   ds(fnd_log.level_statement);
12177   dc(fnd_log.level_statement,'Input Parameters:');
12178   dc(fnd_log.level_statement,'p_match_type','p_match_type');
12179   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
12180   dc(fnd_log.level_statement,'p_dup_contact_id','p_dup_contact_id');
12181   de;
12182 
12183   l('');
12184   l('    -- ************************************');
12185   l('    -- STEP 1. Initialization and error checks');
12186   l('');
12187   l('    l_match_str := ''' || l_match_str || ''';');
12188   l('    IF p_match_type = ''AND'' THEN');
12189   l('      l_match_str := '' AND '';');
12190   l('    ELSIF p_match_type = ''OR'' THEN');
12191   l('      l_match_str := '' OR '';');
12192   l('    END IF;');
12193   l('    SAVEPOINT get_matching_contacts ;');
12194   l('    l_entered_max_score:= init_search( HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, p_contact_list, p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
12195   l('    g_score_until_thresh := false;');
12196   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
12197   l('');
12198   l('    l_contact_contains_str := check_contacts_bulk (p_contact_list);');
12199   l('    l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
12200   l('    init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,p_contact_list,p_contact_point_list);');
12201 
12202   l('');
12203   l('    -- Setup Search Context ID');
12204   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
12205   l('    x_search_ctx_id := l_search_ctx_id;');
12206   l('');
12207 
12208   ds(fnd_log.level_statement);
12209   dc(fnd_log.level_statement,'l_match_str','l_match_str');
12210   dc(fnd_log.level_statement,'l_contact_contains_str','l_contact_contains_str');
12211   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
12212   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
12213   de;
12214 
12215   l('    IF l_contact_contains_str IS NULL THEN');
12216   l('      defct := 1;');
12217   l('    END IF;');
12218   l('    IF l_contact_pt_contains_str IS NULL THEN');
12219   l('      defcpt := 1;');
12220   l('    END IF;');
12221   l('');
12222   l('    IF l_contact_contains_str IS NOT NULL THEN');
12223   l('      open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL,l_contact_cur);');
12224   l('      LOOP');
12225   l('        FETCH l_contact_cur INTO ');
12226   l('            l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
12227   l('        EXIT WHEN l_contact_cur%NOTFOUND;');
12228   l('      IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN ');
12229   l('        l_index := map_id(l_org_contact_id);');
12230   l('          l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
12231   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,l_score,defcpt, l_ct_party_id, null, l_org_contact_id, null);');
12232 
12233   ds(fnd_log.level_statement);
12234   dc(fnd_log.level_statement,'Contact Level Matches');
12235   dc(fnd_log.level_statement,'l_org_contact_id','l_org_contact_id');
12236   dc(fnd_log.level_statement,'l_score','l_score');
12237   de;
12238 
12239   l('      END IF; ');
12240   l('      END LOOP;');
12241   l('      CLOSE l_contact_cur;');
12242   l('    END IF;');
12243 
12244   l('');
12245   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
12246   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12247   l('      LOOP');
12248   l('        FETCH l_contact_pt_cur INTO ');
12249   l('            l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12250   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12251   l('      IF (l_cpt_contact_id IS NOT NULL AND (p_dup_contact_id IS NULL OR l_cpt_contact_id <>  p_dup_contact_id)) THEN ');
12252   l('        l_index := map_id(l_cpt_contact_id);');
12253   l('        IF l_match_str = '' OR '' THEN');
12254   l('          l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12255   l('          IF NOT H_SCORES.EXISTS(l_index) THEN');
12256   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
12257   l('          ELSE');
12258   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
12259   l('               H_SCORES(l_index).TOTAL_SCORE := ');
12260   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
12261   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
12262   l('            END IF;');
12263   l('          END IF;');
12264   l('        ELSE');
12265   l('          IF H_SCORES.EXISTS(l_index) THEN');
12266   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12267   l('            IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN');
12268   l('               H_SCORES(l_index).TOTAL_SCORE := ');
12269   l('                      H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;');
12270   l('               H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;');
12271   l('            END IF;');
12272   l('          ELSIF defps=1 THEN');
12273   l('            l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12274   l('            H_SCORES(l_index) := get_new_score_rec(l_score,defpt,defps,defct,l_score,l_cpt_party_id,l_cpt_ps_id,l_cpt_contact_id,l_contact_pt_id);');
12275   l('          END IF;');
12279   ds(fnd_log.level_statement);
12276   l('        END IF;');
12277   l('        END IF; ');
12278   l('      END LOOP;');
12280   dc(fnd_log.level_statement,'Contact_point Level Matches');
12281   dc(fnd_log.level_statement,'l_org_contact_id','l_cpt_contact_id');
12282   dc(fnd_log.level_statement,'l_score','l_score');
12283   de;
12284   l('      CLOSE l_contact_pt_cur;');
12285   l('    END IF;');
12286   l('    ROLLBACK to get_matching_contacts ;');
12287   l('    x_num_matches := 0;');
12288   l('    l_org_contact_id := H_SCORES.FIRST;');
12289   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
12290   l('    WHILE l_org_contact_id IS NOT NULL LOOP');
12291   l('      IF l_match_str = '' OR '' THEN');
12292   ds(fnd_log.level_statement);
12293   dc(fnd_log.level_statement,'Match Contact ID','H_SCORES(l_org_contact_id).ORG_CONTACT_ID');
12294   dc(fnd_log.level_statement,'Score','round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100)');
12295   de;
12296 --  IF l_purpose = 'S' THEN
12297     l('        IF (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12298     l('            INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
12299     l('            VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100);');
12300 --  ELSE
12301 --  END IF;
12302   l('          x_num_matches := x_num_matches+1;');
12303   l('        END IF;');
12304   l('      ELSE');
12305 --  IF l_purpose = 'S' THEN
12306     l('           IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND');
12307     l('           H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND');
12308     l('           (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12309     l('          INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE) ');
12310     l('          VALUES (l_search_ctx_id,H_SCORES(l_org_contact_id).PARTY_ID, H_SCORES(l_org_contact_id).ORG_CONTACT_ID, round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100));');
12311 --  ELSE
12312 --  END IF;
12313   l('          x_num_matches := x_num_matches+1;');
12314   l('        END IF;');
12315   l('      END IF;');
12316   l('      l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);');
12317   l('    END LOOP;');
12318 
12319   d(fnd_log.level_procedure,'get_matching_contacts(-)');
12320 
12321   l('EXCEPTION');
12322   l('  WHEN FND_API.G_EXC_ERROR THEN');
12323   l('    ROLLBACK to get_matching_contacts ;');
12324   l('    RAISE FND_API.G_EXC_ERROR;');
12325   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12326   l('    ROLLBACK to get_matching_contacts ;');
12327   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12328   l('  WHEN OTHERS THEN');
12329   l('    ROLLBACK to get_matching_contacts ;');
12330   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12331   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contacts'');');
12332   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12333   l('    FND_MSG_PUB.ADD;');
12334   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12335   l('END get_matching_contacts;');
12336   l('');
12337   l('-------------------------------------------------------------------------------------');
12338   l('--------------------  BULK MATCH RULE ::: get_matching_contact_points ---------------');
12339   l('-------------------------------------------------------------------------------------');
12340   l('');
12341   l('PROCEDURE get_matching_contact_points (');
12342   l('        p_rule_id               IN      NUMBER,');
12343   l('        p_party_id              IN      NUMBER,');
12344   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
12345   l('        p_restrict_sql          IN      VARCHAR2,');
12346   l('        p_match_type            IN      VARCHAR2,');
12347   l('        p_dup_contact_point_id  IN      NUMBER, ');
12348   l('        x_search_ctx_id         OUT     NUMBER,');
12349   l('        x_num_matches           OUT     NUMBER');
12350   l(') IS');
12351   l('');
12352   l('');
12353   l('  -- Strings to hold the generated Intermedia query strings');
12354   l('  l_contact_pt_contains_str VARCHAR2(32000);');
12355   l('  l_tmp VARCHAR2(32000);');
12356   l('');
12357   l('  -- Other local variables');
12358   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
12359   l('  l_match_idx NUMBER;');
12360   l('  -- For Score calculation');
12361   l('  l_entered_max_score NUMBER;');
12362   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
12363   l('');
12364   FOR TX IN (
12365       SELECT distinct f.staged_attribute_column
12366       FROM hz_trans_functions_vl f, hz_secondary_trans st,
12367            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12368       WHERE sa.match_rule_id = p_rule_id
12369       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12370       AND st.function_id = f.function_id
12371       AND a.ENTITY_NAME='CONTACT_POINTS'
12372       AND a.attribute_id = sa.attribute_id) LOOP
12373     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12374   END LOOP;
12375   l('');
12376   l('  l_score NUMBER;');
12377   l('  l_idx NUMBER;');
12378   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
12379   l('  l_cpt_party_id NUMBER;');
12380   l('  l_cpt_ps_id NUMBER;');
12381   l('  l_cpt_contact_id NUMBER;');
12382   l('  l_contact_pt_id NUMBER;');
12383   l('  H_PARTY_ID HZ_PARTY_SEARCH.IDList;');
12384   l('  H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;');
12385   l('  H_SCORE  HZ_PARTY_SEARCH.IDList;');
12386   l('');
12387   l('  cnt NUMBER :=0;');
12388   l('  l_party_max_score NUMBER;');
12389   l('  l_ps_max_score NUMBER;');
12390   l('  l_contact_max_score NUMBER;');
12394   l('  BEGIN');
12391   l('  l_cpt_max_score NUMBER;');
12392   l('');
12393   l('  ');
12395 
12396 
12397 
12398   d(fnd_log.level_procedure,'get_matching_contact_points(+)');
12399   ds(fnd_log.level_statement);
12400   dc(fnd_log.level_statement,'Input Parameters:');
12401   dc(fnd_log.level_statement,'p_match_type','p_match_type');
12402   dc(fnd_log.level_statement,'p_restrict_sql','p_restrict_sql');
12403   dc(fnd_log.level_statement,'p_dup_contact_point_id','p_dup_contact_point_id');
12404   de;
12405 
12406   l('');
12407   l('    -- ************************************');
12408   l('    -- STEP 1. Initialization and error checks');
12409   l('');
12410 
12411   l('    l_match_str := ''' || l_match_str || ''';');
12412   l('    IF p_match_type = ''AND'' THEN');
12413   l('      l_match_str := '' AND '';');
12414   l('    ELSIF p_match_type = ''OR'' THEN');
12415   l('      l_match_str := '' OR '';');
12416   l('    END IF;');
12417   l('SAVEPOINT get_matching_contact_points ;');
12418   l('    l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC, ');
12419   l('       HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,');
12420   l('       p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
12421   l('    g_score_until_thresh := false;');
12422   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
12423   l('');
12424   l('    l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
12425   l('    init_score_context(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,p_contact_point_list);');
12426 
12427   l('');
12428   l('    -- Setup Search Context ID');
12429   l('    SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
12430   l('    x_search_ctx_id := l_search_ctx_id;');
12431 
12432   ds(fnd_log.level_statement);
12433   dc(fnd_log.level_statement,'l_match_str','l_match_str');
12434   dc(fnd_log.level_statement,'l_contact_pt_contains_str','l_contact_pt_contains_str');
12435   dc(fnd_log.level_statement,'l_search_ctx_id','l_search_ctx_id');
12436   de;
12437 
12438   l('');
12439   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
12440   l('      open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12441   l('      cnt := 1;');
12442   l('      LOOP');
12443   l('        FETCH l_contact_pt_cur INTO ');
12444   l('            l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12445   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12446   l('        IF (p_dup_contact_point_id IS NULL OR (');
12447   l('               p_dup_contact_point_id IS NOT NULL AND ');
12448   l('               l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND ');
12449   l('               p_dup_contact_point_id <>  l_contact_pt_id)) THEN   ');
12450   l('            H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;');
12451   l('            H_PARTY_ID(cnt) := l_cpt_party_id;');
12452   l('            H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12453   l('            cnt := cnt+1;');
12454   ds(fnd_log.level_statement);
12455   dc(fnd_log.level_statement,'Contact Point Matches');
12456   dc(fnd_log.level_statement,'l_contact_pt_id','l_contact_pt_id');
12457   dc(fnd_log.level_statement,'l_score','l_score');
12458   de;
12459 
12460   l('        END IF; ');
12461   l('      END LOOP;');
12462   l('      CLOSE l_contact_pt_cur;');
12463 
12464   d(fnd_log.level_statement,'Evaluating Matches. Threshold : '||round((l_match_threshold/l_max_score)*100));
12465   l('ROLLBACK to get_matching_contact_points ;');
12466   l('      x_num_matches := 0; ');
12467   l('      FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP');
12468   ds(fnd_log.level_statement);
12469   dc(fnd_log.level_statement,'Match Contact Point ID','H_CONTACT_POINT_ID(I)');
12470   dc(fnd_log.level_statement,'Score','round((H_SCORE(I)/l_entered_max_score)*100)');
12471   de;
12472   l('        IF (H_SCORE(I)/l_entered_max_score)>=('||l_match_threshold||'/'||l_max_score||') THEN');
12473   l('        INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (');
12474   l('            l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);');
12475   l('            x_num_matches := x_num_matches + 1; ');
12476   l('        END IF;');
12477   l('      END LOOP; ');
12478   l('    END IF;');
12479 
12480   d(fnd_log.level_procedure,'get_matching_contact_points(-)');
12481 
12482   l('EXCEPTION');
12483   l('  WHEN FND_API.G_EXC_ERROR THEN');
12484   l('    ROLLBACK to get_matching_contact_points ;');
12485   l('    RAISE FND_API.G_EXC_ERROR;');
12486   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12487   l('    ROLLBACK to get_matching_contact_points ;');
12488   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12489   l('  WHEN OTHERS THEN');
12490   l('    ROLLBACK to get_matching_contact_points ;');
12491   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12492   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_matching_contact_points'');');
12493   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12494   l('    FND_MSG_PUB.ADD;');
12495   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12496   l('END get_matching_contact_points;');
12497 
12498   l('');
12499   l('   /**********************************************************');
12500   l('   This procedure finds the score details for a specific party that ');
12501   l('   matched ');
12502   l('');
12503   l('   **********************************************************/');
12504   l('');
12505   l('PROCEDURE get_score_details (');
12506   l('        p_rule_id               IN      NUMBER,');
12507   l('        p_party_id              IN      NUMBER,');
12508   l('        p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
12509   l('        p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
12510   l('        p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
12511   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
12512   l('        x_search_ctx_id         IN OUT  NUMBER');
12513   l(') IS');
12514   l('');
12515   l('  -- Strings to hold the generated Intermedia query strings');
12516   l('  l_party_contains_str VARCHAR2(32000); ');
12517   l('  l_party_site_contains_str VARCHAR2(32000);');
12518   l('  l_contact_contains_str VARCHAR2(32000);');
12519   l('  l_contact_pt_contains_str VARCHAR2(32000);');
12520   l('  l_tmp VARCHAR2(32000);');
12521   l('');
12522   l('  -- Other local variables');
12523   l('  l_match_str VARCHAR2(30); -- Match type (AND or OR)');
12524   l('  -- For Score calculation');
12525   l('  l_max_score NUMBER;');
12526   l('  l_entered_max_score NUMBER;');
12527   l('  FIRST BOOLEAN;');
12528   l('  l_search_ctx_id NUMBER; -- Generated Search Context ID');
12529   l('');
12530   FOR TX IN (
12531       SELECT distinct f.staged_attribute_column
12532       FROM hz_trans_functions_vl f, hz_secondary_trans st,
12533            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12534       WHERE sa.match_rule_id = p_rule_id
12535       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12536       AND st.function_id = f.function_id
12537       AND a.attribute_id = sa.attribute_id) LOOP
12538     l('  l_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12539     l('  l_max_'||TX.staged_attribute_column ||' VARCHAR2(2000);');
12540   END LOOP;
12541   l('  H_SCORES HZ_PARTY_SEARCH.score_list;');
12542   l('');
12543   l('  l_score NUMBER;');
12544   l('  l_match_idx NUMBER;');
12545   l('  l_idx NUMBER;');
12546   l('  l_party_cur HZ_PARTY_STAGE.StageCurTyp;');
12547   l('  l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;');
12548   l('  l_contact_cur HZ_PARTY_STAGE.StageCurTyp;');
12549   l('  l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;');
12550   l('  l_party_id NUMBER;');
12551   l('  l_ps_party_id NUMBER;');
12552   l('  l_ct_party_id NUMBER;');
12553   l('  l_cpt_party_id NUMBER;');
12554   l('  l_cpt_ps_id NUMBER;');
12555   l('  l_cpt_contact_id NUMBER;');
12556   l('  l_party_site_id NUMBER;');
12557   l('  l_org_contact_id NUMBER;');
12558   l('  l_contact_pt_id NUMBER;');
12559   l('  l_ps_contact_id NUMBER;');
12560   l('  l_max_id NUMBER;');
12561   l('  l_max_idx NUMBER;');
12562   l('');
12563   l('  l_index NUMBER;');
12564   l('  l_party_max_score NUMBER;');
12565   l('  l_ps_max_score NUMBER;');
12566   l('  l_contact_max_score NUMBER;');
12567   l('  l_cpt_max_score NUMBER;');
12568   l('');
12569   l('  ');
12570   l('  BEGIN');
12571   l('');
12572 
12573   d(fnd_log.level_statement,'get_score_details(+)');
12574   l('    -- ************************************');
12575   l('    -- STEP 1. Initialization and error checks');
12576   l('');
12577   l('    l_entered_max_score:= init_search(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list,'' OR '', l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);');
12578   l('    g_score_until_thresh := false;');
12579   l('    IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;');
12580 
12581   l('    l_party_site_contains_str := check_party_sites_bulk (p_party_site_list);');
12582   l('    l_contact_contains_str := check_contacts_bulk (p_contact_list);');
12583   l('    l_contact_pt_contains_str := check_cpts_bulk (p_contact_point_list);');
12584 
12585   l('    init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);');
12586   l('');
12587   l('    -- Setup Search Context ID');
12588   l('    IF x_search_ctx_id IS NULL THEN');
12589   l('      SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;');
12590   l('      x_search_ctx_id := l_search_ctx_id;');
12591   l('    ELSE');
12592   l('      l_search_ctx_id := x_search_ctx_id;');
12593   l('    END IF;');
12594   l('');
12595   l('    open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);');
12596   l('    LOOP ');
12597   l('        FETCH l_party_cur INTO');
12598   l('           l_party_id '||l_p_into_list||';');
12599   l('        EXIT WHEN l_party_cur%NOTFOUND;');
12600   IF l_p_param_list IS NOT NULL THEN
12601     l('          INSERT_PARTY_SCORE(p_party_id, p_party_id, l_search_ctx_id, p_party_search_rec, g_party_stage_rec, '||l_p_param_list||',1);');
12602   END IF;
12603   l('    END LOOP;');
12604   l('    CLOSE l_party_cur;');
12605   l('');
12606   l('    IF l_party_site_contains_str IS NOT NULL THEN');
12607   l('      l_max_score := 0;');
12608   l('      l_max_id := 0;');
12609   l('      l_max_idx := 0;');
12610   l('      open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,l_party_site_cur);');
12611   l('      LOOP');
12612   l('        FETCH l_party_site_cur INTO ');
12613   l('            l_party_site_id, l_ps_party_id,l_ps_contact_id '||l_ps_into_list||';');
12614   l('        EXIT WHEN l_party_site_cur%NOTFOUND;');
12615   l('        l_score := GET_PARTY_SITES_SCORE(l_match_idx'||l_ps_param_list||');');
12616   l('        IF l_score > l_max_score THEN');
12617   l('          l_max_score := l_score;');
12618   l('          l_max_id := l_party_site_id;');
12619   l('          l_max_idx := l_match_idx;');
12620   FOR TX IN (
12621       SELECT distinct f.staged_attribute_column
12622       FROM hz_trans_functions_vl f, hz_secondary_trans st,
12623            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12624       WHERE sa.match_rule_id = p_rule_id
12625       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12626       AND st.function_id = f.function_id
12627       AND a.entity_name = 'PARTY_SITES'
12628       AND a.attribute_id = sa.attribute_id) LOOP
12629     l('          l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
12630   END LOOP;
12631   l('        END IF;');
12632   l('      END LOOP;');
12633   l('      CLOSE l_party_site_cur;');
12634   l('      IF l_max_score>0 THEN');
12635   l('        INSERT_PARTY_SITES_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_party_site_list(l_max_idx), g_party_site_stage_list(l_max_idx) '||replace(l_ps_param_list,'l_TX','l_max_TX')||',l_max_idx);');
12636   l('      END IF;');
12637   l('    END IF;');
12638   l('');
12639   l('    IF l_contact_contains_str IS NOT NULL THEN');
12640   l('      l_max_score := 0;');
12641   l('      l_max_id := 0;');
12642   l('      l_max_idx := 0;');
12643   l('      open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL,l_contact_cur);');
12644   l('      LOOP');
12645   l('        FETCH l_contact_cur INTO ');
12646   l('            l_org_contact_id, l_ct_party_id '||l_c_into_list||';');
12647   l('        EXIT WHEN l_contact_cur%NOTFOUND;');
12648   l('        l_score := GET_CONTACTS_SCORE(l_match_idx'||l_c_param_list||');');
12649   l('        IF l_score > l_max_score THEN');
12650   l('          l_max_score := l_score;');
12651   l('          l_max_id := l_org_contact_id;');
12652   l('          l_max_idx := l_match_idx;');
12653   FOR TX IN (
12654       SELECT distinct f.staged_attribute_column
12655       FROM hz_trans_functions_vl f, hz_secondary_trans st,
12656            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12657       WHERE sa.match_rule_id = p_rule_id
12658       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12659       AND st.function_id = f.function_id
12660       AND a.entity_name = 'CONTACTS'
12661       AND a.attribute_id = sa.attribute_id) LOOP
12662     l('          l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
12663   END LOOP;
12664   l('        END IF;');
12665   l('      END LOOP;');
12666   l('      CLOSE l_contact_cur;');
12667   l('      IF l_max_score>0 THEN');
12668   l('        INSERT_CONTACTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_list(l_max_idx), g_contact_stage_list(l_max_idx) '||replace(l_c_param_list,'l_TX','l_max_TX')||',l_max_idx);');
12669   l('      END IF;');
12670   l('    END IF;');
12671   l('');
12672   l('    IF l_contact_pt_contains_str IS NOT NULL THEN');
12673   l('      l_max_score := 0;');
12674   l('      l_max_id := 0;');
12675   l('      l_max_idx := 0;');
12676   l('      open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,l_contact_pt_cur);');
12677   l('      LOOP');
12678   l('        FETCH l_contact_pt_cur INTO ');
12679   l('            l_contact_pt_id, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id '||l_cpt_into_list||';');
12680   l('        EXIT WHEN l_contact_pt_cur%NOTFOUND;');
12681   l('        l_score := GET_CONTACT_POINTS_SCORE(l_match_idx'||l_cpt_param_list||');');
12682   l('        IF l_score > l_max_score THEN');
12683   l('          l_max_score := l_score;');
12684   l('          l_max_id := l_contact_pt_id;');
12685   l('          l_max_idx := l_match_idx;');
12686   FOR TX IN (
12687       SELECT distinct f.staged_attribute_column
12688       FROM hz_trans_functions_vl f, hz_secondary_trans st,
12689            hz_match_rule_secondary sa, HZ_TRANS_ATTRIBUTES_VL a
12690       WHERE sa.match_rule_id = p_rule_id
12691       AND st.SECONDARY_ATTRIBUTE_ID = sa.SECONDARY_ATTRIBUTE_ID
12692       AND st.function_id = f.function_id
12693       AND a.entity_name = 'CONTACT_POINTS'
12694       AND a.attribute_id = sa.attribute_id) LOOP
12695     l('          l_max_'||TX.staged_attribute_column ||' := l_'||TX.staged_attribute_column ||';');
12696   END LOOP;
12697   l('        END IF;');
12698   l('      END LOOP;');
12699   l('      IF l_max_score>0 THEN');
12700   l('        INSERT_CONTACT_POINTS_SCORE(p_party_id,l_max_id,l_search_ctx_id, p_contact_point_list(l_max_idx), g_contact_pt_stage_list(l_max_idx) '||replace(l_cpt_param_list,'l_TX','l_max_TX')||',l_max_idx);');
12701   l('      END IF;');
12702   l('      CLOSE l_contact_pt_cur;');
12703   l('    END IF;');
12704   l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12705   l('    DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12706   l('    DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12707   l('    DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12708   l('    DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12709   d(fnd_log.level_procedure,'get_score_details(-)');
12710 
12711 
12712   l('EXCEPTION');
12713   l('  WHEN FND_API.G_EXC_ERROR THEN');
12714   l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12715   l('    DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12716   l('    DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12717   l('    DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12718   l('    DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12719   l('    RAISE FND_API.G_EXC_ERROR;');
12720   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
12721   l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12722   l('    DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12723   l('    DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12724   l('    DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12725   l('    DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12726   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12727   l('  WHEN OTHERS THEN');
12728   l(' --------------- DELETE FROM ALL SRCH TABLES ---------------------');
12729   l('    DELETE FROM HZ_SRCH_PARTIES WHERE batch_id = -1 ;');
12730   l('    DELETE FROM HZ_SRCH_PSITES WHERE batch_id = -1 ;');
12731   l('    DELETE FROM HZ_SRCH_CONTACTS WHERE batch_id = -1 ;');
12732   l('    DELETE FROM HZ_SRCH_CPTS WHERE batch_id = -1 ;');
12733   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
12734   l('    FND_MESSAGE.SET_TOKEN(''PROC'','''||p_pkg_name||'.get_score_details'');');
12735   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
12736   l('    FND_MSG_PUB.ADD;');
12737   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12738   l('END get_score_details;');
12739   l('');
12740 
12741   generate_acquire_proc(p_rule_id, 'Q');
12742 
12743 
12744   generate_party_map_proc_bulk('MAP_PARTY_REC', p_rule_id);
12745   l('');
12746   generate_map_proc_bulk('PARTY_SITES', 'MAP_PARTY_SITE_REC', p_rule_id);
12747   l('');
12748   generate_map_proc_bulk('CONTACTS', 'MAP_CONTACT_REC', p_rule_id);
12749   l('');
12750   generate_map_proc_bulk('CONTACT_POINTS', 'MAP_CONTACT_POINT_REC', p_rule_id);
12751   l('');
12752   generate_check_proc(p_rule_id);
12753 
12754 
12755   generate_check_staged (p_rule_id);
12756   /*l('  PROCEDURE enable_debug IS');
12757 
12758   l('  BEGIN');
12759   l('    g_debug_count := g_debug_count + 1;');
12760 
12761   l('    IF g_debug_count = 1 THEN');
12762   l('      IF fnd_profile.value(''HZ_API_FILE_DEBUG_ON'') = ''Y'' OR');
12763   l('         fnd_profile.value(''HZ_API_DBMS_DEBUG_ON'') = ''Y''');
12764   l('      THEN');
12765   l('        hz_utility_v2pub.enable_debug;');
12766   l('        g_debug := TRUE;');
12767   d('PKG: '||p_pkg_name||' (+)');
12768   l('      END IF;');
12769   l('    END IF;');
12770   l('  END enable_debug;');
12771 
12772   l('  PROCEDURE disable_debug IS');
12773 
12774   l('  BEGIN');
12775 
12776   l('    IF g_debug THEN');
12777   l('      g_debug_count := g_debug_count - 1;');
12778 
12779   l('      IF g_debug_count = 0 THEN');
12780   d('PKG: '||p_pkg_name||' (-)');
12781   l('        hz_utility_v2pub.disable_debug;');
12782   l('        g_debug := FALSE;');
12783   l('      END IF;');
12784   l('    END IF;');
12785 
12786   l('  END disable_debug;');
12787   */
12788 
12789   l('END;');
12790   l('');
12791 END gen_pkg_body_bulk ;
12792 
12793 
12794 
12795 
12796 
12797 
12798 
12799 FUNCTION has_trx_context(proc VARCHAR2) RETURN BOOLEAN IS
12800 
12801   l_sql VARCHAR2(255);
12802   l_entity VARCHAR2(255);
12803   l_procedure VARCHAR2(255);
12804   l_attribute VARCHAR2(255);
12805   c NUMBER;
12806   n NUMBER;
12807   l_custom BOOLEAN;
12808 
12809 BEGIN
12810   c := dbms_sql.open_cursor;
12811   l_sql := 'select ' || proc ||
12812            '(:attrval,:lang,:attr,:entity,:ctx) from dual';
12813   dbms_sql.parse(c,l_sql,2);
12814   DBMS_SQL.BIND_VARIABLE(c,':attrval','x');
12815   DBMS_SQL.BIND_VARIABLE(c,':lang','x');
12816   DBMS_SQL.BIND_VARIABLE(c,':attr','x');
12817   DBMS_SQL.BIND_VARIABLE(c,':entity','x');
12818   DBMS_SQL.BIND_VARIABLE(c,':ctx','x');
12819   n:=DBMS_SQL.execute(c);
12820   dbms_sql.close_cursor(c);
12821   RETURN TRUE;
12822 EXCEPTION
12823   WHEN OTHERS THEN
12824     dbms_sql.close_cursor(c);
12825     RETURN FALSE;
12826 END;
12827 
12828 --VJN Introduced for Bulk Match Rules
12829 PROCEDURE generate_party_map_proc_bulk (
12830    p_proc_name          IN      VARCHAR2,
12831    p_rule_id            IN      NUMBER
12832 ) IS
12833 
12834   NONE BOOLEAN := TRUE;
12835   trxctx BOOLEAN := FALSE;
12836   INSERT_TRFNS varchar2(32000);
12837   INSERT_TRFN_VALUES varchar2(32000);
12838 
12839 BEGIN
12840 
12841   l('');
12842   l('/************************************************');
12843   l('  This procedure maps a search record from the logical');
12844   l('  record structure to the stage schema structure ');
12845   l('  for the PARTY Entity after applying ');
12846   l('  the defined transformations');
12847   l('************************************************/');
12848   l('');
12849   l('PROCEDURE ' || p_proc_name || '( ');
12850   l('    p_search_ctx IN BOOLEAN,');
12851   l('    p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, ');
12852   l('    x_entered_max_score OUT NUMBER,');
12853   l('    x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type');
12854   l('  ) IS ');
12855   l('  tmp VARCHAR2(4000);');
12856   l('BEGIN');
12857   ldbg_s('Inside Calling Procedure - '||p_proc_name);
12858   l('   IF p_search_ctx THEN');
12859   l('     x_entered_max_score:=0;');
12860   for SECATTRS IN (
12861         SELECT a.ATTRIBUTE_NAME, SCORE
12862         FROM HZ_TRANS_ATTRIBUTES_VL a,
12863              HZ_MATCH_RULE_SECONDARY sattr
12864         WHERE sattr.MATCH_RULE_ID = p_rule_id
12865         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12866         AND a.ENTITY_NAME = 'PARTY') LOOP
12867     l('    IF p_search_rec.'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12868     l('      x_entered_max_score := x_entered_max_score+'||SECATTRS.SCORE||';');
12869     l('    END IF;');
12870   END LOOP;
12871   l('    END IF;');
12872 
12873   for FUNCS IN (
12874         SELECT a.ATTRIBUTE_NAME,
12875                f.PROCEDURE_NAME,
12876                f.STAGED_ATTRIBUTE_COLUMN
12877         FROM HZ_TRANS_FUNCTIONS_VL f,
12878              HZ_TRANS_ATTRIBUTES_VL a,
12879              HZ_MATCH_RULE_PRIMARY pattr,
12880              HZ_PRIMARY_TRANS pfunc
12881         WHERE pattr.MATCH_RULE_ID = p_rule_id
12882         AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12883         AND a.ENTITY_NAME = 'PARTY'
12884         AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
12885         AND pfunc.FUNCTION_ID = f.FUNCTION_ID
12886 
12887         UNION
12888 
12889         SELECT a.ATTRIBUTE_NAME,
12890                f.PROCEDURE_NAME,
12891                f.STAGED_ATTRIBUTE_COLUMN
12892         FROM HZ_TRANS_FUNCTIONS_VL f,
12893              HZ_TRANS_ATTRIBUTES_VL a,
12894              HZ_MATCH_RULE_SECONDARY sattr,
12895              HZ_SECONDARY_TRANS sfunc
12896         WHERE sattr.MATCH_RULE_ID = p_rule_id
12897         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12898         AND a.ENTITY_NAME = 'PARTY'
12899         AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
12900         AND sfunc.FUNCTION_ID = f.FUNCTION_ID
12901 
12902         UNION
12903 
12904         SELECT a.attribute_name,
12905                f.PROCEDURE_NAME,
12906                f.STAGED_ATTRIBUTE_COLUMN
12907         FROM HZ_TRANS_FUNCTIONS_VL f,
12908             HZ_TRANS_ATTRIBUTES_VL a
12909         WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
12910         AND a.entity_name = 'PARTY'
12911         AND a.attribute_name='PARTY_TYPE'
12912         AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
12913         AND nvl(f.active_flag,'Y')='Y'
12914         AND ROWNUM=1
12915   )
12916   LOOP
12917     NONE := FALSE;
12918     trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
12919     l('  IF p_search_ctx THEN');
12920     l('    IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12921     l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
12922     l('        ' || FUNCS.PROCEDURE_NAME ||'(');
12923     l('             p_search_rec.'||FUNCS.ATTRIBUTE_NAME);
12924     l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
12925     IF trxctx THEN
12926       l('             ,''PARTY'','''||g_context||''');');
12927     ELSE
12928       l('             ,''PARTY'');');
12929     END IF;
12930     l('    ELSE');
12931     l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
12932     l('    END IF;');
12933     IF NOT trxctx THEN
12934       l('  END IF;');
12935     ELSE
12936       l('  ELSE');
12937       l('    IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
12938       l('      tmp :=' || FUNCS.PROCEDURE_NAME ||'(');
12939       l('             x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
12940       l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
12941       l('             ,''PARTY'',''SCORE'');');
12942       l('      IF tmp IS NOT NULL THEN');
12943       l('        x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
12944       l('      END IF;');
12945       l('    END IF;');
12946       l('  END IF;');
12947     END IF;
12948     INSERT_TRFNS := INSERT_TRFNS ||','||FUNCS.STAGED_ATTRIBUTE_COLUMN;
12949     INSERT_TRFN_VALUES := INSERT_TRFN_VALUES ||','||'x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
12950   END LOOP;
12951 
12952   IF NOT NONE THEN
12953      l('IF p_search_ctx THEN');
12954      l('     insert into HZ_SRCH_PARTIES(batch_id,party_id, party_osr,party_os' || INSERT_TRFNS
12955                      || ')'||' values(-1,-1,-1,-1'|| INSERT_TRFN_VALUES ||');');
12956      l('END IF;');
12957   END IF;
12958 
12959   IF NONE THEN
12960     l('  NULL;');
12961   END IF;
12962 
12963 
12964   l('EXCEPTION');
12965   l('  WHEN OTHERS THEN');
12966   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
12967   l('    FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
12968   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
12969   l('    FND_MSG_PUB.ADD;');
12970   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
12971   l('END;');
12972 
12973 END generate_party_map_proc_bulk ;
12974 
12975 PROCEDURE generate_map_proc (
12976    p_entity             IN      VARCHAR2,
12977    p_proc_name          IN      VARCHAR2,
12978    p_rule_id		IN      NUMBER
12979 ) IS
12980 
12981   NONE BOOLEAN := TRUE;
12982   trxctx BOOLEAN := FALSE;
12983 BEGIN
12984 
12985   l('');
12986   l('/************************************************');
12987   l('  This procedure maps a search record from the logical');
12988   l('  record structure to the stage schema structure ');
12989   l('  for the '||p_entity || ' Entity after applying ');
12990   l('  the defined transformations');
12991   l('************************************************/');
12992   l('');
12993   l('PROCEDURE ' || p_proc_name || '( ');
12994   l('    p_search_ctx IN BOOLEAN,');
12995   IF p_entity = 'PARTY_SITES' THEN
12996     l('    p_search_list IN HZ_PARTY_SEARCH.party_site_list, ');
12997     l('    x_entered_max_score OUT NUMBER,');
12998     l('    x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list');
12999     l('  ) IS ');
13000   ELSIF p_entity = 'CONTACTS' THEN
13001     l('    p_search_list IN HZ_PARTY_SEARCH.contact_list, ');
13002     l('    x_entered_max_score OUT NUMBER,');
13003     l('    x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list');
13004     l('  ) IS ');
13005   ELSIF p_entity = 'CONTACT_POINTS' THEN
13006     l('    p_search_list IN HZ_PARTY_SEARCH.contact_point_list, ');
13007     l('    x_entered_max_score OUT NUMBER,');
13008     l('    x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list');
13009     l('  ) IS ');
13010   END IF;
13011   l('  l_current_max_score NUMBER;');
13012   l('  tmp VARCHAR2(4000);');
13013   if l_purpose IN ('S','W') AND p_entity = 'CONTACT_POINTS' then
13014     l('  TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);');
13015     l('  l_cnt_pt_type_index INDEX_VARCHAR100_TBL;');
13016 
13017     l('  TYPE CONTACT_PT_REC_TYPE IS RECORD (');
13018     l('  contact_pt_type		VARCHAR2(100),');
13019     l('  max_score    		NUMBER) ;');
13020 
13021     l('  TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;');
13022     l('  l_cnt_pt_type contact_pt_list;');
13023 
13024     l('  N NUMBER := 1;');
13025     l('  x_modify VARCHAR2(1);');
13026   end if;
13027   l('BEGIN');
13028   ldbg_s('Inside Calling Procedure - '||p_proc_name);
13029   ldbg_s('p_entity - '||p_entity);
13030   l('  IF p_search_ctx THEN');
13031   IF p_entity = 'PARTY_SITES' THEN
13032     l('   g_ps_den_only:=TRUE;');
13033   END IF;
13034   l('    x_entered_max_score:=0;');
13035   l('    FOR I IN 1..p_search_list.COUNT LOOP');
13036   l('      l_current_max_score:=0;');
13037   IF p_entity = 'CONTACT_POINTS' THEN
13038     l('      x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;');
13039   END IF;
13040   for SECATTRS IN (
13041         SELECT a.ATTRIBUTE_NAME, SCORE, nvl(a.denorm_flag,'N') DENORM_FLAG
13042         FROM HZ_TRANS_ATTRIBUTES_VL a,
13043              HZ_MATCH_RULE_SECONDARY sattr
13044         WHERE sattr.MATCH_RULE_ID = p_rule_id
13045         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13046         AND a.ENTITY_NAME = p_entity) LOOP
13047     l('      IF p_search_list(I).'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13048     l('        l_current_max_score := l_current_max_score+'||SECATTRS.SCORE||';');
13049     IF p_entity = 'PARTY_SITES' AND SECATTRS.DENORM_FLAG='N' THEN
13053     l('      END IF;');
13050       l('        g_ps_den_only:=FALSE;');
13051     END IF;
13052 
13054 
13055   END LOOP;
13056 if l_purpose  IN ('S','W') AND p_entity = 'CONTACT_POINTS' then
13057        l('      x_modify := ''N'';');
13058         l('      FOR J IN 1..l_cnt_pt_type.count LOOP');
13059           l('      if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then');
13060  	  l('         x_modify := ''Y'';');
13061             l('      IF l_cnt_pt_type(J).max_score<l_current_max_score THEN');
13062                 l('      l_cnt_pt_type(J).max_score :=l_current_max_score;');
13063                 l('      EXIT;');
13064             l('      END IF;');
13065           l('      end if;');
13066         l('      END LOOP;');
13067         l('      if x_modify=''N'' then');
13068             l('      l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;');
13069             l('      l_cnt_pt_type(N).max_score := l_current_max_score;');
13070             l('      N:= N+1;');
13071         l('      end if;');
13072 
13073    else
13074   l('      IF l_current_max_score>x_entered_max_score THEN');
13075   l('        x_entered_max_score:=l_current_max_score;');
13076   l('      END IF;');
13077   end if;
13078 
13079   l('    END LOOP;');
13080   if l_purpose  IN ('S','W') AND p_entity = 'CONTACT_POINTS' then
13081       l('   FOR M IN 1..l_cnt_pt_type.count LOOP');
13082         l('   x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;');
13083     l('   END LOOP;');
13084   end if;
13085   l('  END IF;');
13086 
13087 
13088   for FUNCS IN (
13089         SELECT a.ATTRIBUTE_NAME,
13090                f.PROCEDURE_NAME,
13091                f.STAGED_ATTRIBUTE_COLUMN
13092         FROM HZ_TRANS_FUNCTIONS_VL f,
13093              HZ_TRANS_ATTRIBUTES_VL a,
13094              HZ_MATCH_RULE_PRIMARY pattr,
13095              HZ_PRIMARY_TRANS pfunc
13096         WHERE pattr.MATCH_RULE_ID = p_rule_id
13097         AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13098         AND a.ENTITY_NAME = p_entity
13099         AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13100         AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13101 
13102         UNION
13103 
13104         SELECT a.ATTRIBUTE_NAME,
13105                f.PROCEDURE_NAME,
13106                f.STAGED_ATTRIBUTE_COLUMN
13107         FROM HZ_TRANS_FUNCTIONS_VL f,
13108              HZ_TRANS_ATTRIBUTES_VL a,
13109              HZ_MATCH_RULE_SECONDARY sattr,
13110              HZ_SECONDARY_TRANS sfunc
13111         WHERE sattr.MATCH_RULE_ID = p_rule_id
13112         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13113         AND a.ENTITY_NAME = p_entity
13114         AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13115         AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13116   )
13117   LOOP
13118     NONE := FALSE;
13119     l('  FOR I IN 1..p_search_list.COUNT LOOP');
13120     l('    IF p_search_ctx THEN');
13121     trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
13122     l('      IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13123     l('        x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13124     l('          ' || FUNCS.PROCEDURE_NAME ||'(');
13125     l('             p_search_list(I).'||FUNCS.ATTRIBUTE_NAME);
13126     l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13127     IF NOT trxctx THEN
13128       l('             ,''' ||p_entity||''');');
13129     ELSE
13130       l('             ,''' ||p_entity||''','''||g_context||''');');
13131     END IF;
13132     l('      ELSE');
13133     l('        x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13134     l('      END IF;');
13135     IF NOT trxctx THEN
13136       l('    END IF;');
13137     ELSE
13138       l('    ELSE');
13139       l('      IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13140       l('        tmp := ' || FUNCS.PROCEDURE_NAME ||'(');
13141       l('             x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
13142       l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13143       l('             ,''' ||p_entity||''',''SCORE'');');
13144       l('        IF tmp IS NOT NULL THEN');
13145       l('          x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
13146       l('        END IF;');
13147       l('      END IF;');
13148       l('    END IF;');
13149     END IF;
13150     l('  END LOOP;');
13151   END LOOP;
13152   IF NONE THEN
13153     l('  NULL;');
13154   END IF;
13155 
13156   l('EXCEPTION');
13157   l('  WHEN OTHERS THEN');
13158   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13159   l('    FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13160   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13161   l('    FND_MSG_PUB.ADD;');
13162   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13163   l('END;');
13164 
13165 END generate_map_proc;
13166 
13167 
13168 -- VJN INTRODUCED CODE FOR GENERATING THE POPULATION
13169  -- OF THE GLOBAL CONDITION RECORD FOR REGULAR MATCH RULES
13170 
13171 PROCEDURE generate_ent_cond_pop_rec_proc (
13172    p_entity             IN      VARCHAR2,
13173    p_rule_id		IN      NUMBER
13174 ) IS
13175 
13176  p_proc_name VARCHAR2(200);
13177  NONE BOOLEAN := TRUE;
13178 
13179 
13180  BEGIN
13181 
13182   p_proc_name := 'POP_'||p_entity||'_COND_REC';
13183   l('');
13184   l('/************************************************');
13185   l('  This procedure populates global cond record');
13186   l('  for the '||p_entity || ' Entity ');
13187   l('************************************************/');
13191       l('    p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type ');
13188   l('');
13189   l('PROCEDURE ' || p_proc_name||'(');
13190     IF p_entity = 'PARTY' THEN
13192       l('  ) IS ');
13193     ELSIF p_entity = 'PARTY_SITES' THEN
13194       l('    p_search_list IN HZ_PARTY_SEARCH.party_site_list ');
13195       l('  ) IS ');
13196     ELSIF p_entity = 'CONTACTS' THEN
13197       l('    p_search_list IN HZ_PARTY_SEARCH.contact_list ');
13198       l('  ) IS ');
13199     ELSIF p_entity = 'CONTACT_POINTS' THEN
13200       l('    p_search_list IN HZ_PARTY_SEARCH.contact_point_list ');
13201       l('  ) IS ');
13202   END IF;
13203 
13204   l('BEGIN');
13205 
13206   for FUNCS IN (
13207         SELECT a.ATTRIBUTE_ID, a.ATTRIBUTE_NAME
13208         FROM HZ_TRANS_FUNCTIONS_VL f,
13209              HZ_TRANS_ATTRIBUTES_VL a,
13210              HZ_MATCH_RULE_PRIMARY pattr,
13211              HZ_PRIMARY_TRANS pfunc
13212         WHERE pattr.MATCH_RULE_ID = p_rule_id
13213         AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13214         AND a.ENTITY_NAME = p_entity
13215         AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13216         AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13217 
13218         UNION
13219 
13220         SELECT a.ATTRIBUTE_ID, a.ATTRIBUTE_NAME
13221         FROM HZ_TRANS_FUNCTIONS_VL f,
13222              HZ_TRANS_ATTRIBUTES_VL a,
13223              HZ_MATCH_RULE_SECONDARY sattr,
13224              HZ_SECONDARY_TRANS sfunc
13225         WHERE sattr.MATCH_RULE_ID = p_rule_id
13226         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13227         AND a.ENTITY_NAME = p_entity
13228         AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13229         AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13230   )
13231   LOOP
13232      IF HZ_WORD_CONDITIONS_PKG.is_a_cond_attrib( FUNCS.attribute_id)
13233      THEN
13234         NONE := FALSE ;
13235         l('---------POPULATE THE GLOBAL WORD CONDITION REC FOR ' || p_entity || '-------------');
13236         IF p_entity = 'PARTY'
13237 	    THEN
13238 
13239             l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||FUNCS.attribute_id||','||'p_search_rec.'||FUNCS.attribute_name||');');
13240 
13241 	    ELSE
13242             l('------ Populate global condition record only if search list is not empty -----------');
13243             l(' IF p_search_list.COUNT > 0');
13244             l(' THEN') ;
13245 		    l('     HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec ('||FUNCS.attribute_id||','||'p_search_list(1).'||FUNCS.attribute_name||');');
13246             l('END IF ;');
13247 	    END IF;
13248      END IF ;
13249   END LOOP;
13250 
13251   IF NONE
13252   THEN
13253     l( 'NULL ;');
13254   END IF ;
13255 
13256   l('EXCEPTION');
13257   l('  WHEN OTHERS THEN');
13258   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13259   l('    FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13260   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13261   l('    FND_MSG_PUB.ADD;');
13262   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13263   l('END;');
13264 
13265 END ;
13266 
13267 PROCEDURE generate_map_proc_bulk (
13268    p_entity             IN      VARCHAR2,
13269    p_proc_name          IN      VARCHAR2,
13270    p_rule_id		IN      NUMBER
13271 ) IS
13272 
13273   NONE BOOLEAN := TRUE;
13274   trxctx BOOLEAN := FALSE;
13275   INSERT_TRFNS varchar2(32000);
13276   INSERT_TRFN_VALUES varchar2(32000);
13277 BEGIN
13278 
13279   l('');
13280   l('/************************************************');
13281   l('  This procedure maps a search record from the logical');
13282   l('  record structure to the stage schema structure ');
13283   l('  for the '||p_entity || ' Entity after applying ');
13284   l('  the defined transformations');
13285   l('************************************************/');
13286   l('');
13287   l('PROCEDURE ' || p_proc_name || '( ');
13288   l('    p_search_ctx IN BOOLEAN,');
13289   IF p_entity = 'PARTY_SITES' THEN
13290     l('    p_search_list IN HZ_PARTY_SEARCH.party_site_list, ');
13291     l('    x_entered_max_score OUT NUMBER,');
13292     l('    x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list');
13293     l('  ) IS ');
13294   ELSIF p_entity = 'CONTACTS' THEN
13295     l('    p_search_list IN HZ_PARTY_SEARCH.contact_list, ');
13296     l('    x_entered_max_score OUT NUMBER,');
13297     l('    x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list');
13298     l('  ) IS ');
13299   ELSIF p_entity = 'CONTACT_POINTS' THEN
13300     l('    p_search_list IN HZ_PARTY_SEARCH.contact_point_list, ');
13301     l('    x_entered_max_score OUT NUMBER,');
13302     l('    x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list');
13303     l('  ) IS ');
13304   END IF;
13305   l('  l_current_max_score NUMBER;');
13306   l('  tmp VARCHAR2(4000);');
13307   l('BEGIN');
13308   ldbg_s('Inside Calling Procedure - '||p_proc_name);
13309   ldbg_s('p_entity - '||p_entity);
13310   l('  IF p_search_ctx THEN');
13311   l('    x_entered_max_score:=0;');
13312   l('    FOR I IN 1..p_search_list.COUNT LOOP');
13313   l('      l_current_max_score:=0;');
13314   IF p_entity = 'CONTACT_POINTS' THEN
13315     l('      x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;');
13316   END IF;
13317   for SECATTRS IN (
13318         SELECT a.ATTRIBUTE_NAME, SCORE
13319         FROM HZ_TRANS_ATTRIBUTES_VL a,
13320              HZ_MATCH_RULE_SECONDARY sattr
13321         WHERE sattr.MATCH_RULE_ID = p_rule_id
13322         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13323         AND a.ENTITY_NAME = p_entity) LOOP
13324     l('      IF p_search_list(I).'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13325     l('        l_current_max_score := l_current_max_score+'||SECATTRS.SCORE||';');
13329   l('        x_entered_max_score:=l_current_max_score;');
13326     l('      END IF;');
13327   END LOOP;
13328   l('      IF l_current_max_score>x_entered_max_score THEN');
13330   l('      END IF;');
13331   l('    END LOOP;');
13332   l('  END IF;');
13333 
13334   for FUNCS IN (
13335         SELECT a.ATTRIBUTE_NAME,
13336                f.PROCEDURE_NAME,
13337                f.STAGED_ATTRIBUTE_COLUMN
13338         FROM HZ_TRANS_FUNCTIONS_VL f,
13339              HZ_TRANS_ATTRIBUTES_VL a,
13340              HZ_MATCH_RULE_PRIMARY pattr,
13341              HZ_PRIMARY_TRANS pfunc
13342         WHERE pattr.MATCH_RULE_ID = p_rule_id
13343         AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13344         AND a.ENTITY_NAME = p_entity
13345         AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13346         AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13347 
13348         UNION
13349 
13350         SELECT a.ATTRIBUTE_NAME,
13351                f.PROCEDURE_NAME,
13352                f.STAGED_ATTRIBUTE_COLUMN
13353         FROM HZ_TRANS_FUNCTIONS_VL f,
13354              HZ_TRANS_ATTRIBUTES_VL a,
13355              HZ_MATCH_RULE_SECONDARY sattr,
13356              HZ_SECONDARY_TRANS sfunc
13357         WHERE sattr.MATCH_RULE_ID = p_rule_id
13358         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13359         AND a.ENTITY_NAME = p_entity
13360         AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13361         AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13362   )
13363   LOOP
13364     NONE := FALSE;
13365     l('  FOR I IN 1..p_search_list.COUNT LOOP');
13366     l('    IF p_search_ctx THEN');
13367     trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
13368     l('      IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13369     l('        x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13370     l('          ' || FUNCS.PROCEDURE_NAME ||'(');
13371     l('             p_search_list(I).'||FUNCS.ATTRIBUTE_NAME);
13372     l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13373     IF NOT trxctx THEN
13374       l('             ,''' ||p_entity||''');');
13375     ELSE
13376       l('             ,''' ||p_entity||''','''||g_context||''');');
13377     END IF;
13378     l('      ELSE');
13379     l('        x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13380     l('      END IF;');
13381     IF NOT trxctx THEN
13382       l('    END IF;');
13383     ELSE
13384       l('    ELSE');
13385       l('      IF p_search_list(I).'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13386       l('        tmp := ' || FUNCS.PROCEDURE_NAME ||'(');
13387       l('             x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
13388       l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13389       l('             ,''' ||p_entity||''',''SCORE'');');
13390       l('        IF tmp IS NOT NULL THEN');
13391       l('          x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
13392       l('        END IF;');
13393       l('      END IF;');
13394       l('    END IF;');
13395     END IF;
13396     l('  END LOOP;');
13397   END LOOP;
13398 
13399   -- VJN : For inserting into the Search Tables
13400    IF NOT NONE THEN
13401 
13402                for FUNCS IN (
13403                     SELECT a.ATTRIBUTE_NAME,
13404                            f.PROCEDURE_NAME,
13405                            f.STAGED_ATTRIBUTE_COLUMN
13406                     FROM HZ_TRANS_FUNCTIONS_VL f,
13407                          HZ_TRANS_ATTRIBUTES_VL a,
13408                          HZ_MATCH_RULE_PRIMARY pattr,
13409                          HZ_PRIMARY_TRANS pfunc
13410                     WHERE pattr.MATCH_RULE_ID = p_rule_id
13411                     AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13412                     AND a.ENTITY_NAME = p_entity
13413                     AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13414                     AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13415 
13416                     UNION
13417 
13418                     SELECT a.ATTRIBUTE_NAME,
13419                            f.PROCEDURE_NAME,
13420                            f.STAGED_ATTRIBUTE_COLUMN
13421                     FROM HZ_TRANS_FUNCTIONS_VL f,
13422                          HZ_TRANS_ATTRIBUTES_VL a,
13423                          HZ_MATCH_RULE_SECONDARY sattr,
13424                          HZ_SECONDARY_TRANS sfunc
13425                     WHERE sattr.MATCH_RULE_ID = p_rule_id
13426                     AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13427                     AND a.ENTITY_NAME = p_entity
13428                     AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13429                     AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13430               )
13431               LOOP
13432 
13433                 NONE := FALSE;
13434                 INSERT_TRFNS := INSERT_TRFNS ||','||FUNCS.STAGED_ATTRIBUTE_COLUMN;
13435                 INSERT_TRFN_VALUES := INSERT_TRFN_VALUES ||','||'x_stage_list(I).'||FUNCS.STAGED_ATTRIBUTE_COLUMN;
13436 
13437               END LOOP;
13438 
13439               IF p_entity = 'PARTY_SITES'
13440                 THEN
13441                     l('IF p_search_ctx THEN');
13442                     l('  FOR I IN 1..p_search_list.COUNT LOOP');
13443                     l('               insert into HZ_SRCH_PSITES(batch_id,party_id, party_osr,party_os, party_site_id,party_site_osr, party_site_os,new_party_flag ' || INSERT_TRFNS
13444                      ||               ')'||' values(-1,-1,-1,-1,-1,-1,-1,''Y'''|| INSERT_TRFN_VALUES ||');');
13445                     l('  END LOOP;');
13446                     l('END IF;');
13447                 END IF;
13448 
13449                 IF p_entity = 'CONTACTS'
13450                 THEN
13451                     l('IF p_search_ctx THEN');
13452                     l('  FOR I IN 1..p_search_list.COUNT LOOP');
13456                     l('END IF;');
13453                     l('              insert into HZ_SRCH_CONTACTS(batch_id,party_id, party_osr,party_os, org_contact_id,contact_osr, contact_os,new_party_flag ' || INSERT_TRFNS
13454                      ||              ')'||' values(-1,-1,-1,-1,-1,-1,-1,''Y'''|| INSERT_TRFN_VALUES ||');');
13455                     l('  END LOOP;');
13457                 END IF;
13458 
13459                 IF p_entity = 'CONTACT_POINTS'
13460                 THEN
13461                     l('IF p_search_ctx THEN');
13462                     l('  FOR I IN 1..p_search_list.COUNT LOOP');
13463                     l('              insert into HZ_SRCH_CPTS(batch_id,party_id, party_osr,party_os, contact_point_id,contact_pt_osr, contact_pt_os,contact_point_type,new_party_flag ' || INSERT_TRFNS
13464                      ||              ')'||' values(-1,-1,-1,-1,-1,-1,-1,-1,''Y'''|| INSERT_TRFN_VALUES ||');');
13465                     l('  END LOOP;');
13466                     l('END IF; ');
13467                 END IF;
13468   END IF;
13469 
13470   IF NONE THEN
13471     l('  NULL;');
13472   END IF;
13473 
13474   l('EXCEPTION');
13475   l('  WHEN OTHERS THEN');
13476   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13477   l('    FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13478   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13479   l('    FND_MSG_PUB.ADD;');
13480   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13481   l('END;');
13482 
13483 END generate_map_proc_bulk ;
13484 
13485 
13486 
13487 PROCEDURE generate_party_map_proc (
13488    p_proc_name          IN      VARCHAR2,
13489    p_rule_id            IN      NUMBER
13490 ) IS
13491 
13492   NONE BOOLEAN := TRUE;
13493   trxctx BOOLEAN := FALSE;
13494   l_filt VARCHAR2(1);
13495 BEGIN
13496 
13497   l('');
13498   l('/************************************************');
13499   l('  This procedure maps a search record from the logical');
13500   l('  record structure to the stage schema structure ');
13501   l('  for the PARTY Entity after applying ');
13502   l('  the defined transformations');
13503   l('************************************************/');
13504   l('');
13505   l('PROCEDURE ' || p_proc_name || '( ');
13506   l('    p_search_ctx IN BOOLEAN,');
13507   l('    p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type, ');
13508   l('    x_entered_max_score OUT NUMBER,');
13509   l('    x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type');
13510   l('  ) IS ');
13511   l('  tmp VARCHAR2(4000);');
13512   l('  l_party_name VARCHAR2(4000);');
13513   l('BEGIN');
13514   ldbg_s('Inside Calling Procedure - '||p_proc_name);
13515   l('   IF p_search_ctx THEN');
13516   l('     x_stage_rec.TX8 := NULL;');
13517   l('     g_other_party_level_attribs:=FALSE;');
13518   NONE:=TRUE;
13519   for PRIMATTRS IN (
13520         SELECT a.ATTRIBUTE_NAME
13521         FROM HZ_TRANS_ATTRIBUTES_VL a,
13522              HZ_MATCH_RULE_PRIMARY sattr
13523         WHERE sattr.MATCH_RULE_ID = p_rule_id
13524         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13525         AND a.ENTITY_NAME = 'PARTY'
13526         ) LOOP
13527     IF PRIMATTRS.ATTRIBUTE_NAME not in (
13528           'PARTY_NAME','PARTY_TYPE','STATUS','PARTY_ALL_NAMES') THEN
13529       IF NONE THEN
13530         l('    IF p_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL ');
13531         NONE:=FALSE;
13532       ELSE
13533         l('    OR p_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL ');
13534       END IF;
13535     END IF;
13536   END LOOP;
13537   IF NOT NONE THEN
13538     l('    THEN');
13539     l('      g_other_party_level_attribs:=TRUE;');
13540     l('    END IF;');
13541   END IF;
13542 
13543   l('     x_entered_max_score:=0;');
13544   for SECATTRS IN (
13545         SELECT a.ATTRIBUTE_NAME, SCORE
13546         FROM HZ_TRANS_ATTRIBUTES_VL a,
13547              HZ_MATCH_RULE_SECONDARY sattr
13548         WHERE sattr.MATCH_RULE_ID = p_rule_id
13549         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13550         AND a.ENTITY_NAME = 'PARTY') LOOP
13551     l('    IF p_search_rec.'||SECATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13552     l('      x_entered_max_score := x_entered_max_score+'||SECATTRS.SCORE||';');
13553     l('    END IF;');
13554   END LOOP;
13555   l('    END IF;');
13556 
13557   for FUNCS IN (
13558         SELECT a.ATTRIBUTE_NAME,a.attribute_id,
13559                f.PROCEDURE_NAME,
13560                f.STAGED_ATTRIBUTE_COLUMN
13561         FROM HZ_TRANS_FUNCTIONS_VL f,
13562              HZ_TRANS_ATTRIBUTES_VL a,
13563              HZ_MATCH_RULE_PRIMARY pattr,
13564              HZ_PRIMARY_TRANS pfunc
13565         WHERE pattr.MATCH_RULE_ID = p_rule_id
13566         AND pattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13567         AND a.ENTITY_NAME = 'PARTY'
13568         AND pattr.PRIMARY_ATTRIBUTE_ID = pfunc.PRIMARY_ATTRIBUTE_ID
13569         AND pfunc.FUNCTION_ID = f.FUNCTION_ID
13570 
13571         UNION
13572 
13573         SELECT a.ATTRIBUTE_NAME,a.attribute_id,
13574                f.PROCEDURE_NAME,
13575                f.STAGED_ATTRIBUTE_COLUMN
13576         FROM HZ_TRANS_FUNCTIONS_VL f,
13577              HZ_TRANS_ATTRIBUTES_VL a,
13578              HZ_MATCH_RULE_SECONDARY sattr,
13579              HZ_SECONDARY_TRANS sfunc
13580         WHERE sattr.MATCH_RULE_ID = p_rule_id
13581         AND sattr.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13582         AND a.ENTITY_NAME = 'PARTY'
13583         AND sattr.SECONDARY_ATTRIBUTE_ID = sfunc.SECONDARY_ATTRIBUTE_ID
13584         AND sfunc.FUNCTION_ID = f.FUNCTION_ID
13585 
13586         UNION
13587 
13588         SELECT a.attribute_name,a.attribute_id,
13589                f.PROCEDURE_NAME,
13590                f.STAGED_ATTRIBUTE_COLUMN
13591         FROM HZ_TRANS_FUNCTIONS_VL f,
13595         AND a.attribute_name='PARTY_TYPE'
13592             HZ_TRANS_ATTRIBUTES_VL a
13593         WHERE f.ATTRIBUTE_ID = a.ATTRIBUTE_ID
13594         AND a.entity_name = 'PARTY'
13596         AND f.PROCEDURE_NAME='HZ_TRANS_PKG.EXACT'
13597         AND nvl(f.active_flag,'Y')='Y'
13598         AND ROWNUM=1
13599   )
13600   LOOP
13601     NONE := FALSE;
13602     trxctx := has_trx_context(FUNCS.PROCEDURE_NAME);
13603     begin
13604       select nvl(filter_flag, 'N') INTO l_filt
13605       FROM HZ_MATCH_RULE_PRIMARY p
13606       where p.MATCH_RULE_ID = p_rule_id
13607       AND p.attribute_id = FUNCS.attribute_id;
13608     exception
13609       when no_data_found then
13610         l_filt:='N';
13611     end;
13612     IF l_filt = 'N' THEN
13613     l('  IF p_search_ctx THEN');
13614     l('    IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13615     l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13616     l('        ' || FUNCS.PROCEDURE_NAME ||'(');
13617     l('             p_search_rec.'||FUNCS.ATTRIBUTE_NAME);
13618     l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13619     IF trxctx THEN
13620       l('             ,''PARTY'','''||g_context||''');');
13621     ELSE
13622       l('             ,''PARTY'');');
13623     END IF;
13624     l('    ELSE');
13625     l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13626     l('    END IF;');
13627     IF NOT trxctx THEN
13628       l('  END IF;');
13629     ELSE
13630       l('  ELSE');
13631       l('    IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13632       l('      tmp :=' || FUNCS.PROCEDURE_NAME ||'(');
13633       l('             x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN);
13634       l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13635       l('             ,''PARTY'',''SCORE'');');
13636       l('      IF tmp IS NOT NULL THEN');
13637       l('        x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := tmp;');
13638       l('      END IF;');
13639       l('    END IF;');
13640       l('  END IF;');
13641     END IF;
13642     ELSE
13643     l('    IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13644     l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13645     l('        ' || FUNCS.PROCEDURE_NAME ||'(');
13646     l('             p_search_rec.'||FUNCS.ATTRIBUTE_NAME);
13647     l('             ,null,''' || FUNCS.ATTRIBUTE_NAME || '''');
13648     IF trxctx THEN
13649       l('             ,''PARTY'',''STAGE'');');
13650     ELSE
13651       l('             ,''PARTY'');');
13652     END IF;
13653     l('    ELSE');
13654     l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := '''';');
13655     l('    END IF;');
13656     END IF;
13657 
13658     --- Modified for Bug 4016594
13659     IF FUNCS.ATTRIBUTE_NAME = 'DUNS_NUMBER_C' AND upper(FUNCS.PROCEDURE_NAME) = 'HZ_TRANS_PKG.EXACT' THEN
13660       l('    IF p_search_rec.'||FUNCS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13661       l('      x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ' := ');
13662       l('          lpad(x_stage_rec.'||FUNCS.STAGED_ATTRIBUTE_COLUMN || ',9,''0'');');
13663       l('    END IF;');
13664     END IF;
13665 
13666   END LOOP;
13667   l('    l_party_name := p_search_rec.PARTY_NAME;');
13668   l('    IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN');
13669   l('      l_party_name := p_search_rec.PARTY_ALL_NAMES;');
13670   l('    END IF;');
13671   l('    IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN');
13672   l('      x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,''PARTY_NAME'',''PARTY'','''||g_context||''');');
13673   l('    END IF;');
13674 
13675   IF NONE THEN
13676     l('  NULL;');
13677   END IF;
13678 
13679 
13680   l('EXCEPTION');
13681   l('  WHEN OTHERS THEN');
13682   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_TRANSFORM_PROC_ERROR'');');
13683   l('    FND_MESSAGE.SET_TOKEN(''PROC'' , ''' || p_proc_name || ''');');
13684   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
13685   l('    FND_MSG_PUB.ADD;');
13686   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13687   l('END;');
13688 
13689 END generate_party_map_proc;
13690 
13691 
13692 
13693 PROCEDURE generate_check_proc (
13694 	p_rule_id	NUMBER) IS
13695 FIRST BOOLEAN;
13696 BEGIN
13697   l('');
13698   l('/************************************************');
13699   l('  This procedure checks if the input search criteria ');
13700   l('  is valid. It checks if : ');
13701   l('   1. At least one primary condition is passed');
13702   l('   2. Contact Point Type is not null for each condition');
13703   l('************************************************/');
13704   l('');
13705 
13706   l('FUNCTION check_prim_cond(');
13707   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
13708   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
13709   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
13710   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list)');
13711   l('      RETURN BOOLEAN IS');
13712   l('  BEGIN');
13713 
13714   FIRST := TRUE;
13715   FOR CPTS IN (SELECT ATTRIBUTE_NAME
13716        FROM HZ_TRANS_ATTRIBUTES_VL a,
13717             HZ_MATCH_RULE_PRIMARY p
13718        WHERE p.match_rule_id = p_rule_id
13719        AND a.ENTITY_NAME = 'CONTACT_POINTS'
13720        AND p.attribute_id = a.attribute_id
13721        AND ATTRIBUTE_NAME <> 'CONTACT_POINT_TYPE'
13722        AND nvl(p.FILTER_FLAG,'N') = 'N') LOOP
13723     IF FIRST THEN
13724       l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
13725       l('      IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (');
13726       l('p_contact_point_list(I).'||CPTS.ATTRIBUTE_NAME||' IS NOT NULL ');
13730     END IF;
13727       FIRST := FALSE;
13728     ELSE
13729       l('OR p_contact_point_list(I).'||CPTS.ATTRIBUTE_NAME||' IS NOT NULL ');
13731   END LOOP;
13732   IF NOT FIRST THEN
13733     l(' ) THEN');
13734     l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_CONTACT_POINT_TYPE'');');
13735     l('        FND_MSG_PUB.ADD;');
13736     l('        RAISE FND_API.G_EXC_ERROR;');
13737     l('      END IF;');
13738     l('    END LOOP;');
13739     l('');
13740   END IF;
13741 
13742   FOR PRIMATTRS IN (
13743        SELECT ATTRIBUTE_NAME
13744        FROM HZ_TRANS_ATTRIBUTES_VL a,
13745             HZ_MATCH_RULE_PRIMARY p
13746        WHERE p.match_rule_id = p_rule_id
13747        AND p.attribute_id = a.attribute_id
13748        AND a.ENTITY_NAME = 'PARTY'
13749        AND nvl(p.FILTER_FLAG,'N') = 'N') LOOP
13750     l('    IF p_party_search_rec.'||PRIMATTRS.ATTRIBUTE_NAME || ' IS NOT NULL THEN ');
13751     l('      RETURN TRUE;');
13752     l('    END IF;');
13753   END LOOP;
13754 
13755   FOR PRIMATTRS IN (
13756        SELECT ENTITY_NAME, ATTRIBUTE_NAME
13757        FROM HZ_TRANS_ATTRIBUTES_VL a,
13758             HZ_MATCH_RULE_PRIMARY p
13759        WHERE p.match_rule_id = p_rule_id
13760        AND a.ENTITY_NAME <> 'PARTY'
13761        AND p.attribute_id = a.attribute_id
13762        AND ATTRIBUTE_NAME <> 'CONTACT_POINT_TYPE'
13763        AND nvl(p.FILTER_FLAG,'N') = 'N')
13764   LOOP
13765     IF PRIMATTRS.ENTITY_NAME = 'PARTY_SITES' THEN
13766       l('    FOR I IN 1..p_party_site_list.COUNT LOOP');
13767       HZ_GEN_PLSQL.add_line('      IF p_party_site_list(I).',false);
13768     ELSIF PRIMATTRS.ENTITY_NAME = 'CONTACTS' THEN
13769       l('    FOR I IN 1..p_contact_list.COUNT LOOP');
13770       HZ_GEN_PLSQL.add_line('      IF p_contact_list(I).',false);
13771     ELSIF PRIMATTRS.ENTITY_NAME = 'CONTACT_POINTS' THEN
13772       l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
13773       HZ_GEN_PLSQL.add_line('      IF p_contact_point_list(I).',false);
13774     END IF;
13775     l(PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL THEN ');
13776     l('        RETURN TRUE;');
13777     l('      END IF;');
13778     l('    END LOOP;');
13779   END LOOP;
13780   l('    RETURN FALSE;');
13781   l('EXCEPTION');
13782   l('  WHEN FND_API.G_EXC_ERROR THEN');
13783   l('    RAISE FND_API.G_EXC_ERROR;');
13784   l('  WHEN OTHERS THEN');
13785   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
13786   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_prim_cond'');');
13787   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
13788   l('    FND_MSG_PUB.ADD;');
13789   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13790   l('  END check_prim_cond;');
13791   l('');
13792 
13793   l('/************************************************');
13794   l('  This procedure checks if the input search condition ');
13795   l('  has party site criteria. ');
13796   l('************************************************/');
13797 
13798   l('');
13799   l('PROCEDURE check_party_site_cond(');
13800   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
13801   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
13802   l('	   x_secondary		   OUT     BOOLEAN,');
13803   l('	   x_primary		   OUT     BOOLEAN');
13804   l(') IS');
13805   l('  BEGIN');
13806   l('    x_primary:= FALSE;');
13807   l('    x_secondary:= FALSE;');
13808 
13809   l('    FOR I IN 1..p_party_site_list.COUNT LOOP');
13810   FIRST := TRUE;
13811   FOR PRIMATTRS IN (
13812        SELECT ATTRIBUTE_NAME
13813        FROM HZ_TRANS_ATTRIBUTES_VL a,
13814             HZ_MATCH_RULE_PRIMARY p
13815        WHERE p.match_rule_id = p_rule_id
13816        AND a.ENTITY_NAME = 'PARTY_SITES'
13817        AND p.attribute_id = a.attribute_id)
13818   LOOP
13819     IF FIRST THEN
13820       l('      IF p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13821       FIRST := FALSE;
13822     ELSE
13823       l('         OR p_party_site_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13824     END IF;
13825   END LOOP;
13826   IF NOT FIRST THEN
13827     l('      THEN');
13828     l('        x_primary := TRUE;');
13829     l('      END IF;');
13830     l('      EXIT WHEN x_primary;');
13831   ELSE
13832     l('      NULL;');
13833   END IF;
13834   l('    END LOOP;');
13835 
13836   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
13837   FIRST := TRUE;
13838   FOR PRIMATTRS IN (
13839        SELECT ATTRIBUTE_NAME
13840        FROM HZ_TRANS_ATTRIBUTES_VL a,
13841             HZ_MATCH_RULE_PRIMARY p
13842        WHERE p.match_rule_id = p_rule_id
13843        AND a.ENTITY_NAME = 'CONTACT_POINTS'
13844        AND p.attribute_id = a.attribute_id)
13845   LOOP
13846     IF FIRST THEN
13847       l('      IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13848       FIRST := FALSE;
13849     ELSE
13850       l('         OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13851     END IF;
13852   END LOOP;
13853 
13854   IF NOT FIRST THEN
13855     l('      THEN');
13856     l('        x_primary := TRUE;');
13857     l('      END IF;');
13858     l('      EXIT WHEN x_primary;');
13859   ELSE
13860     l('      NULL;');
13861   END IF;
13862   l('    END LOOP;');
13863   l('');
13864 
13865   l('    FOR I IN 1..p_party_site_list.COUNT LOOP');
13866   FIRST := TRUE;
13867   FOR SECATTRS IN (
13868        SELECT ATTRIBUTE_NAME
13869        FROM HZ_TRANS_ATTRIBUTES_VL a,
13870             HZ_MATCH_RULE_SECONDARY s
13871        WHERE s.match_rule_id = p_rule_id
13872        AND a.ENTITY_NAME = 'PARTY_SITES'
13873        AND s.attribute_id = a.attribute_id)
13874   LOOP
13878     ELSE
13875     IF FIRST THEN
13876       l('      IF p_party_site_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13877       FIRST := FALSE;
13879       l('         OR p_party_site_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13880     END IF;
13881   END LOOP;
13882   IF NOT FIRST THEN
13883     l('      THEN');
13884     l('        x_secondary := TRUE;');
13885     l('      END IF;');
13886     l('      EXIT WHEN x_secondary;');
13887   ELSE
13888     l('      NULL;');
13889   END IF;
13890   l('    END LOOP;');
13891 
13892   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
13893   FIRST := TRUE;
13894   FOR SECATTRS IN (
13895        SELECT ATTRIBUTE_NAME
13896        FROM HZ_TRANS_ATTRIBUTES_VL a,
13897             HZ_MATCH_RULE_SECONDARY s
13898        WHERE s.match_rule_id = p_rule_id
13899        AND a.ENTITY_NAME = 'CONTACT_POINTS'
13900        AND s.attribute_id = a.attribute_id)
13901   LOOP
13902     IF FIRST THEN
13903       l('      IF p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13904       FIRST := FALSE;
13905     ELSE
13906       l('         OR p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13907     END IF;
13908   END LOOP;
13909 
13910   IF NOT FIRST THEN
13911     l('      THEN');
13912     l('        x_secondary := TRUE;');
13913     l('      END IF;');
13914     l('      EXIT WHEN x_secondary;');
13915   ELSE
13916     l('      NULL;');
13917   END IF;
13918   l('    END LOOP;');
13919   l('EXCEPTION');
13920   l('  WHEN OTHERS THEN');
13921   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
13922   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_party_site_cond'');');
13923   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
13924   l('    FND_MSG_PUB.ADD;');
13925   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
13926   l('  END check_party_site_cond;');
13927   l('');
13928 
13929   l('/************************************************');
13930   l('  This procedure checks if the input search condition ');
13931   l('  has contact criteria. ');
13932   l('************************************************/');
13933 
13934   l('');
13935   l('PROCEDURE check_contact_cond(');
13936   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
13937   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
13938   l('      x_secondary             OUT     BOOLEAN,');
13939   l('      x_primary               OUT     BOOLEAN');
13940   l(') IS');
13941 
13942   l('  BEGIN');
13943   l('    x_primary:= FALSE;');
13944   l('    x_secondary:= FALSE;');
13945 
13946 
13947   l('    FOR I IN 1..p_contact_list.COUNT LOOP');
13948   FIRST := TRUE;
13949   FOR PRIMATTRS IN (
13950        SELECT ATTRIBUTE_NAME
13951        FROM HZ_TRANS_ATTRIBUTES_VL a,
13952             HZ_MATCH_RULE_PRIMARY p
13953        WHERE p.match_rule_id = p_rule_id
13954        AND a.ENTITY_NAME = 'CONTACTS'
13955        AND p.attribute_id = a.attribute_id)
13956   LOOP
13957     IF FIRST THEN
13958       l('      IF p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13959       FIRST := FALSE;
13960     ELSE
13961       l('         OR p_contact_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13962     END IF;
13963   END LOOP;
13964   IF NOT FIRST THEN
13965     l('      THEN');
13966     l('        x_primary := TRUE;');
13967     l('      END IF;');
13968     l('      EXIT WHEN x_primary;');
13969   ELSE
13970     l('      NULL;');
13971   END IF;
13972   l('    END LOOP;');
13973   l('');
13974   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
13975   FIRST := TRUE;
13976   FOR PRIMATTRS IN (
13977        SELECT ATTRIBUTE_NAME
13978        FROM HZ_TRANS_ATTRIBUTES_VL a,
13979             HZ_MATCH_RULE_PRIMARY p
13980        WHERE p.match_rule_id = p_rule_id
13981        AND a.ENTITY_NAME = 'CONTACT_POINTS'
13982        AND p.attribute_id = a.attribute_id)
13983   LOOP
13984     IF FIRST THEN
13985       l('      IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
13986       FIRST := FALSE;
13987     ELSE
13988       l('         OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
13989     END IF;
13990   END LOOP;
13991   IF NOT FIRST THEN
13992     l('      THEN');
13993     l('        x_primary := TRUE;');
13994     l('      END IF;');
13995     l('      EXIT WHEN x_primary;');
13996   ELSE
13997     l('      NULL;');
13998   END IF;
13999   l('    END LOOP;');
14000 
14001   l('');
14002   l('    FOR I IN 1..p_contact_list.COUNT LOOP');
14003   FIRST := TRUE;
14004   FOR SECATTRS IN (
14005        SELECT ATTRIBUTE_NAME
14006        FROM HZ_TRANS_ATTRIBUTES_VL a,
14007             HZ_MATCH_RULE_SECONDARY s
14008        WHERE s.match_rule_id = p_rule_id
14009        AND a.ENTITY_NAME = 'CONTACTS'
14010        AND s.attribute_id = a.attribute_id)
14011   LOOP
14012     IF FIRST THEN
14013       l('      IF p_contact_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14014       FIRST := FALSE;
14015     ELSE
14016       l('         OR p_contact_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14017     END IF;
14018   END LOOP;
14019   IF NOT FIRST THEN
14020     l('      THEN');
14021     l('        x_secondary := TRUE;');
14022     l('      END IF;');
14023     l('      EXIT WHEN x_secondary;');
14024   ELSE
14025     l('      NULL;');
14026   END IF;
14027   l('    END LOOP;');
14028   l('');
14032   FOR SECATTRS IN (
14029 
14030   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
14031   FIRST := TRUE;
14033        SELECT ATTRIBUTE_NAME
14034        FROM HZ_TRANS_ATTRIBUTES_VL a,
14035             HZ_MATCH_RULE_SECONDARY s
14036        WHERE s.match_rule_id = p_rule_id
14037        AND a.ENTITY_NAME = 'CONTACT_POINTS'
14038        AND s.attribute_id = a.attribute_id)
14039   LOOP
14040     IF FIRST THEN
14041       l('      IF p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14042       FIRST := FALSE;
14043     ELSE
14044       l('         OR p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL');
14045     END IF;
14046   END LOOP;
14047   IF NOT FIRST THEN
14048     l('      THEN');
14049     l('        x_secondary := TRUE;');
14050     l('      END IF;');
14051     l('      EXIT WHEN x_secondary;');
14052   ELSE
14053     l('      NULL;');
14054   END IF;
14055   l('    END LOOP;');
14056 
14057   l('EXCEPTION');
14058   l('  WHEN OTHERS THEN');
14059   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14060   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_contact_cond'');');
14061   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14062   l('    FND_MSG_PUB.ADD;');
14063   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14064   l('  END check_contact_cond;');
14065   l('');
14066 
14067   l('/************************************************');
14068   l('  This procedure checks if the input search condition ');
14069   l('  has valid contact point criteria. ');
14070   l('************************************************/');
14071 
14072   l('');
14073   l('PROCEDURE check_contact_point_cond(');
14074   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
14075   l('      x_secondary             OUT     BOOLEAN,');
14076   l('      x_primary               OUT     BOOLEAN');
14077   l(') IS');
14078   l('  BEGIN');
14079   l('    x_primary:= FALSE;');
14080   l('    x_secondary:= FALSE;');
14081   l('');
14082   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
14083   l('      IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN ');
14084   l('        FND_MESSAGE.SET_NAME(''AR'', ''HZ_NO_CONTACT_POINT_TYPE'');');
14085   l('        FND_MSG_PUB.ADD;');
14086   l('        RAISE FND_API.G_EXC_ERROR;');
14087   l('      END IF;');
14088   l('    END LOOP;');
14089   l('');
14090   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
14091   FIRST := TRUE;
14092   FOR PRIMATTRS IN (
14093        SELECT ATTRIBUTE_NAME
14094        FROM HZ_TRANS_ATTRIBUTES_VL a,
14095             HZ_MATCH_RULE_PRIMARY p
14096        WHERE p.match_rule_id = p_rule_id
14097        AND a.ENTITY_NAME = 'CONTACT_POINTS'
14098        AND p.attribute_id = a.attribute_id)
14099   LOOP
14100     IF FIRST THEN
14101       l('      IF p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14102       FIRST := FALSE;
14103     ELSE
14104       l('         OR p_contact_point_list(I).'|| PRIMATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14105     END IF;
14106   END LOOP;
14107   IF NOT FIRST THEN
14108     l('      THEN');
14109     l('        x_primary := TRUE;');
14110     l('      END IF;');
14111     l('      EXIT WHEN x_primary;');
14112   ELSE
14113     l('      NULL;');
14114   END IF;
14115   l('    END LOOP;');
14116 
14117   l('    FOR I IN 1..p_contact_point_list.COUNT LOOP');
14118   FIRST := TRUE;
14119   FOR SECATTRS IN (
14120        SELECT ATTRIBUTE_NAME
14121        FROM HZ_TRANS_ATTRIBUTES_VL a,
14122             HZ_MATCH_RULE_SECONDARY s
14123        WHERE s.match_rule_id = p_rule_id
14124        AND a.ENTITY_NAME = 'CONTACT_POINTS'
14125        AND s.attribute_id = a.attribute_id)
14126   LOOP
14127     IF FIRST THEN
14128       l('      IF p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL  ');
14129       FIRST := FALSE;
14130     ELSE
14131       l('         OR p_contact_point_list(I).'|| SECATTRS.ATTRIBUTE_NAME||' IS NOT NULL ');
14132     END IF;
14133   END LOOP;
14134 
14135   IF NOT FIRST THEN
14136     l('      THEN');
14137     l('        x_secondary := TRUE;');
14138     l('      END IF;');
14139     l('      EXIT WHEN x_secondary;');
14140   ELSE
14141     l('      NULL;');
14142   END IF;
14143   l('    END LOOP;');
14144   l('EXCEPTION');
14145   l('  WHEN OTHERS THEN');
14146   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14147   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''check_contact_point_cond'');');
14148   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14149   l('    FND_MSG_PUB.ADD;');
14150   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14151   l('  END check_contact_point_cond;');
14152   l('');
14153 
14154 
14155 END;
14156 
14157 PROCEDURE generate_custom_code (
14158 	p_rule_id       NUMBER,
14159         p_record 	VARCHAR2,
14160 	p_entity	VARCHAR2,
14161 	p_record_id	VARCHAR2) IS
14162 
14163 BEGIN
14164 
14165   ldbg_s('Inside calling procedure - generate_custom_code');
14166 
14167   FOR CUSTATTRS IN (
14168     SELECT distinct ATTRIBUTE_NAME, CUSTOM_ATTRIBUTE_PROCEDURE
14169     FROM HZ_TRANS_ATTRIBUTES_VL a,
14170          HZ_MATCH_RULE_PRIMARY p
14171     WHERE p.match_rule_id = p_rule_id
14172     AND p.attribute_id = a.attribute_id
14173     AND a.ENTITY_NAME = p_entity
14174     AND (a.SOURCE_TABLE = 'CUSTOM'
14175     OR a.CUSTOM_ATTRIBUTE_PROCEDURE IS NOT NULL)
14176     UNION
14177     SELECT distinct ATTRIBUTE_NAME, CUSTOM_ATTRIBUTE_PROCEDURE
14181     AND s.attribute_id = a.attribute_id
14178     FROM HZ_TRANS_ATTRIBUTES_VL a,
14179          HZ_MATCH_RULE_SECONDARY s
14180     WHERE s.match_rule_id = p_rule_id
14182     AND a.ENTITY_NAME = p_entity
14183     AND (a.SOURCE_TABLE = 'CUSTOM'
14184     OR a.CUSTOM_ATTRIBUTE_PROCEDURE IS NOT NULL)) LOOP
14185 
14186     l(p_record||'.'||CUSTATTRS.ATTRIBUTE_NAME||':=');
14187     l('       '||CUSTATTRS.CUSTOM_ATTRIBUTE_PROCEDURE||'('||
14188       p_record_id||' , '''||p_entity||''','''||CUSTATTRS.ATTRIBUTE_NAME||''');');
14189   END LOOP;
14190 END;
14191 
14192 -- Fix for Bug 4734661. Modified to add the p_called_from parameter.
14193 PROCEDURE generate_acquire_proc (
14194    p_rule_id       NUMBER
14195   ,p_called_from   VARCHAR2) IS
14196 
14197 l_num_attrs NUMBER;
14198 FIRST BOOLEAN;
14199 BEGIN
14200   l('');
14201   l('/************************************************');
14202   l('  This procedure retrieves the match rule attributes into ');
14203   l('  the search record structures');
14204   l('************************************************/');
14205   l('');
14206   l('PROCEDURE get_party_for_search (');
14207   l('        p_party_id              IN      NUMBER,');
14208   l('        x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
14209   l('        x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
14210   l('        x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
14211   l('        x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
14212   l(') IS');
14213   l('  l_party_id NUMBER;');
14214   l('  l_party_site_ids HZ_PARTY_SEARCH.IDList;');
14215   l('  l_contact_ids HZ_PARTY_SEARCH.IDList;');
14216   l('  l_contact_pt_ids HZ_PARTY_SEARCH.IDList;');
14217   l('  ps NUMBER :=1;');
14218   l('  cpt NUMBER :=1;');
14219   l('  ct NUMBER :=1;');
14220   l('  l_use_contact_info varchar2(1);');--bug 5169483
14221   l('BEGIN');
14222   l('');
14223 
14224 --bug 5169483
14225   l('    l_use_contact_info := ''Y'';');
14226   l('  IF nvl(FND_PROFILE.VALUE(''HZ_DQM_REL_PARTY_MATCH''),''N'')=''Y'' THEN');
14227   l('    l_use_contact_info := ''N'';');
14228   l('  END IF;');
14229 --bug 5169483
14230 
14231   -- Query number of party attributes
14232   SELECT COUNT(*) INTO l_num_attrs
14233   FROM (
14234     SELECT a.attribute_id
14235     FROM HZ_TRANS_ATTRIBUTES_VL a,
14236          HZ_MATCH_RULE_PRIMARY p
14237     WHERE p.match_rule_id = p_rule_id
14238     AND p.attribute_id = a.attribute_id
14239     AND a.ENTITY_NAME = 'PARTY'
14240 
14241     UNION
14242 
14243     SELECT a.attribute_id
14244     FROM HZ_TRANS_ATTRIBUTES_VL a,
14245          HZ_MATCH_RULE_SECONDARY s
14246     WHERE s.match_rule_id = p_rule_id
14247     AND s.attribute_id = a.attribute_id
14248     AND a.ENTITY_NAME = 'PARTY'
14249   );
14250 
14251   IF l_num_attrs > 0 THEN
14252     l('  l_party_id := p_party_id;');
14253   ELSE
14254     l('  l_party_id := null;');
14255   END IF;
14256 
14257   SELECT COUNT(*) INTO l_num_attrs
14258   FROM (
14259     SELECT a.attribute_id
14260     FROM HZ_TRANS_ATTRIBUTES_VL a,
14261          HZ_MATCH_RULE_PRIMARY p
14262     WHERE p.match_rule_id = p_rule_id
14263     AND p.attribute_id = a.attribute_id
14264     AND a.ENTITY_NAME = 'PARTY_SITES'
14265 
14266     UNION
14267 
14268     SELECT a.attribute_id
14269     FROM HZ_TRANS_ATTRIBUTES_VL a,
14270          HZ_MATCH_RULE_SECONDARY s
14271     WHERE s.match_rule_id = p_rule_id
14272     AND s.attribute_id = a.attribute_id
14273     AND a.ENTITY_NAME = 'PARTY_SITES'
14274   );
14275 
14276 
14277   IF l_num_attrs > 0 THEN
14278 
14279     l('  FOR PARTY_SITES IN (');
14280     l(' SELECT party_site_id FROM (');  ---Code Change for Match Rule Set
14281     l('     SELECT party_site_id,identifying_address_flag'); ---Code Change for Match Rule Set
14282     l('      FROM HZ_PARTY_SITES');
14283     l('      WHERE party_id = p_party_id');
14284     l('      AND (status is null OR status = ''A'') ');
14285     l('      AND identifying_address_flag=''Y''');
14286     l('      UNION');
14287     l('');
14288     l('     SELECT party_site_id,NVL(identifying_address_flag,''N'') identifying_address_flag'); ---Code Change for Match Rule Set
14289     l('      FROM HZ_PARTY_SITES');
14290     l('      WHERE party_id = p_party_id');
14291     l('      AND (status is null OR status = ''A'') ');
14292     l('      AND (identifying_address_flag IS NULL OR identifying_address_flag = ''N'')');
14293     -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14294     IF p_called_from IS NULL THEN
14295       l('      AND ROWNUM<6');
14296     END IF;
14297     l('      UNION');
14298     l('');
14299     l('     SELECT party_site_id,NVL(identifying_address_flag,''N'') identifying_address_flag');
14300     l('      FROM HZ_PARTY_SITES');
14301     l('      WHERE (status is null OR status = ''A'') ');
14302     l('      AND party_id in (');
14303     l('        SELECT party_id');
14304     l('        FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS');
14305     l('        WHERE HZ_RELATIONSHIPS.object_id = p_party_id');
14306     l('        AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14307     l('        AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14308     l('        AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14309     l('        and l_use_contact_info = ''Y''');--bug 5169483
14310     l('     ) ');
14311     -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14312     IF p_called_from IS NULL THEN
14313       l('     AND ROWNUM<6');
14314     END IF;
14315     l(') order by identifying_address_flag desc'); ---Code Change for Match Rule Set
14316     l('    ) LOOP');
14320   END IF;
14317     l('      l_party_site_ids(ps) := PARTY_SITES.party_site_id;');
14318     l('      ps:=ps+1;');
14319     l('  END LOOP;');
14321 
14322   -- Query number of contact attributes
14323   SELECT COUNT(*) INTO l_num_attrs
14324   FROM (
14325     SELECT a.attribute_id
14326     FROM HZ_TRANS_ATTRIBUTES_VL a,
14327          HZ_MATCH_RULE_PRIMARY p
14328     WHERE p.match_rule_id = p_rule_id
14329     AND p.attribute_id = a.attribute_id
14330     AND a.ENTITY_NAME = 'CONTACTS'
14331 
14332     UNION
14333 
14334     SELECT a.attribute_id
14335     FROM HZ_TRANS_ATTRIBUTES_VL a,
14336          HZ_MATCH_RULE_SECONDARY s
14337     WHERE s.match_rule_id = p_rule_id
14338     AND s.attribute_id = a.attribute_id
14339     AND a.ENTITY_NAME = 'CONTACTS'
14340   );
14341 
14342   IF l_num_attrs > 0 THEN
14343     l('    FOR CONTACTS IN (');
14344     l('      SELECT org_contact_id');
14345     l('      FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS');
14346     l('      WHERE HZ_RELATIONSHIPS.object_id = p_party_id');
14347     l('      AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14348     l('      AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14349     l('      AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = ''F''');
14350     l('      AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14351     -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14352     IF p_called_from IS NULL THEN
14353       l('      AND ROWNUM<6 ');
14354     END IF;
14355     l('    ) LOOP');
14356     l('      l_contact_ids(ct) := CONTACTS.org_contact_id;');
14357     l('      ct := ct+1;');
14358     l('    END LOOP;');
14359   END IF;
14360 
14361   -- Query number of contact point attributes
14362   SELECT COUNT(*) INTO l_num_attrs
14363   FROM (
14364     SELECT a.attribute_id
14365     FROM HZ_TRANS_ATTRIBUTES_VL a,
14366          HZ_MATCH_RULE_PRIMARY p
14367     WHERE p.match_rule_id = p_rule_id
14368     AND p.attribute_id = a.attribute_id
14369     AND a.ENTITY_NAME = 'CONTACT_POINTS'
14370 
14371     UNION
14372 
14373     SELECT a.attribute_id
14374     FROM HZ_TRANS_ATTRIBUTES_VL a,
14375          HZ_MATCH_RULE_SECONDARY s
14376     WHERE s.match_rule_id = p_rule_id
14377     AND s.attribute_id = a.attribute_id
14378     AND a.ENTITY_NAME = 'CONTACT_POINTS'
14379   );
14380 
14381   IF l_num_attrs > 0 THEN
14382     l('    FOR CONTACT_POINTS IN (');
14383     l('      SELECT CONTACT_POINT_ID');
14384     l('      FROM HZ_CONTACT_POINTS ');
14385     l('      WHERE PRIMARY_FLAG = ''Y''');
14386     l('      AND owner_table_name = ''HZ_PARTIES''');
14387     l('      AND owner_table_id = p_party_id');
14388     l('');
14389     l('      UNION');
14390     l('');
14391     l('      SELECT CONTACT_POINT_ID');
14392     l('      FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS ');--bug 4873802
14393     l('      WHERE PRIMARY_FLAG = ''Y''');
14394     l('      AND owner_table_name = ''HZ_PARTIES''');
14395     l('      AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id');--bug 4873802
14396     l('      AND HZ_RELATIONSHIPS.object_id = p_party_id');
14397     l('      AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14398     l('      AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14399     l('      AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14400     l('        and l_use_contact_info = ''Y''');--bug 5169483
14401     -- Fix for Bug 4734661. Include this clause only if called from gen_pkg_body and not gen_pkg_body_bulk.
14402     IF p_called_from IS NULL THEN
14403       l('      AND ROWNUM<6');
14404     END IF;
14405     l('      UNION');
14406     l('');
14407     l('      SELECT CONTACT_POINT_ID');
14408     l('      FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES  ');--bug 4873802
14409     l('      WHERE PRIMARY_FLAG = ''Y''');
14410     l('      AND owner_table_name = ''HZ_PARTY_SITES''');
14411     l('      AND owner_table_id = party_site_id ');--bug 4873802
14412     l('      AND PARTY_ID = p_party_id ');
14413     l('      AND IDENTIFYING_ADDRESS_FLAG = ''Y'') LOOP');
14414     l('      l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;');
14415     l('      cpt := cpt+1;');
14416     l('    END LOOP;');
14417   END IF;
14418 
14419   l('    get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,');
14420   l('          x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);');
14421 
14422   l('EXCEPTION');
14423   l('  WHEN FND_API.G_EXC_ERROR THEN');
14424   l('    RAISE FND_API.G_EXC_ERROR;');
14425   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
14426   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14427   l('  WHEN OTHERS THEN');
14428   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14429   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''get_party_for_search'');');
14430   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14431   l('    FND_MSG_PUB.ADD;');
14432   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14433   l('END get_party_for_search;');
14434   l('');
14435 
14436   l('PROCEDURE get_search_criteria (');
14437   l('        p_party_id              IN      NUMBER,');
14438   l('        p_party_site_ids        IN      HZ_PARTY_SEARCH.IDList,');
14439   l('        p_contact_ids           IN      HZ_PARTY_SEARCH.IDList,');
14440   l('        p_contact_pt_ids        IN      HZ_PARTY_SEARCH.IDList,');
14441   l('        x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
14442   l('        x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
14443   l('        x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
14444   l('        x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
14445   l(') IS');
14446   l('BEGIN');
14447   l('');
14451   SELECT COUNT(*) INTO l_num_attrs
14448   ldbg_s('Inside Calling Procedure - get_search_criteria');
14449 
14450   -- Query number of party attributes
14452   FROM (
14453     SELECT a.attribute_id
14454     FROM HZ_TRANS_ATTRIBUTES_VL a,
14455          HZ_MATCH_RULE_PRIMARY p
14456     WHERE p.match_rule_id = p_rule_id
14457     AND p.attribute_id = a.attribute_id
14458     AND a.ENTITY_NAME = 'PARTY'
14459 
14460     UNION
14461 
14462     SELECT a.attribute_id
14463     FROM HZ_TRANS_ATTRIBUTES_VL a,
14464          HZ_MATCH_RULE_SECONDARY s
14465     WHERE s.match_rule_id = p_rule_id
14466     AND s.attribute_id = a.attribute_id
14467     AND a.ENTITY_NAME = 'PARTY'
14468   );
14469 
14470   IF l_num_attrs > 0 THEN
14471     l('    IF p_party_id IS NOT NULL THEN');
14472   ldbg_s('Before Calling Procedure - get_party_rec');
14473     l('      get_party_rec(p_party_id, x_party_search_rec);');
14474     l('    END IF;');
14475   END IF;
14476 
14477   SELECT COUNT(*) INTO l_num_attrs
14478   FROM (
14479     SELECT a.attribute_id
14480     FROM HZ_TRANS_ATTRIBUTES_VL a,
14481          HZ_MATCH_RULE_PRIMARY p
14482     WHERE p.match_rule_id = p_rule_id
14483     AND p.attribute_id = a.attribute_id
14484     AND a.ENTITY_NAME = 'PARTY_SITES'
14485 
14486     UNION
14487 
14488     SELECT a.attribute_id
14489     FROM HZ_TRANS_ATTRIBUTES_VL a,
14490          HZ_MATCH_RULE_SECONDARY s
14491     WHERE s.match_rule_id = p_rule_id
14492     AND s.attribute_id = a.attribute_id
14493     AND a.ENTITY_NAME = 'PARTY_SITES'
14494   );
14495 
14496 
14497   IF l_num_attrs > 0 THEN
14498     l('    IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN');
14499     ldbg_s('Before Calling Procedure - get_party_site_rec');
14500     l('      get_party_site_rec(p_party_site_ids, x_party_site_list);');
14501     l('    END IF;');
14502   END IF;
14503 
14504   -- Query number of contact attributes
14505   SELECT COUNT(*) INTO l_num_attrs
14506   FROM (
14507     SELECT a.attribute_id
14508     FROM HZ_TRANS_ATTRIBUTES_VL a,
14509          HZ_MATCH_RULE_PRIMARY p
14510     WHERE p.match_rule_id = p_rule_id
14511     AND p.attribute_id = a.attribute_id
14512     AND a.ENTITY_NAME = 'CONTACTS'
14513 
14514     UNION
14515 
14516     SELECT a.attribute_id
14517     FROM HZ_TRANS_ATTRIBUTES_VL a,
14518          HZ_MATCH_RULE_SECONDARY s
14519     WHERE s.match_rule_id = p_rule_id
14520     AND s.attribute_id = a.attribute_id
14521     AND a.ENTITY_NAME = 'CONTACTS'
14522   );
14523 
14524   IF l_num_attrs > 0 THEN
14525     l('    IF p_contact_ids IS NOT NULL AND p_contact_ids.COUNT>0 THEN');
14526     ldbg_s('Before Calling Procedure - get_contact_rec');
14527     l('      get_contact_rec(p_contact_ids, x_contact_list);');
14528     l('    END IF;');
14529   END IF;
14530 
14531   -- Query number of contact point attributes
14532   SELECT COUNT(*) INTO l_num_attrs
14533   FROM (
14534     SELECT a.attribute_id
14535     FROM HZ_TRANS_ATTRIBUTES_VL a,
14536          HZ_MATCH_RULE_PRIMARY p
14537     WHERE p.match_rule_id = p_rule_id
14538     AND p.attribute_id = a.attribute_id
14539     AND a.ENTITY_NAME = 'CONTACT_POINTS'
14540 
14541     UNION
14542 
14543     SELECT a.attribute_id
14544     FROM HZ_TRANS_ATTRIBUTES_VL a,
14545          HZ_MATCH_RULE_SECONDARY s
14546     WHERE s.match_rule_id = p_rule_id
14547     AND s.attribute_id = a.attribute_id
14548     AND a.ENTITY_NAME = 'CONTACT_POINTS'
14549   );
14550 
14551   IF l_num_attrs > 0 THEN
14552     l('    IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN');
14553     ldbg_s('Before Calling Procedure - get_contact_point_rec');
14554     l('      get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);');
14555     l('    END IF;');
14556   END IF;
14557   l('EXCEPTION');
14558   l('  WHEN FND_API.G_EXC_ERROR THEN');
14559   l('    RAISE FND_API.G_EXC_ERROR;');
14560   l('  WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
14561   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14562   l('  WHEN OTHERS THEN');
14563   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
14564   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''get_search_criteria'');');
14565   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14566   l('    FND_MSG_PUB.ADD;');
14567   l('    RAISE FND_API.G_EXC_UNEXPECTED_ERROR;');
14568   l('END get_search_criteria;');
14569   l('');
14570 
14571   l('');
14572   l('/************************************************');
14573   l('  This procedure retrieves the match rule party attributes into ');
14574   l('  the party search record structure ');
14575   l('************************************************/');
14576   l('');
14577   l('PROCEDURE get_party_rec (');
14578   l('        p_party_id              IN      NUMBER,');
14579   l('        x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type');
14580   l(') IS');
14581   l('    l_party_type VARCHAR2(255);');
14582   l('BEGIN');
14583   l('');
14584   ldbg_s('Inside calling procedure - get_party_rec');
14585   l('    SELECT PARTY_TYPE INTO l_party_type');
14586   l('    FROM HZ_PARTIES');
14587   l('    WHERE PARTY_ID = p_party_id;');
14588   l('');
14589   ldbg_sv('l_party_type is - ','l_party_type'  ) ;
14590   l('    IF l_party_type = ''ORGANIZATION'' THEN');
14591 
14592   SELECT COUNT(*) INTO l_num_attrs
14593   FROM (
14594     SELECT a.attribute_id
14595     FROM HZ_TRANS_ATTRIBUTES_VL a,
14596          HZ_MATCH_RULE_PRIMARY p
14597     WHERE p.match_rule_id = p_rule_id
14598     AND p.attribute_id = a.attribute_id
14599     AND a.ENTITY_NAME = 'PARTY'
14600     AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14601        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14605     UNION
14602        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14603        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14604     AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14606     SELECT a.attribute_id
14607     FROM HZ_TRANS_ATTRIBUTES_VL a,
14608          HZ_MATCH_RULE_SECONDARY s
14609     WHERE s.match_rule_id = p_rule_id
14610     AND s.attribute_id = a.attribute_id
14611     AND a.ENTITY_NAME = 'PARTY'
14612     AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14613        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14614        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14615        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14616     AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14617   );
14618 
14619   IF l_num_attrs>0 THEN
14620     l('      SELECT ');
14621     FIRST := TRUE;
14622     FOR ATTRS IN (
14623       SELECT distinct a.ATTRIBUTE_NAME, decode(a.SOURCE_TABLE, 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES', 'HZ_ORGANIZATION_PROFILES', 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES', 'HZ_ORGANIZATION_PROFILES', a.SOURCE_TABLE) SOURCE_TABLE
14624        FROM HZ_TRANS_ATTRIBUTES_VL a,
14625             HZ_MATCH_RULE_PRIMARY p
14626        WHERE p.match_rule_id = p_rule_id
14627        AND p.attribute_id = a.attribute_id
14628        AND a.ENTITY_NAME = 'PARTY'
14629        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14630           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14631        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14632        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14633        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14634        UNION
14635        SELECT distinct a.ATTRIBUTE_NAME, decode(a.SOURCE_TABLE, 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES', 'HZ_ORGANIZATION_PROFILES', 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES', 'HZ_ORGANIZATION_PROFILES', a.SOURCE_TABLE) SOURCE_TABLE
14636        FROM HZ_TRANS_ATTRIBUTES_VL a,
14637             HZ_MATCH_RULE_SECONDARY s
14638        WHERE s.match_rule_id = p_rule_id
14639        AND s.attribute_id = a.attribute_id
14640        AND a.ENTITY_NAME = 'PARTY'
14641        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14642           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES' OR
14643        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14644        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14645        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14646 
14647       IF FIRST THEN
14648         l('        translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14649         FIRST := FALSE;
14650       ELSE
14651         l('       ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14652       END IF;
14653     END LOOP;
14654 
14655     l('      INTO ');
14656     FIRST := TRUE;
14657     FOR ATTRS IN (
14658        SELECT distinct a.ATTRIBUTE_NAME
14659        FROM HZ_TRANS_ATTRIBUTES_VL a,
14660             HZ_MATCH_RULE_PRIMARY p
14661        WHERE p.match_rule_id = p_rule_id
14662        AND p.attribute_id = a.attribute_id
14663        AND a.ENTITY_NAME = 'PARTY'
14664        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14665           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES'  OR
14666           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14667           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14668        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14669        UNION
14670        SELECT distinct a.ATTRIBUTE_NAME
14671        FROM HZ_TRANS_ATTRIBUTES_VL a,
14672             HZ_MATCH_RULE_SECONDARY s
14673        WHERE s.match_rule_id = p_rule_id
14674        AND s.attribute_id = a.attribute_id
14675        AND a.ENTITY_NAME = 'PARTY'
14676        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14677           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES'  OR
14678        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14679        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14680        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14681 
14682 
14683       IF FIRST THEN
14684         l('        x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14685         FIRST := FALSE;
14686       ELSE
14687         l('       ,x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14688       END IF;
14689     END LOOP;
14690 
14691     l('      FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES');
14692     l('      WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id');
14693     l('      AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL');
14694     l('      AND HZ_PARTIES.party_id = p_party_id;');
14695   ELSE
14696     l('      NULL;');
14697   END IF;
14698   l('    ELSIF l_party_type = ''PERSON'' THEN');
14699 
14700   SELECT COUNT(*) INTO l_num_attrs
14701   FROM (
14702     SELECT a.attribute_id
14703     FROM HZ_TRANS_ATTRIBUTES_VL a,
14704          HZ_MATCH_RULE_PRIMARY p
14705     WHERE p.match_rule_id = p_rule_id
14706     AND p.attribute_id = a.attribute_id
14707     AND a.ENTITY_NAME = 'PARTY'
14708     AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14709        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES'  OR
14710        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14711        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14712     AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14713     UNION
14714     SELECT a.attribute_id
14715     FROM HZ_TRANS_ATTRIBUTES_VL a,
14716          HZ_MATCH_RULE_SECONDARY s
14717     WHERE s.match_rule_id = p_rule_id
14718     AND s.attribute_id = a.attribute_id
14719     AND a.ENTITY_NAME = 'PARTY'
14720     AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14721        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES'  OR
14722        a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14723        a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14727   IF l_num_attrs>0 THEN
14724     AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14725   );
14726 
14728     l('      SELECT ');
14729     FIRST := TRUE;
14730     FOR ATTRS IN (
14731        SELECT distinct a.ATTRIBUTE_NAME, decode(a.SOURCE_TABLE, 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES', 'HZ_PERSON_PROFILES','HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES', 'HZ_PERSON_PROFILES', a.SOURCE_TABLE)  SOURCE_TABLE
14732        FROM HZ_TRANS_ATTRIBUTES_VL a,
14733             HZ_MATCH_RULE_PRIMARY p
14734        WHERE p.match_rule_id = p_rule_id
14735        AND p.attribute_id = a.attribute_id
14736        AND a.ENTITY_NAME = 'PARTY'
14737        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14738           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES'  OR
14739           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES' OR
14740           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES')
14741        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14742        UNION
14743        SELECT distinct a.ATTRIBUTE_NAME, decode(a.SOURCE_TABLE, 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES', 'HZ_PERSON_PROFILES', 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES', 'HZ_PERSON_PROFILES', a.SOURCE_TABLE) SOURCE_TABLE
14744        FROM HZ_TRANS_ATTRIBUTES_VL a,
14745             HZ_MATCH_RULE_SECONDARY s
14746        WHERE s.match_rule_id = p_rule_id
14747        AND s.attribute_id = a.attribute_id
14748        AND a.ENTITY_NAME = 'PARTY'
14749        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14750           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES'  OR
14751           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
14752           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES')
14753        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14754 
14755       IF FIRST THEN
14756         l('        translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14757         FIRST := FALSE;
14758       ELSE
14759         l('       ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14760       END IF;
14761     END LOOP;
14762 
14763     l('      INTO ');
14764     FIRST := TRUE;
14765     FOR ATTRS IN (
14766        SELECT distinct a.ATTRIBUTE_NAME
14767        FROM HZ_TRANS_ATTRIBUTES_VL a,
14768             HZ_MATCH_RULE_PRIMARY p
14769        WHERE p.match_rule_id = p_rule_id
14770        AND p.attribute_id = a.attribute_id
14771        AND a.ENTITY_NAME = 'PARTY'
14772        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14773           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES'  OR
14774           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
14775           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES')
14776        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL
14777        UNION
14778        SELECT distinct a.ATTRIBUTE_NAME
14779        FROM HZ_TRANS_ATTRIBUTES_VL a,
14780             HZ_MATCH_RULE_SECONDARY s
14781        WHERE s.match_rule_id = p_rule_id
14782        AND s.attribute_id = a.attribute_id
14783        AND a.ENTITY_NAME = 'PARTY'
14784        AND (a.SOURCE_TABLE = 'HZ_PARTIES' OR
14785           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES' OR
14786           a.SOURCE_TABLE = 'HZ_PERSON_PROFILES, HZ_ORGANIZATION_PROFILES' OR
14787           a.SOURCE_TABLE = 'HZ_ORGANIZATION_PROFILES, HZ_PERSON_PROFILES')
14788        AND a.CUSTOM_ATTRIBUTE_PROCEDURE IS NULL) LOOP
14789 
14790       IF FIRST THEN
14791         l('        x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14792         FIRST := FALSE;
14793       ELSE
14794         l('       ,x_party_search_rec.'||ATTRS.ATTRIBUTE_NAME);
14795       END IF;
14796     END LOOP;
14797 
14798     l('      FROM HZ_PARTIES, HZ_PERSON_PROFILES');
14799     l('      WHERE HZ_PARTIES.party_id = HZ_PERSON_PROFILES.party_id');
14800     l('      AND HZ_PERSON_PROFILES.effective_end_date is NULL');
14801     l('      AND HZ_PARTIES.party_id = p_party_id;');
14802   ELSE
14803     l('      NULL;');
14804   END IF;
14805   l('    END IF;');
14806   l('    x_party_search_rec.PARTY_TYPE := l_party_type;');
14807   generate_custom_code(p_rule_id, '    x_party_search_rec','PARTY','p_party_id');
14808   l('');
14809   l('EXCEPTION');
14810   l('  WHEN OTHERS THEN');
14811   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
14812   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''get_party_rec'');');
14813   l('    FND_MESSAGE.SET_TOKEN(''PARTY_ID'',p_party_id);');
14814   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14815   l('    FND_MSG_PUB.ADD;');
14816   l('    RAISE FND_API.G_EXC_ERROR;');
14817   l('END get_party_rec;');
14818   l('');
14819   l('/************************************************');
14820   l('  This procedure retrieves the match rule party site attributes into ');
14821   l('  the party site search record structure ');
14822   l('************************************************/');
14823   l('');
14824   l('PROCEDURE get_party_site_rec (');
14825   l('        p_party_site_ids       IN      HZ_PARTY_SEARCH.IDList,');
14826   l('        x_party_site_list      OUT NOCOPY HZ_PARTY_SEARCH.party_site_list');
14827   l(') IS');
14828   l('  CURSOR c_party_sites(cp_party_site_id NUMBER) IS');
14829   l('    SELECT party_site_id');
14830   FOR ATTRS IN (
14831     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14832     FROM HZ_TRANS_ATTRIBUTES_VL a,
14833          HZ_MATCH_RULE_PRIMARY p
14834     WHERE p.match_rule_id = p_rule_id
14835     AND p.attribute_id = a.attribute_id
14836     AND a.ENTITY_NAME = 'PARTY_SITES'
14837     AND a.SOURCE_TABLE <> 'CUSTOM'
14838     UNION
14839     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14840     FROM HZ_TRANS_ATTRIBUTES_VL a,
14841          HZ_MATCH_RULE_SECONDARY s
14842     WHERE s.match_rule_id = p_rule_id
14843     AND s.attribute_id = a.attribute_id
14844     AND a.ENTITY_NAME = 'PARTY_SITES'
14845     AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14846 
14850   l('    WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id');
14847      l('      ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14848   END LOOP;
14849   l('    FROM HZ_PARTY_SITES, HZ_LOCATIONS');
14851   l('    AND   HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;');
14852   l('');
14853   l('  I NUMBER;');
14854   l('  J NUMBER:=1;');
14855   l('  l_party_site_id NUMBER;');
14856   l('');
14857   l('BEGIN');
14858   l('');
14859   ldbg_s('Inside calling procedure - get_party_site_rec');
14860   l('    FOR I IN 1..p_party_site_ids.COUNT LOOP');
14861   l('      l_party_site_id := p_party_site_ids(I);');
14862   l('      OPEN c_party_sites(p_party_site_ids(I));');
14863   l('      LOOP');
14864   l('        FETCH c_party_sites INTO');
14865   l('             l_party_site_id');
14866   FOR ATTRS IN (
14867     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14868     FROM HZ_TRANS_ATTRIBUTES_VL a,
14869          HZ_MATCH_RULE_PRIMARY p
14870     WHERE p.match_rule_id = p_rule_id
14871     AND p.attribute_id = a.attribute_id
14872     AND a.ENTITY_NAME = 'PARTY_SITES'
14873     AND a.SOURCE_TABLE <> 'CUSTOM'
14874 
14875     UNION
14876 
14877     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14878     FROM HZ_TRANS_ATTRIBUTES_VL a,
14879          HZ_MATCH_RULE_SECONDARY s
14880     WHERE s.match_rule_id = p_rule_id
14881     AND s.attribute_id = a.attribute_id
14882     AND a.ENTITY_NAME = 'PARTY_SITES'
14883     AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14884 
14885     l('           ,x_party_site_list(J).'||ATTRS.ATTRIBUTE_NAME);
14886   END LOOP;
14887   l('        ;');
14888   l('        EXIT WHEN c_party_sites%NOTFOUND;');
14889   l('');
14890   generate_custom_code(p_rule_id, '        x_party_site_list(J)','PARTY_SITES','l_party_site_id')
14891 ;
14892   l('        J:=J+1;');
14893   l('');
14894   l('      END LOOP;');
14895   l('      CLOSE c_party_sites;');
14896   l('    END LOOP;');
14897   l('');
14898   l('EXCEPTION');
14899   l('  WHEN OTHERS THEN');
14900   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
14901   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''get_party_site_rec'');');
14902   l('    FND_MESSAGE.SET_TOKEN(''PARTY_ID'',l_party_site_id);');
14903   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14904   l('    FND_MSG_PUB.ADD;');
14905   l('    RAISE FND_API.G_EXC_ERROR;');
14906   l('END get_party_site_rec;');
14907   l('');
14908 
14909   l('/************************************************');
14910   l('  This procedure retrieves the match rule contact attributes into ');
14911   l('  the contact search record structure ');
14912   l('************************************************/');
14913   l('');
14914   l('PROCEDURE get_contact_rec (');
14915   l('        p_contact_ids       IN      HZ_PARTY_SEARCH.IDList,');
14916   l('        x_contact_list      OUT NOCOPY HZ_PARTY_SEARCH.contact_list');
14917   l(') IS');
14918   l('  CURSOR c_contacts(cp_org_contact_id NUMBER) IS');
14919   l('    SELECT org_contact_id');
14920   FOR ATTRS IN (
14921     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14922     FROM HZ_TRANS_ATTRIBUTES_VL a,
14923          HZ_MATCH_RULE_PRIMARY p
14924     WHERE p.match_rule_id = p_rule_id
14925     AND p.attribute_id = a.attribute_id
14926     AND a.ENTITY_NAME = 'CONTACTS'
14927     AND a.SOURCE_TABLE <> 'CUSTOM'
14928     UNION
14929     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14930     FROM HZ_TRANS_ATTRIBUTES_VL a,
14931          HZ_MATCH_RULE_SECONDARY s
14932     WHERE s.match_rule_id = p_rule_id
14933     AND s.attribute_id = a.attribute_id
14934     AND a.ENTITY_NAME = 'CONTACTS'
14935     AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14936 
14937     l('      ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5621864
14938   END LOOP;
14939   l('    FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES');
14940   l('    WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id');
14941   l('    AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = ''HZ_PARTIES''');
14942   l('    AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = ''HZ_PARTIES''');
14943   l('    AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = ''F''');
14944   l('    AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id');
14945   l('    AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id');
14946   l('    AND HZ_PERSON_PROFILES.effective_end_date IS NULL;');
14947   l('');
14948   l('  I NUMBER;');
14949   l('  l_org_contact_id NUMBER;');
14950   l('  J NUMBER:=1;');
14951 
14952   l('  BEGIN');
14953   l('');
14954   ldbg_s('Inside calling procedure - get_contact_rec');
14955   l('    FOR I IN 1..p_contact_ids.COUNT LOOP');
14956   l('      l_org_contact_id := p_contact_ids(I);');
14957   l('      OPEN c_contacts(p_contact_ids(I));');
14958   l('      LOOP');
14959   l('        FETCH c_contacts INTO');
14960   l('             l_org_contact_id');
14961   FOR ATTRS IN (
14962     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14963     FROM HZ_TRANS_ATTRIBUTES_VL a,
14964          HZ_MATCH_RULE_PRIMARY p
14965     WHERE p.match_rule_id = p_rule_id
14966     AND p.attribute_id = a.attribute_id
14967     AND a.ENTITY_NAME = 'CONTACTS'
14968     AND a.SOURCE_TABLE <> 'CUSTOM'
14969 
14970     UNION
14971 
14972     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
14973     FROM HZ_TRANS_ATTRIBUTES_VL a,
14974          HZ_MATCH_RULE_SECONDARY s
14975     WHERE s.match_rule_id = p_rule_id
14976     AND s.attribute_id = a.attribute_id
14977     AND a.ENTITY_NAME = 'CONTACTS'
14978     AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
14979 
14980     l('             ,x_contact_list(J).'||ATTRS.ATTRIBUTE_NAME);
14981   END LOOP;
14982   l('        ;');
14983   l('        EXIT WHEN c_contacts%NOTFOUND;');
14984   l('');
14988   l('      END LOOP;');
14985   generate_custom_code(p_rule_id, '        x_contact_list(J)','CONTACTS','l_org_contact_id');
14986   l('');
14987   l('        J:=J+1;');
14989   l('      CLOSE c_contacts;');
14990   l('    END LOOP;');
14991   l('');
14992   l('EXCEPTION');
14993   l('  WHEN OTHERS THEN');
14994   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
14995   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''get_contact_rec'');');
14996   l('    FND_MESSAGE.SET_TOKEN(''PARTY_ID'',l_org_contact_id);');
14997   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
14998   l('    FND_MSG_PUB.ADD;');
14999   l('    RAISE FND_API.G_EXC_ERROR;');
15000   l('END get_contact_rec;');
15001   l('');
15002   l('/************************************************');
15003   l('  This procedure retrieves the match rule contact point attributes into ');
15004   l('  the contact point search record structure ');
15005   l('************************************************/');
15006   l('');
15007   l('PROCEDURE get_contact_point_rec (');
15008   l('        p_contact_point_ids     IN  HZ_PARTY_SEARCH.IDList,');
15009   l('        x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15010   l(') IS');
15011   l('');
15012   l('  -- Cursor to fetch primary contact points for party');
15013   l('  CURSOR c_cpts(cp_contact_point_id NUMBER) IS');
15014   l('    SELECT contact_point_id, contact_point_type');
15015   FOR ATTRS IN (
15016     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
15017     FROM HZ_TRANS_ATTRIBUTES_VL a,
15018          HZ_MATCH_RULE_PRIMARY p
15019     WHERE p.match_rule_id = p_rule_id
15020     AND p.attribute_id = a.attribute_id
15021     AND a.ENTITY_NAME = 'CONTACT_POINTS'
15022     AND a.SOURCE_TABLE <> 'CUSTOM'
15023 
15024     UNION
15025 
15026     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
15027     FROM HZ_TRANS_ATTRIBUTES_VL a,
15028          HZ_MATCH_RULE_SECONDARY s
15029     WHERE s.match_rule_id = p_rule_id
15030     AND s.attribute_id = a.attribute_id
15031     AND a.ENTITY_NAME = 'CONTACT_POINTS'
15032     AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
15033 
15034     l('      ,translate(' || ATTRS.SOURCE_TABLE||'.'||ATTRS.ATTRIBUTE_NAME || ', ''%'','' '')');--bug 5565522
15035   END LOOP;
15036   l('    FROM HZ_CONTACT_POINTS');
15037   l('    WHERE contact_point_id = cp_contact_point_id;');
15038 
15039   l('');
15040   l('  I NUMBER;');
15041   l('  l_contact_point_id NUMBER;');
15042   l('  J NUMBER:=1;');
15043 
15044   l('  BEGIN');
15045   l('');
15046   ldbg_s('Inside calling procedure - get_contact_point_rec');
15047   l('    FOR I in 1..p_contact_point_ids.COUNT LOOP');
15048   l('      l_contact_point_id := p_contact_point_ids(I);');
15049   l('      OPEN c_cpts(p_contact_point_ids(I));');
15050   l('      LOOP');
15051   l('        FETCH c_cpts INTO');
15052   l('             l_contact_point_id, x_contact_point_list(J).contact_point_type');
15053 
15054   FOR ATTRS IN (
15055     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
15056     FROM HZ_TRANS_ATTRIBUTES_VL a,
15057          HZ_MATCH_RULE_PRIMARY p
15058     WHERE p.match_rule_id = p_rule_id
15059     AND p.attribute_id = a.attribute_id
15060     AND a.ENTITY_NAME = 'CONTACT_POINTS'
15061     AND a.SOURCE_TABLE <> 'CUSTOM'
15062 
15063     UNION
15064 
15065     SELECT distinct a.ATTRIBUTE_NAME, a.SOURCE_TABLE
15066     FROM HZ_TRANS_ATTRIBUTES_VL a,
15067          HZ_MATCH_RULE_SECONDARY s
15068     WHERE s.match_rule_id = p_rule_id
15069     AND s.attribute_id = a.attribute_id
15070     AND a.ENTITY_NAME = 'CONTACT_POINTS'
15071     AND a.SOURCE_TABLE <> 'CUSTOM') LOOP
15072 
15073 
15074     l('             ,x_contact_point_list(J).'||ATTRS.ATTRIBUTE_NAME);
15075   END LOOP;
15076   l('        ;');
15077   l('        EXIT WHEN c_cpts%NOTFOUND;');
15078   l('');
15079   generate_custom_code(p_rule_id, '        x_contact_point_list(J)','CONTACT_POINTS','l_contact_point_id');
15080   l('        J:=J+1;');
15081   l('');
15082   l('      END LOOP;');
15083   l('      CLOSE c_cpts;');
15084   l('    END LOOP;');
15085 
15086   l('');
15087   l('EXCEPTION');
15088   l('  WHEN OTHERS THEN');
15089   l('    FND_MESSAGE.SET_NAME(''AR'', ''HZ_PARTY_QUERY_ERROR'');');
15090   l('    FND_MESSAGE.SET_TOKEN(''PROC'',''get_contact_point_rec'');');
15091   l('    FND_MESSAGE.SET_TOKEN(''PARTY_ID'',l_contact_point_id);');
15092   l('    FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM );');
15093   l('    FND_MSG_PUB.ADD;');
15094   l('    RAISE FND_API.G_EXC_ERROR;');
15095   l('END get_contact_point_rec;');
15096 
15097 END;
15098 
15099 PROCEDURE generate_check_staged (
15100 	p_rule_id	IN	NUMBER
15101 ) IS
15102 
15103   CURSOR c_trans_func IS
15104     SELECT f.FUNCTION_ID
15105     FROM hz_primary_trans f, hz_match_rule_primary a
15106     WHERE a.MATCH_RULE_ID = p_rule_id
15107     AND a.PRIMARY_ATTRIBUTE_ID = f.PRIMARY_ATTRIBUTE_ID
15108 
15109     UNION
15110 
15111     SELECT f.FUNCTION_ID
15112     FROM hz_secondary_trans f, hz_match_rule_secondary a
15113     WHERE a.MATCH_RULE_ID = p_rule_id
15114     AND a.SECONDARY_ATTRIBUTE_ID = f.SECONDARY_ATTRIBUTE_ID;
15115 
15116 ---Start of Code Change for Match Rule Set
15117   CURSOR c_ruleset_trans_func IS
15118     SELECT f.FUNCTION_ID
15119     FROM hz_primary_trans f, hz_match_rule_primary a
15120     WHERE a.MATCH_RULE_ID IN (SELECT UNIQUE CONDITION_MATCH_RULE_ID
15121                               FROM HZ_MATCH_RULE_CONDITIONS
15122 			      WHERE MATCH_RULE_SET_ID = p_rule_id
15123                              )
15124     AND a.PRIMARY_ATTRIBUTE_ID = f.PRIMARY_ATTRIBUTE_ID
15125 
15126     UNION
15127 
15128     SELECT f.FUNCTION_ID
15129     FROM hz_secondary_trans f, hz_match_rule_secondary a
15133                              )
15130     WHERE a.MATCH_RULE_ID IN (SELECT UNIQUE CONDITION_MATCH_RULE_ID
15131                               FROM HZ_MATCH_RULE_CONDITIONS
15132 			      WHERE MATCH_RULE_SET_ID = p_rule_id
15134     AND a.SECONDARY_ATTRIBUTE_ID = f.SECONDARY_ATTRIBUTE_ID;
15135 
15136 ---End of Code Change for Match Rule Set
15137 
15138   l_func_id NUMBER;
15139   FIRST BOOLEAN := FALSE;
15140   l_rule_type varchar2(30); ---Code Change for Match Rule Set
15141 BEGIN
15142  ---Start of Code Change for Match Rule Set
15143  SELECT nvl(match_rule_type,'SINGLE') into l_rule_type FROM HZ_MATCH_RULES_VL
15144  WHERE match_rule_id = p_rule_id;
15145  ---End of Code Change for Match Rule Set
15146 
15147   l('FUNCTION check_staged RETURN BOOLEAN IS');
15148   l('');
15149   l('  CURSOR c_check_staged IS ');
15150   l('    SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL ');
15151   l('    WHERE nvl(STAGED_FLAG,''N'') = ''N'' ');
15152   l('    AND FUNCTION_ID in (');
15153   FIRST := TRUE;
15154 IF l_rule_type <> 'SET' then ---Code Change for Match Rule Set
15155   OPEN c_trans_func;
15156   LOOP
15157     FETCH c_trans_func INTO l_func_id;
15158     EXIT WHEN c_trans_func%NOTFOUND;
15159 
15160     IF FIRST THEN
15161       l('                ' || l_func_id);
15162       FIRST := FALSE;
15163     ELSE
15164       l('                ,'|| l_func_id);
15165     END IF;
15166   END LOOP;
15167   CLOSE c_trans_func;
15168 ELSE ---Start of Code Change for Match Rule Set
15169  OPEN c_ruleset_trans_func;
15170   LOOP
15171     FETCH c_ruleset_trans_func INTO l_func_id;
15172     EXIT WHEN c_ruleset_trans_func%NOTFOUND;
15173 
15174     IF FIRST THEN
15175       l('                ' || l_func_id);
15176       FIRST := FALSE;
15177     ELSE
15178       l('                ,'|| l_func_id);
15179     END IF;
15180   END LOOP;
15181   CLOSE c_ruleset_trans_func;
15182 
15183 END IF; ---End of Code Change for Match Rule Set
15184   l('    );');
15185 
15186   l('  l_tmp NUMBER;');
15187 
15188   l('BEGIN');
15189   l('  IF g_staged =  1 THEN');
15190   l('    RETURN TRUE;');
15191   l('  ELSIF g_staged = 0 THEN');
15192   l('    RETURN FALSE;');
15193   l('  END IF;');
15194   l('');
15195   l('  OPEN c_check_staged;');
15196   l('  FETCH c_check_staged INTO l_tmp;');
15197   l('  IF c_check_staged%FOUND THEN');
15198   l('    CLOSE c_check_staged;');
15199   l('    g_staged := 0;');
15200   l('    RETURN FALSE;');
15201   l('  ELSE');
15202   l('    CLOSE c_check_staged;');
15203   l('    g_staged := 1;');
15204   l('    RETURN TRUE;');
15205   l('  END IF;');
15206   l('END check_staged;');
15207 
15208   l('');
15209   l('-- Fix for Bug 4736139');
15210   l('FUNCTION check_staged_var RETURN VARCHAR2 IS');
15211   l('  l_staged       VARCHAR2(1);');
15212   l('  l_staged_bool  BOOLEAN;');
15213   l('BEGIN');
15214   l('  l_staged_bool := check_staged;');
15215   l('  IF l_staged_bool THEN');
15216   l('    l_staged := ''Y'';');
15217   l('  ELSE');
15218   l('    l_staged := ''N'';');
15219   l('  END IF;');
15220   l('  RETURN l_staged;');
15221   l('END check_staged_var;');
15222   l('-- End fix for Bug 4736139');
15223   l('');
15224 
15225 END;
15226 
15227 PROCEDURE gen_pkg_spec (
15228 	p_pkg_name 	IN	VARCHAR2,
15229         p_rule_id	IN	NUMBER
15230 ) IS
15231 
15232 BEGIN
15233 
15234   l('CREATE or REPLACE PACKAGE ' || p_pkg_name || ' AUTHID CURRENT_USER AS');
15235   l('PROCEDURE map_party_rec (');
15236   l('        p_search_ctx IN BOOLEAN,');
15237   l('        p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,');
15238   l('        x_entered_max_score OUT NUMBER,');
15239   l('        x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type');
15240   l(');');
15241   l('PROCEDURE map_party_site_rec (');
15242   l('      p_search_ctx IN BOOLEAN,');
15243   l('      p_search_list IN HZ_PARTY_SEARCH.party_site_list, ');
15244   l('      x_entered_max_score OUT NUMBER,');
15245   l('      x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list');
15246   l(');');
15247   l('PROCEDURE map_contact_rec (');
15248   l('      p_search_ctx IN BOOLEAN,');
15249   l('      p_search_list IN HZ_PARTY_SEARCH.contact_list,');
15250   l('      x_entered_max_score OUT NUMBER,');
15251   l('      x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list');
15252   l('  );');
15253   l('PROCEDURE map_contact_point_rec (');
15254   l('      p_search_ctx IN BOOLEAN,');
15255   l('      p_search_list IN HZ_PARTY_SEARCH.contact_point_list,');
15256   l('      x_entered_max_score OUT NUMBER,');
15257   l('      x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list');
15258   l('  );');
15259   l('PROCEDURE get_party_rec (');
15260   l('        p_party_id              IN      NUMBER,');
15261   l('        x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type');
15262   l(');');
15263   l('PROCEDURE get_party_site_rec (');
15264   l('        p_party_site_ids        IN      HZ_PARTY_SEARCH.IDList,');
15265   l('        x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list');
15266   l(');');
15267   l('PROCEDURE get_contact_rec (');
15268   l('        p_contact_ids           IN      HZ_PARTY_SEARCH.IDList,');
15269   l('        x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list');
15270   l(');');
15271   l('PROCEDURE get_contact_point_rec (');
15272   l('        p_contact_point_ids     IN  HZ_PARTY_SEARCH.IDList,');
15273   l('        x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15274   l(');');
15275 
15276   l('FUNCTION check_prim_cond(');
15277   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
15281   l('   RETURN BOOLEAN;');
15278   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
15279   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
15280   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list)');
15282   l('PROCEDURE check_party_site_cond(');
15283   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
15284   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15285   l('      x_secondary             OUT     BOOLEAN,');
15286   l('      x_primary               OUT     BOOLEAN');
15287   l(');');
15288   l('PROCEDURE check_contact_cond(');
15289   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
15290   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15291   l('      x_secondary             OUT     BOOLEAN,');
15292   l('      x_primary               OUT     BOOLEAN');
15293   l(');');
15294   l('PROCEDURE check_contact_point_cond(');
15295   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15296   l('      x_secondary             OUT     BOOLEAN,');
15297   l('      x_primary               OUT     BOOLEAN');
15298   l(');');
15299   l('PROCEDURE find_parties (');
15300   l('      p_rule_id               IN      NUMBER,');
15301   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
15302   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
15303   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
15304   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15305   l('      p_restrict_sql          IN      VARCHAR2,');
15306   l('      p_match_type		   IN      VARCHAR2,');
15307   l('      p_search_merged         IN      VARCHAR2,');
15308   l('      p_dup_party_id          IN      NUMBER,');
15309   l('      p_dup_set_id            IN      NUMBER,');
15310   l('      p_dup_batch_id          IN      NUMBER,');
15311   l('      p_ins_details           IN      VARCHAR2,');
15312   l('      x_search_ctx_id         OUT     NUMBER,');
15313   l('      x_num_matches           OUT     NUMBER');
15314   l(');');
15315   l('PROCEDURE find_persons (');
15316   l('      p_rule_id               IN      NUMBER,');
15317   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
15318   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
15319   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
15320   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15321   l('      p_restrict_sql          IN      VARCHAR2,');
15322   l('      p_match_type            IN      VARCHAR2,');
15323   l('      p_search_merged         IN      VARCHAR2,');
15324   l('      p_ins_details           IN      VARCHAR2,');
15325   l('      x_search_ctx_id         OUT     NUMBER,');
15326   l('      x_num_matches           OUT     NUMBER');
15327   l(');');
15328   l('PROCEDURE find_party_details (');
15329   l('      p_rule_id               IN      NUMBER,');
15330   l('      p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
15331   l('      p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
15332   l('      p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
15333   l('      p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15334   l('      p_restrict_sql          IN      VARCHAR2,');
15335   l('      p_match_type		   IN      VARCHAR2,');
15336   l('      p_search_merged         IN      VARCHAR2,');
15337   l('      x_search_ctx_id         OUT     NUMBER,');
15338   l('      x_num_matches           OUT     NUMBER');
15339   l(');');
15340   l('PROCEDURE find_duplicate_party_sites(');
15341   l('      p_rule_id               IN      NUMBER,');
15342   l('	   p_party_site_id	   IN	   NUMBER,');
15343   l('	   p_party_id		   IN	   NUMBER,');
15344   l('      p_restrict_sql          IN      VARCHAR2,');
15345   l('      p_match_type            IN      VARCHAR2,');
15346   l('      x_search_ctx_id         OUT     NUMBER,');
15347   l('      x_num_matches           OUT     NUMBER');
15348   l(');');
15349   l('PROCEDURE find_duplicate_contacts(');
15350   l('      p_rule_id               IN      NUMBER,');
15351   l('	   p_org_contact_id	   IN	   NUMBER,');
15352   l('	   p_party_id		   IN	   NUMBER,');
15353   l('      p_restrict_sql          IN      VARCHAR2,');
15354   l('      p_match_type            IN      VARCHAR2,');
15355   l('      x_search_ctx_id         OUT     NUMBER,');
15356   l('      x_num_matches           OUT     NUMBER');
15357   l(');');
15358   l('PROCEDURE find_duplicate_contact_points(');
15359   l('      p_rule_id               IN      NUMBER,');
15360   l('	   p_contact_point_id	   IN	   NUMBER,');
15361   l('	   p_party_id		   IN	   NUMBER,');
15362   l('      p_restrict_sql          IN      VARCHAR2,');
15363   l('      p_match_type            IN      VARCHAR2,');
15364   l('      x_search_ctx_id         OUT     NUMBER,');
15365   l('      x_num_matches           OUT     NUMBER');
15366   l(');');
15367   l('PROCEDURE find_duplicate_parties (');
15368   l('      p_rule_id               IN      NUMBER,');
15369   l('	   p_party_id		   IN	   NUMBER,');
15370   l('      p_restrict_sql          IN      VARCHAR2,');
15371   l('      p_match_type            IN      VARCHAR2,');
15372   l('	   p_dup_batch_id	   IN	   NUMBER,');
15373   l('      p_search_merged         IN      VARCHAR2,');
15374   l('      x_dup_set_id            OUT     NUMBER,');
15375   l('      x_search_ctx_id         OUT     NUMBER,');
15376   l('      x_num_matches           OUT     NUMBER');
15377   l(');');
15378   l('PROCEDURE get_matching_party_sites (');
15379   l('        p_rule_id               IN      NUMBER,');
15380   l('        p_party_id              IN      NUMBER,');
15381   l('        p_party_site_list       IN      HZ_PARTY_SEARCH.PARTY_SITE_LIST,');
15385   l('        p_dup_party_site_id     IN      NUMBER, ');
15382   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
15383   l('        p_restrict_sql          IN      VARCHAR2,');
15384   l('        p_match_type	     IN      VARCHAR2,');
15386   l('        x_search_ctx_id         OUT     NUMBER,');
15387   l('        x_num_matches           OUT     NUMBER');
15388   l(');');
15389   l('PROCEDURE get_matching_contacts (');
15390   l('        p_rule_id               IN      NUMBER,');
15391   l('        p_party_id              IN      NUMBER,');
15392   l('        p_contact_list   	     IN      HZ_PARTY_SEARCH.CONTACT_LIST,');
15393   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
15394   l('        p_restrict_sql          IN      VARCHAR2,');
15395   l('        p_match_type	     IN      VARCHAR2,');
15396   l('        p_dup_contact_id        IN      NUMBER, ');
15397   l('        x_search_ctx_id         OUT     NUMBER,');
15398   l('        x_num_matches           OUT     NUMBER');
15399   l(');');
15400   l('');
15401   l('PROCEDURE get_matching_contact_points (');
15402   l('        p_rule_id               IN      NUMBER,');
15403   l('        p_party_id              IN      NUMBER,');
15404   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.CONTACT_POINT_LIST,');
15405   l('        p_restrict_sql          IN      VARCHAR2,');
15406   l('        p_match_type	     IN      VARCHAR2,');
15407   l('        p_dup_contact_point_id  IN      NUMBER, ');
15408   l('        x_search_ctx_id         OUT     NUMBER,');
15409   l('        x_num_matches           OUT     NUMBER');
15410   l(');');
15411   l('PROCEDURE get_score_details (');
15412   l('        p_rule_id               IN      NUMBER,');
15413   l('        p_party_id              IN      NUMBER,');
15414   l('        p_party_search_rec      IN      HZ_PARTY_SEARCH.party_search_rec_type,');
15415   l('        p_party_site_list       IN      HZ_PARTY_SEARCH.party_site_list,');
15416   l('        p_contact_list          IN      HZ_PARTY_SEARCH.contact_list,');
15417   l('        p_contact_point_list    IN      HZ_PARTY_SEARCH.contact_point_list,');
15418   l('        x_search_ctx_id         IN OUT  NUMBER');
15419   l(');');
15420   l('PROCEDURE find_parties_dynamic (');
15421   l('        p_rule_id               IN      NUMBER,');
15422   l('        p_attrib_id1            IN      NUMBER,');
15423   l('        p_attrib_id2            IN      NUMBER,');
15424   l('        p_attrib_id3            IN      NUMBER,');
15425   l('        p_attrib_id4            IN      NUMBER,');
15426   l('        p_attrib_id5            IN      NUMBER,');
15427   l('        p_attrib_id6            IN      NUMBER,');
15428   l('        p_attrib_id7            IN      NUMBER,');
15429   l('        p_attrib_id8            IN      NUMBER,');
15430   l('        p_attrib_id9            IN      NUMBER,');
15431   l('        p_attrib_id10           IN      NUMBER,');
15432   l('        p_attrib_id11           IN      NUMBER,');
15433   l('        p_attrib_id12           IN      NUMBER,');
15434   l('        p_attrib_id13           IN      NUMBER,');
15435   l('        p_attrib_id14           IN      NUMBER,');
15436   l('        p_attrib_id15           IN      NUMBER,');
15437   l('        p_attrib_id16           IN      NUMBER,');
15438   l('        p_attrib_id17           IN      NUMBER,');
15439   l('        p_attrib_id18           IN      NUMBER,');
15440   l('        p_attrib_id19           IN      NUMBER,');
15441   l('        p_attrib_id20           IN      NUMBER,');
15442   l('        p_attrib_val1           IN      VARCHAR2,');
15443   l('        p_attrib_val2           IN      VARCHAR2,');
15444   l('        p_attrib_val3           IN      VARCHAR2,');
15445   l('        p_attrib_val4           IN      VARCHAR2,');
15446   l('        p_attrib_val5           IN      VARCHAR2,');
15447   l('        p_attrib_val6           IN      VARCHAR2,');
15448   l('        p_attrib_val7           IN      VARCHAR2,');
15449   l('        p_attrib_val8           IN      VARCHAR2,');
15450   l('        p_attrib_val9           IN      VARCHAR2,');
15451   l('        p_attrib_val10          IN      VARCHAR2,');
15452   l('        p_attrib_val11          IN      VARCHAR2,');
15453   l('        p_attrib_val12          IN      VARCHAR2,');
15454   l('        p_attrib_val13          IN      VARCHAR2,');
15455   l('        p_attrib_val14          IN      VARCHAR2,');
15456   l('        p_attrib_val15          IN      VARCHAR2,');
15457   l('        p_attrib_val16          IN      VARCHAR2,');
15458   l('        p_attrib_val17          IN      VARCHAR2,');
15459   l('        p_attrib_val18          IN      VARCHAR2,');
15460   l('        p_attrib_val19          IN      VARCHAR2,');
15461   l('        p_attrib_val20          IN      VARCHAR2,');
15462   l('        p_restrict_sql          IN      VARCHAR2,');
15463   l('        p_match_type            IN      VARCHAR2,');
15464   l('        p_search_merged         IN      VARCHAR2,');
15465   l('        x_search_ctx_id         OUT     NUMBER,');
15466   l('        x_num_matches           OUT     NUMBER');
15467   l(');');
15468   l('PROCEDURE call_api_dynamic (');
15469   l('        p_rule_id               IN      NUMBER,');
15470   l('        p_attrib_id1            IN      NUMBER,');
15471   l('        p_attrib_id2            IN      NUMBER,');
15472   l('        p_attrib_id3            IN      NUMBER,');
15473   l('        p_attrib_id4            IN      NUMBER,');
15474   l('        p_attrib_id5            IN      NUMBER,');
15475   l('        p_attrib_id6            IN      NUMBER,');
15476   l('        p_attrib_id7            IN      NUMBER,');
15477   l('        p_attrib_id8            IN      NUMBER,');
15478   l('        p_attrib_id9            IN      NUMBER,');
15479   l('        p_attrib_id10           IN      NUMBER,');
15480   l('        p_attrib_id11           IN      NUMBER,');
15481   l('        p_attrib_id12           IN      NUMBER,');
15482   l('        p_attrib_id13           IN      NUMBER,');
15486   l('        p_attrib_id17           IN      NUMBER,');
15483   l('        p_attrib_id14           IN      NUMBER,');
15484   l('        p_attrib_id15           IN      NUMBER,');
15485   l('        p_attrib_id16           IN      NUMBER,');
15487   l('        p_attrib_id18           IN      NUMBER,');
15488   l('        p_attrib_id19           IN      NUMBER,');
15489   l('        p_attrib_id20           IN      NUMBER,');
15490   l('        p_attrib_val1           IN      VARCHAR2,');
15491   l('        p_attrib_val2           IN      VARCHAR2,');
15492   l('        p_attrib_val3           IN      VARCHAR2,');
15493   l('        p_attrib_val4           IN      VARCHAR2,');
15494   l('        p_attrib_val5           IN      VARCHAR2,');
15495   l('        p_attrib_val6           IN      VARCHAR2,');
15496   l('        p_attrib_val7           IN      VARCHAR2,');
15497   l('        p_attrib_val8           IN      VARCHAR2,');
15498   l('        p_attrib_val9           IN      VARCHAR2,');
15499   l('        p_attrib_val10          IN      VARCHAR2,');
15500   l('        p_attrib_val11          IN      VARCHAR2,');
15501   l('        p_attrib_val12          IN      VARCHAR2,');
15502   l('        p_attrib_val13          IN      VARCHAR2,');
15503   l('        p_attrib_val14          IN      VARCHAR2,');
15504   l('        p_attrib_val15          IN      VARCHAR2,');
15505   l('        p_attrib_val16          IN      VARCHAR2,');
15506   l('        p_attrib_val17          IN      VARCHAR2,');
15507   l('        p_attrib_val18          IN      VARCHAR2,');
15508   l('        p_attrib_val19          IN      VARCHAR2,');
15509   l('        p_attrib_val20          IN      VARCHAR2,');
15510   l('        p_restrict_sql          IN      VARCHAR2,');
15511   l('        p_api_name              IN      VARCHAR2,');
15512   l('        p_match_type            IN      VARCHAR2,');
15513   l('        p_party_id              IN      NUMBER,');
15514   l('        p_search_merged         IN      VARCHAR2,');
15515   l('        x_search_ctx_id         OUT     NUMBER,');
15516   l('        x_num_matches           OUT     NUMBER');
15517   l(');');
15518 
15519   l('PROCEDURE get_party_for_search (');
15520   l('        p_party_id              IN      NUMBER,');
15521   l('        x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
15522   l('        x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
15523   l('        x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
15524   l('        x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15525   l(');');
15526   l('PROCEDURE get_search_criteria (');
15527   l('        p_party_id              IN      NUMBER,');
15528   l('        p_party_site_ids        IN      HZ_PARTY_SEARCH.IDList,');
15529   l('        p_contact_ids           IN      HZ_PARTY_SEARCH.IDList,');
15530   l('        p_contact_pt_ids        IN      HZ_PARTY_SEARCH.IDList,');
15531   l('        x_party_search_rec      OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,');
15532   l('        x_party_site_list       OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,');
15533   l('        x_contact_list          OUT NOCOPY HZ_PARTY_SEARCH.contact_list,');
15534   l('        x_contact_point_list    OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list');
15535   l(');');
15536 
15537   l('FUNCTION check_staged RETURN BOOLEAN;');
15538   l('');
15539   l('-- Fix for Bug 4736139');
15540   l('FUNCTION check_staged_var RETURN VARCHAR2;');
15541   l('');
15542   l('  g_staged NUMBER := -1;');
15543   l('END ' || p_pkg_name || ';');
15544 
15545 END;
15546 
15547 FUNCTION num_primary(
15548    p_entity VARCHAR2,
15549    p_rule_id NUMBER) RETURN NUMBER IS
15550 
15551 l_num_primary NUMBER;
15552 BEGIN
15553   SELECT count(1) INTO l_num_primary
15554   FROM HZ_MATCH_RULE_PRIMARY p,
15555        HZ_TRANS_ATTRIBUTES_VL a
15556   WHERE p.match_rule_id = p_rule_id
15557   AND   p.ATTRIBUTE_ID = a.ATTRIBUTE_ID
15558   AND   ENTITY_NAME = p_entity;
15559   RETURN l_num_primary;
15560 
15561 END;
15562 
15563 FUNCTION num_secondary(
15564    p_rule_id NUMBER,
15565    p_entity VARCHAR2) RETURN NUMBER IS
15566 
15567 l_num_secondary NUMBER;
15568 BEGIN
15569   SELECT count(1) INTO l_num_secondary
15570   FROM HZ_MATCH_RULE_SECONDARY p,
15571        HZ_TRANS_ATTRIBUTES_VL a
15572   WHERE p.match_rule_id = p_rule_id
15573   AND   p.ATTRIBUTE_ID = a.ATTRIBUTE_ID
15574   AND   ENTITY_NAME = p_entity;
15575   RETURN l_num_secondary;
15576 
15577 END;
15578 
15579 
15580 PROCEDURE gen_exception_block IS
15581 
15582 BEGIN
15583   l('  --Standard call to get message count and if count is 1, get message info');
15584   l('  FND_MSG_PUB.Count_And_Get(');
15585   l('    p_encoded => FND_API.G_FALSE,');
15586   l('    p_count => x_msg_count,');
15587   l('    p_data  => x_msg_data);');
15588   l('  EXCEPTION');
15589   l('       WHEN FND_API.G_EXC_ERROR THEN');
15590   l('               x_return_status := FND_API.G_RET_STS_ERROR;');
15591   l('               FND_MSG_PUB.Count_And_Get(');
15592   l('                               p_encoded => FND_API.G_FALSE,');
15593   l('                               p_count => x_msg_count,');
15594   l('                               p_data  => x_msg_data);');
15595   l('       WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN');
15596   l('               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;');
15597   l('               FND_MSG_PUB.Count_And_Get(');
15598   l('                               p_encoded => FND_API.G_FALSE,');
15599   l('                               p_count => x_msg_count,');
15600   l('                               p_data  => x_msg_data);');
15601   l('');
15602   l('       WHEN OTHERS THEN');
15603   l('               x_return_status := FND_API.G_RET_STS_UNEXP_ERROR;');
15604   l('               FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_API_ERROR'');');
15608   l('');
15605   l('               FND_MESSAGE.SET_TOKEN(''PROC'' ,''HZ_PARTY_SEARCH'');');
15606   l('               FND_MESSAGE.SET_TOKEN(''ERROR'' ,SQLERRM);');
15607   l('               FND_MSG_PUB.ADD;');
15609   l('               FND_MSG_PUB.Count_And_Get(');
15610   l('                               p_encoded => FND_API.G_FALSE,');
15611   l('                               p_count => x_msg_count,');
15612   l('                               p_data  => x_msg_data);');
15613 END;
15614 
15615 
15616 -- VJN put the meat of what this was earlier doing into the overloaded
15617 -- procedure, that would do the actual compiling based on the match rule purpose
15618 PROCEDURE compile_all_rules_nolog IS
15619 BEGIN
15620   compile_all_rules_nolog('D');
15621   compile_all_rules_nolog('S');
15622   compile_all_rules_nolog('W');
15623 
15624 END;
15625 
15626 -- VJN introduced overloaded procedure
15627 PROCEDURE compile_all_rules_nolog( p_rule_purpose IN varchar2)
15628 IS
15629 
15630   l_return_status varchar2(100)  := null;
15631   l_msg_count      number(15)    := 0;
15632   l_msg_data      varchar2(4000)  := null;
15633 
15634   CURSOR c_rules_for_compile  IS
15635     SELECT MATCH_RULE_ID,RULE_NAME FROM HZ_MATCH_RULES_VL
15636     where rule_purpose = p_rule_purpose ;
15637 
15638   l_cur_date DATE;
15639 
15640   l_match_rule_id         NUMBER;
15641   l_rule_name HZ_MATCH_RULES_TL.RULE_NAME%TYPE;
15642   err VARCHAR2(2000);
15643 
15644 BEGIN
15645 
15646   -- Initialize return status and message stack
15647   FND_MSG_PUB.initialize;
15648 
15649   l_cur_date := SYSDATE;
15650 
15651   UPDATE HZ_MATCH_RULES_B SET compilation_flag = 'U'
15652   where rule_purpose = p_rule_purpose ;
15653 
15654   OPEN c_rules_for_compile ;
15655   LOOP
15656     FETCH c_rules_for_compile INTO l_match_rule_id, l_rule_name;
15657     EXIT WHEN c_rules_for_compile%NOTFOUND;
15658 
15659     BEGIN
15660       HZ_MATCH_RULE_COMPILE.COMPILE_MATCH_RULE( l_match_rule_id,'Y',
15661                                                l_return_status,
15662                                                l_msg_count,
15663                                                l_msg_data) ;
15664 
15665     EXCEPTION
15666       WHEN OTHERS THEN
15667         UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_match_rule_id;
15668         COMMIT;
15669     END;
15670 
15671   END LOOP;
15672 
15673   -- IF p_rule_purpose <> 'Q'
15674   -- THEN
15675       HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
15676       gen_wrap_pkg_body(-1);
15677       HZ_GEN_PLSQL.compile_code;
15678   -- END IF;
15679 
15680 EXCEPTION
15681   WHEN OTHERS THEN
15682     ROLLBACK;
15683 END;
15684 
15685 
15686 
15687 
15688 PROCEDURE compile_all_rules (
15689         errbuf                  OUT NOCOPY     VARCHAR2,
15690         retcode                 OUT NOCOPY     VARCHAR2
15691 ) IS
15692 
15693   l_return_status varchar2(100)  := null;
15694   l_msg_count      number(15)    := 0;
15695   l_msg_data      varchar2(4000)  := null;
15696 
15697   CURSOR c_rules_for_compile  IS
15698     SELECT MATCH_RULE_ID,RULE_NAME FROM HZ_MATCH_RULES_VL ORDER BY match_rule_type DESC nulls first;--bug 5263694
15699 
15700   l_cur_date DATE;
15701 
15702   l_match_rule_id         NUMBER;
15703   l_rule_name HZ_MATCH_RULES_TL.RULE_NAME%TYPE;
15704   err VARCHAR2(2000);
15705 
15706 BEGIN
15707 
15708   retcode := 0;
15709 
15710   outandlog('Starting Concurrent Program ''Compile Match Rules ''');
15711   outandlog('Start Time ' || TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
15712   outandlog('NEWLINE');
15713 
15714   -- Initialize return status and message stack
15715   FND_MSG_PUB.initialize;
15716 
15717   l_cur_date := SYSDATE;
15718 
15719   log('');
15720 
15721   UPDATE HZ_MATCH_RULES_B SET compilation_flag = 'U';
15722 
15723   OPEN c_rules_for_compile ;
15724   LOOP
15725     FETCH c_rules_for_compile INTO l_match_rule_id, l_rule_name;
15726     EXIT WHEN c_rules_for_compile%NOTFOUND;
15727 
15728     BEGIN
15729       log('Compiling Match Rule ' || l_rule_name || ' ... ', FALSE);
15730       HZ_MATCH_RULE_COMPILE.COMPILE_MATCH_RULE( l_match_rule_id,'Y',
15731                                                l_return_status,
15732                                                l_msg_count,
15733                                                l_msg_data) ;
15734 
15735       IF l_return_status = 'S' THEN
15736         log('Done');
15737       ELSE
15738         retcode := 1;
15739         log('');
15740         log('Error Compiling Rule : ');
15741         err := logerror;
15742       END IF;
15743     EXCEPTION
15744       WHEN OTHERS THEN
15745         retcode := 1;
15746         log('');
15747         log('Error Compiling Rule : ');
15748         err := logerror(SQLERRM);
15749         UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_match_rule_id;
15750         COMMIT;
15751     END;
15752   END LOOP;
15753   HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
15754   gen_wrap_pkg_body(-1);
15755   HZ_GEN_PLSQL.compile_code;
15756 
15757   IF retcode = 1 THEN
15758     outandlog('One or More match rules compilation had errors. Please check the log file for details');
15759   END IF;
15760 
15761   outandlog('Concurrent Program Execution completed ');
15762   outandlog('End Time : '|| TO_CHAR(SYSDATE, 'MM-DD-YY HH24:MI:SS'));
15763 EXCEPTION
15764   WHEN OTHERS THEN
15765     retcode := 2;
15766     ROLLBACK;
15767     log('Errors Encountered');
15768     errbuf := logerror(SQLERRM);
15772 * Procedure to write a message to the out file
15769 END;
15770 
15771 /**
15773 **/
15774 PROCEDURE out(
15775    message      IN      VARCHAR2,
15776    newline      IN      BOOLEAN DEFAULT TRUE) IS
15777 BEGIN
15778   IF message = 'NEWLINE' THEN
15779     FND_FILE.NEW_LINE(FND_FILE.OUTPUT, 1);
15780   ELSIF (newline) THEN
15781     FND_FILE.put_line(fnd_file.output,message);
15782   ELSE
15783     FND_FILE.put(fnd_file.output,message);
15784   END IF;
15785 END out;
15786 
15787 /**
15788 * Procedure to write a message to the log file
15789 **/
15790 PROCEDURE log(
15791    message      IN      VARCHAR2,
15792    newline      IN      BOOLEAN DEFAULT TRUE
15793 ) IS
15794 BEGIN
15795   IF message = 'NEWLINE' THEN
15796    FND_FILE.NEW_LINE(FND_FILE.LOG, 1);
15797   ELSIF (newline) THEN
15798     FND_FILE.put_line(fnd_file.log,message);
15799   ELSE
15800     FND_FILE.put(fnd_file.log,message);
15801   END IF;
15802 END log;
15803 
15804 /**
15805 * Procedure to write a message to the out and log files
15806 **/
15807 PROCEDURE outandlog(
15808    message      IN      VARCHAR2,
15809    newline      IN      BOOLEAN DEFAULT TRUE) IS
15810 BEGIN
15811   out(message, newline);
15812   log(message, newline);
15813 END outandlog;
15814 
15815 /**
15816 * Function to fetch messages of the stack and log the error
15817 * Also returns the error
15818 **/
15819 FUNCTION logerror(SQLERRM VARCHAR2 DEFAULT NULL)
15820 RETURN VARCHAR2 IS
15821 
15822   l_msg_data VARCHAR2(2000);
15823 BEGIN
15824   FND_MSG_PUB.Reset;
15825 
15826   FOR I IN 1..FND_MSG_PUB.Count_Msg LOOP
15827     l_msg_data := l_msg_data || FND_MSG_PUB.Get(p_encoded => FND_API.G_FALSE );
15828   END LOOP;
15829   IF (SQLERRM IS NOT NULL) THEN
15830     l_msg_data := l_msg_data || SQLERRM;
15831   END IF;
15832   log(l_msg_data);
15833   RETURN l_msg_data;
15834 END logerror;
15835 
15836 PROCEDURE gen_call_api_dynamic_names IS
15837 
15838 BEGIN
15839   l(' ');
15840   l(' FUNCTION get_attrib_id(p_str VARCHAR2)  ');
15841   l('   RETURN NUMBER IS  ');
15842   l('   l_id NUMBER;  ');
15843   l('   l_pl NUMBER;  ');
15844   l('   l_token VARCHAR2(1);  ');
15845   l('   BEGIN  ');
15846   l('        l_token := ''.'';  ');
15847   l('        l_pl := instrb(p_str, l_token);  ');
15848   l('        select attribute_id into l_id  ');
15849   l('        from hz_trans_attributes_b  ');
15850   l('        where entity_name = substrb(p_str, 0, l_pl - 1)  ');
15851   l('        and ATTRIBUTE_NAME = substrb(p_str, l_pl + 1);  ');
15852   l('        RETURN l_id;  ');
15853   l('   EXCEPTION WHEN NO_DATA_FOUND THEN  ');
15854   l('             FND_MESSAGE.SET_NAME(''AR'', ''HZ_DQM_NOATTRIB_ERROR'' ); ');
15855   l('             FND_MESSAGE.SET_TOKEN(''ENTITY_ATTRIBUTE'' ,p_str); ');
15856   l('             FND_MSG_PUB.ADD; ');
15857   l('             RAISE FND_API.G_EXC_ERROR; ');
15858   l('   END get_attrib_id;  ');
15859 
15860   l('  PROCEDURE call_api_dynamic_names (');
15861   l('      p_init_msg_list         IN      VARCHAR2:= FND_API.G_FALSE,');
15862   l('      p_rule_id               IN      NUMBER,');
15863   l('      p_attrib_name1            IN      VARCHAR2,');
15864   l('      p_attrib_name2            IN      VARCHAR2,');
15865   l('      p_attrib_name3            IN      VARCHAR2,');
15866   l('      p_attrib_name4            IN      VARCHAR2,');
15867   l('      p_attrib_name5            IN      VARCHAR2,');
15868   l('      p_attrib_name6            IN      VARCHAR2,');
15869   l('      p_attrib_name7            IN      VARCHAR2,');
15870   l('      p_attrib_name8            IN      VARCHAR2,');
15871   l('      p_attrib_name9            IN      VARCHAR2,');
15872   l('      p_attrib_name10           IN      VARCHAR2,');
15873   l('      p_attrib_name11           IN      VARCHAR2,');
15874   l('      p_attrib_name12           IN      VARCHAR2,');
15875   l('      p_attrib_name13           IN      VARCHAR2,');
15876   l('      p_attrib_name14           IN      VARCHAR2,');
15877   l('      p_attrib_name15           IN      VARCHAR2,');
15878   l('      p_attrib_name16           IN      VARCHAR2,');
15879   l('      p_attrib_name17           IN      VARCHAR2,');
15880   l('      p_attrib_name18           IN      VARCHAR2,');
15881   l('      p_attrib_name19           IN      VARCHAR2,');
15882   l('      p_attrib_name20           IN      VARCHAR2,');
15883   l('      p_attrib_val1           IN      VARCHAR2,');
15884   l('      p_attrib_val2           IN      VARCHAR2,');
15885   l('      p_attrib_val3           IN      VARCHAR2,');
15886   l('      p_attrib_val4           IN      VARCHAR2,');
15887   l('      p_attrib_val5           IN      VARCHAR2,');
15888   l('      p_attrib_val6           IN      VARCHAR2,');
15889   l('      p_attrib_val7           IN      VARCHAR2,');
15890   l('      p_attrib_val8           IN      VARCHAR2,');
15891   l('      p_attrib_val9           IN      VARCHAR2,');
15892   l('      p_attrib_val10          IN      VARCHAR2,');
15893   l('      p_attrib_val11          IN      VARCHAR2,');
15894   l('      p_attrib_val12          IN      VARCHAR2,');
15895   l('      p_attrib_val13          IN      VARCHAR2,');
15896   l('      p_attrib_val14          IN      VARCHAR2,');
15897   l('      p_attrib_val15          IN      VARCHAR2,');
15898   l('      p_attrib_val16          IN      VARCHAR2,');
15899   l('      p_attrib_val17          IN      VARCHAR2,');
15900   l('      p_attrib_val18          IN      VARCHAR2,');
15901   l('      p_attrib_val19          IN      VARCHAR2,');
15902   l('      p_attrib_val20          IN      VARCHAR2,');
15903   l('      p_restrict_sql          IN      VARCHAR2,');
15904   l('      p_api_name              IN      VARCHAR2,');
15905   l('      p_match_type            IN      VARCHAR2,');
15906   l('      p_party_id              IN      NUMBER,');
15910   l('      x_return_status         OUT     VARCHAR2,');
15907   l('      p_search_merged         IN      VARCHAR2,');
15908   l('      x_search_ctx_id         OUT     NUMBER,');
15909   l('      x_num_matches           OUT     NUMBER,');
15911   l('      x_msg_count             OUT     NUMBER,');
15912   l('      x_msg_data              OUT     VARCHAR2');
15913   l(' ) IS');
15914   l('     l_attrib_id1   NUMBER; ');
15915   l('       l_attrib_id2   NUMBER; ');
15916   l('       l_attrib_id3   NUMBER; ');
15917   l('       l_attrib_id4   NUMBER; ');
15918   l('       l_attrib_id5   NUMBER; ');
15919   l('       l_attrib_id6   NUMBER; ');
15920   l('       l_attrib_id7   NUMBER; ');
15921   l('       l_attrib_id8   NUMBER; ');
15922   l('       l_attrib_id9   NUMBER; ');
15923   l('       l_attrib_id10  NUMBER; ');
15924   l('       l_attrib_id11  NUMBER; ');
15925   l('       l_attrib_id12  NUMBER; ');
15926   l('       l_attrib_id13  NUMBER; ');
15927   l('       l_attrib_id14  NUMBER; ');
15928   l('       l_attrib_id15  NUMBER; ');
15929   l('       l_attrib_id16  NUMBER; ');
15930   l('       l_attrib_id17  NUMBER; ');
15931   l('       l_attrib_id18  NUMBER; ');
15932   l('       l_attrib_id19  NUMBER; ');
15933   l('       l_attrib_id20  NUMBER; ');
15934   l('  BEGIN');
15935   d(fnd_log.level_procedure,'call_api_dynamic_names(+)');
15936   d(fnd_log.level_statement,'Rule ID','p_rule_id ');
15937   l(' ');
15938   l('      IF (p_attrib_name1 IS NOT NULL) THEN  ');
15939   l('           l_attrib_id1 := get_attrib_id(p_attrib_name1); ');
15940   l('      END IF; ');
15941   l('      IF (p_attrib_name2 IS NOT NULL) THEN ');
15942   l('           l_attrib_id2 := get_attrib_id(p_attrib_name2); ');
15943   l('      END IF; ');
15944   l('      IF (p_attrib_name3 IS NOT NULL) THEN ');
15945   l('           l_attrib_id3 := get_attrib_id(p_attrib_name3); ');
15946   l('      END IF; ');
15947   l('      IF (p_attrib_name4 IS NOT NULL) THEN ');
15948   l('           l_attrib_id4 := get_attrib_id(p_attrib_name4); ');
15949   l('      END IF; ');
15950   l('      IF (p_attrib_name5 IS NOT NULL) THEN ');
15951   l('           l_attrib_id5 := get_attrib_id(p_attrib_name5); ');
15952   l('      END IF; ');
15953   l('      IF (p_attrib_name6 IS NOT NULL) THEN ');
15954   l('           l_attrib_id6 := get_attrib_id(p_attrib_name6); ');
15955   l('      END IF; ');
15956   l('      IF (p_attrib_name7 IS NOT NULL) THEN ');
15957   l('           l_attrib_id7 := get_attrib_id(p_attrib_name7); ');
15958   l('      END IF; ');
15959   l('      IF (p_attrib_name8 IS NOT NULL) THEN ');
15960   l('           l_attrib_id8 := get_attrib_id(p_attrib_name8); ');
15961   l('      END IF; ');
15962   l('      IF (p_attrib_name9 IS NOT NULL) THEN ');
15963   l('           l_attrib_id9 := get_attrib_id(p_attrib_name9); ');
15964   l('      END IF; ');
15965   l('      IF (p_attrib_name10 IS NOT NULL) THEN ');
15966   l('           l_attrib_id10 := get_attrib_id(p_attrib_name10); ');
15967   l('      END IF; ');
15968   l('      IF (p_attrib_name11 IS NOT NULL) THEN ');
15969   l('           l_attrib_id11 := get_attrib_id(p_attrib_name11); ');
15970   l('      END IF; ');
15971   l('      IF (p_attrib_name12 IS NOT NULL) THEN ');
15972   l('           l_attrib_id12 := get_attrib_id(p_attrib_name12); ');
15973   l('      END IF; ');
15974   l('      IF (p_attrib_name13 IS NOT NULL) THEN ');
15975   l('           l_attrib_id13 := get_attrib_id(p_attrib_name13); ');
15976   l('      END IF; ');
15977   l('      IF (p_attrib_name14 IS NOT NULL) THEN ');
15978   l('           l_attrib_id14 := get_attrib_id(p_attrib_name14); ');
15979   l('      END IF; ');
15980   l('      IF (p_attrib_name15 IS NOT NULL) THEN ');
15981   l('           l_attrib_id15 := get_attrib_id(p_attrib_name15); ');
15982   l('      END IF; ');
15983   l('      IF (p_attrib_name16 IS NOT NULL) THEN ');
15984   l('           l_attrib_id16 := get_attrib_id(p_attrib_name16); ');
15985   l('      END IF; ');
15986   l('      IF (p_attrib_name17 IS NOT NULL) THEN ');
15987   l('           l_attrib_id17 := get_attrib_id(p_attrib_name17); ');
15988   l('      END IF; ');
15989   l('      IF (p_attrib_name18 IS NOT NULL) THEN ');
15990   l('           l_attrib_id18 := get_attrib_id(p_attrib_name18);  ');
15991   l('      END IF; ');
15992   l('      IF (p_attrib_name19 IS NOT NULL) THEN ');
15993   l('           l_attrib_id19 := get_attrib_id(p_attrib_name19); ');
15994   l('      END IF; ');
15995   l('      IF (p_attrib_name20 IS NOT NULL) THEN ');
15996   l('           l_attrib_id20 := get_attrib_id(p_attrib_name20); ');
15997   l('      END IF; ');
15998 
15999 
16000   l('    hz_party_search.call_api_dynamic( ');
16001   l('            p_init_msg_list, p_rule_id, ');
16002   l('            l_attrib_id1,l_attrib_id2,l_attrib_id3,l_attrib_id4,l_attrib_id5, ');
16003   l('            l_attrib_id6,l_attrib_id7,l_attrib_id8,l_attrib_id9,l_attrib_id10, ');
16004   l('            l_attrib_id11,l_attrib_id12,l_attrib_id13,l_attrib_id14,l_attrib_id15, ');
16005   l('            l_attrib_id16,l_attrib_id17,l_attrib_id18,l_attrib_id19,l_attrib_id20, ');
16006   l('            p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5, ');
16007   l('            p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10, ');
16008   l('            p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15, ');
16009   l('            p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20, ');
16010   l('            p_restrict_sql,p_api_name,p_match_type,p_party_id,p_search_merged, ');
16011   l('            x_search_ctx_id,x_num_matches, x_return_status, x_msg_count, x_msg_data);  ');
16012   d(fnd_log.level_procedure,'call_api_dynamic_names(-)');
16013   gen_exception_block;
16014   l('  END call_api_dynamic_names; ');
16015 
16016 END gen_call_api_dynamic_names;
16017 
16018 ---Start of Code Change for Match Rule Set
16019 FUNCTION has_uncompiled_childern(p_rule_set_id NUMBER)
16020 RETURN BOOLEAN
16021 IS
16025                            FROM   HZ_MATCH_RULE_CONDITIONS
16022 CURSOR c_uncompiled_children IS
16023   SELECT count(unique compilation_flag) FROM HZ_MATCH_RULES_B
16024   WHERE  match_rule_id IN( SELECT unique condition_match_rule_id
16026 			   WHERE  match_rule_set_id = p_rule_set_id)
16027   AND compilation_flag <> 'C';
16028 l_count NUMBER;
16029 
16030 BEGIN
16031  OPEN  c_uncompiled_children;
16032  FETCH c_uncompiled_children INTO l_count;
16033  CLOSE c_uncompiled_children;
16034  IF (l_count >0 )THEN
16035    RETURN TRUE;
16036  ELSE
16037    RETURN FALSE;
16038  END IF;
16039 END;
16040 
16041 PROCEDURE compile_all_rulesets (
16042         p_cond_rule_id   IN NUMBER
16043 ) IS
16044 
16045   l_return_status varchar2(100)  := null;
16046   l_msg_count      number(15)    := 0;
16047   l_msg_data      varchar2(4000)  := null;
16048 
16049   CURSOR c_rulesets_for_compile  IS
16050     SELECT UNIQUE MATCH_RULE_ID,RULE_NAME FROM HZ_MATCH_RULES_VL
16051     WHERE COMPILATION_FLAG <> 'C'
16052     AND MATCH_RULE_ID IN (SELECT UNIQUE MATCH_RULE_SET_ID FROM HZ_MATCH_RULE_CONDITIONS
16053                           WHERE CONDITION_MATCH_RULE_ID = p_cond_rule_id)
16054     ;
16055 
16056 
16057   l_match_rule_set_id         NUMBER;
16058   l_rule_name HZ_MATCH_RULES_TL.RULE_NAME%TYPE;
16059   err VARCHAR2(2000);
16060   l_has_errors BOOLEAN := FALSE;
16061 BEGIN
16062 
16063   -- Initialize return status and message stack
16064   FND_MSG_PUB.initialize;
16065 
16066   log('');
16067 
16068   OPEN c_rulesets_for_compile ;
16069   LOOP
16070     FETCH c_rulesets_for_compile INTO l_match_rule_set_id, l_rule_name;
16071     EXIT WHEN c_rulesets_for_compile%NOTFOUND;
16072 
16073     BEGIN
16074       log('Compiling Match Rule Set ' || l_rule_name || ' ... ', FALSE);
16075       HZ_MATCH_RULE_COMPILE.COMPILE_MATCH_RULE( l_match_rule_set_id,'Y',
16076                                                l_return_status,
16077                                                l_msg_count,
16078                                                l_msg_data) ;
16079 
16080       IF l_return_status = 'S' THEN
16081         log('Done');
16082       ELSE
16083         log('');
16084 	l_has_errors :=TRUE;
16085         log('Error Compiling Rule Set: '||l_match_rule_set_id || ' msg_data='||l_msg_data);
16086 
16087       END IF;
16088     EXCEPTION
16089       WHEN OTHERS THEN
16090         log('');
16091         l_has_errors :=TRUE;
16092         log('Error Compiling Rule Set : '||l_match_rule_set_id||' ,sqlerrm='||sqlerrm);
16093 	UPDATE HZ_MATCH_RULES_B SET COMPILATION_FLAG = 'U' WHERE MATCH_RULE_ID = l_match_rule_set_id;
16094         COMMIT;
16095     END;
16096   END LOOP;
16097   close c_rulesets_for_compile;
16098  IF NOT l_has_errors THEN
16099   HZ_GEN_PLSQL.new('HZ_PARTY_SEARCH','PACKAGE BODY');
16100   gen_wrap_pkg_body(-1);
16101   HZ_GEN_PLSQL.compile_code;
16102  END IF;
16103 
16104 EXCEPTION
16105   WHEN OTHERS THEN
16106     ROLLBACK;
16107     log('Errors Encountered during match rule set compilation..sqlerrm='||sqlerrm);
16108 END;
16109 
16110 PROCEDURE pop_conditions(p_mrule_set_id	   IN  NUMBER,
16111 			 p_api_name		   IN  VARCHAR2,
16112 			 p_parameters		   IN  VARCHAR2,
16113 			 p_eval_level IN  VARCHAR2)
16114 IS
16115 
16116 TYPE ref_conditions is ref cursor;
16117 c_ref_conditions ref_conditions;
16118 
16119 
16120 l_cond_string varchar2(32000);
16121 l_add_then BOOLEAN;
16122 l_count NUMBER;
16123 l_value VARCHAR2(2000);
16124 l_tmp_value varchar2(30);
16125 l_index NUMBER;
16126 l_sql   varchar2(1000);
16127 l_close_if  BOOLEAN;
16128 
16129 l_condition_match_rule_id NUMBER(15);
16130 l_entity_name             VARCHAR2(255);
16131 l_attribute_name          VARCHAR2(255);
16132 l_operation               VARCHAR2(30);
16133 l_rank                    NUMBER;
16134 
16135 BEGIN
16136 
16137   IF p_eval_level = 'PARTY' THEN
16138     l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16139             ' attr.attribute_name,operation,value,rank '||
16140             ' FROM   hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16141             ' WHERE  cond.match_rule_set_id  = '||P_MRULE_SET_ID||
16142             ' AND    cond.attribute_id= attr.attribute_id (+) '||
16143             ' ORDER BY rank ASC';
16144   ELSIF p_eval_level = 'PARTY_SITES' then
16145     l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16146             ' attr.attribute_name,operation,value,rank '||
16147             ' FROM   hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16148             ' WHERE  cond.match_rule_set_id  = '||P_MRULE_SET_ID||
16149             ' AND    nvl(attr.entity_name,''XYZ'') NOT IN (''PARTY'',''CONTACTS'') '||
16150 	    ' AND    cond.attribute_id= attr.attribute_id (+) '||
16151 	    ' ORDER BY rank ASC';
16152   ELSIF p_eval_level = 'CONTACTS' then
16153     l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16154             ' attr.attribute_name,operation,value,rank '||
16155             ' FROM   hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16156             ' WHERE  cond.match_rule_set_id  = '||P_MRULE_SET_ID||
16157             ' AND    nvl(attr.entity_name,''XYZ'') NOT IN (''PARTY'',''PARTY_SITES'') '||
16158 	    ' AND    cond.attribute_id= attr.attribute_id (+) '||
16159 	    ' ORDER BY rank ASC';
16160   ELSIF p_eval_level = 'CONTACT_POINTS' then
16161     l_sql :='SELECT condition_match_rule_id,attr.entity_name,'||
16162             ' attr.attribute_name,operation,value,rank '||
16163             ' FROM   hz_match_rule_conditions cond,hz_trans_attributes_vl attr '||
16164             ' WHERE  cond.match_rule_set_id  = '||P_MRULE_SET_ID||
16165             ' AND    nvl(attr.entity_name,''XYZ'') NOT IN (''PARTY'',''PARTY_SITES'',''CONTACTS'') '||
16169     RETURN;
16166 	    ' AND    cond.attribute_id= attr.attribute_id (+) '||
16167 	    ' ORDER BY rank ASC';
16168   ELSE
16170   END IF;
16171 
16172   l_add_then    := FALSE;
16173   l_count       := 0;
16174   l_cond_string := NULL;
16175   l_value   := NULL;
16176   l_index   := 0;
16177   l_close_if := FALSE;
16178    --Start of Bug No: 4234203
16179   l('DECLARE');
16180   l(' l_condition_match_rule_id NUMBER(15);');
16181   l(' l_cond_rule_name VARCHAR2(255);');
16182   l(' CURSOR c_rule_name(p_rule_id NUMBER) IS SELECT rule_name FROM hz_match_rules_vl ');
16183   l(' where match_rule_id=p_rule_id ;');
16184   l('BEGIN');
16185   --End of Bug No: 4234203
16186   OPEN c_ref_conditions FOR l_sql;
16187   LOOP
16188     FETCH c_ref_conditions INTO l_condition_match_rule_id,l_entity_name,l_attribute_name,l_operation,
16189                                 l_value,l_rank;
16190     EXIT WHEN c_ref_conditions%NOTFOUND;
16191      l_cond_string := NULL;
16192      l_count := l_count+1;
16193      IF l_count = 1 AND l_attribute_name IS NOT NULL THEN
16194         l('IF  ');
16195         l_add_then := TRUE;
16196 	l_close_if := TRUE;
16197      ELSIF l_attribute_name IS NOT NULL THEN
16198         l('ELSIF  ');
16199         l_add_then := TRUE;
16200 	l_close_if := TRUE;
16201      ELSIF l_attribute_name IS NULL AND l_add_then THEN
16202        l('ELSE  ');
16203        l_add_then := FALSE;
16204        l_close_if := TRUE;
16205      END IF;
16206      IF l_operation = 'LIKE' then
16207         l_value :=''''||HZ_TRANS_PKG.EXACT(l_value,NULL,l_attribute_name,l_entity_name)||'%''';
16208      ELSIF l_operation = 'IN' then
16209         l_tmp_value := l_value;
16210 	l_value := NULL;
16211 	LOOP
16212 	 l_index := instrb(l_tmp_value,',');
16213 	 IF l_index =0 then
16214 	  l_value := l_value ||','''||HZ_TRANS_PKG.EXACT(l_tmp_value,NULL,l_attribute_name,l_entity_name)||'''';
16215 	  l_value := '('||ltrim(l_value,',')||')';
16216 	    exit;
16217          END IF;
16218 	 l_value := l_value ||','''||HZ_TRANS_PKG.EXACT(substrb(l_tmp_value,1,l_index-1),NULL,l_attribute_name,l_entity_name)||'''';
16219 	 l_tmp_value := substrb(l_tmp_value,l_index+1);
16220 	END LOOP;
16221 
16222     ELSE
16223         l_value :=''''||HZ_TRANS_PKG.EXACT(l_value,NULL,l_attribute_name,l_entity_name)||'''';
16224     END IF;
16225 
16226     IF  l_entity_name = 'PARTY' THEN
16227          l_cond_string := 'HZ_TRANS_PKG.EXACT(p_party_search_rec.'||l_attribute_name||',NULL,'''||
16228 	                   l_attribute_name||''',''PARTY'') '|| l_operation ||'  '|| l_value;
16229     ELSIF l_entity_name = 'PARTY_SITES' THEN
16230          l_cond_string := '(p_party_site_list IS NOT NULL AND p_party_site_list.COUNT >0) AND (HZ_TRANS_PKG.EXACT(p_party_site_list(1).'||
16231 	 l_attribute_name||',NULL,'''||l_attribute_name||''',''PARTY_SITES'') '|| l_operation ||'  '|| l_value ||')';
16232     ELSIF l_entity_name = 'CONTACTS' THEN
16233          l_cond_string := '(p_contact_list IS NOT NULL AND p_contact_list.COUNT >0) AND (HZ_TRANS_PKG.EXACT(p_contact_list(1).'||
16234 	 l_attribute_name||',NULL,'''||l_attribute_name||''',''CONTACTS'') '|| l_operation ||'  '|| l_value ||')';
16235     ELSIF l_entity_name = 'CONTACT_POINTS' THEN
16236          l_cond_string := '(p_contact_point_list IS NOT NULL AND  p_contact_point_list.COUNT >0) AND (HZ_TRANS_PKG.EXACT(p_contact_point_list(1).'||
16237 	 l_attribute_name||',NULL,'''||l_attribute_name||''',''CONTACT_POINTS'') '|| l_operation ||'  '|| l_value ||')';
16238     END IF;
16239     IF l_add_then THEN
16240         l_cond_string := l_cond_string || '  THEN ';
16241     END IF;
16242 
16243     l(l_cond_string);
16244     l(' l_condition_match_rule_id :='|| l_condition_match_rule_id ||';'); --Bug No: 4234203
16245     ldbg_s('Calling '||p_api_name||' using match rule id :'||l_condition_match_rule_id); --Bug No: 4234203
16246     l(' HZ_MATCH_RULE_'||l_condition_match_rule_id||'.'||p_api_name||'('|| p_parameters ||');');
16247   END LOOP;
16248   CLOSE c_ref_conditions;
16249   IF l_close_if THEN
16250        l('END IF;');
16251   END IF;
16252   --Start of Bug No: 4234203
16253   l('EXCEPTION');
16254   l(' WHEN OTHERS THEN') ;
16255   l(' OPEN  c_rule_name(l_condition_match_rule_id);');
16256   l(' FETCH c_rule_name INTO l_cond_rule_name;');
16257   l(' CLOSE c_rule_name; ');
16258   l(' FND_MESSAGE.SET_NAME(''AR'', ''HZ_MATCH_RULE_SRCH_ERROR''); ');
16259   l(' FND_MESSAGE.SET_TOKEN(''MATCH_RULE'',l_cond_rule_name); ');
16260   l(' FND_MSG_PUB.ADD; ');
16261   l(' RAISE; ');
16262   l('END;');
16263   --End of Bug No: 4234203
16264 END pop_conditions;
16265 ---End of Code Change for Match Rule Set
16266 
16267 --Start of Bug No: 4162385
16268  FUNCTION get_entity_level_score(p_match_rule_id NUMBER,p_entity_name VARCHAR2)
16269  RETURN NUMBER
16270  IS
16271   l_score NUMBER;
16272  BEGIN
16273    SELECT nvl(sum(sec.score),0) INTO l_score
16274    FROM HZ_MATCH_RULE_SECONDARY sec,HZ_TRANS_ATTRIBUTES_VL attr
16275    WHERE sec.match_rule_id = p_match_rule_id
16276    AND   sec.attribute_id  = attr.attribute_id
16277    AND   attr.entity_name  =  p_entity_name;
16278 
16279    RETURN l_score;
16280  END get_entity_level_score;
16281 --End of Bug No: 4162385
16282 
16283 END;