1 PACKAGE BODY HZ_MATCH_RULE_238 AS
2 /*=======================================================================+
3 | Copyright (c) 1999 Oracle Corporation Redwood Shores, California, USA|
4 | All rights reserved. |
5 +=======================================================================+
6 | NAME
7 | HZ_MATCH_RULE_238
8 |
9 | DESCRIPTION
10 |
11 | Compiled by the HZ Match Rule Compiler
12 | -- Do Not Modify --
13 |
14 | PUBLIC PROCEDURES
15 | find_parties
16 | get_matching_party_sites
17 | get_matching_contacts
18 | get_matching_contact_points
19 | get_score_details
20 |
21 | HISTORY
22 | 28-NOV-2012 Generated by HZ Match Rule Compiler
23 |
24 *=======================================================================*/
25
26 -- ==========================================================================================
27 -- ============MATCH RULE COMPILER GENERATED CODE FOR WEB SERVICE MATCH RULES ========
28 -- ==========================================================================================
29
30 TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;
31 call_order vlisttype;
32 call_max_score HZ_PARTY_SEARCH.IDList;
33 call_type vlisttype;
34 g_party_stage_rec HZ_PARTY_STAGE.party_stage_rec_type;
35 g_party_site_stage_list HZ_PARTY_STAGE.party_site_stage_list;
36 g_contact_stage_list HZ_PARTY_STAGE.contact_stage_list;
37 g_contact_pt_stage_list HZ_PARTY_STAGE.contact_pt_stage_list;
38 g_mappings HZ_PARTY_SEARCH.IDList;
39 g_max_id NUMBER:=2000000000;
40 g_other_party_level_attribs BOOLEAN;
41
42 g_debug_count NUMBER := 0;
43 g_score_until_thresh BOOLEAN:=false;
44
45 g_thres_score NUMBER:=1000;
46 g_ps_den_only BOOLEAN;
47 g_index_owner VARCHAR2(255);
48 distinct_search_cpt_types NUMBER ;
49
50 PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)
51 IS
52 remainder_str VARCHAR2(4000);
53 current_pos NUMBER ;
54 temp VARCHAR2(300) ;
55 BEGIN
56 remainder_str := input_str ;
57 current_pos := 1 ;
58 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
59 WHILE remainder_str IS NOT NULL
60 LOOP
61 temp := substr(remainder_str, 1 , 255 );
62 hz_utility_v2pub.debug(p_message=>' '||temp,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
63 current_pos := current_pos + 255 ;
64 remainder_str := substr(input_str,current_pos );
65 END LOOP ;
66 END IF;
67 END ;
68 FUNCTION check_estimate_hits (
69 p_entity VARCHAR2,
70 p_contains_str VARCHAR2) RETURN NUMBER IS
71
72 ustatus VARCHAR2(255);
73 dstatus VARCHAR2(255);
74 l_bool BOOLEAN;
75 l_hits NUMBER := 0;
76 BEGIN
77 IF g_index_owner IS NULL THEN
78 l_bool := fnd_installation.GET_APP_INFO('AR',ustatus,dstatus,g_index_owner);
79 END IF;
80 IF p_entity='PARTY' THEN
81
82 l_hits := CTX_QUERY.count_hits(
83 g_index_owner||'.'||'HZ_STAGE_PARTIES_T1',p_contains_str, false);
84 ELSIF p_entity='PARTY_SITES' THEN
85 l_hits := CTX_QUERY.count_hits(
86 g_index_owner||'.'||'HZ_STAGE_PARTY_SITES_T1',p_contains_str, false);
87 ELSIF p_entity='CONTACTS' THEN
88 l_hits := CTX_QUERY.count_hits(
89 g_index_owner||'.'||'HZ_STAGE_CONTACT_T1',p_contains_str, false);
90 ELSIF p_entity='CONTACT_POINTS' THEN
91 l_hits := CTX_QUERY.count_hits(
92 g_index_owner||'.'||'HZ_STAGE_CPT_T1',p_contains_str, false);
93 END IF;
94 RETURN floor(l_hits/2) ;
95
96
97 exception
98 when others then
99 if (instrb(SQLERRM,'DRG-51030')>0) then
100 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
101 FND_MSG_PUB.ADD;
102 RAISE FND_API.G_EXC_ERROR;
103 elsif (instrb(SQLERRM,'DRG-50943')>0) then
104 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
105 FND_MSG_PUB.ADD;
106 RAISE FND_API.G_EXC_ERROR;
107 else
108 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
109 end if;
110 END;
111
112
113 FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)
114 RETURN VARCHAR2
115 IS
116 p_person_restrict_sql VARCHAR2(32767);
117 p_restrict1_sql VARCHAR2(32767);
118 p_final_restrict_sql VARCHAR2(32767);
119 BEGIN
120 p_final_restrict_sql := p_restrict_sql ;
121 IF p_restrict_sql IS NOT NULL
122 THEN
123 IF instrb(p_restrict_sql, 'STAGE.') > 0
124 THEN
125 p_restrict1_sql := replace( p_restrict_sql, 'STAGE.', 'stage1.');
126 ELSIF instrb(p_restrict_sql, 'stage.') > 0
127 THEN
128 p_restrict1_sql := replace( p_restrict_sql, 'stage.', 'stage1.');
129 END IF;
130 p_person_restrict_sql := 'exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r'
131 || ' where oc.org_contact_id = stage.org_contact_id and'
132 || ' r.relationship_id = oc.party_relationship_id'
133 || ' and r.subject_type = ''PERSON'' AND r.object_type = ''ORGANIZATION'' '
134 || ' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id'
135 || ' and ' || p_restrict1_sql || ' ) )' ;
136 p_final_restrict_sql := '((stage.org_contact_id is null and ' || p_restrict_sql || ') or (stage.org_contact_id is not null and '
137 || p_person_restrict_sql || ' ))';
138 END IF;
139 return p_final_restrict_sql ;
140 END;
141 FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS
142 l_newidx NUMBER;
143 BEGIN
144 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
145 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
146 hz_utility_v2pub.debug(p_message=>'calling the function map_id',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
147 END IF;
148 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
149 hz_utility_v2pub.debug(p_message=>'argument in_id = '||in_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
150 END IF;
151 IF in_id<g_max_id THEN
152 RETURN in_id;
153 ELSE
154 FOR I in 1..g_mappings.COUNT LOOP
155 IF in_id = g_mappings(I) THEN
156 RETURN (g_max_id+I);
157 END IF;
158 END LOOP;
159 l_newidx := g_mappings.COUNT+1;
160 g_mappings(l_newidx) := in_id;
161 RETURN (g_max_id+l_newidx);
162 END IF;
163 END;
164 FUNCTION GET_PARTY_SCORE
165 (
166 p_table_TX4 VARCHAR2
167 ,p_table_TX45 VARCHAR2
168 ,p_table_TX46 VARCHAR2
169 ) RETURN NUMBER IS
170 total NUMBER := 0;
171 BEGIN
172 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
173 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
174 hz_utility_v2pub.debug(p_message=>'calling the function get_party_score',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
175 END IF;
176 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
177 hz_utility_v2pub.debug(p_message=>'GET_PARTY_SCORE ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
178 END IF;
179 IF g_score_until_thresh AND (total)>=g_thres_score THEN
180 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
181 hz_utility_v2pub.debug(p_message=>'get_party_score returned total = '||total,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
182 END IF;
183 RETURN total;
184 END IF;
185 IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.TX4, p_table_TX4,8) THEN
186 total := total+200;
187 IF g_score_until_thresh AND (total)>=g_thres_score THEN
188 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
189 hz_utility_v2pub.debug(p_message=>'get_party_score returned total = '||total,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
190 END IF;
191 RETURN total;
192 END IF;
193 END IF;
194 IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.TX45, p_table_TX45,50) THEN
195 total := total+300;
196 IF g_score_until_thresh AND (total)>=g_thres_score THEN
197 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
198 hz_utility_v2pub.debug(p_message=>'get_party_score returned total = '||total,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
199 END IF;
200 RETURN total;
201 END IF;
202 END IF;
203 IF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.TX46, p_table_TX46,51) THEN
204 total := total+60;
205 IF g_score_until_thresh AND (total)>=g_thres_score THEN
206 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
207 hz_utility_v2pub.debug(p_message=>'get_party_score returned total = '||total,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
208 END IF;
209 RETURN total;
210 END IF;
211 END IF;
212 RETURN total;
213 END;
214 FUNCTION GET_PARTY_SITES_SCORE (
215 x_matchidx OUT NUMBER
216 ,p_table_TX4 VARCHAR2
217 ,p_table_TX11 VARCHAR2
218 ) RETURN NUMBER IS
219 maxscore NUMBER := 0;
220 l_current_score NUMBER := 0;
221 BEGIN
222 x_matchidx := 0;
223 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
224 RETURN l_current_score;
225 END IF;
226 FOR J IN 1..g_party_site_stage_list.COUNT LOOP
227 l_current_score := 0;
228 IF HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX4, p_table_TX4,(50000*(J-1)+67)) THEN
229 l_current_score:=l_current_score+ 80;
230 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
231 x_matchidx:=J;
232 RETURN l_current_score;
233 END IF;
234 END IF;
235 IF HZ_DQM_SEARCH_UTIL.is_match(g_party_site_stage_list(J).TX11, p_table_TX11,(50000*(J-1)+74)) THEN
236 l_current_score:=l_current_score+ 80;
237 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
238 x_matchidx:=J;
239 RETURN l_current_score;
240 END IF;
241 END IF;
242 IF maxscore<l_current_score THEN
243 maxscore:=l_current_score;
244 x_matchidx:=J;
245 END IF;
246 END LOOP;
247 RETURN maxscore;
248 END;
249 FUNCTION GET_CONTACTS_SCORE (
250 x_matchidx OUT NUMBER
251 ) RETURN NUMBER IS
252 maxscore NUMBER := 0;
253 l_current_score NUMBER := 0;
254 BEGIN
255 x_matchidx := 0;
256 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
257 RETURN l_current_score;
258 END IF;
259 FOR J IN 1..g_contact_stage_list.COUNT LOOP
260 l_current_score := 0;
261 IF maxscore<l_current_score THEN
262 maxscore:=l_current_score;
263 x_matchidx:=J;
264 END IF;
265 END LOOP;
266 RETURN maxscore;
267 END;
268 FUNCTION GET_CONTACT_POINTS_SCORE (
269 x_matchidx OUT NUMBER
270 ,p_table_TX2 VARCHAR2
271 ) RETURN NUMBER IS
272 maxscore NUMBER := 0;
273 l_current_score NUMBER := 0;
274 BEGIN
275 x_matchidx := 0;
276 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
277 RETURN l_current_score;
278 END IF;
279 FOR J IN 1..g_contact_pt_stage_list.COUNT LOOP
280 l_current_score := 0;
281 IF HZ_DQM_SEARCH_UTIL.is_match(g_contact_pt_stage_list(J).TX2, p_table_TX2,(50000*(J-1)+111)) THEN
282 l_current_score:=l_current_score+ 70;
283 IF g_score_until_thresh AND (l_current_score)>=g_thres_score THEN
284 x_matchidx:=J;
285 RETURN l_current_score;
286 END IF;
287 END IF;
288 IF maxscore<l_current_score THEN
289 maxscore:=l_current_score;
290 x_matchidx:=J;
291 END IF;
292 END LOOP;
293 RETURN maxscore;
294 END;
295 FUNCTION get_attrib_val(
296 p_record_id NUMBER
297 ,p_entity VARCHAR2
298 ,p_attribute VARCHAR2
299 ) RETURN VARCHAR2 IS
300 l_matched_value VARCHAR2(2000);
301 l_party_type VARCHAR2(255);
302 BEGIN
303 IF p_entity = 'PARTY' THEN
304 IF p_attribute = 'PARTY_NAME' THEN
305
306 SELECT party_type INTO l_party_type
307 FROM HZ_PARTIES
308 WHERE party_id = p_record_id;
309 IF l_party_type = 'ORGANIZATION' THEN
310 SELECT PARTY_NAME INTO l_matched_value
311 FROM HZ_PARTIES
312 WHERE party_id = p_record_id
313 and rownum = 1;
314 ELSIF l_party_type = 'PERSON' THEN
315 SELECT PARTY_NAME INTO l_matched_value
316 FROM HZ_PARTIES
317 WHERE party_id = p_record_id
318 and rownum = 1;
319 END IF;
320 RETURN l_matched_value;
321 END IF;
322 IF p_attribute = 'JGZZ_FISCAL_CODE' THEN
323
324 SELECT party_type INTO l_party_type
325 FROM HZ_PARTIES
326 WHERE party_id = p_record_id;
327 IF l_party_type = 'ORGANIZATION' THEN
328 SELECT JGZZ_FISCAL_CODE INTO l_matched_value
329 FROM HZ_ORGANIZATION_PROFILES
330 WHERE party_id = p_record_id
331 and effective_end_date is null
332 and rownum = 1;
333 ELSIF l_party_type = 'PERSON' THEN
334 SELECT JGZZ_FISCAL_CODE INTO l_matched_value
335 FROM HZ_PERSON_PROFILES
336 WHERE party_id = p_record_id
337 and effective_end_date is null
338 and rownum = 1;
339 END IF;
340 RETURN l_matched_value;
341 END IF;
342 IF p_attribute = 'SIC_CODE' THEN
343
344 SELECT party_type INTO l_party_type
345 FROM HZ_PARTIES
346 WHERE party_id = p_record_id;
347 IF l_party_type = 'ORGANIZATION' THEN
348 SELECT SIC_CODE INTO l_matched_value
349 FROM HZ_ORGANIZATION_PROFILES
350 WHERE party_id = p_record_id
351 and effective_end_date is null
352 and rownum = 1;
353 ELSIF l_party_type = 'PERSON' THEN
354 SELECT SIC_CODE INTO l_matched_value
355 FROM HZ_ORGANIZATION_PROFILES
356 WHERE party_id = p_record_id
357 and rownum = 1;
358 END IF;
359 RETURN l_matched_value;
360 END IF;
361 NULL;
362 END IF;
363 IF p_entity = 'PARTY_SITES' THEN
364 IF p_attribute = 'ADDRESS' THEN
365 l_matched_value := HZ_PARTY_ACQUIRE.get_address (p_record_id, p_entity,'ADDRESS','Y');
366 RETURN l_matched_value;
367 END IF;
368 IF p_attribute = 'POSTAL_CODE' THEN
369 BEGIN
370 SELECT HZ_LOCATIONS.POSTAL_CODE
371 INTO l_matched_value
372 FROM HZ_PARTY_SITES, HZ_LOCATIONS
373 WHERE HZ_PARTY_SITES.party_site_id = p_record_id
374 AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id and rownum=1;
375 EXCEPTION
376 WHEN NO_DATA_FOUND THEN
377 l_matched_value := 'Err';
378 END;
379 RETURN l_matched_value;
380 END IF;
381 NULL;
382 END IF;
383 IF p_entity = 'CONTACTS' THEN
384 NULL;
385 END IF;
386 IF p_entity = 'CONTACT_POINTS' THEN
387 IF p_attribute = 'PHONE_NUMBER' THEN
388 BEGIN
389 SELECT PHONE_NUMBER INTO l_matched_value
390 FROM HZ_CONTACT_POINTS
391 WHERE contact_point_id = p_record_id and rownum=1;
392 EXCEPTION
393 WHEN NO_DATA_FOUND THEN
394 l_matched_value := 'Err';
395 END;
396 RETURN l_matched_value;
397 END IF;
398 NULL;
399 END IF;
400 END;
401 PROCEDURE INSERT_PARTY_SCORE (
402 p_party_id IN NUMBER
403 ,p_record_id IN NUMBER
404 ,p_search_ctx_id IN NUMBER
405 ,p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type
406 ,p_stage_rec IN HZ_PARTY_STAGE.party_stage_rec_type
407 ,p_table_TX4 VARCHAR2
408 ,p_table_TX45 VARCHAR2
409 ,p_table_TX46 VARCHAR2
410 ,p_idx IN NUMBER) IS
411 l_current_score NUMBER:=0;
412 l_score NUMBER;
413 l_attrib_value VARCHAR2(2000);
414 BEGIN
415 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
416 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - INSERT_PARTY_SCORE',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
417 END IF;
418 l_score :=0;
419 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX4, p_table_TX4,(50000*(p_idx-1)+8)) THEN
420 l_score :=200;
421 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
422 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
423 END IF;
424 END IF;
425 IF l_score>0 THEN
426 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
427 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
428 END IF;
429 l_attrib_value := get_attrib_val(p_record_id,'PARTY','PARTY_NAME');
430 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
431 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
432 END IF;
433 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
434 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
435 VALUES (
436 p_party_id,p_record_id,p_search_ctx_id,'PARTY_NAME',
437 'PARTY', p_search_rec.PARTY_NAME,
438 l_attrib_value,l_score);
439 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
440 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
441 END IF;
442 END IF;
443 l_score :=0;
444 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX45, p_table_TX45,(50000*(p_idx-1)+50)) THEN
445 l_score :=300;
446 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
447 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
448 END IF;
449 END IF;
450 IF l_score>0 THEN
451 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
452 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
453 END IF;
454 l_attrib_value := get_attrib_val(p_record_id,'PARTY','JGZZ_FISCAL_CODE');
455 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
456 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
457 END IF;
458 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
459 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
460 VALUES (
461 p_party_id,p_record_id,p_search_ctx_id,'JGZZ_FISCAL_CODE',
462 'PARTY', p_search_rec.JGZZ_FISCAL_CODE,
463 l_attrib_value,l_score);
464 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
465 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
466 END IF;
467 END IF;
468 l_score :=0;
469 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX46, p_table_TX46,(50000*(p_idx-1)+51)) THEN
470 l_score :=60;
471 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
472 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
473 END IF;
474 END IF;
475 IF l_score>0 THEN
476 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
477 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
478 END IF;
479 l_attrib_value := get_attrib_val(p_record_id,'PARTY','SIC_CODE');
480 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
481 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
482 END IF;
483 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
484 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
485 VALUES (
486 p_party_id,p_record_id,p_search_ctx_id,'SIC_CODE',
487 'PARTY', p_search_rec.SIC_CODE,
488 l_attrib_value,l_score);
489 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
490 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
491 END IF;
492 END IF;
493 NULL;
494 END;
495 PROCEDURE INSERT_PARTY_SITES_SCORE (
496 p_party_id IN NUMBER
497 ,p_record_id IN NUMBER
498 ,p_search_ctx_id IN NUMBER
499 ,p_search_rec IN HZ_PARTY_SEARCH.party_site_search_rec_type
500 ,p_stage_rec IN HZ_PARTY_STAGE.party_site_stage_rec_type
501 ,p_table_TX4 VARCHAR2
502 ,p_table_TX11 VARCHAR2
503 ,p_idx IN NUMBER) IS
504 l_current_score NUMBER:=0;
505 l_score NUMBER;
506 l_attrib_value VARCHAR2(2000);
507 BEGIN
508 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
509 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - INSERT_PARTY_SITES_SCORE',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
510 END IF;
511 l_score :=0;
512 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX4, p_table_TX4,(50000*(p_idx-1)+67)) THEN
513 l_score :=80;
514 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
515 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
516 END IF;
517 END IF;
518 IF l_score>0 THEN
519 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
520 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
521 END IF;
522 l_attrib_value := get_attrib_val(p_record_id,'PARTY_SITES','ADDRESS');
523 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
524 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
525 END IF;
526 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
527 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
528 VALUES (
529 p_party_id,p_record_id,p_search_ctx_id,'ADDRESS',
530 'PARTY_SITES', p_search_rec.ADDRESS,
531 l_attrib_value,l_score);
532 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
533 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
534 END IF;
535 END IF;
536 l_score :=0;
537 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX11, p_table_TX11,(50000*(p_idx-1)+74)) THEN
538 l_score :=80;
539 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
540 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
541 END IF;
542 END IF;
543 IF l_score>0 THEN
544 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
545 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
546 END IF;
547 l_attrib_value := get_attrib_val(p_record_id,'PARTY_SITES','POSTAL_CODE');
548 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
549 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
550 END IF;
551 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
552 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
553 VALUES (
554 p_party_id,p_record_id,p_search_ctx_id,'POSTAL_CODE',
555 'PARTY_SITES', p_search_rec.POSTAL_CODE,
556 l_attrib_value,l_score);
557 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
558 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
559 END IF;
560 END IF;
561 NULL;
562 END;
563 PROCEDURE INSERT_CONTACTS_SCORE (
564 p_party_id IN NUMBER
565 ,p_record_id IN NUMBER
566 ,p_search_ctx_id IN NUMBER
567 ,p_search_rec IN HZ_PARTY_SEARCH.contact_search_rec_type
568 ,p_stage_rec IN HZ_PARTY_STAGE.contact_stage_rec_type
569 ,p_idx IN NUMBER) IS
570 l_current_score NUMBER:=0;
571 l_score NUMBER;
572 l_attrib_value VARCHAR2(2000);
573 BEGIN
574 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
575 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - INSERT_CONTACTS_SCORE',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
576 END IF;
577 NULL;
578 END;
579 PROCEDURE INSERT_CONTACT_POINTS_SCORE (
580 p_party_id IN NUMBER
581 ,p_record_id IN NUMBER
582 ,p_search_ctx_id IN NUMBER
583 ,p_search_rec IN HZ_PARTY_SEARCH.contact_point_search_rec_type
584 ,p_stage_rec IN HZ_PARTY_STAGE.contact_pt_stage_rec_type
585 ,p_table_TX2 VARCHAR2
586 ,p_idx IN NUMBER) IS
587 l_current_score NUMBER:=0;
588 l_score NUMBER;
589 l_attrib_value VARCHAR2(2000);
590 BEGIN
591 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
592 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - INSERT_CONTACT_POINTS_SCORE',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
593 END IF;
594 l_score :=0;
595 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX2, p_table_TX2,(50000*(p_idx-1)+111)) THEN
596 l_score :=70;
597 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
598 hz_utility_v2pub.debug(p_message=>'l_score is - '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
599 END IF;
600 END IF;
601 IF l_score>0 THEN
602 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
603 hz_utility_v2pub.debug(p_message=>'l_score > 0',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
604 END IF;
605 l_attrib_value := get_attrib_val(p_record_id,'CONTACT_POINTS','PHONE_NUMBER');
606 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
607 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
608 END IF;
609 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
610 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
611 VALUES (
612 p_party_id,p_record_id,p_search_ctx_id,'PHONE_NUMBER',
613 'CONTACT_POINTS', p_search_rec.PHONE_NUMBER,
614 l_attrib_value,l_score);
615 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
616 hz_utility_v2pub.debug(p_message=>'Inserting into HZ_PARTY_SCORE_DTLS_GT ... Done',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
617 END IF;
618 END IF;
619 NULL;
620 END;
621
622 /************************************************
623 This procedure populates global cond record
624 for the PARTY Entity
625 ************************************************/
626
627 PROCEDURE POP_PARTY_COND_REC(
628 p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type
629 ) IS
630 BEGIN
631 NULL ;
632 EXCEPTION
633 WHEN OTHERS THEN
634 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
635 FND_MESSAGE.SET_TOKEN('PROC' , 'POP_PARTY_COND_REC');
636 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
637 FND_MSG_PUB.ADD;
638 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
639 END;
640
641
642 /************************************************
643 This procedure populates global cond record
644 for the PARTY_SITES Entity
645 ************************************************/
646
647 PROCEDURE POP_PARTY_SITES_COND_REC(
648 p_search_list IN HZ_PARTY_SEARCH.party_site_list
649 ) IS
650 BEGIN
651 NULL ;
652 EXCEPTION
653 WHEN OTHERS THEN
654 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
655 FND_MESSAGE.SET_TOKEN('PROC' , 'POP_PARTY_SITES_COND_REC');
656 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
657 FND_MSG_PUB.ADD;
658 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
659 END;
660
661
662 /************************************************
663 This procedure populates global cond record
664 for the CONTACTS Entity
665 ************************************************/
666
667 PROCEDURE POP_CONTACTS_COND_REC(
668 p_search_list IN HZ_PARTY_SEARCH.contact_list
669 ) IS
670 BEGIN
671 NULL ;
672 EXCEPTION
673 WHEN OTHERS THEN
674 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
675 FND_MESSAGE.SET_TOKEN('PROC' , 'POP_CONTACTS_COND_REC');
676 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
677 FND_MSG_PUB.ADD;
678 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
679 END;
680
681
682 /************************************************
683 This procedure populates global cond record
684 for the CONTACT_POINTS Entity
685 ************************************************/
686
687 PROCEDURE POP_CONTACT_POINTS_COND_REC(
688 p_search_list IN HZ_PARTY_SEARCH.contact_point_list
689 ) IS
690 BEGIN
691 NULL ;
692 EXCEPTION
693 WHEN OTHERS THEN
694 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
695 FND_MESSAGE.SET_TOKEN('PROC' , 'POP_CONTACT_POINTS_COND_REC');
696 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
697 FND_MSG_PUB.ADD;
698 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
699 END;
700
701 PROCEDURE init_score_context (
702 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type:=
703 HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,
704 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list:=
705 HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,
706 p_contact_list IN HZ_PARTY_SEARCH.contact_list:=
707 HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
708 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list:=
709 HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST
710 ) IS
711 l_dummy NUMBER;
712 BEGIN
713 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
714 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
715 hz_utility_v2pub.debug(p_message=>'calling the procedure init_score_context',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
716 END IF;
717 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
718 hz_utility_v2pub.debug(p_message=>'In init_score_context calling the Map procedures',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
719 END IF;
720 -- Transform search criteria
721 HZ_TRANS_PKG.clear_globals;
722 MAP_PARTY_REC(FALSE,p_party_search_rec, l_dummy, g_party_stage_rec);
723 MAP_PARTY_SITE_REC(FALSE,p_party_site_list, l_dummy, g_party_site_stage_list);
724 MAP_CONTACT_REC(FALSE,p_contact_list, l_dummy, g_contact_stage_list);
725 MAP_CONTACT_POINT_REC(FALSE,p_contact_point_list, l_dummy, g_contact_pt_stage_list);
726
727 END;
728 FUNCTION init_search(
729 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type:=
730 HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,
731 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list:=
732 HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST,
733 p_contact_list IN HZ_PARTY_SEARCH.contact_list:=
734 HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
735 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list:=
736 HZ_PARTY_SEARCH.G_MISS_CONTACT_POINT_LIST,
737 p_match_type IN VARCHAR2,
738 x_party_max_score OUT NUMBER,
739 x_ps_max_score OUT NUMBER,
740 x_contact_max_score OUT NUMBER,
741 x_cpt_max_score OUT NUMBER
742 ) RETURN NUMBER IS
743 l_entered_max_score NUMBER:=0;
744 l_ps_entered_max_score NUMBER:=0;
745 l_ct_entered_max_score NUMBER:=0;
746 l_cpt_entered_max_score NUMBER:=0;
747 vlist vlisttype;
748 maxscore HZ_PARTY_SEARCH.IDList;
749 l_name VARCHAR2(200);
750 l_idx NUMBER;
751 l_num NUMBER;
752 total NUMBER;
753 threshold NUMBER;
754 BEGIN
755 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
756 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
757 hz_utility_v2pub.debug(p_message=>'calling the function init_search',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
758 END IF;
759 IF NOT check_prim_cond (p_party_search_rec,
760 p_party_site_list,
761 p_contact_list,
762 p_contact_point_list) THEN
763 FND_MESSAGE.SET_NAME('AR', 'HZ_NO_PRIMARY_COND');
764 FND_MSG_PUB.ADD;
765 RAISE FND_API.G_EXC_ERROR;
766 END IF;
767 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
768 hz_utility_v2pub.debug(p_message=>'In init_search calling util package set_score',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
769 END IF;
770 HZ_DQM_SEARCH_UTIL.set_score;
771 g_mappings.DELETE;
772 g_party_site_stage_list.DELETE;
773 g_contact_stage_list.DELETE;
774 g_contact_pt_stage_list.DELETE;
775 call_order.DELETE;
776 call_max_score.DELETE;
777 HZ_DQM_SEARCH_UTIL.new_search;
778 HZ_TRANS_PKG.set_party_type(p_party_search_rec.PARTY_TYPE);
779 HZ_DQM_SEARCH_UTIL.set_num_eval(0);
780
781 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
782 hz_utility_v2pub.debug(p_message=>'In init_search calling the Map procedures',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
783 END IF;
784 -- Transform search criteria
785 POP_PARTY_COND_REC(p_party_search_rec);
786
787 POP_PARTY_SITES_COND_REC(p_party_site_list);
788
789 POP_CONTACTS_COND_REC(p_contact_list);
790
791 POP_CONTACT_POINTS_COND_REC(p_contact_point_list);
792
793 MAP_PARTY_REC(TRUE,p_party_search_rec, l_entered_max_score, g_party_stage_rec);
794 MAP_PARTY_SITE_REC(TRUE,p_party_site_list, l_ps_entered_max_score, g_party_site_stage_list);
795 MAP_CONTACT_REC(TRUE,p_contact_list, l_ct_entered_max_score, g_contact_stage_list);
796 MAP_CONTACT_POINT_REC(TRUE,p_contact_point_list, l_cpt_entered_max_score, g_contact_pt_stage_list);
797
798
799 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
800 hz_utility_v2pub.debug(p_message=>'In init_search determining call order of entities',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
801 END IF;
802 l_idx := l_entered_max_score+1;
803 vlist (l_idx) := 'PARTY';
804 maxscore (l_idx) := l_entered_max_score;
805 l_idx := l_ps_entered_max_score+1;
806 WHILE vlist.EXISTS(l_idx) LOOP
807 l_idx := l_idx+1;
808 END LOOP;
809 vlist (l_idx) := 'PARTY_SITE';
810 maxscore (l_idx) := l_ps_entered_max_score;
811
812 l_idx := l_ct_entered_max_score+1;
813 WHILE vlist.EXISTS(l_idx) LOOP
814 l_idx := l_idx+1;
815 END LOOP;
816 vlist (l_idx) := 'CONTACT';
817 maxscore (l_idx) := l_ct_entered_max_score;
818
819 l_idx := l_cpt_entered_max_score+1;
820 WHILE vlist.EXISTS(l_idx) LOOP
821 l_idx := l_idx+1;
822 END LOOP;
823 vlist (l_idx) := 'CONTACT_POINT';
824 maxscore (l_idx) := l_cpt_entered_max_score;
825
826 l_num := 1;
827 l_idx := vlist.LAST;
828 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
829 hz_utility_v2pub.debug(p_message=>'Call order is the following',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
830 END IF;
831 WHILE l_idx IS NOT NULL LOOP
832 call_order(l_num) := vlist(l_idx);
833 call_max_score(l_num) := maxscore(l_idx);
834 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
835 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
836 END IF;
837 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
838 hz_utility_v2pub.debug(p_message=>'l_num = '||l_num,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
839 hz_utility_v2pub.debug(p_message=>'entity = '||vlist(l_idx),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
840 hz_utility_v2pub.debug(p_message=>'call_max_score for entity = '||maxscore(l_idx),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
841 END IF;
842 l_idx := vlist.PRIOR(l_idx);
843 l_num := l_num+1;
844 END LOOP;
845 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
846 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
847 END IF;
848 call_order(5):='NONE';
849 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
850 hz_utility_v2pub.debug(p_message=>'In init_search determining call type of entities',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
851 END IF;
852 IF p_match_type = ' OR ' THEN
853 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
854 hz_utility_v2pub.debug(p_message=>'This is an OR Match Rule',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
855 END IF;
856 threshold := 474;
857 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
858 hz_utility_v2pub.debug(p_message=>'This is a Duplicate Identification Match Rule',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
859 END IF;
860 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
861 hz_utility_v2pub.debug(p_message=>'Threshold defined in Match Rule is '||threshold,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
862 END IF;
863 l_idx := vlist.FIRST;
864 total := 0;
865 l_num := 4;
866 WHILE l_idx IS NOT NULL LOOP
867 total := total+maxscore(l_idx);
868 IF total<threshold THEN
869 call_type(l_num) := 'AND';
870 ELSE
871 call_type(l_num) := 'OR';
872 END IF;
873 l_idx := vlist.NEXT(l_idx);
874 l_num := l_num-1;
875 END LOOP;
876 ELSE
877 call_type(1) := 'OR';
878 call_type(2) := 'AND';
879 call_type(3) := 'AND';
880 call_type(4) := 'AND';
881 END IF;
882 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
883 hz_utility_v2pub.debug(p_message=>'Call types are the following',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
884 END IF;
885 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
886 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
887 END IF;
888 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
889 hz_utility_v2pub.debug(p_message=>'call type 1 = '||call_type(1),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
890 hz_utility_v2pub.debug(p_message=>'call type 2 = '||call_type(2),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
891 hz_utility_v2pub.debug(p_message=>'call type 3 = '||call_type(3),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
892 hz_utility_v2pub.debug(p_message=>'call type 4 = '||call_type(4),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
893 END IF;
894 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
895 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
896 END IF;
897 x_party_max_score := l_entered_max_score;
898 x_ps_max_score := l_ps_entered_max_score;
899 x_contact_max_score := l_ct_entered_max_score;
900 x_cpt_max_score := l_cpt_entered_max_score;
901 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
902 hz_utility_v2pub.debug(p_message=>'init_search returned with the following max scores at each level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
903 END IF;
904 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
905 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
906 END IF;
907 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
908 hz_utility_v2pub.debug(p_message=>'entered party max score = '||l_entered_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
909 hz_utility_v2pub.debug(p_message=>'entered paty site max score = '||l_ps_entered_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
910 hz_utility_v2pub.debug(p_message=>'entered contact max score = '||l_ct_entered_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
911 hz_utility_v2pub.debug(p_message=>'entered contact point max score = '||l_cpt_entered_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
912 END IF;
913 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
914 hz_utility_v2pub.debug(p_message=>'entered total score = '||(l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
915 END IF;
916 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
917 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
918 END IF;
919 RETURN (l_entered_max_score+l_ps_entered_max_score+l_ct_entered_max_score+l_cpt_entered_max_score);
920 END;
921 FUNCTION INIT_PARTY_QUERY(p_match_str VARCHAR2,
922 p_denorm_str VARCHAR2,
923 p_party_max_score NUMBER,
924 p_denorm_max_score NUMBER,
925 p_non_denorm_max_score NUMBER,
926 p_threshold NUMBER) RETURN VARCHAR2 IS
927 l_party_contains_str VARCHAR2(32000);
928 l_party_filter VARCHAR2(1) := null;
929 l_prim_temp VARCHAR2(4000);
930 l_denorm_str VARCHAR2(4000);
931 BEGIN
932 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
933 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
934 hz_utility_v2pub.debug(p_message=>'calling the function init_party_query',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
935 END IF;
936 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
937 hz_utility_v2pub.debug(p_message=>'passed in p_match_str is '||p_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
938 END IF;
939 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
940 hz_utility_v2pub.debug(p_message=>'passed in p_denorm_str is '||p_denorm_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
941 END IF;
942 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
943 hz_utility_v2pub.debug(p_message=>'passed in p_denorm_max_score is '||p_denorm_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
944 END IF;
945 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
946 hz_utility_v2pub.debug(p_message=>'passed in p_non_denorm_max_score is '||p_non_denorm_max_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
947 END IF;
948 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
949 hz_utility_v2pub.debug(p_message=>'passed in p_threshold is '||p_threshold,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
950 END IF;
951 IF p_party_max_score<=p_threshold OR p_match_str=' AND ' THEN
952 l_denorm_str := NULL;
953 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
954 hz_utility_v2pub.debug(p_message=>'calculated denorm string l_denorm_str is '||l_denorm_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
955 END IF;
956 ELSE
957 l_denorm_str := p_denorm_str;
958 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
959 hz_utility_v2pub.debug(p_message=>'calculated denorm string l_denorm_str is '||l_denorm_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
960 END IF;
961 END IF;
962
963 -- Setup query string for SIC_CODE
964 l_prim_temp := null;
965 HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT
966 g_party_stage_rec.TX46,'A20',l_prim_temp);
967
968 IF l_denorm_str IS NOT NULL THEN
969 IF (p_non_denorm_max_score+60)>=p_threshold THEN
970 l_denorm_str := NULL;
971 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
972 ELSIF (p_non_denorm_max_score+p_denorm_max_score+60)>=p_threshold THEN
973 HZ_DQM_SEARCH_UTIL.add_attribute_with_denorm(l_prim_temp, p_match_str, l_denorm_str, l_party_contains_str);
974 l_denorm_str := NULL;
975 END IF;
976 ELSE
977 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
978 END IF;
979
980 -- Setup query string for PARTY_NAME
981 l_prim_temp := null;
982 HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE SPECIAL + WRNAMES
983 g_party_stage_rec.TX4,'A8',l_prim_temp);
984
985 IF l_denorm_str IS NOT NULL THEN
986 IF (p_non_denorm_max_score+200)>=p_threshold THEN
987 l_denorm_str := NULL;
988 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
989 ELSIF (p_non_denorm_max_score+p_denorm_max_score+200)>=p_threshold THEN
990 HZ_DQM_SEARCH_UTIL.add_attribute_with_denorm(l_prim_temp, p_match_str, l_denorm_str, l_party_contains_str);
991 l_denorm_str := NULL;
992 END IF;
993 ELSE
994 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
995 END IF;
996
997 -- Setup query string for JGZZ_FISCAL_CODE
998 l_prim_temp := null;
999 HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT SPECIAL
1000 g_party_stage_rec.TX45,'A19',l_prim_temp);
1001
1002 IF l_denorm_str IS NOT NULL THEN
1003 IF (p_non_denorm_max_score+300)>=p_threshold THEN
1004 l_denorm_str := NULL;
1005 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
1006 ELSIF (p_non_denorm_max_score+p_denorm_max_score+300)>=p_threshold THEN
1007 HZ_DQM_SEARCH_UTIL.add_attribute_with_denorm(l_prim_temp, p_match_str, l_denorm_str, l_party_contains_str);
1008 l_denorm_str := NULL;
1009 END IF;
1010 ELSE
1011 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, p_match_str, l_party_contains_str);
1012 END IF;
1013 IF lengthb(l_party_contains_str) > 4000 THEN
1014 FND_MESSAGE.SET_NAME('AR', 'HZ_SEARCH_CRIT_LARGE_ERROR');
1015 FND_MESSAGE.SET_TOKEN('ENTITY','PARTY');
1016 FND_MSG_PUB.ADD;
1017 RAISE FND_API.G_EXC_ERROR;
1018 END IF;
1019 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
1020 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1021 hz_utility_v2pub.debug(p_message=>'party contains string returned by init_search is an AND between these strings ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1022 END IF;
1023 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1024 hz_utility_v2pub.debug(p_message=>'l_party_contains_str = '||l_party_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1025 END IF;
1026 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1027 hz_utility_v2pub.debug(p_message=>'p_denorm_str = '||p_denorm_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1028 END IF;
1029 RETURN '('||l_party_contains_str||') AND ('||p_denorm_str||')';
1030 ELSE
1031 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1032 hz_utility_v2pub.debug(p_message=>'party contains string returned by init_search is ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1033 hz_utility_v2pub.debug(p_message=>'l_party_contains_str',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1034 END IF;
1035 RETURN l_party_contains_str;
1036 END IF;
1037 END;
1038 FUNCTION INIT_PARTY_SITES_QUERY(p_match_str VARCHAR2, x_denorm_str OUT VARCHAR2) RETURN VARCHAR2 IS
1039 l_contains_str VARCHAR2(32000);
1040 l_contains_str_temp VARCHAR2(32000);
1041 l_den_contains_str VARCHAR2(32000);
1042 l_den_contains_str_temp VARCHAR2(32000);
1043 l_filter_str VARCHAR2(4000) := null;
1044 l_prim_temp VARCHAR2(4000) := null;
1045 l_prim_temp_den VARCHAR2(4000) := null;
1046 BEGIN
1047 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1048 hz_utility_v2pub.debug(p_message=>'INIT_PARTY_SITES_QUERY ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
1049 END IF;
1050 x_denorm_str := NULL;
1051
1052 -- Dynamic setup of party site contains str
1053 --
1054 -- For each primary transformation add to intermedia query if it
1055 -- is not null
1056 FOR I IN 1..g_party_site_stage_list.COUNT LOOP
1057 l_contains_str_temp := null;
1058 l_den_contains_str_temp := null;
1059 l_filter_str := null;
1060
1061 -- Setup query string for ADDRESS
1062 l_prim_temp := null;
1063 l_prim_temp_den := null;
1064 HZ_DQM_SEARCH_UTIL.add_transformation( -- CLEANSE SPECIAL + WRADDRESS
1065 g_party_site_stage_list(I).TX4,'A27',l_prim_temp);
1066 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1067
1068 -- Setup query string for POSTAL_CODE
1069 l_prim_temp := null;
1070 l_prim_temp_den := null;
1071 HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT SPECIAL NOSPC
1072 g_party_site_stage_list(I).TX11,'A30',l_prim_temp);
1073 HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT SPECIAL NOSPC
1074 g_party_site_stage_list(I).TX11,'D_PS',l_prim_temp_den);
1075 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp_den, ' AND ', l_den_contains_str_temp);
1076 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1077
1078 HZ_DQM_SEARCH_UTIL.add_search_record(l_contains_str_temp, l_filter_str, l_contains_str);
1079 HZ_DQM_SEARCH_UTIL.add_search_record(l_den_contains_str_temp, null, l_den_contains_str);
1080 END LOOP;
1081 -- Add the search criteria to query string
1082 IF lengthb(l_contains_str) > 4000 THEN
1083 FND_MESSAGE.SET_NAME('AR', 'HZ_SEARCH_CRIT_LARGE_ERROR');
1084 FND_MESSAGE.SET_TOKEN('ENTITY','PARTY_SITES');
1085 FND_MSG_PUB.ADD;
1086 RAISE FND_API.G_EXC_ERROR;
1087 END IF;
1088 x_denorm_str := l_den_contains_str;
1089 RETURN l_contains_str;
1090 END;
1091
1092 FUNCTION INIT_CONTACTS_QUERY(p_match_str VARCHAR2, x_denorm_str OUT VARCHAR2) RETURN VARCHAR2 IS
1093 l_contains_str VARCHAR2(32000);
1094 l_contains_str_temp VARCHAR2(32000);
1095 l_den_contains_str VARCHAR2(32000);
1096 l_den_contains_str_temp VARCHAR2(32000);
1097 l_filter_str VARCHAR2(4000) := null;
1098 l_prim_temp VARCHAR2(4000) := null;
1099 l_prim_temp_den VARCHAR2(4000) := null;
1100 BEGIN
1101 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1102 hz_utility_v2pub.debug(p_message=>'INIT_CONTACTS_QUERY ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
1103 END IF;
1104 x_denorm_str := NULL;
1105 RETURN NULL;
1106 END;
1107
1108 FUNCTION INIT_CONTACT_POINTS_QUERY(p_match_str VARCHAR2, x_denorm_str OUT VARCHAR2) RETURN VARCHAR2 IS
1109 l_contains_str VARCHAR2(32000);
1110 l_contains_str_temp VARCHAR2(32000);
1111 l_den_contains_str VARCHAR2(32000);
1112 l_den_contains_str_temp VARCHAR2(32000);
1113 l_filter_str VARCHAR2(4000) := null;
1114 l_prim_temp VARCHAR2(4000) := null;
1115 l_prim_temp_den VARCHAR2(4000) := null;
1116 TYPE CONTACT_PT_REC_TYPE IS RECORD (
1117 contact_pt_type VARCHAR2(100)) ;
1118 TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;
1119 l_cnt_pt_type contact_pt_list;
1120 N NUMBER:=1;
1121 x_modify VARCHAR2(1);
1122 BEGIN
1123 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
1124 hz_utility_v2pub.debug(p_message=>'INIT_CONTACT_POINTS_QUERY ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
1125 END IF;
1126 x_denorm_str := NULL;
1127
1128 -- Dynamic setup of party site contains str
1129 --
1130 -- For each primary transformation add to intermedia query if it
1131 -- is not null
1132 FOR I IN 1..g_contact_pt_stage_list.COUNT LOOP
1133 l_contains_str_temp := null;
1134 l_den_contains_str_temp := null;
1135 l_filter_str := null;
1136 l_filter_str := '('||g_contact_pt_stage_list(I).CONTACT_POINT_TYPE||') ';
1137 if(l_cnt_pt_type.count>0) then
1138 x_modify := 'Y';
1139 FOR J IN 1..l_cnt_pt_type.COUNT LOOP
1140 IF (l_cnt_pt_type(J).contact_pt_type=g_contact_pt_stage_list(I).CONTACT_POINT_TYPE) THEN
1141 x_modify := 'N';
1142 END IF;
1143 END LOOP;
1144 if x_modify = 'Y' then
1145 l_cnt_pt_type(N).contact_pt_type := g_contact_pt_stage_list(I).CONTACT_POINT_TYPE;
1146 N := N+1;
1147 end if;
1148 else
1149 l_cnt_pt_type(N).contact_pt_type := g_contact_pt_stage_list(I).CONTACT_POINT_TYPE;
1150 N := N+1;
1151 end if;
1152
1153 -- Setup query string for PHONE_NUMBER
1154 l_prim_temp := null;
1155 l_prim_temp_den := null;
1156 HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT SPECIAL
1157 g_contact_pt_stage_list(I).TX2,'A45',l_prim_temp);
1158 HZ_DQM_SEARCH_UTIL.add_attribute(l_prim_temp, ' AND ', l_contains_str_temp);
1159
1160 HZ_DQM_SEARCH_UTIL.add_search_record(l_contains_str_temp, l_filter_str, l_contains_str);
1161 HZ_DQM_SEARCH_UTIL.add_search_record(l_den_contains_str_temp, null, l_den_contains_str);
1162 IF N>1 THEN
1163 distinct_search_cpt_types := N-1;
1164 ELSE
1165 distinct_search_cpt_types := N;
1166 END IF;
1167 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1168 hz_utility_v2pub.debug(p_message=>'distinct_search_cpt_types is - '||distinct_search_cpt_types,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1169 END IF;
1170 END LOOP;
1171 -- Add the search criteria to query string
1172 IF lengthb(l_contains_str) > 4000 THEN
1173 FND_MESSAGE.SET_NAME('AR', 'HZ_SEARCH_CRIT_LARGE_ERROR');
1174 FND_MESSAGE.SET_TOKEN('ENTITY','CONTACT_POINTS');
1175 FND_MSG_PUB.ADD;
1176 RAISE FND_API.G_EXC_ERROR;
1177 END IF;
1178 x_denorm_str := l_den_contains_str;
1179 RETURN l_contains_str;
1180 END;
1181
1182 PROCEDURE open_party_cursor_direct (
1183 p_dup_party_id NUMBER,
1184 p_restrict_sql VARCHAR2,
1185 p_match_str VARCHAR2,
1186 p_search_merged VARCHAR2,
1187 p_party_contains_str VARCHAR2,
1188 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1189 l_sqlstr VARCHAR2(4000);
1190 l_search_merged VARCHAR2(1);
1191 BEGIN
1192 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1193 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1194 hz_utility_v2pub.debug(p_message=>'calling procedure open party cursor direct',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1195 END IF;
1196 IF (p_search_merged is null) then
1197 l_search_merged := 'N';
1198 ELSE
1199 l_search_merged := p_search_merged;
1200 END IF;
1201 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1202 hz_utility_v2pub.debug(p_message=>'Search Merged Flag - '||l_search_merged,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1203 END IF;
1204 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
1205 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1206 hz_utility_v2pub.debug(p_message=>'Restrict SQL is NULL and other conditions met to OPEN x_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1207 END IF;
1208 OPEN x_cursor FOR
1209 SELECT PARTY_ID , TX4, TX45, TX46
1210 FROM hz_staged_parties
1211 WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
1212 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = TX36))
1213 AND( (l_search_merged ='Y' )
1214 OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))
1215 OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))
1216 AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id);
1217 ELSE
1218 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1219 hz_utility_v2pub.debug(p_message=>'Restrict SQL is NOT NULL OR other conditions not met, Else Part',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1220 END IF;
1221 l_sqlstr := 'SELECT PARTY_ID , TX4, TX45, TX46 FROM hz_staged_parties stage ';
1222 l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
1223 l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' = TX36) ';
1224 IF l_search_merged = 'N' THEN
1225 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
1226 ELSIF l_search_merged = 'I' THEN
1227 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
1228 END IF;
1229 l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
1230 IF g_other_party_level_attribs THEN
1231 l_sqlstr := l_sqlstr || ' AND ((:attr IS NULL OR ';
1232 l_sqlstr := l_sqlstr || ' (TX45 like :TX45||'' %'' ';
1233 l_sqlstr := l_sqlstr || ' )) ';
1234 l_sqlstr := l_sqlstr || ' '||p_match_str||' (:attr IS NULL OR ';
1235 l_sqlstr := l_sqlstr || ' (TX46 like :TX46||'' %'' ';
1236 l_sqlstr := l_sqlstr || ' )) ';
1237 l_sqlstr := l_sqlstr || ' ) ';
1238 END IF;
1239 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
1240 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1241 hz_utility_v2pub.debug(p_message=>'p_party_contains_str string is NOT NULL and other conditions met',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1242 END IF;
1243 l_sqlstr := l_sqlstr || ' AND (:attr IS NULL OR ';
1244 l_sqlstr := l_sqlstr || ' (D_PS like ''% ''||:TX11||'' %'' ';
1245 l_sqlstr := l_sqlstr || ' )) ';
1246 END IF;
1247 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1248 hz_utility_v2pub.debug(p_message=>'l_sqlstr before appending restrict_sql',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1249 END IF;
1250 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1251 hz_utility_v2pub.debug(p_message=>'l_sqlstr is - '||l_sqlstr,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1252 END IF;
1253 IF p_restrict_sql IS NOT NULL THEN
1254 l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
1255 END IF;
1256 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1257 hz_utility_v2pub.debug(p_message=>'l_sqlstr after appending restrict_sql',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1258 END IF;
1259 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1260 hz_utility_v2pub.debug(p_message=>'l_sqlstr is - '||l_sqlstr,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1261 END IF;
1262 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
1263 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1264 hz_utility_v2pub.debug(p_message=>'IF g_other_party_level_attribs AND p_party_contains_str IS NOT NULL AND ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1265 END IF;
1266 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
1267 ,g_party_stage_rec.TX45
1268 ,g_party_stage_rec.TX45
1269 ,g_party_stage_rec.TX46
1270 ,g_party_stage_rec.TX46
1271 ,g_party_site_stage_list(1).TX11
1272 ,g_party_site_stage_list(1).TX11
1273 ;
1274 ELSIF g_other_party_level_attribs THEN
1275 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1276 hz_utility_v2pub.debug(p_message=>'ELSIF g_other_party_level_attribs THEN',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1277 END IF;
1278 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
1279 ,g_party_stage_rec.TX45
1280 ,g_party_stage_rec.TX45
1281 ,g_party_stage_rec.TX46
1282 ,g_party_stage_rec.TX46
1283 ;
1284 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
1285 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1286 hz_utility_v2pub.debug(p_message=>'ELSIF p_party_contains_str IS NOT NULL AND ...',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1287 END IF;
1288 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
1289 ,g_party_site_stage_list(1).TX11
1290 ,g_party_site_stage_list(1).TX11
1291 ;
1292 ELSE
1293 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1294 hz_utility_v2pub.debug(p_message=>'ELSE code fork',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1295 END IF;
1296 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;
1297 END IF;
1298 END IF;
1299 END;
1300 PROCEDURE open_party_cursor(
1301 p_dup_party_id NUMBER,
1302 p_restrict_sql VARCHAR2,
1303 p_contains_str VARCHAR2,
1304 p_search_ctx_id NUMBER,
1305 p_match_str VARCHAR2,
1306 p_search_merged VARCHAR2,
1307 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1308 l_sqlstr VARCHAR2(4000);
1309 l_hint VARCHAR2(100);
1310 l_check NUMBER;
1311 l_search_merged VARCHAR2(1);
1312 BEGIN
1313 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1314 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1315 hz_utility_v2pub.debug(p_message=>'calling procedure open party cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1316 END IF;
1317 IF (p_search_merged is null) then
1318 l_search_merged := 'N';
1319 ELSE
1320 l_search_merged := p_search_merged;
1321 END IF;
1322 IF p_contains_str IS NULL THEN
1323 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1324 hz_utility_v2pub.debug(p_message=>'part contains string is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1325 END IF;
1326 OPEN x_cursor FOR
1327 SELECT PARTY_ID , TX4, TX45, TX46
1328 FROM HZ_STAGED_PARTIES stage
1329 WHERE PARTY_ID = p_dup_party_id;
1330 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1331 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1332 hz_utility_v2pub.debug(p_message=>'Either restrict sql is null or search context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1333 END IF;
1334 IF p_search_ctx_id IS NULL THEN
1335 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1336 hz_utility_v2pub.debug(p_message=>'Search context id is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1337 END IF;
1338 OPEN x_cursor FOR
1339 SELECT /*+ INDEX(stage HZ_STAGE_PARTIES_T1) */ PARTY_ID , TX4, TX45, TX46
1340 FROM HZ_STAGED_PARTIES stage
1341 WHERE contains( concat_col, p_contains_str)>0
1342 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = stage.TX36))
1343 AND( (l_search_merged ='Y' )
1344 OR (l_search_merged = 'I' AND nvl(stage.status, 'A') in ('A', 'I'))
1345 OR (l_search_merged = 'N' AND nvl(stage.status, 'A') in ('A')) )
1346 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1347 ELSE
1348 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1349 hz_utility_v2pub.debug(p_message=>'Search context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1350 END IF;
1351 OPEN x_cursor FOR
1352 SELECT /*+ ORDERED INDEX(stage HZ_STAGED_PARTIES_U1) */ stage.PARTY_ID , TX4, TX45, TX46
1353 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTIES stage
1354 WHERE contains( concat_col, p_contains_str)>0
1355 AND d.SEARCH_CONTEXT_ID=p_search_ctx_id
1356 AND d.party_id = stage.party_id
1357 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = stage.TX36))
1358 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
1359 AND( (l_search_merged ='Y' )
1360 OR (l_search_merged = 'I' AND nvl(stage.status, 'A') in ('A', 'I'))
1361 OR (l_search_merged = 'N' AND nvl(stage.status, 'A') in ('A')) );
1362 END IF;
1363 ELSE
1364 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1365 hz_utility_v2pub.debug(p_message=>'Restrict sql is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1366 END IF;
1367 l_check := instrb(p_restrict_sql, 'SELECTIVE');
1368 IF (l_check > 0 ) THEN
1369 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1370 hz_utility_v2pub.debug(p_message=>'Restrict sql has a Selective Hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1371 END IF;
1372 l_hint := '/*+ INDEX(stage HZ_STAGED_PARTIES_U1) */';
1373 ELSE
1374 l_hint := '/*+ INDEX(stage HZ_STAGE_PARTIES_T1) */';
1375 END IF;
1376 IF p_search_ctx_id IS NULL THEN
1377 l_sqlstr := 'SELECT ' || l_hint || ' PARTY_ID , TX4, TX45, TX46'||
1378 ' FROM HZ_STAGED_PARTIES stage'||
1379 ' WHERE contains( concat_col, :cont)>0'||
1380 ' AND ((:TX36 IS NULL OR :TX36||'' '' = stage.TX36))'||
1381 ' AND ('||p_restrict_sql||')' ||
1382 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1383 IF l_search_merged = 'Y' THEN
1384 l_sqlstr := l_sqlstr ;
1385 ELSIF l_search_merged = 'I' THEN
1386 l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'', ''I'')';
1387 ELSE
1388 l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'')';
1389 END IF;
1390 output_long_strings('----------------------------------------------------------');
1391 output_long_strings('Party Contains String = '||p_contains_str);
1392 output_long_strings('Restrict Sql = '||p_restrict_sql);
1393 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1394 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1395 ,p_dup_party_id, p_dup_party_id;
1396 END IF;
1397 END IF;
1398 exception
1399 when others then
1400 if (instrb(SQLERRM,'DRG-51030')>0) then
1401 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1402 FND_MSG_PUB.ADD;
1403 RAISE FND_API.G_EXC_ERROR;
1404 elsif (instrb(SQLERRM,'DRG-50943')>0) then
1405 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1406 FND_MSG_PUB.ADD;
1407 RAISE FND_API.G_EXC_ERROR;
1408 elsif (instrb(SQLERRM,'ORA-20000')>0) then
1409 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1410 FND_MSG_PUB.ADD;
1411 RAISE FND_API.G_EXC_ERROR;
1412 else
1413 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1414 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1415 FND_MSG_PUB.ADD;
1416 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1417 end if;
1418 END;
1419
1420 PROCEDURE open_party_site_cursor(
1421 p_dup_party_id NUMBER,
1422 p_party_id NUMBER,
1423 p_restrict_sql VARCHAR2,
1424 p_contains_str VARCHAR2,
1425 p_search_ctx_id NUMBER,
1426 p_search_merged VARCHAR2,
1427 p_search_rel_sites VARCHAR2,
1428 p_person_api VARCHAR2,
1429 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1430 l_sqlstr VARCHAR2(4000);
1431 l_hint VARCHAR2(100);
1432 l_check NUMBER;
1433 l_check_dt NUMBER;
1434 l_search_merged VARCHAR2(1);
1435 l_status_sql VARCHAR2(100);
1436 p_restrict_sql1 VARCHAR2(4000);
1437
1438 BEGIN
1439 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1440 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1441 hz_utility_v2pub.debug(p_message=>'calling the procedure open_party_site_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1442 END IF;
1443 IF (p_search_merged is null) then
1444 l_search_merged := 'N';
1445 ELSE
1446 l_search_merged := p_search_merged;
1447 END IF;
1448 IF p_party_id IS NOT NULL THEN
1449 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1450 hz_utility_v2pub.debug(p_message=>'Single Party Scenario',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1451 END IF;
1452 IF p_search_rel_sites = 'N' THEN
1453 OPEN x_cursor FOR
1454 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX4, TX11
1455 FROM HZ_STAGED_PARTY_SITES stage
1456 WHERE contains( concat_col, p_contains_str)>0
1457 AND( (l_search_merged ='Y' )
1458 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1459 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1460 AND stage.party_id = p_party_id;
1461 ELSE
1462 OPEN x_cursor FOR
1463 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX4, TX11
1464 FROM HZ_STAGED_PARTY_SITES stage
1465 WHERE contains( concat_col, p_contains_str)>0
1466 AND( (l_search_merged ='Y' )
1467 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1468 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1469 AND stage.party_id = p_party_id
1470 UNION
1471 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID, TX4, TX11
1472 FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc
1473 WHERE contains( concat_col, p_contains_str)>0
1474 AND( (l_search_merged ='Y' )
1475 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1476 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1477 AND r.object_id = p_party_id
1478 AND r.subject_id = stage.party_id
1479 AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
1480 AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES'
1481 AND r.relationship_id = oc.party_relationship_id
1482 AND oc.org_contact_id = stage.org_contact_id;
1483 END IF;
1484 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1485 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1486 hz_utility_v2pub.debug(p_message=>'Either restrict sql is null or search context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1487 END IF;
1488 IF p_search_ctx_id IS NULL THEN
1489 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1490 hz_utility_v2pub.debug(p_message=>'Search context id is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1491 END IF;
1492 OPEN x_cursor FOR
1493 SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX4, TX11
1494 FROM HZ_STAGED_PARTY_SITES stage
1495 WHERE contains( concat_col, p_contains_str)>0
1496 AND EXISTS (
1497 SELECT 1 FROM HZ_STAGED_PARTIES p
1498 WHERE p.PARTY_ID = stage.PARTY_ID
1499 AND( (l_search_merged ='Y' )
1500 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
1501 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
1502 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
1503 AND( (l_search_merged ='Y' )
1504 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1505 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1506 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1507 ELSE
1508 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1509 hz_utility_v2pub.debug(p_message=>'Search context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1510 END IF;
1511 IF p_person_api = 'Y' THEN
1512 OPEN x_cursor FOR
1513 SELECT PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX4, TX11
1514 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
1515 WHERE contains( concat_col, p_contains_str)>0
1516 AND( (l_search_merged ='Y' )
1517 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1518 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1519 AND d.search_context_id = p_search_ctx_id
1520 AND d.party_id = stage.party_id
1521 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
1522 UNION
1523 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, r.subject_id, stage.ORG_CONTACT_ID, TX4, TX11
1524 FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage
1525 WHERE contains( concat_col, p_contains_str)>0
1526 AND( (l_search_merged ='Y' )
1527 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1528 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1529 AND d.search_context_id = p_search_ctx_id
1530 AND d.party_id = r.subject_id
1531 AND r.relationship_id = oc.party_relationship_id
1532 AND oc.org_contact_id = stage.org_contact_id
1533 AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
1534 ELSE
1535 OPEN x_cursor FOR
1536 SELECT PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX4, TX11
1537 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
1538 WHERE contains( concat_col, p_contains_str)>0
1539 AND( (l_search_merged ='Y' )
1540 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1541 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1542 AND d.search_context_id = p_search_ctx_id
1543 AND d.party_id = stage.party_id
1544 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1545 END IF;
1546 END IF;
1547 ELSE
1548 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1549 hz_utility_v2pub.debug(p_message=>'Restrict sql is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1550 END IF;
1551 l_check := instrb(p_restrict_sql, 'SELECTIVE');
1552 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_PS');
1553 IF (l_check_dt > 0 ) THEN
1554 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1555 hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective_ps hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1556 END IF;
1557 l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */';
1558 ELSIF (l_check > 0 ) THEN
1559 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1560 hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1561 END IF;
1562 l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */';
1563 END IF;
1564 IF l_search_merged = 'Y' THEN
1565 l_status_sql := ' ' ;
1566 ELSIF l_search_merged = 'I' THEN
1567 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
1568 ELSE
1569 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
1570 END IF;
1571 /*Performance fix for Bug:4589953*/
1572 IF(p_person_api='Y') THEN
1573 IF (l_check > 0 ) THEN
1574 IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN
1575 p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
1576 ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN
1577 p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
1578 ELSE
1579 p_restrict_sql1 := 'stage1.'||p_restrict_sql;
1580 END IF;
1581 l_sqlstr := 'SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX4, TX11'||
1582 ' FROM HZ_STAGED_PARTY_SITES stage'||
1583 ' WHERE contains( concat_col, :cont)>0'||
1584 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1585 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1586 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1587 ' AND (ORG_CONTACT_ID IS NULL ' ||
1588 ' AND ('||p_restrict_sql||'))' ||
1589 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
1590 ' UNION ' ||
1591 'SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX4, TX11'||
1592 ' FROM HZ_STAGED_PARTY_SITES stage'||
1593 ' WHERE contains( concat_col, :cont)>0'||
1594 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1595 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1596 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1597 ' AND ORG_CONTACT_ID IN ' ||
1598 ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships ' ||
1599 ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
1600 ' where stage1.relationship_id = oc.party_relationship_id ' ||
1601 ' and ('||p_restrict_sql1|| ') )' ||
1602 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1603 OPEN x_cursor FOR l_sqlstr USING p_contains_str,
1604 p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
1605 ELSE
1606 l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX4, TX11'||
1607 ' FROM HZ_STAGED_PARTY_SITES stage'||
1608 ' WHERE contains( concat_col, :cont)>0'||
1609 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1610 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1611 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1612 ' AND EXISTS ('||
1613 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
1614 ' WHERE p.party_id = stage.party_id ' ||
1615 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
1616 ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
1617 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1618 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1619 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1620 ,p_dup_party_id, p_dup_party_id;
1621 END IF;
1622 ELSE
1623 l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX4, TX11'||
1624 ' FROM HZ_STAGED_PARTY_SITES stage'||
1625 ' WHERE contains( concat_col, :cont)>0'||
1626 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1627 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1628 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1629 ' AND EXISTS ('||
1630 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
1631 ' WHERE p.party_id = stage.party_id ' ||
1632 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
1633 ' AND ('||p_restrict_sql||')' ||
1634 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1635 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1636 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1637 ,p_dup_party_id, p_dup_party_id;
1638 END IF;
1639 END IF;
1640 output_long_strings('----------------------------------------------------------');
1641 output_long_strings('Party Site Contains String = '||p_contains_str);
1642 output_long_strings('Restrict Sql = '||p_restrict_sql);
1643 exception
1644 when others then
1645 if (instrb(SQLERRM,'DRG-51030')>0) then
1646 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1647 FND_MSG_PUB.ADD;
1648 RAISE FND_API.G_EXC_ERROR;
1649 elsif (instrb(SQLERRM,'DRG-50943')>0) then
1650 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1651 FND_MSG_PUB.ADD;
1652 RAISE FND_API.G_EXC_ERROR;
1653 elsif (instrb(SQLERRM,'ORA-20000')>0) then
1654 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1655 FND_MSG_PUB.ADD;
1656 RAISE FND_API.G_EXC_ERROR;
1657 else
1658 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1659 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1660 FND_MSG_PUB.ADD;
1661 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1662 end if;
1663 END;
1664
1665 PROCEDURE open_contact_cursor(
1666 p_dup_party_id NUMBER,
1667 p_party_id NUMBER,
1668 p_restrict_sql VARCHAR2,
1669 p_contains_str VARCHAR2,
1670 p_search_ctx_id NUMBER,
1671 p_search_merged VARCHAR2,
1672 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1673 l_sqlstr VARCHAR2(4000);
1674 l_hint VARCHAR2(100);
1675 l_check NUMBER;
1676 l_check_dt NUMBER;
1677 l_search_merged VARCHAR2(1);
1678 l_status_sql VARCHAR2(100);
1679
1680 BEGIN
1681 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1682 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1683 hz_utility_v2pub.debug(p_message=>'calling the procedure open_contact_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1684 END IF;
1685 IF (p_search_merged is null) then
1686 l_search_merged := 'N';
1687 ELSE
1688 l_search_merged := p_search_merged;
1689 END IF;
1690 IF p_party_id IS NOT NULL THEN
1691 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1692 hz_utility_v2pub.debug(p_message=>'Single party scenario',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1693 END IF;
1694 OPEN x_cursor FOR
1695 SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID
1696 FROM HZ_STAGED_CONTACTS stage
1697 WHERE contains( concat_col, p_contains_str)>0
1698 AND EXISTS (
1699 SELECT 1 FROM HZ_STAGED_PARTIES p
1700 WHERE p.PARTY_ID = stage.PARTY_ID
1701 AND( (l_search_merged ='Y' )
1702 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
1703 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
1704 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
1705 AND( (l_search_merged ='Y' )
1706 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1707 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1708 AND stage.party_id = p_party_id;
1709 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1710 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1711 hz_utility_v2pub.debug(p_message=>'Either Restrict sql is null or Search Context Id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1712 END IF;
1713 IF p_search_ctx_id IS NULL THEN
1714 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1715 hz_utility_v2pub.debug(p_message=>'Search Context id is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1716 END IF;
1717 OPEN x_cursor FOR
1718 SELECT ORG_CONTACT_ID, PARTY_ID
1719 FROM HZ_STAGED_CONTACTS stage
1720 WHERE contains( concat_col, p_contains_str)>0
1721 AND EXISTS (
1722 SELECT 1 FROM HZ_STAGED_PARTIES p
1723 WHERE p.PARTY_ID = stage.PARTY_ID
1724 AND( (l_search_merged ='Y' )
1725 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
1726 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
1727 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
1728 AND( (l_search_merged ='Y' )
1729 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1730 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1731 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1732 ELSE
1733 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1734 hz_utility_v2pub.debug(p_message=>'Search Context id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1735 END IF;
1736 OPEN x_cursor FOR
1737 SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID
1738 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage
1739 WHERE contains( concat_col, p_contains_str)>0
1740 AND d.search_context_id = p_search_ctx_id
1741 AND d.party_id = stage.party_id
1742 AND( (l_search_merged ='Y' )
1743 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1744 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1745 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1746 END IF;
1747 ELSE
1748 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1749 hz_utility_v2pub.debug(p_message=>'Restrict Sql is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1750 END IF;
1751 l_check := instrb(p_restrict_sql, 'SELECTIVE');
1752 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CT');
1753 IF (l_check_dt > 0 ) THEN
1754 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1755 hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective_ct hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1756 END IF;
1757 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */';
1758 ELSIF (l_check > 0 ) THEN
1759 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1760 hz_utility_v2pub.debug(p_message=>'Restrict sql has the selective hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1761 END IF;
1762 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */';
1763 END IF;
1764 IF l_search_merged = 'Y' THEN
1765 l_status_sql := ' ' ;
1766 ELSIF l_search_merged = 'I' THEN
1767 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
1768 ELSE
1769 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
1770 END IF;
1771 l_sqlstr := 'SELECT ' || l_hint || ' ORG_CONTACT_ID, PARTY_ID '||
1772 ' FROM HZ_STAGED_CONTACTS stage'||
1773 ' WHERE contains( concat_col, :cont)>0'||
1774 ' AND EXISTS ('||
1775 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
1776 ' WHERE p.party_id = stage.party_id ' ||
1777 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
1778 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1779 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1780 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1781 ' AND ('||p_restrict_sql||')' ||
1782 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1783 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1784 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1785 ,p_dup_party_id, p_dup_party_id;
1786 END IF;
1787 output_long_strings('----------------------------------------------------------');
1788 output_long_strings('Contacts Contains String = '||p_contains_str);
1789 output_long_strings('Restrict Sql = '||p_restrict_sql);
1790 exception
1791 when others then
1792 if (instrb(SQLERRM,'DRG-51030')>0) then
1793 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1794 FND_MSG_PUB.ADD;
1795 RAISE FND_API.G_EXC_ERROR;
1796 elsif (instrb(SQLERRM,'DRG-50943')>0) then
1797 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1798 FND_MSG_PUB.ADD;
1799 RAISE FND_API.G_EXC_ERROR;
1800 elsif (instrb(SQLERRM,'ORA-20000')>0) then
1801 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1802 FND_MSG_PUB.ADD;
1803 RAISE FND_API.G_EXC_ERROR;
1804 else
1805 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1806 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1807 FND_MSG_PUB.ADD;
1808 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1809 end if;
1810 END;
1811
1812 PROCEDURE open_contact_pt_cursor(
1813 p_dup_party_id NUMBER,
1814 p_party_id NUMBER,
1815 p_restrict_sql VARCHAR2,
1816 p_contains_str VARCHAR2,
1817 p_search_ctx_id NUMBER,
1818 p_search_merged VARCHAR2,
1819 p_search_rel_cpts VARCHAR2,
1820 p_person_api VARCHAR2,
1821 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,
1822 p_restrict_entity VARCHAR2 DEFAULT NULL) IS
1823 l_sqlstr VARCHAR2(4000);
1824 l_hint VARCHAR2(100);
1825 l_check NUMBER;
1826 l_check_dt NUMBER;
1827 l_search_merged VARCHAR2(1);
1828 l_status_sql VARCHAR2(100);
1829 p_restrict_sql1 VARCHAR2(4000);
1830
1831 BEGIN
1832 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1833 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1834 hz_utility_v2pub.debug(p_message=>'calling the procedure open_contact_pt_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1835 END IF;
1836 IF (p_search_merged is null) then
1837 l_search_merged := 'N';
1838 ELSE
1839 l_search_merged := p_search_merged;
1840 END IF;
1841 IF p_restrict_entity = 'CONTACTS'
1842 THEN
1843 OPEN x_cursor FOR
1844 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 , TX2
1845 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
1846 WHERE contains( concat_col, p_contains_str)>0
1847 AND d.search_context_id = p_search_ctx_id
1848 AND( (l_search_merged ='Y' )
1849 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1850 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1851 AND d.party_id = stage.org_contact_id ;
1852 END IF;
1853 IF p_restrict_entity = 'PARTY_SITES'
1854 THEN
1855 OPEN x_cursor FOR
1856 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 , TX2
1857 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
1858 WHERE contains( concat_col, p_contains_str)>0
1859 AND d.search_context_id = p_search_ctx_id
1860 AND( (l_search_merged ='Y' )
1861 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1862 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1863 AND d.party_id = stage.party_site_id ;
1864 END IF;
1865 IF p_restrict_entity IS NULL
1866 THEN
1867 IF p_party_id IS NOT NULL THEN
1868 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1869 hz_utility_v2pub.debug(p_message=>'Single Party Scenario',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1870 END IF;
1871 IF p_search_rel_cpts = 'N' THEN
1872 OPEN x_cursor FOR
1873 SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2
1874 FROM HZ_STAGED_CONTACT_POINTS stage
1875 WHERE contains( concat_col, p_contains_str)>0
1876 AND( (l_search_merged ='Y' )
1877 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1878 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1879 AND stage.party_id = p_party_id;
1880 ELSE
1881 OPEN x_cursor FOR
1882 SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2
1883 FROM HZ_STAGED_CONTACT_POINTS stage
1884 WHERE contains( concat_col, p_contains_str)>0
1885 AND( (l_search_merged ='Y' )
1886 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1887 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1888 AND stage.party_id = p_party_id
1889 UNION
1890 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 , TX2
1891 FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc
1892 WHERE contains( concat_col, p_contains_str)>0
1893 AND r.object_id = p_party_id
1894 AND( (l_search_merged ='Y' )
1895 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1896 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1897 AND r.subject_id = stage.party_id
1898 AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
1899 AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES'
1900 AND r.relationship_id = oc.party_relationship_id
1901 AND oc.org_contact_id = stage.org_contact_id;
1902 END IF;
1903 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1904 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1905 hz_utility_v2pub.debug(p_message=>'Either Restrict sql is null or search_context_id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1906 END IF;
1907 IF p_search_ctx_id IS NULL THEN
1908 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1909 hz_utility_v2pub.debug(p_message=>'Either Search context id is null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1910 END IF;
1911 OPEN x_cursor FOR
1912 SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2
1913 FROM HZ_STAGED_CONTACT_POINTS stage
1914 WHERE contains( concat_col, p_contains_str)>0
1915 AND EXISTS (
1916 SELECT 1 FROM HZ_STAGED_PARTIES p
1917 WHERE p.PARTY_ID = stage.PARTY_ID
1918 AND( (l_search_merged ='Y' )
1919 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
1920 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
1921 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
1922 AND( (l_search_merged ='Y' )
1923 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1924 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1925 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1926 ELSE
1927 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1928 hz_utility_v2pub.debug(p_message=>'Search_context_id is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1929 END IF;
1930 IF p_person_api = 'Y' THEN
1931 OPEN x_cursor FOR
1932 SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2
1933 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
1934 WHERE contains( concat_col, p_contains_str)>0
1935 AND d.search_context_id = p_search_ctx_id
1936 AND d.party_id = stage.party_id
1937 AND( (l_search_merged ='Y' )
1938 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1939 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1940 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
1941 UNION
1942 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 , TX2
1943 FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage
1944 WHERE contains( concat_col, p_contains_str)>0
1945 AND d.search_context_id = p_search_ctx_id
1946 AND d.party_id = r.subject_id
1947 AND r.relationship_id = oc.party_relationship_id
1948 AND oc.org_contact_id = stage.org_contact_id
1949 AND( (l_search_merged ='Y' )
1950 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1951 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1952 AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
1953 ELSE
1954 OPEN x_cursor FOR
1955 SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2
1956 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
1957 WHERE contains( concat_col, p_contains_str)>0
1958 AND d.search_context_id = p_search_ctx_id
1959 AND d.party_id = stage.party_id
1960 AND( (l_search_merged ='Y' )
1961 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1962 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1963 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1964 END IF;
1965 END IF;
1966 ELSE
1967 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1968 hz_utility_v2pub.debug(p_message=>'Restrict sql is not null',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1969 END IF;
1970 l_check := instrb(p_restrict_sql, 'SELECTIVE');
1971 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CPT');
1972 IF (l_check_dt > 0 ) THEN
1973 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1974 hz_utility_v2pub.debug(p_message=>'Restrict Sql has the selective_cpt hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1975 END IF;
1976 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */';
1977 ELSIF (l_check > 0 ) THEN
1978 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1979 hz_utility_v2pub.debug(p_message=>'Restrict Sql has the selective hint',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
1980 END IF;
1981 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */';
1982 END IF;
1983 IF l_search_merged = 'Y' THEN
1984 l_status_sql := ' ' ;
1985 ELSIF l_search_merged = 'I' THEN
1986 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
1987 ELSE
1988 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
1989 END IF;
1990 IF p_person_api = 'Y' THEN
1991 /*Performance fix for Bug:4589953*/
1992 IF (l_check > 0 ) THEN
1993 IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN
1994 p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
1995 ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN
1996 p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
1997 ELSE
1998 p_restrict_sql1 := 'stage1.'||p_restrict_sql;
1999 END IF;
2000 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 , TX2'||
2001 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2002 ' WHERE contains( concat_col, :cont)>0 '||
2003 ' AND (stage.org_contact_id is null '||
2004 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2005 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2006 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2007 ' AND ('||p_restrict_sql||'))' ||
2008 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2009 ' UNION ' ||
2010 ' SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2'||
2011 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2012 ' WHERE contains( concat_col, :cont)>0 '||
2013 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2014 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2015 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2016 ' AND (stage.org_contact_id in ' ||
2017 ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r ' ||
2018 ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
2019 ' where stage1.relationship_id = oc.party_relationship_id ' ||
2020 ' and ('||p_restrict_sql1 || ') ) )' ||
2021 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2022 OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2023 p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2024 ELSE
2025 l_sqlstr := 'SELECT ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2'||
2026 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2027 ' WHERE contains( concat_col, :cont)>0'||
2028 ' AND EXISTS ('||
2029 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2030 ' WHERE p.party_id = stage.party_id ' ||
2031 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2032 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2033 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2034 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2035 ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2036 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2037 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2038 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2039 ,p_dup_party_id, p_dup_party_id;
2040 END IF;
2041 ELSE
2042 l_sqlstr := 'SELECT ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX2'||
2043 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2044 ' WHERE contains( concat_col, :cont)>0'||
2045 ' AND EXISTS ('||
2046 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2047 ' WHERE p.party_id = stage.party_id ' ||
2048 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2049 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2050 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2051 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2052 ' AND ('||p_restrict_sql||')' ||
2053 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2054 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2055 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2056 ,p_dup_party_id, p_dup_party_id;
2057 END IF;
2058 END IF;
2059 END IF;
2060 output_long_strings('----------------------------------------------------------');
2061 output_long_strings('Contact Points Contains String = '||p_contains_str);
2062 output_long_strings('Restrict Sql = '||p_restrict_sql);
2063 exception
2064 when others then
2065 if (instrb(SQLERRM,'DRG-51030')>0) then
2066 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2067 FND_MSG_PUB.ADD;
2068 RAISE FND_API.G_EXC_ERROR;
2069 elsif (instrb(SQLERRM,'DRG-50943')>0) then
2070 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2071 FND_MSG_PUB.ADD;
2072 RAISE FND_API.G_EXC_ERROR;
2073 elsif (instrb(SQLERRM,'ORA-20000')>0) then
2074 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2075 FND_MSG_PUB.ADD;
2076 RAISE FND_API.G_EXC_ERROR;
2077 else
2078 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2079 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2080 FND_MSG_PUB.ADD;
2081 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2082 end if;
2083 END;
2084
2085
2086 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
2087 l_sqlstr VARCHAR2(4000);
2088 l_search_merged VARCHAR2(1);
2089 BEGIN
2090 IF (p_search_merged is null) then
2091 l_search_merged := 'N';
2092 ELSE
2093 l_search_merged := p_search_merged;
2094 END IF;
2095 IF p_restrict_sql IS NULL THEN
2096 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
2097 SELECT p_search_ctx_id, PARTY_ID, decode(TX8,g_party_stage_rec.TX8||' ',100,90)
2098 FROM hz_staged_parties
2099 WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
2100 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = TX36))
2101 AND( (l_search_merged ='Y' )
2102 OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))
2103 OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))
2104 AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)
2105 AND rownum <= p_thresh;
2106 ELSE
2107 l_sqlstr := 'INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE) SELECT :ctx_id, PARTY_ID, decode(TX8,:TX8||'' '',100,90) FROM hz_staged_parties stage ';
2108 l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
2109 l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' = TX36) ';
2110 IF l_search_merged = 'N' THEN
2111 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
2112 ELSIF l_search_merged = 'Y' THEN
2113 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
2114 END IF;
2115 l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
2116 l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
2117 l_sqlstr := l_sqlstr || ' AND ROWNUM <= :thresh ';
2118 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;
2119 END IF;
2120 x_num_matches := SQL%ROWCOUNT;
2121 END;
2122
2123 FUNCTION get_new_score_rec (
2124 p_init_total_score NUMBER,
2125 p_init_party_score NUMBER,
2126 p_init_party_site_score NUMBER,
2127 p_init_contact_score NUMBER,
2128 p_init_contact_point_score NUMBER,
2129 p_party_id NUMBER,
2130 p_party_site_id NUMBER,
2131 p_org_contact_id NUMBER,
2132 p_contact_point_id NUMBER)
2133 RETURN HZ_PARTY_SEARCH.score_rec IS
2134 l_score_rec HZ_PARTY_SEARCH.score_rec;
2135 BEGIN
2136 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2137 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2138 hz_utility_v2pub.debug(p_message=>'calling the function get_new_score_rec to set the l_score_rec structure',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2139 END IF;
2140 l_score_rec.TOTAL_SCORE := p_init_total_score;
2141 l_score_rec.PARTY_SCORE := p_init_party_score;
2142 l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;
2143 l_score_rec.CONTACT_SCORE := p_init_contact_score;
2144 l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;
2145 l_score_rec.PARTY_ID := p_party_id;
2146 l_score_rec.PARTY_SITE_ID := p_party_site_id;
2147 l_score_rec.ORG_CONTACT_ID := p_org_contact_id;
2148 l_score_rec.CONTACT_POINT_ID := p_contact_point_id;
2149 RETURN l_score_rec;
2150 END;
2151
2152 /**********************************************************
2153 This procedure finds the set of parties that match the search
2154 criteria and returns a scored set of parties
2155
2156 The steps in executing the search are as follows
2157 1. Initialization and error checks
2158 2. Setup of intermedia query strings for Acquisition query
2159 3. Execution of Acquisition query
2160 4. Execution of Secondary queries to score results
2161 5. Setup of data temporary table to return search results
2162 **********************************************************/
2163
2164 PROCEDURE find_parties (
2165 p_rule_id IN NUMBER,
2166 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
2167 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
2168 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
2169 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
2170 p_restrict_sql IN VARCHAR2,
2171 p_match_type IN VARCHAR2,
2172 p_search_merged IN VARCHAR2,
2173 p_dup_party_id IN NUMBER,
2174 p_dup_set_id IN NUMBER,
2175 p_dup_batch_id IN NUMBER,
2176 p_ins_details IN VARCHAR2,
2177 x_search_ctx_id OUT NUMBER,
2178 x_num_matches OUT NUMBER
2179 ) IS
2180
2181 -- Strings to hold the generated Intermedia query strings
2182 l_party_contains_str VARCHAR2(32000);
2183 l_party_site_contains_str VARCHAR2(32000);
2184 l_contact_contains_str VARCHAR2(32000);
2185 l_contact_pt_contains_str VARCHAR2(32000);
2186 l_denorm_str VARCHAR2(32000);
2187 l_ps_denorm_str VARCHAR2(32000);
2188 l_ct_denorm_str VARCHAR2(32000);
2189 l_cpt_denorm_str VARCHAR2(32000);
2190
2191 -- Other local variables
2192 l_match_str VARCHAR2(30); -- Match type (AND or OR)
2193 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
2194 -- For Score calculation
2195 l_max_score NUMBER;
2196 l_match_idx NUMBER;
2197 l_entered_max_score NUMBER;
2198 FIRST BOOLEAN;
2199 l_search_ctx_id NUMBER; -- Generated Search Context ID
2200
2201 l_TX2 VARCHAR2(2000);
2202 l_TX46 VARCHAR2(2000);
2203 l_TX4 VARCHAR2(2000);
2204 l_TX11 VARCHAR2(2000);
2205 l_TX45 VARCHAR2(2000);
2206 H_SCORES HZ_PARTY_SEARCH.score_list;
2207 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
2208 H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
2209
2210 l_score NUMBER;
2211 l_idx NUMBER;
2212 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
2213 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
2214 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
2215 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
2216 l_party_id NUMBER;
2217 l_ps_party_id NUMBER;
2218 l_ct_party_id NUMBER;
2219 l_cpt_party_id NUMBER;
2220 l_cpt_ps_id NUMBER;
2221 l_cpt_contact_id NUMBER;
2222 l_cpt_type VARCHAR2(100);
2223 l_party_site_id NUMBER;
2224 l_org_contact_id NUMBER;
2225 l_contact_pt_id NUMBER;
2226 l_ps_contact_id NUMBER;
2227 l_party_max_score NUMBER;
2228 l_ps_max_score NUMBER;
2229 l_contact_max_score NUMBER;
2230 l_cpt_max_score NUMBER;
2231 l_denorm_max_score NUMBER;
2232 l_non_denorm_max_score NUMBER;
2233
2234 defpt NUMBER :=0;
2235 defps NUMBER :=0;
2236 defct NUMBER :=0;
2237 defcpt NUMBER :=0;
2238 l_index NUMBER;
2239 l_max_thresh NUMBER;
2240 l_tmp NUMBER;
2241 l_merge_flag VARCHAR2(1);
2242 l_num_eval NUMBER:=0;
2243
2244 --Fix for bug 4417124
2245 l_use_contact_addr_info BOOLEAN := TRUE;
2246 l_use_contact_cpt_info BOOLEAN := TRUE;
2247 l_use_contact_addr_flag VARCHAR2(1) := 'Y';
2248 l_use_contact_cpt_flag VARCHAR2(1) := 'Y';
2249
2250 L_RETURN_IMM_EXC EXCEPTION;
2251
2252
2253 /********************* Find Parties private procedures *******/
2254 PROCEDURE push_eval IS
2255 BEGIN
2256 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2257 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2258 hz_utility_v2pub.debug(p_message=>'calling the procedure push_eval',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2259 END IF;
2260 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2261 hz_utility_v2pub.debug(p_message=>'Emptying the lists H_PARTY_ID, H_PARTY_ID_LIST and H_SCORES',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2262 END IF;
2263 H_PARTY_ID.DELETE;
2264 H_PARTY_ID_LIST.DELETE;
2265 H_SCORES.DELETE;
2266 g_mappings.DELETE;
2267 HZ_DQM_SEARCH_UTIL.set_num_eval(0);
2268 call_order(5) := call_order(1);
2269 call_type(5) := 'AND';
2270 call_max_score(5) := call_max_score(1);
2271 call_type(2) := 'OR';
2272 END;
2273
2274 /** Private procedure to acquire and score at party level ***/
2275 PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
2276 l_party_id_idx NUMBER:=1;
2277 l_ctx_id NUMBER;
2278 l_precalc_score BOOLEAN := FALSE;
2279 l_TX35_new varchar2(4000);
2280 BEGIN
2281 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2282 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2283 hz_utility_v2pub.debug(p_message=>'calling the procedure eval_party_level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2284 END IF;
2285 SAVEPOINT eval_start;
2286 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2287 l_ctx_id := l_search_ctx_id;
2288 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2289 hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2290 END IF;
2291 FORALL I in 1..H_PARTY_ID.COUNT
2292 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2293 l_search_ctx_id,H_PARTY_ID(I));
2294 H_PARTY_ID.DELETE;
2295 H_PARTY_ID_LIST.DELETE;
2296 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2297 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2298 hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2299 END IF;
2300 l_ctx_id := l_search_ctx_id;
2301 FORALL I in 1..H_PARTY_ID.COUNT
2302 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2303 l_search_ctx_id,H_PARTY_ID(I));
2304 l_party_id_idx := H_PARTY_ID.COUNT+1;
2305 ELSE
2306 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2307 and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
2308 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2309 hz_utility_v2pub.debug(p_message=>'In eval party level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2310 END IF;
2311 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
2312 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2313 hz_utility_v2pub.debug(p_message=>'In eval party level resolution options is set to SQL search.',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2314 END IF;
2315 IF (l_party_site_contains_str IS NULL AND
2316 l_contact_contains_str IS NULL AND
2317 l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN
2318 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);
2319 RAISE L_RETURN_IMM_EXC;
2320 ELSE
2321 open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);
2322 END IF;
2323 ELSE
2324 IF p_index>1 THEN
2325 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2326 hz_utility_v2pub.debug(p_message=>'In eval party level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2327 END IF;
2328 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2329 FND_MSG_PUB.ADD;
2330 RAISE FND_API.G_EXC_ERROR;
2331 ELSE
2332 push_eval;
2333 RETURN;
2334 END IF;
2335 END IF;
2336 END IF;
2337 l_ctx_id := NULL;
2338 l_party_id_idx := H_PARTY_ID.COUNT+1;
2339 END IF;
2340 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2341 hz_utility_v2pub.debug(p_message=>'========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_CURSOR ================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2342 END IF;
2343 IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
2344 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);
2345 END IF;
2346 LOOP
2347 FETCH l_party_cur INTO
2348 l_party_id , l_TX4, l_TX45, l_TX46;
2349 EXIT WHEN l_party_cur%NOTFOUND;
2350 l_index := map_id(l_party_id);
2351 l_score := GET_PARTY_SCORE(l_TX4,l_TX45,l_TX46);
2352 IF NOT H_SCORES.EXISTS(l_index) THEN
2353 H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
2354 ELSE
2355 H_SCORES(l_index).TOTAL_SCORE :=
2356 H_SCORES(l_index).TOTAL_SCORE+l_score;
2357 H_SCORES(l_index).PARTY_SCORE := l_score;
2358 END IF;
2359 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2360 H_PARTY_ID_LIST(l_index) := 1;
2361 H_PARTY_ID(l_party_id_idx) := l_party_id;
2362 l_party_id_idx:= l_party_id_idx+1;
2363 END IF;
2364 IF (l_party_id_idx-1)>l_max_thresh THEN
2365 IF p_index=1 AND call_order(2) = 'PARTY_SITE'
2366 AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
2367 AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL'
2368 AND l_contact_pt_contains_str IS NULL THEN
2369 EXIT;
2370 END IF;
2371 CLOSE l_party_cur;
2372 IF p_index>1 THEN
2373 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2374 hz_utility_v2pub.debug(p_message=>'In eval party level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2375 END IF;
2376 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2377 FND_MSG_PUB.ADD;
2378 RAISE FND_API.G_EXC_ERROR;
2379 ELSE
2380 push_eval;
2381 RETURN;
2382 END IF;
2383 END IF;
2384 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2385 hz_utility_v2pub.debug(p_message=>'In eval_party_level l_party_id = '||l_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2386 hz_utility_v2pub.debug(p_message=>'In eval_party_level l_score = '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2387 END IF;
2388 END LOOP;
2389 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2390 hz_utility_v2pub.debug(p_message=>'===========END of LOOP=====================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2391 END IF;
2392 CLOSE l_party_cur;
2393 ROLLBACK to eval_start;
2394 END;
2395
2396 /** Private procedure to acquire and score at party site level ***/
2397 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
2398 l_party_id_idx NUMBER:=1;
2399 l_ctx_id NUMBER;
2400 h_ps_id HZ_PARTY_SEARCH.IDList;
2401 h_ps_party_id HZ_PARTY_SEARCH.IDList;
2402 h_ps_score HZ_PARTY_SEARCH.IDList;
2403 detcnt NUMBER := 1;
2404 BEGIN
2405 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2406 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2407 hz_utility_v2pub.debug(p_message=>'calling the procedure eval_party_site_level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2408 END IF;
2409 IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,'D_PS')>0
2410 AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and
2411 l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> 'Y' THEN
2412 l_party_id := H_SCORES.FIRST;
2413 WHILE l_party_id IS NOT NULL LOOP
2414 H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;
2415 l_party_id:=H_SCORES.NEXT(l_party_id);
2416 END LOOP;
2417 RETURN;
2418 END IF;
2419 SAVEPOINT eval_start;
2420 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2421 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2422 hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2423 END IF;
2424 l_ctx_id := l_search_ctx_id;
2425 FORALL I in 1..H_PARTY_ID.COUNT
2426 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2427 l_search_ctx_id,H_PARTY_ID(I));
2428 H_PARTY_ID.DELETE;
2429 H_PARTY_ID_LIST.DELETE;
2430 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2431 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2432 hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2433 END IF;
2434 l_ctx_id := l_search_ctx_id;
2435 FORALL I in 1..H_PARTY_ID.COUNT
2436 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2437 l_search_ctx_id,H_PARTY_ID(I));
2438 l_party_id_idx := H_PARTY_ID.COUNT+1;
2439 ELSE
2440 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2441 and check_estimate_hits('PARTY_SITES',p_party_site_contains_str)>l_max_thresh THEN
2442 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2443 hz_utility_v2pub.debug(p_message=>'In eval party site level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2444 END IF;
2445 IF p_index>1 THEN
2446 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2447 hz_utility_v2pub.debug(p_message=>'In eval party site level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2448 END IF;
2449 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2450 FND_MSG_PUB.ADD;
2451 RAISE FND_API.G_EXC_ERROR;
2452 ELSE
2453 push_eval;
2454 RETURN;
2455 END IF;
2456 END IF;
2457 l_party_id_idx := H_PARTY_ID.COUNT+1;
2458 l_ctx_id := NULL;
2459 END IF;
2460 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2461 hz_utility_v2pub.debug(p_message=>'========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_PARTY_SITE_CURSOR ================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2462 END IF;
2463 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);
2464 LOOP
2465 FETCH l_party_site_cur INTO
2466 l_party_site_id, l_ps_party_id, l_ps_contact_id , l_TX4, l_TX11;
2467 EXIT WHEN l_party_site_cur%NOTFOUND;
2468 --Fix for bug 4417124
2469 IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN
2470 l_index := map_id(l_ps_party_id);
2471 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX4,l_TX11);
2472 IF NOT H_SCORES.EXISTS(l_index) THEN
2473 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);
2474 ELSE
2475 IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
2476 H_SCORES(l_index).TOTAL_SCORE :=
2477 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
2478 H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
2479 END IF;
2480 END IF;
2481 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2482 H_PARTY_ID_LIST(l_index) := 1;
2483 H_PARTY_ID(l_party_id_idx) := l_ps_party_id;
2484 l_party_id_idx:= l_party_id_idx+1;
2485 END IF;
2486 IF p_ins_details = 'Y' THEN
2487 h_ps_id(detcnt) := l_party_site_id;
2488 h_ps_party_id(detcnt) := l_ps_party_id;
2489 IF (p_emax_score > 0) THEN
2490 h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
2491 ELSE
2492 h_ps_score(detcnt) := 0;
2493 END IF;
2494 detcnt := detcnt +1;
2495 END IF;
2496 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2497 hz_utility_v2pub.debug(p_message=>'In eval_party_site_level l_party_site_id = '||l_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2498 hz_utility_v2pub.debug(p_message=>'In eval_paty_site_level l_ps_party_id = '||l_ps_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2499 hz_utility_v2pub.debug(p_message=>'In eval_party_site_level l_score = '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2500 END IF;
2501 END IF;
2502 END LOOP;
2503 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2504 hz_utility_v2pub.debug(p_message=>'===========END of LOOP=====================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2505 END IF;
2506 CLOSE l_party_site_cur;
2507 ROLLBACK to eval_start;
2508 IF p_ins_details = 'Y' THEN
2509 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2510 hz_utility_v2pub.debug(p_message=>'In eval_party_site_level inserting into HZ_MATCHED_PARTY_SITES_GT from the H_PS_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2511 END IF;
2512 FORALL I in 1..h_ps_id.COUNT
2513 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
2514 l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
2515 END IF;
2516 END;
2517
2518 /** Private procedure to acquire and score at contact point level ***/
2519 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
2520 l_party_id_idx NUMBER:=1;
2521 l_ctx_id NUMBER;
2522 h_ct_id HZ_PARTY_SEARCH.IDList;
2523 h_ct_party_id HZ_PARTY_SEARCH.IDList;
2524 h_ct_score HZ_PARTY_SEARCH.IDList;
2525 detcnt NUMBER := 1;
2526 BEGIN
2527 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2528 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2529 hz_utility_v2pub.debug(p_message=>'calling the procedure eval_contact_level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2530 END IF;
2531 SAVEPOINT eval_start;
2532 IF l_match_str = ' AND ' AND p_call_type='AND' THEN
2533 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2534 hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2535 END IF;
2536 l_ctx_id := l_search_ctx_id;
2537 FORALL I in 1..H_PARTY_ID.COUNT
2538 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2539 l_search_ctx_id,H_PARTY_ID(I));
2540 H_PARTY_ID.DELETE;
2541 H_PARTY_ID_LIST.DELETE;
2542 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2543 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2544 hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2545 END IF;
2546 l_ctx_id := l_search_ctx_id;
2547 FORALL I in 1..H_PARTY_ID.COUNT
2548 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2549 l_search_ctx_id,H_PARTY_ID(I));
2550 l_party_id_idx := H_PARTY_ID.COUNT+1;
2551 ELSE
2552 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2553 and check_estimate_hits('CONTACTS',p_contact_contains_str)>l_max_thresh THEN
2554 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2555 hz_utility_v2pub.debug(p_message=>'In eval contact level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2556 END IF;
2557 IF p_index>1 THEN
2558 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2559 hz_utility_v2pub.debug(p_message=>'In eval contact level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2560 END IF;
2561 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2562 FND_MSG_PUB.ADD;
2563 RAISE FND_API.G_EXC_ERROR;
2564 ELSE
2565 push_eval;
2566 RETURN;
2567 END IF;
2568 END IF;
2569 l_ctx_id := NULL;
2570 l_party_id_idx := H_PARTY_ID.COUNT+1;
2571 END IF;
2572 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2573 hz_utility_v2pub.debug(p_message=>'========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_CURSOR ================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2574 END IF;
2575 open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id, p_search_merged, l_contact_cur);
2576 LOOP
2577 FETCH l_contact_cur INTO
2578 l_org_contact_id, l_ct_party_id ;
2579 EXIT WHEN l_contact_cur%NOTFOUND;
2580 l_index := map_id(l_ct_party_id);
2581 l_score := GET_CONTACTS_SCORE(l_match_idx);
2582 IF NOT H_SCORES.EXISTS(l_index) THEN
2583 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);
2584 ELSE
2585 IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
2586 H_SCORES(l_index).TOTAL_SCORE :=
2587 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
2588 H_SCORES(l_index).CONTACT_SCORE := l_score;
2589 END IF;
2590 END IF;
2591 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2592 H_PARTY_ID_LIST(l_index) := 1;
2593 H_PARTY_ID(l_party_id_idx) := l_ct_party_id;
2594 l_party_id_idx:= l_party_id_idx+1;
2595 END IF;
2596 IF p_ins_details = 'Y' THEN
2597 h_ct_id(detcnt) := l_org_contact_id;
2598 h_ct_party_id(detcnt) := l_ct_party_id;
2599 IF (p_emax_score > 0) THEN
2600 h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
2601 ELSE
2602 h_ct_score(detcnt) := 0;
2603 END IF;
2604 detcnt := detcnt +1;
2605 END IF;
2606 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2607 hz_utility_v2pub.debug(p_message=>'In eval_contact_level l_org_contact_id = '||l_org_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2608 hz_utility_v2pub.debug(p_message=>'In eval_contact_level l_ct_party_id = '||l_ct_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2609 hz_utility_v2pub.debug(p_message=>'In eval_contact_level l_score = '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2610 END IF;
2611 END LOOP;
2612 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2613 hz_utility_v2pub.debug(p_message=>'===========END of LOOP=====================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2614 END IF;
2615 CLOSE l_contact_cur;
2616 ROLLBACK to eval_start;
2617 IF p_ins_details = 'Y' THEN
2618 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2619 hz_utility_v2pub.debug(p_message=>'In eval_contact_level inserting into HZ_MATCHED_CONTACTS_GT from the H_CT_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2620 END IF;
2621 FORALL I in 1..h_ct_id.COUNT
2622 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
2623 l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
2624 END IF;
2625 END;
2626
2627 /** Private procedure to acquire and score at contact point level ***/
2628 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
2629 l_party_id_idx NUMBER:=1;
2630 l_ctx_id NUMBER;
2631 h_cpt_id HZ_PARTY_SEARCH.IDList;
2632 h_cpt_party_id HZ_PARTY_SEARCH.IDList;
2633 h_cpt_score HZ_PARTY_SEARCH.IDList;
2634 detcnt NUMBER := 1;
2635 l_cpt_flag VARCHAR2(1) := 'N';
2636 is_a_match VARCHAR2(1) := 'Y';
2637 BEGIN
2638 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2639 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2640 hz_utility_v2pub.debug(p_message=>'calling the procedure eval_cpt_level',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2641 END IF;
2642 SAVEPOINT eval_start;
2643 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2644 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2645 hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2646 END IF;
2647 l_ctx_id := l_search_ctx_id;
2648 FORALL I in 1..H_PARTY_ID.COUNT
2649 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2650 l_search_ctx_id,H_PARTY_ID(I));
2651 H_PARTY_ID.DELETE;
2652 H_PARTY_ID_LIST.DELETE;
2653 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2654 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2655 hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2656 END IF;
2657 l_ctx_id := l_search_ctx_id;
2658 FORALL I in 1..H_PARTY_ID.COUNT
2659 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2660 l_search_ctx_id,H_PARTY_ID(I));
2661 l_party_id_idx := H_PARTY_ID.COUNT+1;
2662 ELSE
2663 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2664 and check_estimate_hits('CONTACT_POINTS',p_contact_pt_contains_str)>l_max_thresh THEN
2665 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2666 hz_utility_v2pub.debug(p_message=>'In eval contact point level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2667 END IF;
2668 IF p_index>1 THEN
2669 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2670 hz_utility_v2pub.debug(p_message=>'In eval contact point level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2671 END IF;
2672 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2673 FND_MSG_PUB.ADD;
2674 RAISE FND_API.G_EXC_ERROR;
2675 ELSE
2676 push_eval;
2677 RETURN;
2678 END IF;
2679 END IF;
2680 l_ctx_id := NULL;
2681 l_party_id_idx := H_PARTY_ID.COUNT+1;
2682 END IF;
2683 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2684 hz_utility_v2pub.debug(p_message=>'========== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR ================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2685 END IF;
2686 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);
2687 LOOP
2688 FETCH l_contact_pt_cur INTO
2689 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id , l_TX2;
2690 EXIT WHEN l_contact_pt_cur%NOTFOUND;
2691 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2692 hz_utility_v2pub.debug(p_message=>'----------------------------------------------------------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2693 END IF;
2694 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2695 hz_utility_v2pub.debug(p_message=>'Processing party_id - '||l_cpt_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2696 END IF;
2697 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2698 hz_utility_v2pub.debug(p_message=>'Contact Point Type - '||l_cpt_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2699 END IF;
2700 --Fix for bug 4417124
2701 IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN
2702 l_index := map_id(l_cpt_party_id);
2703 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
2704 IF NOT H_SCORES.EXISTS(l_index) THEN
2705 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);
2706 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
2707 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2708 hz_utility_v2pub.debug(p_message=>'Processing second Time for this party',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2709 END IF;
2710 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2711 hz_utility_v2pub.debug(p_message=>'l_index is - '||l_index,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2712 END IF;
2713 ELSE
2714 IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
2715 IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
2716 H_SCORES(l_index).TOTAL_SCORE :=
2717 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;
2718 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;
2719 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
2720 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2721 hz_utility_v2pub.debug(p_message=>'Passed in score greater than existing score',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2722 END IF;
2723 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2724 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).TOTAL_SCORE is - '||H_SCORES(l_index).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2725 END IF;
2726 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2727 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).CONTACT_POINT_SCORE is - '||H_SCORES(l_index).CONTACT_POINT_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2728 END IF;
2729 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2730 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).cpt_type_match(l_cpt_type) is - '||H_SCORES(l_index).cpt_type_match(l_cpt_type),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2731 END IF;
2732 END IF;
2733 ELSE
2734 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2735 hz_utility_v2pub.debug(p_message=>'Passed in score less than or equal to the existing score ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2736 END IF;
2737 H_SCORES(l_index).TOTAL_SCORE :=
2738 H_SCORES(l_index).TOTAL_SCORE+l_score;
2739 H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
2740 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
2741 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2742 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).TOTAL_SCORE is - '||H_SCORES(l_index).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2743 END IF;
2744 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2745 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).CONTACT_POINT_SCORE is - '||H_SCORES(l_index).CONTACT_POINT_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2746 END IF;
2747 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2748 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).cpt_type_match(l_cpt_type) is - '||H_SCORES(l_index).cpt_type_match(l_cpt_type),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2749 END IF;
2750 END IF;
2751 END IF;
2752 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2753 hz_utility_v2pub.debug(p_message=>'call type is - '||p_call_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2754 END IF;
2755 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2756 hz_utility_v2pub.debug(p_message=>'match string is - '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2757 END IF;
2758 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2759 -- If rule is match all
2760 IF l_match_str = ' AND ' THEN
2761 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2762 hz_utility_v2pub.debug(p_message=>'Match string is AND ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2763 END IF;
2764 IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
2765 is_a_match := 'Y';
2766 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2767 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2768 END IF;
2769 ELSE
2770 is_a_match := 'N';
2771 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2772 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2773 END IF;
2774 END IF;
2775 -- Else it is construed to be a match anyway
2776 ELSE
2777 is_a_match := 'Y';
2778 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2779 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2780 END IF;
2781 END IF;
2782 IF (is_a_match='Y') then
2783 H_PARTY_ID_LIST(l_index) := 1;
2784 H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;
2785 l_party_id_idx:= l_party_id_idx+1;
2786 end if;
2787 END IF;
2788 IF p_ins_details = 'Y' THEN
2789 IF l_match_str = ' AND ' THEN
2790 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2791 hz_utility_v2pub.debug(p_message=>'Match string is AND ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2792 END IF;
2793 IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
2794 is_a_match := 'Y';
2795 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2796 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2797 END IF;
2798 ELSE
2799 is_a_match := 'N';
2800 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2801 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2802 END IF;
2803 END IF;
2804 ELSE
2805 is_a_match := 'Y';
2806 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2807 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2808 END IF;
2809 END IF;
2810 IF (is_a_match='Y') THEN
2811 FOR I IN 1..h_cpt_id.COUNT LOOP
2812 IF h_cpt_id(I)=l_contact_pt_id THEN
2813 l_cpt_flag := 'Y';
2814 END IF;
2815 END LOOP;
2816 IF l_cpt_flag = 'Y' THEN
2817 NULL;
2818 ELSE
2819 h_cpt_id(detcnt) := l_contact_pt_id;
2820 h_cpt_party_id(detcnt) := l_cpt_party_id;
2821 IF (p_emax_score > 0) THEN
2822 h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
2823 ELSE
2824 h_cpt_score(detcnt) := 0;
2825 END IF;
2826 detcnt := detcnt +1;
2827 END IF;
2828 end if;
2829 END IF;
2830 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2831 hz_utility_v2pub.debug(p_message=>'In eval_cpt_level l_contact_pt_id = '||l_contact_pt_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2832 hz_utility_v2pub.debug(p_message=>'In eval_cpt_level l_cpt_party_id = '||l_cpt_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2833 hz_utility_v2pub.debug(p_message=>'In eval_cpt_level l_score = '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2834 END IF;
2835 END IF;
2836 END LOOP;
2837 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2838 hz_utility_v2pub.debug(p_message=>'===========END of LOOP=====================',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2839 END IF;
2840 CLOSE l_contact_pt_cur;
2841 ROLLBACK to eval_start;
2842 IF p_ins_details = 'Y' THEN
2843 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2844 hz_utility_v2pub.debug(p_message=>'In eval_contact_point_level inserting into HZ_MATCHED_CPTS_GT from the H_CPT_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2845 END IF;
2846 FORALL I in 1..h_cpt_id.COUNT
2847 INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
2848 l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
2849 END IF;
2850 END eval_cpt_level;
2851
2852 /** Private procedure to call the eval procedure at each entity in the correct order ***/
2853 PROCEDURE do_eval (p_index NUMBER) IS
2854 l_ctx_id NUMBER;
2855 l_threshold NUMBER;
2856 other_acq_criteria_exists BOOLEAN;
2857 acq_cnt NUMBER;
2858 BEGIN
2859 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2860 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2861 hz_utility_v2pub.debug(p_message=>'calling the procedure do_eval',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2862 END IF;
2863 IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
2864 l_threshold := 474;
2865 other_acq_criteria_exists := TRUE ;
2866 --check if acquisition criteria exists for any other entity
2867 IF l_party_contains_str IS NOT NULL THEN
2868 acq_cnt := 1;
2869 END IF;
2870 IF l_party_site_contains_str IS NOT NULL THEN
2871 acq_cnt := acq_cnt+1;
2872 END IF;
2873 IF l_contact_contains_str IS NOT NULL THEN
2874 acq_cnt := acq_cnt+1;
2875 END IF;
2876 IF l_contact_pt_contains_str IS NOT NULL THEN
2877 acq_cnt := acq_cnt+1;
2878 END IF;
2879 IF acq_cnt>1 THEN
2880 other_acq_criteria_exists := TRUE;
2881 ELSE
2882 other_acq_criteria_exists := FALSE;
2883 END IF;
2884 hz_utility_v2pub.debug(p_message=>'count of entities having acquisition attributes = '||acq_cnt,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2885 hz_utility_v2pub.debug(p_message=>'call_max_score(p_index) = '||call_max_score(p_index),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2886 hz_utility_v2pub.debug(p_message=>'l_threshold = '||l_threshold,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2887 IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
2888 IF ( call_max_score(p_index) < l_threshold) THEN
2889 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2890 hz_utility_v2pub.debug(p_message=>'When max score of entity level<l_threshold, do not evaluate ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2891 END IF;
2892 RETURN;
2893 ELSE
2894 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2895 hz_utility_v2pub.debug(p_message=>'In do eval number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2896 END IF;
2897 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2898 FND_MSG_PUB.ADD;
2899 RAISE FND_API.G_EXC_ERROR;
2900 END IF;
2901 ELSE
2902 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2903 hz_utility_v2pub.debug(p_message=>'In do eval number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2904 END IF;
2905 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2906 FND_MSG_PUB.ADD;
2907 RAISE FND_API.G_EXC_ERROR;
2908 END IF;
2909 END IF;
2910 IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
2911 eval_party_level(l_party_contains_str,call_type(p_index), p_index);
2912 ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
2913 eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
2914 ELSIF call_order(p_index) = 'CONTACT' AND l_contact_contains_str IS NOT NULL THEN
2915 eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
2916 ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
2917 eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
2918 END IF;
2919 END;
2920 /************ End of find_parties private procedures **********/
2921
2922 BEGIN
2923
2924 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2925 hz_utility_v2pub.debug(p_message=>'--------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2926 END IF;
2927 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2928 hz_utility_v2pub.debug(p_message=>'Entering Procedure find_parties',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2929 END IF;
2930 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2931 hz_utility_v2pub.debug(p_message=>'Input Parameters are :',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2932 hz_utility_v2pub.debug(p_message=>'p_match_type = '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2933 hz_utility_v2pub.debug(p_message=>'p_restrict_sql = '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2934 hz_utility_v2pub.debug(p_message=>'p_dup_set_id = '||p_dup_set_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2935 hz_utility_v2pub.debug(p_message=>'p_search_merged = '||p_search_merged,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2936 hz_utility_v2pub.debug(p_message=>'p_dup_party_id = '||p_dup_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2937 END IF;
2938 -- ************************************
2939 -- STEP 1. Initialization and error checks
2940
2941 l_match_str := ' AND ';
2942 IF p_match_type = 'AND' THEN
2943 l_match_str := ' AND ';
2944 ELSIF p_match_type = 'OR' THEN
2945 l_match_str := ' OR ';
2946 END IF;
2947 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);
2948 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
2949
2950
2951 --Fix for bug 4417124
2952
2953 SELECT use_contact_addr_flag, use_contact_cpt_flag
2954 INTO l_use_contact_addr_flag, l_use_contact_cpt_flag
2955 FROM hz_match_rules_b
2956 WHERE match_rule_id = 238;
2957
2958 IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
2959 l_use_contact_addr_info := FALSE;
2960 END IF;
2961
2962 IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
2963 l_use_contact_cpt_info := FALSE;
2964 END IF;
2965
2966 --End fix for bug 4417124
2967
2968 IF p_dup_batch_id IS NOT NULL THEN
2969 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH_BATCH'),10000);
2970 ELSE
2971 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
2972 END IF;
2973 IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
2974 g_score_until_thresh := true;
2975 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2976 hz_utility_v2pub.debug(p_message=>'g_score_until_thresh is true',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2977 END IF;
2978 ELSE
2979 g_score_until_thresh := false;
2980 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2981 hz_utility_v2pub.debug(p_message=>'g_score_until_thresh is false',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2982 END IF;
2983 END IF;
2984 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2985 hz_utility_v2pub.debug(p_message=>'Maximum records that will be evaluated is '||l_max_thresh,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2986 END IF;
2987 -- ************************************************************
2988 -- STEP 2. Setup of intermedia query strings for Acquisition query
2989 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
2990 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
2991 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
2992 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2993 hz_utility_v2pub.debug(p_message=>'Commencing the DENORM LOGIC in find_parties',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2994 END IF;
2995 l_denorm_max_score:=0;
2996 l_non_denorm_max_score:=0;
2997 IF l_ps_denorm_str IS NOT NULL THEN
2998 l_denorm_max_score := l_denorm_max_score+l_ps_max_score;
2999 l_denorm_str := l_ps_denorm_str;
3000 ELSE
3001 l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;
3002 END IF;
3003 IF l_ct_denorm_str IS NOT NULL THEN
3004 l_denorm_max_score := l_denorm_max_score+l_contact_max_score;
3005 IF l_denorm_str IS NOT NULL THEN
3006 l_denorm_str := l_denorm_str || ' OR ' ||l_ct_denorm_str;
3007 ELSE
3008 l_denorm_str := l_ct_denorm_str;
3009 END IF;
3010 ELSE
3011 l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;
3012 END IF;
3013 IF l_cpt_denorm_str IS NOT NULL THEN
3014 l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;
3015 IF l_denorm_str IS NOT NULL THEN
3016 l_denorm_str := l_denorm_str || ' OR ' ||l_cpt_denorm_str;
3017 ELSE
3018 l_denorm_str := l_cpt_denorm_str;
3019 END IF;
3020 ELSE
3021 l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;
3022 END IF;
3023 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((474/790)*l_entered_max_score));
3024 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3025
3026 -- Setup Search Context ID
3027 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3028 x_search_ctx_id := l_search_ctx_id;
3029
3030 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3031 hz_utility_v2pub.debug(p_message=>'Search context id in find_parties is '||x_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3032 END IF;
3033 IF l_party_contains_str IS NULL THEN
3034 defpt := 1;
3035 END IF;
3036 IF l_party_site_contains_str IS NULL THEN
3037 defps := 1;
3038 END IF;
3039 IF l_contact_contains_str IS NULL THEN
3040 defct := 1;
3041 END IF;
3042 IF l_contact_pt_contains_str IS NULL THEN
3043 defcpt := 1;
3044 END IF;
3045
3046 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3047 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3048 hz_utility_v2pub.debug(p_message=>'------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3049 END IF;
3050 hz_utility_v2pub.debug(p_message=>'In find_parties l_match_str = '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3051 hz_utility_v2pub.debug(p_message=>'In find_parties l_party_contains_str = '||l_party_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3052 hz_utility_v2pub.debug(p_message=>'In find_parties l_party_site_contains_str = '||l_party_site_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3053 hz_utility_v2pub.debug(p_message=>'In find_parties l_contact_contains_str = '||l_contact_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3054 hz_utility_v2pub.debug(p_message=>'In find_parties l_contact_pt_contains_str = '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3055 hz_utility_v2pub.debug(p_message=>'In find_parties l_search_ctx_id = '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3056 END IF;
3057 FOR I in 1..5 LOOP
3058 do_eval(I);
3059 END LOOP;
3060 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3061 hz_utility_v2pub.debug(p_message=>'In find_parties. This is a Search Rule. Evaluating Matches. Threshold : 60 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3062 END IF;
3063 x_num_matches := 0;
3064 l_num_eval := 0;
3065 IF l_match_str = ' OR ' THEN
3066 l_party_id := H_SCORES.FIRST;
3067 ELSE
3068 l_party_id := H_PARTY_ID_LIST.FIRST;
3069 END IF;
3070 WHILE l_party_id IS NOT NULL LOOP
3071 l_num_eval:= l_num_eval+1;
3072 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3073 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3074 hz_utility_v2pub.debug(p_message=>'----------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3075 END IF;
3076 hz_utility_v2pub.debug(p_message=>'In find_parties Match Party ID = '||H_SCORES(l_party_id).PARTY_ID,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3077 hz_utility_v2pub.debug(p_message=>'In find_parties Score = '||H_SCORES(l_party_id).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3078 END IF;
3079 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3080 hz_utility_v2pub.debug(p_message=>'In find_parties inserting Webservice Rule results into HZ_MATCHED_PARTIES_GT',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3081 END IF;
3082 IF H_SCORES(l_party_id).TOTAL_SCORE>=474 THEN
3083 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
3084 VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/790)*100));
3085 x_num_matches := x_num_matches+1;
3086 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3087 hz_utility_v2pub.debug(p_message=>'----------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3088 END IF;
3089 END IF;
3090 IF l_match_str = ' OR ' THEN
3091 l_party_id:=H_SCORES.NEXT(l_party_id);
3092 ELSE
3093 l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3094 END IF;
3095 END LOOP;
3096 HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3097 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3098 hz_utility_v2pub.debug(p_message=>'Exiting Procedure find_parties',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3099 END IF;
3100 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3101 hz_utility_v2pub.debug(p_message=>'--------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3102 END IF;
3103 EXCEPTION
3104 WHEN L_RETURN_IMM_EXC THEN
3105 RETURN;
3106 WHEN FND_API.G_EXC_ERROR THEN
3107 RAISE FND_API.G_EXC_ERROR;
3108 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3109 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3110 WHEN OTHERS THEN
3111 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3112 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_parties');
3113 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3114 FND_MSG_PUB.ADD;
3115 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3116 END find_parties;
3117
3118 PROCEDURE find_persons (
3119 p_rule_id IN NUMBER,
3120 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
3121 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
3122 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
3123 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
3124 p_restrict_sql IN VARCHAR2,
3125 p_match_type IN VARCHAR2,
3126 p_search_merged IN VARCHAR2,
3127 p_dup_party_id IN NUMBER,
3128 p_dup_set_id IN NUMBER,
3129 p_dup_batch_id IN NUMBER,
3130 p_ins_details IN VARCHAR2,
3131 x_search_ctx_id OUT NUMBER,
3132 x_num_matches OUT NUMBER
3133 ) IS
3134
3135 -- Strings to hold the generated Intermedia query strings
3136 l_party_contains_str VARCHAR2(32000);
3137 l_party_site_contains_str VARCHAR2(32000);
3138 l_contact_contains_str VARCHAR2(32000);
3139 l_contact_pt_contains_str VARCHAR2(32000);
3140 l_denorm_str VARCHAR2(32000);
3141 l_ps_denorm_str VARCHAR2(32000);
3142 l_ct_denorm_str VARCHAR2(32000);
3143 l_cpt_denorm_str VARCHAR2(32000);
3144
3145 -- Other local variables
3146 l_match_str VARCHAR2(30); -- Match type (AND or OR)
3147 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
3148 -- For Score calculation
3149 l_max_score NUMBER;
3150 l_match_idx NUMBER;
3151 l_entered_max_score NUMBER;
3152 FIRST BOOLEAN;
3153 l_search_ctx_id NUMBER; -- Generated Search Context ID
3154
3155 l_TX2 VARCHAR2(2000);
3156 l_TX46 VARCHAR2(2000);
3157 l_TX4 VARCHAR2(2000);
3158 l_TX11 VARCHAR2(2000);
3159 l_TX45 VARCHAR2(2000);
3160 H_SCORES HZ_PARTY_SEARCH.score_list;
3161 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
3162 H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
3163
3164 l_score NUMBER;
3165 l_idx NUMBER;
3166 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
3167 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
3168 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
3169 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
3170 l_party_id NUMBER;
3171 l_ps_party_id NUMBER;
3172 l_ct_party_id NUMBER;
3173 l_cpt_party_id NUMBER;
3174 l_cpt_ps_id NUMBER;
3175 l_cpt_contact_id NUMBER;
3176 l_cpt_type VARCHAR2(100);
3177 l_party_site_id NUMBER;
3178 l_org_contact_id NUMBER;
3179 l_contact_pt_id NUMBER;
3180 l_cpt_level VARCHAR2(100);
3181 l_ps_contact_id NUMBER;
3182 l_party_max_score NUMBER;
3183 l_ps_max_score NUMBER;
3184 l_contact_max_score NUMBER;
3185 l_cpt_max_score NUMBER;
3186 l_denorm_max_score NUMBER;
3187 l_non_denorm_max_score NUMBER;
3188
3189 defpt NUMBER :=0;
3190 defps NUMBER :=0;
3191 defct NUMBER :=0;
3192 defcpt NUMBER :=0;
3193 l_index NUMBER;
3194 l_max_thresh NUMBER;
3195 l_tmp NUMBER;
3196 l_merge_flag VARCHAR2(1);
3197 l_num_eval NUMBER:=0;
3198
3199 L_RETURN_IMM_EXC Exception;
3200
3201
3202 /********************* Find Parties private procedures *******/
3203 PROCEDURE set_person_party_type IS
3204 BEGIN
3205 g_party_stage_rec.TX36:=
3206 HZ_TRANS_PKG.EXACT(
3207 'PERSON'
3208 ,null,'PARTY_TYPE'
3209 ,'PARTY');
3210 END;
3211
3212 PROCEDURE unset_person_party_type IS
3213 BEGIN
3214 g_party_stage_rec.TX36 := '';
3215 END;
3216
3217 FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER)
3218 RETURN NUMBER IS
3219 l_party_type VARCHAR2(255);
3220 l_person_id NUMBER(15);
3221 BEGIN
3222 SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;
3223 IF l_party_type = 'PERSON' THEN
3224 RETURN p_party_id;
3225 ELSIF p_contact_id IS NULL THEN
3226 RETURN NULL;
3227 ELSE
3228 BEGIN
3229 SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p
3230 WHERE oc.org_contact_id = p_contact_id
3231 AND r.relationship_id = oc.party_relationship_id
3232 AND r.object_id = p_party_id
3233 AND p.party_id = r.subject_id
3234 AND p.party_type = 'PERSON'
3235 AND ROWNUM=1;
3236
3237 RETURN l_person_id;
3238 EXCEPTION
3239 WHEN NO_DATA_FOUND THEN
3240 RETURN NULL;
3241 END;
3242 END IF;
3243 END;
3244
3245 PROCEDURE push_eval IS
3246 BEGIN
3247 H_PARTY_ID.DELETE;
3248 H_PARTY_ID_LIST.DELETE;
3249 H_SCORES.DELETE;
3250 g_mappings.DELETE;
3251 HZ_DQM_SEARCH_UTIL.set_num_eval(0);
3252 call_order(5) := call_order(1);
3253 call_type(5) := 'AND';
3254 call_max_score(5) := call_max_score(1);
3255 call_type(2) := 'OR';
3256 END;
3257
3258 /** Private procedure to acquire and score at party level ***/
3259 PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
3260 l_party_id_idx NUMBER:=1;
3261 l_ctx_id NUMBER;
3262 l_TX35_new varchar2(4000);
3263 BEGIN
3264 SAVEPOINT eval_start;
3265 set_person_party_type;
3266 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3267 l_ctx_id := l_search_ctx_id;
3268 FORALL I in 1..H_PARTY_ID.COUNT
3269 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3270 l_search_ctx_id,H_PARTY_ID(I));
3271 H_PARTY_ID.DELETE;
3272 H_PARTY_ID_LIST.DELETE;
3273 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3274 l_ctx_id := l_search_ctx_id;
3275 FORALL I in 1..H_PARTY_ID.COUNT
3276 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3277 l_search_ctx_id,H_PARTY_ID(I));
3278 l_party_id_idx := H_PARTY_ID.COUNT+1;
3279 ELSE
3280 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3281 and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
3282 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3283 hz_utility_v2pub.debug(p_message=>'In eval party level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3284 END IF;
3285 IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' THEN
3286 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3287 hz_utility_v2pub.debug(p_message=>'In eval party level resolution option is set to SQL search.',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3288 END IF;
3289 IF (l_party_site_contains_str IS NULL AND
3290 l_contact_contains_str IS NULL AND
3291 l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN
3292 return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);
3293 RAISE L_RETURN_IMM_EXC;
3294 ELSE
3295 open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);
3296 END IF;
3297 ELSE
3298 IF p_index>1 THEN
3299 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3300 hz_utility_v2pub.debug(p_message=>'In eval party level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3301 END IF;
3302 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3303 FND_MSG_PUB.ADD;
3304 RAISE FND_API.G_EXC_ERROR;
3305 ELSE
3306 push_eval;
3307 RETURN;
3308 END IF;
3309 END IF;
3310 END IF;
3311 l_ctx_id := NULL;
3312 l_party_id_idx := H_PARTY_ID.COUNT+1;
3313 END IF;
3314 IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
3315 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);
3316 END IF;
3317 LOOP
3318 FETCH l_party_cur INTO
3319 l_party_id , l_TX4, l_TX45, l_TX46;
3320 EXIT WHEN l_party_cur%NOTFOUND;
3321 l_index := map_id(l_party_id);
3322 l_score := GET_PARTY_SCORE(l_TX4,l_TX45,l_TX46);
3323 IF NOT H_SCORES.EXISTS(l_index) THEN
3324 H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
3325 ELSE
3326 H_SCORES(l_index).TOTAL_SCORE :=
3327 H_SCORES(l_index).TOTAL_SCORE+l_score;
3328 H_SCORES(l_index).PARTY_SCORE := l_score;
3329 END IF;
3330 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3331 H_PARTY_ID_LIST(l_index) := 1;
3332 H_PARTY_ID(l_party_id_idx) := l_party_id;
3333 l_party_id_idx:= l_party_id_idx+1;
3334 END IF;
3335 IF (l_party_id_idx-1)>l_max_thresh THEN
3336 IF p_index=1 AND call_order(2) = 'PARTY_SITE'
3337 AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
3338 AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL'
3339 AND l_contact_pt_contains_str IS NULL THEN
3340 H_PARTY_ID.DELETE(l_party_id_idx-1);
3341 H_PARTY_ID_LIST.DELETE(l_index);
3342 H_SCORES.DELETE(l_index);
3343 EXIT;
3344 END IF;
3345 CLOSE l_party_cur;
3346 IF p_index>1 THEN
3347 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3348 hz_utility_v2pub.debug(p_message=>'In eval party level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3349 END IF;
3350 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3351 FND_MSG_PUB.ADD;
3352 RAISE FND_API.G_EXC_ERROR;
3353 ELSE
3354 push_eval;
3355 RETURN;
3356 END IF;
3357 END IF;
3358 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3359 hz_utility_v2pub.debug(p_message=>'Party Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3360 hz_utility_v2pub.debug(p_message=>'l_party_id '||l_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3361 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3362 END IF;
3363 END LOOP;
3364 CLOSE l_party_cur;
3365 ROLLBACK to eval_start;
3366 END;
3367 PROCEDURE open_person_contact_cursor(
3368 p_contains_str VARCHAR2,
3369 p_search_ctx_id NUMBER,
3370 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
3371 BEGIN
3372 OPEN x_cursor FOR
3373 SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID
3374 FROM HZ_STAGED_CONTACTS stage
3375 WHERE contains( concat_col, p_contains_str)>0
3376 AND ORG_CONTACT_ID in (
3377 SELECT /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/
3378 org_contact_id
3379 from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc
3380 where d.party_id = r.subject_id
3381 and oc.party_relationship_id = r.relationship_id
3382 and d.search_context_id = p_search_ctx_id);
3383 exception
3384 when others then
3385 if (instrb(SQLERRM,'DRG-51030')>0) then
3386 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
3387 FND_MSG_PUB.ADD;
3388 RAISE FND_API.G_EXC_ERROR;
3389 elsif (instrb(SQLERRM,'DRG-50943')>0) then
3390 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
3391 FND_MSG_PUB.ADD;
3392 RAISE FND_API.G_EXC_ERROR;
3393 else
3394 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3395 end if;
3396 END;
3397
3398 /** Private procedure to acquire and score at party site level ***/
3399 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
3400 l_party_id_idx NUMBER:=1;
3401 l_ctx_id NUMBER;
3402 h_ps_id HZ_PARTY_SEARCH.IDList;
3403 h_ps_party_id HZ_PARTY_SEARCH.IDList;
3404 h_ps_score HZ_PARTY_SEARCH.IDList;
3405 detcnt NUMBER := 1;
3406 l_person_id NUMBER;
3407 BEGIN
3408 SAVEPOINT eval_start;
3409 unset_person_party_type;
3410 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3411 l_ctx_id := l_search_ctx_id;
3412 FORALL I in 1..H_PARTY_ID.COUNT
3413 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3414 l_search_ctx_id,H_PARTY_ID(I));
3415 H_PARTY_ID.DELETE;
3416 H_PARTY_ID_LIST.DELETE;
3417 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3418 l_ctx_id := l_search_ctx_id;
3419 FORALL I in 1..H_PARTY_ID.COUNT
3420 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3421 l_search_ctx_id,H_PARTY_ID(I));
3422 l_party_id_idx := H_PARTY_ID.COUNT+1;
3423 ELSE
3424 l_party_id_idx := H_PARTY_ID.COUNT+1;
3425 l_ctx_id := NULL;
3426 END IF;
3427 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);
3428 LOOP
3429 FETCH l_party_site_cur INTO
3430 l_party_site_id, l_ps_party_id, l_ps_contact_id , l_TX4, l_TX11;
3431 EXIT WHEN l_party_site_cur%NOTFOUND;
3432 IF l_ctx_id IS NULL THEN
3433 l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);
3434 ELSE
3435 l_person_id := l_ps_party_id;
3436 END IF;
3437 IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3438 l_index := map_id(l_person_id);
3439 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX4,l_TX11);
3440 IF NOT H_SCORES.EXISTS(l_index) THEN
3441 IF l_ctx_id IS NULL THEN
3442 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);
3443 END IF;
3444 ELSE
3445 IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3446 H_SCORES(l_index).TOTAL_SCORE :=
3447 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3448 H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3449 END IF;
3450 END IF;
3451 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3452 H_PARTY_ID_LIST(l_index) := 1;
3453 H_PARTY_ID(l_party_id_idx) := l_person_id;
3454 l_party_id_idx:= l_party_id_idx+1;
3455 END IF;
3456 IF (l_party_id_idx-1)>l_max_thresh THEN
3457 CLOSE l_party_site_cur;
3458 IF p_index>1 THEN
3459 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3460 hz_utility_v2pub.debug(p_message=>'In eval party site level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3461 END IF;
3462 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3463 FND_MSG_PUB.ADD;
3464 RAISE FND_API.G_EXC_ERROR;
3465 ELSE
3466 push_eval;
3467 RETURN;
3468 END IF;
3469 END IF;
3470 IF p_ins_details = 'Y' THEN
3471 h_ps_id(detcnt) := l_party_site_id;
3472 h_ps_party_id(detcnt) := l_person_id;
3473 IF (p_emax_score > 0) THEN
3474 h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
3475 ELSE
3476 h_ps_score(detcnt) := 0;
3477 END IF;
3478 detcnt := detcnt +1;
3479 END IF;
3480 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3481 hz_utility_v2pub.debug(p_message=>'Party Site Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3482 hz_utility_v2pub.debug(p_message=>'l_party_site_id '||l_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3483 hz_utility_v2pub.debug(p_message=>'l_ps_party_id '||l_person_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3484 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3485 END IF;
3486 END IF;
3487 END LOOP;
3488 CLOSE l_party_site_cur;
3489 ROLLBACK to eval_start;
3490 IF p_ins_details = 'Y' THEN
3491 FORALL I in 1..h_ps_id.COUNT
3492 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
3493 l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
3494 END IF;
3495 END;
3496
3497 /** Private procedure to acquire and score at party site level ***/
3498 PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
3499 l_party_id_idx NUMBER:=1;
3500 l_ctx_id NUMBER;
3501 h_ct_id HZ_PARTY_SEARCH.IDList;
3502 h_ct_party_id HZ_PARTY_SEARCH.IDList;
3503 h_ct_score HZ_PARTY_SEARCH.IDList;
3504 detcnt NUMBER := 1;
3505 l_person_id NUMBER;
3506 BEGIN
3507 SAVEPOINT eval_start;
3508 l_ctx_id := l_search_ctx_id;
3509 unset_person_party_type;
3510 FORALL I in 1..H_PARTY_ID.COUNT
3511 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3512 l_search_ctx_id,H_PARTY_ID(I));
3513 l_party_id_idx := H_PARTY_ID.COUNT+1;
3514 open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);
3515 LOOP
3516 FETCH l_contact_cur INTO
3517 l_org_contact_id, l_ct_party_id ;
3518 EXIT WHEN l_contact_cur%NOTFOUND;
3519 l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);
3520 l_index := map_id(l_person_id);
3521 IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3522 l_score := GET_CONTACTS_SCORE(l_match_idx);
3523 IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
3524 H_SCORES(l_index).TOTAL_SCORE :=
3525 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
3526 H_SCORES(l_index).CONTACT_SCORE := l_score;
3527 END IF;
3528 END IF;
3529 IF p_ins_details = 'Y' THEN
3530 h_ct_id(detcnt) := l_org_contact_id;
3531 h_ct_party_id(detcnt) := l_person_id;
3532 IF (p_emax_score > 0) THEN
3533 h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
3534 ELSE
3535 h_ct_score(detcnt) := 0;
3536 END IF;
3537 detcnt := detcnt +1;
3538 END IF;
3539 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3540 hz_utility_v2pub.debug(p_message=>'Contact Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3541 hz_utility_v2pub.debug(p_message=>'l_org_contact_id '||l_org_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3542 hz_utility_v2pub.debug(p_message=>'l_ct_party_id '||l_person_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3543 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3544 END IF;
3545 END LOOP;
3546 CLOSE l_contact_cur;
3547 ROLLBACK to eval_start;
3548 IF p_ins_details = 'Y' THEN
3549 FORALL I in 1..h_ct_id.COUNT
3550 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
3551 l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
3552 END IF;
3553 END;
3554
3555 /** Private procedure to acquire and score at contact point level ***/
3556 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
3557 l_party_id_idx NUMBER:=1;
3558 l_ctx_id NUMBER;
3559 h_cpt_id HZ_PARTY_SEARCH.IDList;
3560 h_cpt_party_id HZ_PARTY_SEARCH.IDList;
3561 h_cpt_score HZ_PARTY_SEARCH.IDList;
3562 detcnt NUMBER := 1;
3563 l_person_id NUMBER;
3564 is_a_match VARCHAR2(1) := 'Y';
3565 l_cpt_flag VARCHAR2(1) := 'N';
3566 BEGIN
3567 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3568 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3569 END IF;
3570 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3571 hz_utility_v2pub.debug(p_message=>'calling the procedure eval_cpt_level - from find_persons',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3572 END IF;
3573 SAVEPOINT eval_start;
3574 unset_person_party_type;
3575 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3576 l_ctx_id := l_search_ctx_id;
3577 FORALL I in 1..H_PARTY_ID.COUNT
3578 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3579 l_search_ctx_id,H_PARTY_ID(I));
3580 H_PARTY_ID.DELETE;
3581 H_PARTY_ID_LIST.DELETE;
3582 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3583 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3584 hz_utility_v2pub.debug(p_message=>'Match rule is AND and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3585 END IF;
3586 l_ctx_id := l_search_ctx_id;
3587 FORALL I in 1..H_PARTY_ID.COUNT
3588 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3589 l_search_ctx_id,H_PARTY_ID(I));
3590 l_party_id_idx := H_PARTY_ID.COUNT+1;
3591 ELSE
3592 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3593 hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3594 END IF;
3595 l_ctx_id := NULL;
3596 l_party_id_idx := H_PARTY_ID.COUNT+1;
3597 END IF;
3598 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3599 hz_utility_v2pub.debug(p_message=>'====== START LOOPING THROUGH WHAT IS RETURNED BY OPEN_CONTACT_PT_CURSOR =======',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3600 END IF;
3601 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);
3602 LOOP
3603 FETCH l_contact_pt_cur INTO
3604 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id , l_TX2;
3605 EXIT WHEN l_contact_pt_cur%NOTFOUND;
3606 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3607 hz_utility_v2pub.debug(p_message=>' ------------------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3608 END IF;
3609 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3610 hz_utility_v2pub.debug(p_message=>'Processing party_id - '||l_cpt_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3611 END IF;
3612 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3613 hz_utility_v2pub.debug(p_message=>'contact point type - '||l_cpt_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3614 END IF;
3615 IF l_ctx_id IS NULL THEN
3616 l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);
3617 ELSE
3618 l_person_id := l_cpt_party_id;
3619 END IF;
3620 IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3621 l_index := map_id(l_person_id);
3622 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
3623 IF NOT H_SCORES.EXISTS(l_index) THEN
3624 IF l_ctx_id IS NULL THEN
3625 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);
3626 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3627 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3628 hz_utility_v2pub.debug(p_message=>'Processing first time for this party',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3629 END IF;
3630 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3631 hz_utility_v2pub.debug(p_message=>'l_index is - '||l_index,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3632 END IF;
3633 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3634 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).cpt_type_match(l_cpt_type) is - '||H_SCORES(l_index).cpt_type_match(l_cpt_type),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3635 END IF;
3636 END IF;
3637 ELSE
3638 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3639 hz_utility_v2pub.debug(p_message=>'Processing Second time for this party',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3640 END IF;
3641 IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
3642 IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
3643 H_SCORES(l_index).TOTAL_SCORE :=
3644 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;
3645 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;
3646 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3647 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3648 hz_utility_v2pub.debug(p_message=>'Passed in score greater than existing score',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3649 END IF;
3650 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3651 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).TOTAL_SCORE is - '||H_SCORES(l_index).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3652 END IF;
3653 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3654 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).CONTACT_POINT_SCORE is - '||H_SCORES(l_index).CONTACT_POINT_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3655 END IF;
3656 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3657 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).cpt_type_match(l_cpt_type) is - '||H_SCORES(l_index).cpt_type_match(l_cpt_type),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3658 END IF;
3659 END IF;
3660 ELSE
3661 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3662 hz_utility_v2pub.debug(p_message=>'Passed in score less than or equal to the existing score ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3663 END IF;
3664 H_SCORES(l_index).TOTAL_SCORE :=
3665 H_SCORES(l_index).TOTAL_SCORE+l_score;
3666 H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3667 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3668 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3669 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).TOTAL_SCORE is - '||H_SCORES(l_index).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3670 END IF;
3671 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3672 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).CONTACT_POINT_SCORE is - '||H_SCORES(l_index).CONTACT_POINT_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3673 END IF;
3674 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3675 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).cpt_type_match(l_cpt_type) is - '||H_SCORES(l_index).cpt_type_match(l_cpt_type),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3676 END IF;
3677 END IF;
3678 END IF;
3679 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3680 hz_utility_v2pub.debug(p_message=>'call type is - '||p_call_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3681 END IF;
3682 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3683 hz_utility_v2pub.debug(p_message=>'match string is - '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3684 END IF;
3685 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3686 -- If rule is match all
3687 IF l_match_str = ' AND ' THEN
3688 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3689 hz_utility_v2pub.debug(p_message=>'Match String is - AND ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3690 END IF;
3691 IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3692 is_a_match := 'Y';
3693 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3694 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3695 END IF;
3696 ELSE
3697 is_a_match := 'N';
3698 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3699 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3700 END IF;
3701 END IF;
3702 -- Else it is construed as a match anyway
3703 ELSE
3704 is_a_match := 'Y';
3705 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3706 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3707 END IF;
3708 END IF;
3709 IF (is_a_match='Y') THEN
3710 H_PARTY_ID_LIST(l_index) := 1;
3711 H_PARTY_ID(l_party_id_idx) := l_person_id;
3712 l_party_id_idx:= l_party_id_idx+1;
3713 end if;
3714 END IF;
3715 IF (l_party_id_idx-1)>l_max_thresh THEN
3716 CLOSE l_contact_pt_cur;
3717 IF p_index>1 THEN
3718 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3719 hz_utility_v2pub.debug(p_message=>'In eval contact point level number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3720 END IF;
3721 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3722 FND_MSG_PUB.ADD;
3723 RAISE FND_API.G_EXC_ERROR;
3724 ELSE
3725 push_eval;
3726 RETURN;
3727 END IF;
3728 END IF;
3729 IF p_ins_details = 'Y' THEN
3730 -- If rule is match all
3731 IF l_match_str = ' AND ' THEN
3732 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3733 hz_utility_v2pub.debug(p_message=>'Match String is - AND ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3734 END IF;
3735 IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3736 is_a_match := 'Y';
3737 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3738 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3739 END IF;
3740 ELSE
3741 is_a_match := 'N';
3742 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3743 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3744 END IF;
3745 END IF;
3746 -- Else it is construed as a match anyway
3747 ELSE
3748 is_a_match := 'Y';
3749 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3750 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3751 END IF;
3752 END IF;
3753 IF (is_a_match='Y') THEN
3754 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3755 hz_utility_v2pub.debug(p_message=>'Inserting into the final array, the person_id - '||l_person_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3756 END IF;
3757 FOR I IN 1..h_cpt_id.COUNT LOOP
3758 IF h_cpt_id(I)=l_contact_pt_id THEN
3759 l_cpt_flag := 'Y';
3760 END IF;
3761 END LOOP;
3762 IF l_cpt_flag = 'Y' THEN
3763 NULL;
3764 ELSE
3765 h_cpt_id(detcnt) := l_contact_pt_id;
3766 h_cpt_party_id(detcnt) := l_person_id;
3767 IF (p_emax_score > 0) THEN
3768 h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
3769 ELSE
3770 h_cpt_score(detcnt) := 0;
3771 END IF;
3772 detcnt := detcnt +1;
3773 END IF;
3774 end if;
3775 END IF;
3776 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3777 hz_utility_v2pub.debug(p_message=>'Contact pt Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3778 hz_utility_v2pub.debug(p_message=>'l_contact_pt_id '||l_contact_pt_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3779 hz_utility_v2pub.debug(p_message=>'l_cpt_party_id '||l_person_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3780 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3781 END IF;
3782 END IF;
3783 END LOOP;
3784 CLOSE l_contact_pt_cur;
3785 ROLLBACK to eval_start;
3786 IF p_ins_details = 'Y' THEN
3787 FORALL I in 1..h_cpt_id.COUNT
3788 INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
3789 l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
3790 END IF;
3791 END;
3792
3793 /** Private procedure to call the eval procedure at each entity in the correct order ***/
3794 PROCEDURE do_eval (p_index NUMBER) IS
3795 l_ctx_id NUMBER;
3796 l_threshold NUMBER;
3797 other_acq_criteria_exists BOOLEAN;
3798 acq_cnt NUMBER;
3799 BEGIN
3800 IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
3801 l_threshold := 474;
3802 other_acq_criteria_exists := TRUE ;
3803 --check if acquisition criteria exists for any other entity
3804 IF l_party_contains_str IS NOT NULL THEN
3805 acq_cnt := 1;
3806 END IF;
3807 IF l_party_site_contains_str IS NOT NULL THEN
3808 acq_cnt := acq_cnt+1;
3809 END IF;
3810 IF l_contact_contains_str IS NOT NULL THEN
3811 acq_cnt := acq_cnt+1;
3812 END IF;
3813 IF l_contact_pt_contains_str IS NOT NULL THEN
3814 acq_cnt := acq_cnt+1;
3815 END IF;
3816 IF acq_cnt>1 THEN
3817 other_acq_criteria_exists := TRUE;
3818 ELSE
3819 other_acq_criteria_exists := FALSE;
3820 END IF;
3821 hz_utility_v2pub.debug(p_message=>'count of entities having acquisition attributes = '||acq_cnt,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3822 hz_utility_v2pub.debug(p_message=>'call_max_score(p_index) = '||call_max_score(p_index),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3823 hz_utility_v2pub.debug(p_message=>'l_threshold = '||l_threshold,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3824 IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
3825 IF ( call_max_score(p_index) < l_threshold) THEN
3826 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3827 hz_utility_v2pub.debug(p_message=>'When max score of entity level<l_threshold, do not evaluate ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3828 END IF;
3829 RETURN;
3830 ELSE
3831 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3832 hz_utility_v2pub.debug(p_message=>'In do eval number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3833 END IF;
3834 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3835 FND_MSG_PUB.ADD;
3836 RAISE FND_API.G_EXC_ERROR;
3837 END IF;
3838 ELSE
3839 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3840 hz_utility_v2pub.debug(p_message=>'In do eval number of matches found exceeded threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3841 END IF;
3842 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3843 FND_MSG_PUB.ADD;
3844 RAISE FND_API.G_EXC_ERROR;
3845 END IF;
3846 END IF;
3847 IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
3848 eval_party_level(l_party_contains_str,call_type(p_index), p_index);
3849 ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
3850 eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3851 ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
3852 eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3853 END IF;
3854 END;
3855 /************ End of find_persons private procedures **********/
3856
3857 BEGIN
3858
3859 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3860 hz_utility_v2pub.debug(p_message=>'find_persons(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
3861 END IF;
3862 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3863 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3864 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3865 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3866 END IF;
3867 -- ************************************
3868 -- STEP 1. Initialization and error checks
3869
3870 l_match_str := ' AND ';
3871 IF p_match_type = 'AND' THEN
3872 l_match_str := ' AND ';
3873 ELSIF p_match_type = 'OR' THEN
3874 l_match_str := ' OR ';
3875 END IF;
3876 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);
3877 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
3878
3879 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
3880 IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
3881 g_score_until_thresh := true;
3882 ELSE
3883 g_score_until_thresh := false;
3884 END IF;
3885 -- ************************************************************
3886 -- STEP 2. Setup of intermedia query strings for Acquisition query
3887 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
3888 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
3889 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
3890 l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);
3891 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3892
3893 -- Setup Search Context ID
3894 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3895 x_search_ctx_id := l_search_ctx_id;
3896
3897 IF l_party_contains_str IS NULL THEN
3898 defpt := 1;
3899 END IF;
3900 IF l_party_site_contains_str IS NULL THEN
3901 defps := 1;
3902 END IF;
3903 IF l_contact_contains_str IS NULL THEN
3904 defct := 1;
3905 END IF;
3906 IF l_contact_pt_contains_str IS NULL THEN
3907 defcpt := 1;
3908 END IF;
3909
3910 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3911 hz_utility_v2pub.debug(p_message=>'l_match_str '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3912 hz_utility_v2pub.debug(p_message=>'l_party_contains_str '||l_party_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3913 hz_utility_v2pub.debug(p_message=>'l_party_site_contains_str '||l_party_site_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3914 hz_utility_v2pub.debug(p_message=>'l_contact_contains_str '||l_contact_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3915 hz_utility_v2pub.debug(p_message=>'l_contact_pt_contains_str '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3916 hz_utility_v2pub.debug(p_message=>'l_search_ctx_id '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3917 END IF;
3918 FOR I in 1..5 LOOP
3919 do_eval(I);
3920 END LOOP;
3921 IF l_contact_contains_str IS NOT NULL THEN
3922 eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);
3923 END IF;
3924 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3925 hz_utility_v2pub.debug(p_message=>'Evaluating Matches. Threshold : 60 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3926 END IF;
3927 x_num_matches := 0;
3928 l_num_eval := 0;
3929 IF l_match_str = ' OR ' THEN
3930 l_party_id := H_SCORES.FIRST;
3931 ELSE
3932 l_party_id := H_PARTY_ID_LIST.FIRST;
3933 END IF;
3934 WHILE l_party_id IS NOT NULL LOOP
3935 l_num_eval:= l_num_eval+1;
3936 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3937 hz_utility_v2pub.debug(p_message=>'Match Party ID '||H_SCORES(l_party_id).PARTY_ID,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3938 hz_utility_v2pub.debug(p_message=>'Score '||H_SCORES(l_party_id).TOTAL_SCORE,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3939 END IF;
3940 IF H_SCORES(l_party_id).TOTAL_SCORE>=474 THEN
3941 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
3942 VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,round((H_SCORES(l_party_id).TOTAL_SCORE/790)*100));
3943 x_num_matches := x_num_matches+1;
3944 END IF;
3945 IF l_match_str = ' OR ' THEN
3946 l_party_id:=H_SCORES.NEXT(l_party_id);
3947 ELSE
3948 l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3949 END IF;
3950 END LOOP;
3951 HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3952 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3953 hz_utility_v2pub.debug(p_message=>'find_persons(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
3954 END IF;
3955 EXCEPTION
3956 WHEN L_RETURN_IMM_EXC THEN
3957 RETURN;
3958 WHEN FND_API.G_EXC_ERROR THEN
3959 RAISE FND_API.G_EXC_ERROR;
3960 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3961 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3962 WHEN OTHERS THEN
3963 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3964 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_persons');
3965 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3966 FND_MSG_PUB.ADD;
3967 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3968 END find_persons;
3969
3970 PROCEDURE find_persons (
3971 p_rule_id IN NUMBER,
3972 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
3973 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
3974 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
3975 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
3976 p_restrict_sql IN VARCHAR2,
3977 p_match_type IN VARCHAR2,
3978 p_search_merged IN VARCHAR2,
3979 p_ins_details IN VARCHAR2,
3980 x_search_ctx_id OUT NUMBER,
3981 x_num_matches OUT NUMBER
3982 ) IS
3983
3984 BEGIN
3985 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);
3986 END;
3987 PROCEDURE find_party_details (
3988 p_rule_id IN NUMBER,
3989 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
3990 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
3991 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
3992 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
3993 p_restrict_sql IN VARCHAR2,
3994 p_match_type IN VARCHAR2,
3995 p_search_merged IN VARCHAR2,
3996 x_search_ctx_id OUT NUMBER,
3997 x_num_matches OUT NUMBER
3998 ) IS
3999
4000 BEGIN
4001 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4002 hz_utility_v2pub.debug(p_message=>'find_party_details(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4003 END IF;
4004 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4005 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4006 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4007 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4008 hz_utility_v2pub.debug(p_message=>'p_search_merged '||p_search_merged,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4009 END IF;
4010 find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,
4011 p_restrict_sql,p_match_type,p_search_merged,null,null, null,'Y',
4012 x_search_ctx_id,x_num_matches);
4013 DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
4014 AND NOT EXISTS
4015 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);
4016 DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
4017 AND NOT EXISTS
4018 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);
4019 DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
4020 AND NOT EXISTS
4021 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);
4022 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4023 hz_utility_v2pub.debug(p_message=>'find_party_details(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4024 END IF;
4025 EXCEPTION
4026 WHEN FND_API.G_EXC_ERROR THEN
4027 RAISE FND_API.G_EXC_ERROR;
4028 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4029 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4030 WHEN OTHERS THEN
4031 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4032 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_party_details');
4033 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4034 FND_MSG_PUB.ADD;
4035 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4036 END find_party_details;
4037
4038 PROCEDURE find_duplicate_parties (
4039 p_rule_id IN NUMBER,
4040 p_party_id IN NUMBER,
4041 p_restrict_sql IN VARCHAR2,
4042 p_match_type IN VARCHAR2,
4043 p_dup_batch_id IN NUMBER,
4044 p_search_merged IN VARCHAR2,
4045 x_dup_set_id OUT NUMBER,
4046 x_search_ctx_id OUT NUMBER,
4047 x_num_matches OUT NUMBER
4048 ) IS
4049 l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4050 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4051 l_contact_list HZ_PARTY_SEARCH.contact_list;
4052 l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4053 l_match_idx NUMBER;
4054
4055 --Fix for bug 4417124
4056 l_use_contact_addr_info BOOLEAN := TRUE;
4057 l_use_contact_cpt_info BOOLEAN := TRUE;
4058 l_use_contact_addr_flag VARCHAR2(1) := 'Y';
4059 l_use_contact_cpt_flag VARCHAR2(1) := 'Y';
4060
4061 BEGIN
4062
4063 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4064 hz_utility_v2pub.debug(p_message=>'find_duplicate_parties(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4065 END IF;
4066 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4067 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4068 hz_utility_v2pub.debug(p_message=>'p_party_id '||p_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4069 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4070 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4071 hz_utility_v2pub.debug(p_message=>'p_dup_batch_id '||p_dup_batch_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4072 hz_utility_v2pub.debug(p_message=>'p_search_merged '||p_search_merged,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4073 END IF;
4074
4075 --Fix for bug 4417124
4076
4077 SELECT use_contact_addr_flag, use_contact_cpt_flag
4078 INTO l_use_contact_addr_flag, l_use_contact_cpt_flag
4079 FROM hz_match_rules_b
4080 WHERE match_rule_id = 238;
4081
4082 IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
4083 l_use_contact_addr_info := FALSE;
4084 END IF;
4085
4086 IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
4087 l_use_contact_cpt_info := FALSE;
4088 END IF;
4089
4090 --End fix for bug 4417124
4091
4092 get_party_for_search(
4093 p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);
4094
4095 IF NOT check_prim_cond (l_party_rec,
4096 l_party_site_list,
4097 l_contact_list,
4098 l_cpt_list) THEN
4099 x_dup_set_id:=NULL;
4100 x_search_ctx_id:=NULL;
4101 x_num_matches:=0;
4102 RETURN;
4103 END IF;
4104 x_dup_set_id := NULL;
4105 IF p_dup_batch_id IS NOT NULL THEN
4106 SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;
4107 END IF;
4108
4109 --Fix for bug 4417124
4110 IF l_party_rec.PARTY_TYPE = 'PERSON' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN
4111 find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4112 p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4113 x_search_ctx_id,x_num_matches);
4114 ELSE
4115 find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4116 p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4117 x_search_ctx_id,x_num_matches);
4118 END IF;
4119
4120 IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN
4121 INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,
4122 STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,
4123 LAST_UPDATE_DATE, LAST_UPDATED_BY)
4124 VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, 'SYSBATCH',
4125 'PARTY_MERGE', hz_utility_pub.created_by, hz_utility_pub.creation_date,
4126 hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,
4127 hz_utility_pub.user_id);
4128
4129 INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
4130 MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
4131 LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID)
4132 VALUES (p_party_id,x_dup_set_id,0,0,
4133 'Y',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,
4134 hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,
4135 hz_utility_pub.user_id,p_dup_batch_id);
4136 ELSE
4137 x_dup_set_id := NULL;
4138 END IF;
4139 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4140 hz_utility_v2pub.debug(p_message=>'find_duplicate_parties(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4141 END IF;
4142 EXCEPTION
4143 WHEN FND_API.G_EXC_ERROR THEN
4144 RAISE FND_API.G_EXC_ERROR;
4145 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4146 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4147 WHEN OTHERS THEN
4148 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4149 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_duplicate_parties');
4150 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4151 FND_MSG_PUB.ADD;
4152 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4153 END find_duplicate_parties;
4154
4155 PROCEDURE find_duplicate_party_sites (
4156 p_rule_id IN NUMBER,
4157 p_party_site_id IN NUMBER,
4158 p_party_id IN NUMBER,
4159 p_restrict_sql IN VARCHAR2,
4160 p_match_type IN VARCHAR2,
4161 x_search_ctx_id OUT NUMBER,
4162 x_num_matches OUT NUMBER
4163 ) IS
4164
4165 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4166 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4167 l_contact_list HZ_PARTY_SEARCH.contact_list;
4168 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4169 contact_point_ids HZ_PARTY_SEARCH.IDList;
4170 p_party_site_list HZ_PARTY_SEARCH.IDList;
4171 p_contact_ids HZ_PARTY_SEARCH.IDList;
4172 l_match_idx NUMBER;
4173 cursor get_cpts_for_party_sites is select contact_point_id
4174 from hz_contact_points
4175 where owner_table_name = 'HZ_PARTY_SITES'
4176 and primary_flag='Y'
4177 and owner_table_id = p_party_site_id;
4178 BEGIN
4179 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4180 hz_utility_v2pub.debug(p_message=>'find_duplicate_party_sites(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4181 END IF;
4182 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4183 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4184 hz_utility_v2pub.debug(p_message=>'p_party_site_id '||p_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4185 hz_utility_v2pub.debug(p_message=>'p_party_id '||p_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4186 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4187 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4188 END IF;
4189 p_party_site_list(1) := p_party_site_id;
4190 OPEN get_cpts_for_party_sites;
4191 LOOP
4192 FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids;
4193 EXIT WHEN get_cpts_for_party_sites%NOTFOUND;
4194 END LOOP;
4195 CLOSE get_cpts_for_party_sites;
4196
4197 get_search_criteria (
4198 null,
4199 p_party_site_list,
4200 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4201 contact_point_ids,
4202 l_party_search_rec,
4203 l_party_site_list,
4204 l_contact_list,
4205 l_contact_point_list) ;
4206 IF NOT check_prim_cond (l_party_search_rec,
4207 l_party_site_list,
4208 l_contact_list,
4209 l_contact_point_list) THEN
4210 x_search_ctx_id:=NULL;
4211 x_num_matches:=0;
4212 RETURN;
4213 END IF;
4214
4215 get_matching_party_sites (p_rule_id,
4216 p_party_id,
4217 l_party_site_list,
4218 l_contact_point_list,
4219 p_restrict_sql,
4220 p_match_type,
4221 p_party_site_id,
4222 x_search_ctx_id,
4223 x_num_matches);
4224 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4225 hz_utility_v2pub.debug(p_message=>'find_duplicate_party_sites(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4226 END IF;
4227 EXCEPTION
4228 WHEN FND_API.G_EXC_ERROR THEN
4229 RAISE FND_API.G_EXC_ERROR;
4230 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4231 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4232 WHEN OTHERS THEN
4233 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4234 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_duplicate_party_sites');
4235 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4236 FND_MSG_PUB.ADD;
4237 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4238 END find_duplicate_party_sites;
4239
4240 PROCEDURE find_duplicate_contacts (
4241 p_rule_id IN NUMBER,
4242 p_org_contact_id IN NUMBER,
4243 p_party_id IN NUMBER,
4244 p_restrict_sql IN VARCHAR2,
4245 p_match_type IN VARCHAR2,
4246 x_search_ctx_id OUT NUMBER,
4247 x_num_matches OUT NUMBER
4248 ) IS
4249
4250 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4251 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4252 l_contact_list HZ_PARTY_SEARCH.contact_list;
4253 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4254 contact_point_ids HZ_PARTY_SEARCH.IDList;
4255 p_party_site_list HZ_PARTY_SEARCH.IDList;
4256 p_contact_ids HZ_PARTY_SEARCH.IDList;
4257 l_match_idx NUMBER;
4258 cursor get_cpt_for_contact_id is select contact_point_id
4259 from hz_org_contacts a, hz_relationships b, hz_contact_points c
4260 where a.party_relationship_id = b.relationship_id
4261 and c.owner_table_name = 'HZ_PARTIES'
4262 and c.primary_flag='Y'
4263 and c.owner_table_id = b.party_id
4264 and b.directional_flag = 'F'
4265 and a.org_contact_id = p_org_contact_id;
4266 BEGIN
4267 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4268 hz_utility_v2pub.debug(p_message=>'find_duplicate_contacts(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4269 END IF;
4270 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4271 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4272 hz_utility_v2pub.debug(p_message=>'p_org_contact_id '||p_org_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4273 hz_utility_v2pub.debug(p_message=>'p_party_id '||p_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4274 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4275 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4276 END IF;
4277 p_contact_ids(1) := p_org_contact_id;
4278 OPEN get_cpt_for_contact_id;
4279 LOOP
4280 FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids;
4281 EXIT WHEN get_cpt_for_contact_id%NOTFOUND;
4282 END LOOP;
4283 CLOSE get_cpt_for_contact_id;
4284
4285 get_search_criteria (
4286 null,
4287 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4288 p_contact_ids,
4289 contact_point_ids,
4290 l_party_search_rec,
4291 l_party_site_list,
4292 l_contact_list,
4293 l_contact_point_list) ;
4294 IF NOT check_prim_cond (l_party_search_rec,
4295 l_party_site_list,
4296 l_contact_list,
4297 l_contact_point_list) THEN
4298 x_search_ctx_id:=NULL;
4299 x_num_matches:=0;
4300 RETURN;
4301 END IF;
4302
4303 get_matching_contacts (p_rule_id,
4304 p_party_id,
4305 l_contact_list,
4306 l_contact_point_list,
4307 p_restrict_sql,
4308 p_match_type,
4309 p_org_contact_id,
4310 x_search_ctx_id,
4311 x_num_matches);
4312
4313 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4314 hz_utility_v2pub.debug(p_message=>'find_duplicate_contacts(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4315 END IF;
4316 EXCEPTION
4317 WHEN FND_API.G_EXC_ERROR THEN
4318 RAISE FND_API.G_EXC_ERROR;
4319 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4320 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4321 WHEN OTHERS THEN
4322 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4323 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_duplicate_contacts');
4324 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4325 FND_MSG_PUB.ADD;
4326 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4327 END find_duplicate_contacts;
4328
4329 PROCEDURE find_duplicate_contact_points (
4330 p_rule_id IN NUMBER,
4331 p_contact_point_id IN NUMBER,
4332 p_party_id IN NUMBER,
4333 p_restrict_sql IN VARCHAR2,
4334 p_match_type IN VARCHAR2,
4335 x_search_ctx_id OUT NUMBER,
4336 x_num_matches OUT NUMBER
4337 ) IS
4338 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4339 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4340 l_contact_list HZ_PARTY_SEARCH.contact_list;
4341 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4342 contact_point_ids HZ_PARTY_SEARCH.IDList;
4343 p_party_site_list HZ_PARTY_SEARCH.IDList;
4344 p_contact_ids HZ_PARTY_SEARCH.IDList;
4345 l_match_idx NUMBER;
4346
4347 BEGIN
4348 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4349 hz_utility_v2pub.debug(p_message=>'find_duplicate_contact_points(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4350 END IF;
4351 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4352 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4353 hz_utility_v2pub.debug(p_message=>'p_contact_point_id '||p_contact_point_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4354 hz_utility_v2pub.debug(p_message=>'p_party_id '||p_party_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4355 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4356 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4357 END IF;
4358 contact_point_ids(1) := p_contact_point_id;
4359 get_search_criteria (
4360 null,
4361 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4362 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4363 contact_point_ids,
4364 l_party_search_rec,
4365 l_party_site_list,
4366 l_contact_list,
4367 l_contact_point_list );
4368
4369 IF NOT check_prim_cond (l_party_search_rec,
4370 l_party_site_list,
4371 l_contact_list,
4372 l_contact_point_list) THEN
4373 x_search_ctx_id:=NULL;
4374 x_num_matches:=0;
4375 RETURN;
4376 END IF;
4377 get_matching_contact_points (
4378 p_rule_id,
4379 p_party_id,
4380 l_contact_point_list,
4381 p_restrict_sql,
4382 p_match_type,
4383 p_contact_point_id,
4384 x_search_ctx_id,
4385 x_num_matches );
4386 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4387 hz_utility_v2pub.debug(p_message=>'find_duplicate_contact_points(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4388 END IF;
4389 EXCEPTION
4390 WHEN FND_API.G_EXC_ERROR THEN
4391 RAISE FND_API.G_EXC_ERROR;
4392 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4393 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4394 WHEN OTHERS THEN
4395 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4396 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.find_duplicate_contact_points');
4397 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4398 FND_MSG_PUB.ADD;
4399 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4400 END find_duplicate_contact_points;
4401
4402 PROCEDURE find_parties_dynamic (
4403 p_rule_id IN NUMBER,
4404 p_attrib_id1 IN NUMBER,
4405 p_attrib_id2 IN NUMBER,
4406 p_attrib_id3 IN NUMBER,
4407 p_attrib_id4 IN NUMBER,
4408 p_attrib_id5 IN NUMBER,
4409 p_attrib_id6 IN NUMBER,
4410 p_attrib_id7 IN NUMBER,
4411 p_attrib_id8 IN NUMBER,
4412 p_attrib_id9 IN NUMBER,
4413 p_attrib_id10 IN NUMBER,
4414 p_attrib_id11 IN NUMBER,
4415 p_attrib_id12 IN NUMBER,
4416 p_attrib_id13 IN NUMBER,
4417 p_attrib_id14 IN NUMBER,
4418 p_attrib_id15 IN NUMBER,
4419 p_attrib_id16 IN NUMBER,
4420 p_attrib_id17 IN NUMBER,
4421 p_attrib_id18 IN NUMBER,
4422 p_attrib_id19 IN NUMBER,
4423 p_attrib_id20 IN NUMBER,
4424 p_attrib_val1 IN VARCHAR2,
4425 p_attrib_val2 IN VARCHAR2,
4426 p_attrib_val3 IN VARCHAR2,
4427 p_attrib_val4 IN VARCHAR2,
4428 p_attrib_val5 IN VARCHAR2,
4429 p_attrib_val6 IN VARCHAR2,
4430 p_attrib_val7 IN VARCHAR2,
4431 p_attrib_val8 IN VARCHAR2,
4432 p_attrib_val9 IN VARCHAR2,
4433 p_attrib_val10 IN VARCHAR2,
4434 p_attrib_val11 IN VARCHAR2,
4435 p_attrib_val12 IN VARCHAR2,
4436 p_attrib_val13 IN VARCHAR2,
4437 p_attrib_val14 IN VARCHAR2,
4438 p_attrib_val15 IN VARCHAR2,
4439 p_attrib_val16 IN VARCHAR2,
4440 p_attrib_val17 IN VARCHAR2,
4441 p_attrib_val18 IN VARCHAR2,
4442 p_attrib_val19 IN VARCHAR2,
4443 p_attrib_val20 IN VARCHAR2,
4444 p_restrict_sql IN VARCHAR2,
4445 p_match_type IN VARCHAR2,
4446 p_search_merged IN VARCHAR2,
4447 x_search_ctx_id OUT NUMBER,
4448 x_num_matches OUT NUMBER
4449 ) IS
4450 BEGIN
4451 call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,
4452 p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,
4453 p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,
4454 p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,
4455 p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,
4456 p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,
4457 p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,
4458 p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,
4459 p_restrict_sql,'FIND_PARTIES',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);
4460 END;
4461
4462 PROCEDURE call_api_dynamic (
4463 p_rule_id IN NUMBER,
4464 p_attrib_id1 IN NUMBER,
4465 p_attrib_id2 IN NUMBER,
4466 p_attrib_id3 IN NUMBER,
4467 p_attrib_id4 IN NUMBER,
4468 p_attrib_id5 IN NUMBER,
4469 p_attrib_id6 IN NUMBER,
4470 p_attrib_id7 IN NUMBER,
4471 p_attrib_id8 IN NUMBER,
4472 p_attrib_id9 IN NUMBER,
4473 p_attrib_id10 IN NUMBER,
4474 p_attrib_id11 IN NUMBER,
4475 p_attrib_id12 IN NUMBER,
4476 p_attrib_id13 IN NUMBER,
4477 p_attrib_id14 IN NUMBER,
4478 p_attrib_id15 IN NUMBER,
4479 p_attrib_id16 IN NUMBER,
4480 p_attrib_id17 IN NUMBER,
4481 p_attrib_id18 IN NUMBER,
4482 p_attrib_id19 IN NUMBER,
4483 p_attrib_id20 IN NUMBER,
4484 p_attrib_val1 IN VARCHAR2,
4485 p_attrib_val2 IN VARCHAR2,
4486 p_attrib_val3 IN VARCHAR2,
4487 p_attrib_val4 IN VARCHAR2,
4488 p_attrib_val5 IN VARCHAR2,
4489 p_attrib_val6 IN VARCHAR2,
4490 p_attrib_val7 IN VARCHAR2,
4491 p_attrib_val8 IN VARCHAR2,
4492 p_attrib_val9 IN VARCHAR2,
4493 p_attrib_val10 IN VARCHAR2,
4494 p_attrib_val11 IN VARCHAR2,
4495 p_attrib_val12 IN VARCHAR2,
4496 p_attrib_val13 IN VARCHAR2,
4497 p_attrib_val14 IN VARCHAR2,
4498 p_attrib_val15 IN VARCHAR2,
4499 p_attrib_val16 IN VARCHAR2,
4500 p_attrib_val17 IN VARCHAR2,
4501 p_attrib_val18 IN VARCHAR2,
4502 p_attrib_val19 IN VARCHAR2,
4503 p_attrib_val20 IN VARCHAR2,
4504 p_restrict_sql IN VARCHAR2,
4505 p_api_name IN VARCHAR2,
4506 p_match_type IN VARCHAR2,
4507 p_party_id IN NUMBER,
4508 p_search_merged IN VARCHAR2,
4509 x_search_ctx_id OUT NUMBER,
4510 x_num_matches OUT NUMBER
4511 ) IS
4512 TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
4513 l_match_idx NUMBER;
4514 AttrVals AttrList;
4515 l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4516 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4517 l_contact_list HZ_PARTY_SEARCH.contact_list;
4518 l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4519 l_dup_set_id NUMBER;
4520 l_idx NUMBER;
4521 l_cpt_type VARCHAR2(255);
4522 FIRST BOOLEAN := TRUE;
4523
4524 BEGIN
4525 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4526 hz_utility_v2pub.debug(p_message=>'call_api_dynamic(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4527 END IF;
4528
4529 IF p_attrib_id1 IS NOT NULL THEN
4530 AttrVals(p_attrib_id1):=p_attrib_val1;
4531 END IF;
4532 IF p_attrib_id2 IS NOT NULL THEN
4533 AttrVals(p_attrib_id2):=p_attrib_val2;
4534 END IF;
4535 IF p_attrib_id3 IS NOT NULL THEN
4536 AttrVals(p_attrib_id3):=p_attrib_val3;
4537 END IF;
4538 IF p_attrib_id4 IS NOT NULL THEN
4539 AttrVals(p_attrib_id4):=p_attrib_val4;
4540 END IF;
4541 IF p_attrib_id5 IS NOT NULL THEN
4542 AttrVals(p_attrib_id5):=p_attrib_val5;
4543 END IF;
4544 IF p_attrib_id6 IS NOT NULL THEN
4545 AttrVals(p_attrib_id6):=p_attrib_val6;
4546 END IF;
4547 IF p_attrib_id7 IS NOT NULL THEN
4548 AttrVals(p_attrib_id7):=p_attrib_val7;
4549 END IF;
4550 IF p_attrib_id8 IS NOT NULL THEN
4551 AttrVals(p_attrib_id8):=p_attrib_val8;
4552 END IF;
4553 IF p_attrib_id9 IS NOT NULL THEN
4554 AttrVals(p_attrib_id9):=p_attrib_val9;
4555 END IF;
4556 IF p_attrib_id10 IS NOT NULL THEN
4557 AttrVals(p_attrib_id10):=p_attrib_val10;
4558 END IF;
4559 IF p_attrib_id11 IS NOT NULL THEN
4560 AttrVals(p_attrib_id11):=p_attrib_val11;
4561 END IF;
4562 IF p_attrib_id12 IS NOT NULL THEN
4563 AttrVals(p_attrib_id12):=p_attrib_val12;
4564 END IF;
4565 IF p_attrib_id13 IS NOT NULL THEN
4566 AttrVals(p_attrib_id13):=p_attrib_val13;
4567 END IF;
4568 IF p_attrib_id14 IS NOT NULL THEN
4569 AttrVals(p_attrib_id14):=p_attrib_val14;
4570 END IF;
4571 IF p_attrib_id15 IS NOT NULL THEN
4572 AttrVals(p_attrib_id15):=p_attrib_val15;
4573 END IF;
4574 IF p_attrib_id16 IS NOT NULL THEN
4575 AttrVals(p_attrib_id16):=p_attrib_val16;
4576 END IF;
4577 IF p_attrib_id17 IS NOT NULL THEN
4578 AttrVals(p_attrib_id17):=p_attrib_val17;
4579 END IF;
4580 IF p_attrib_id18 IS NOT NULL THEN
4581 AttrVals(p_attrib_id18):=p_attrib_val18;
4582 END IF;
4583 IF p_attrib_id19 IS NOT NULL THEN
4584 AttrVals(p_attrib_id19):=p_attrib_val19;
4585 END IF;
4586 IF p_attrib_id20 IS NOT NULL THEN
4587 AttrVals(p_attrib_id20):=p_attrib_val20;
4588 END IF;
4589 IF AttrVals.EXISTS(8) THEN
4590 l_party_rec.PARTY_NAME:= AttrVals(8);
4591 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4592 hz_utility_v2pub.debug(p_message=>'l_party_rec.PARTY_NAME '||AttrVals(8),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4593 END IF;
4594 END IF;
4595
4596 IF AttrVals.EXISTS(19) THEN
4597 l_party_rec.JGZZ_FISCAL_CODE:= AttrVals(19);
4598 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4599 hz_utility_v2pub.debug(p_message=>'l_party_rec.JGZZ_FISCAL_CODE '||AttrVals(19),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4600 END IF;
4601 END IF;
4602
4603 IF AttrVals.EXISTS(20) THEN
4604 l_party_rec.SIC_CODE:= AttrVals(20);
4605 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4606 hz_utility_v2pub.debug(p_message=>'l_party_rec.SIC_CODE '||AttrVals(20),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4607 END IF;
4608 END IF;
4609
4610 IF AttrVals.EXISTS(27) THEN
4611 l_party_site_list(1).ADDRESS:= AttrVals(27);
4612 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4613 hz_utility_v2pub.debug(p_message=>'l_party_site_list(1).ADDRESS '||AttrVals(27),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4614 END IF;
4615 END IF;
4616
4617 IF AttrVals.EXISTS(30) THEN
4618 l_party_site_list(1).POSTAL_CODE:= AttrVals(30);
4619 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4620 hz_utility_v2pub.debug(p_message=>'l_party_site_list(1).POSTAL_CODE '||AttrVals(30),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4621 END IF;
4622 END IF;
4623
4624 IF AttrVals.EXISTS(45) THEN
4625 l_cpt_type := 'PHONE';
4626 FIRST := FALSE;
4627 FOR I in 1..l_cpt_list.COUNT LOOP
4628 IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
4629 l_cpt_list(I).PHONE_NUMBER:= AttrVals(45);
4630 FIRST := TRUE;
4631 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4632 hz_utility_v2pub.debug(p_message=>'l_cpt_list('||I||').CONTACT_POINT_TYPE '||l_cpt_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4633 hz_utility_v2pub.debug(p_message=>'l_cpt_list('||I||').PHONE_NUMBER '||AttrVals(45),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4634 END IF;
4635 END IF;
4636 END LOOP;
4637 IF not FIRST THEN
4638 l_idx := l_cpt_list.COUNT+1;
4639 l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
4640 l_cpt_list(l_idx).PHONE_NUMBER:= AttrVals(45);
4641 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4642 hz_utility_v2pub.debug(p_message=>'l_cpt_list('||l_idx||').CONTACT_POINT_TYPE '||l_cpt_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4643 hz_utility_v2pub.debug(p_message=>'l_cpt_list('||l_idx||').PHONE_NUMBER '||AttrVals(45),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4644 END IF;
4645 END IF;
4646 END IF;
4647
4648
4649 IF AttrVals.EXISTS(14) THEN
4650 l_party_rec.PARTY_TYPE:= AttrVals(14);
4651 END IF;
4652 IF upper(p_api_name) = 'FIND_PARTIES' THEN
4653 find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4654 p_restrict_sql,p_match_type,p_search_merged,NULL,NULL,NULL,'N',
4655 x_search_ctx_id,x_num_matches);
4656 ELSIF upper(p_api_name) = 'FIND_PARTY_DETAILS' THEN
4657 find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4658 p_restrict_sql,p_match_type,p_search_merged,
4659 x_search_ctx_id,x_num_matches);
4660 ELSIF upper(p_api_name) = 'FIND_PERSONS' THEN
4661 find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4662 p_restrict_sql,p_match_type,p_search_merged,'N',
4663 x_search_ctx_id,x_num_matches);
4664 ELSIF upper(p_api_name) = 'GET_MATCHING_PARTY_SITES' THEN
4665 get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,
4666 p_restrict_sql,p_match_type,NULL,
4667 x_search_ctx_id,x_num_matches);
4668 ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACTS' THEN
4669 get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,
4670 p_restrict_sql,p_match_type,NULL,
4671 x_search_ctx_id,x_num_matches);
4672 ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACT_POINTS' THEN
4673 get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,
4674 p_restrict_sql,p_match_type,NULL,
4675 x_search_ctx_id,x_num_matches);
4676 END IF;
4677 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4678 hz_utility_v2pub.debug(p_message=>'call_api_dynamic(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4679 END IF;
4680 EXCEPTION
4681 WHEN FND_API.G_EXC_ERROR THEN
4682 RAISE FND_API.G_EXC_ERROR;
4683 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4684 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4685 WHEN OTHERS THEN
4686 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4687 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.call_api_dynamic');
4688 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4689 FND_MSG_PUB.ADD;
4690 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4691 END call_api_dynamic;
4692
4693
4694 PROCEDURE get_matching_party_sites (
4695 p_rule_id IN NUMBER,
4696 p_party_id IN NUMBER,
4697 p_party_site_list IN HZ_PARTY_SEARCH.PARTY_SITE_LIST,
4698 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
4699 p_restrict_sql IN VARCHAR2,
4700 p_match_type IN VARCHAR2,
4701 p_dup_party_site_id IN NUMBER,
4702 x_search_ctx_id OUT NUMBER,
4703 x_num_matches OUT NUMBER
4704 ) IS
4705
4706 -- Strings to hold the generated Intermedia query strings
4707 l_party_contains_str VARCHAR2(32000);
4708 l_match_idx NUMBER;
4709 l_party_site_contains_str VARCHAR2(32000);
4710 l_contact_contains_str VARCHAR2(32000);
4711 l_contact_pt_contains_str VARCHAR2(32000);
4712 l_tmp VARCHAR2(32000);
4713
4714 -- Other local variables
4715 l_match_str VARCHAR2(30); -- Match type (AND or OR)
4716 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
4717 -- For Score calculation
4718 l_max_score NUMBER;
4719 l_entered_max_score NUMBER;
4720 FIRST BOOLEAN;
4721 l_search_ctx_id NUMBER; -- Generated Search Context ID
4722
4723 l_TX2 VARCHAR2(2000);
4724 l_TX4 VARCHAR2(2000);
4725 l_TX11 VARCHAR2(2000);
4726 H_SCORES HZ_PARTY_SEARCH.score_list;
4727
4728 l_score NUMBER;
4729 l_idx NUMBER;
4730 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
4731 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
4732 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
4733 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
4734 l_party_id NUMBER;
4735 l_ps_party_id NUMBER;
4736 l_ct_party_id NUMBER;
4737 l_cpt_party_id NUMBER;
4738 l_cpt_ps_id NUMBER;
4739 l_cpt_contact_id NUMBER;
4740 l_cpt_type VARCHAR2(100);
4741 l_cpt_level VARCHAR2(100);
4742 l_party_site_id NUMBER;
4743 l_org_contact_id NUMBER;
4744 l_contact_pt_id NUMBER;
4745 l_cpt_level VARCHAR2(100);
4746 l_ps_contact_id NUMBER;
4747 l_party_max_score NUMBER;
4748 l_ps_max_score NUMBER;
4749 l_contact_max_score NUMBER;
4750 l_cpt_max_score NUMBER;
4751
4752 defpt NUMBER :=0;
4753 defps NUMBER :=0;
4754 defct NUMBER :=0;
4755 defcpt NUMBER :=0;
4756 l_index NUMBER;
4757 l_match_ps_list HZ_PARTY_SEARCH.IDList;
4758 l_cnt NUMBER:=1;
4759
4760
4761 BEGIN
4762 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4763 hz_utility_v2pub.debug(p_message=>'get_matching_party_sites(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4764 END IF;
4765 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4766 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4767 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4768 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4769 hz_utility_v2pub.debug(p_message=>'p_dup_party_site_id '||p_dup_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4770 END IF;
4771
4772 -- ************************************
4773 -- STEP 1. Initialization and error checks
4774
4775 l_match_str := ' AND ';
4776 IF p_match_type = 'AND' THEN
4777 l_match_str := ' AND ';
4778 ELSIF p_match_type = 'OR' THEN
4779 l_match_str := ' OR ';
4780 END IF;
4781 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);
4782 g_score_until_thresh := false;
4783 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4784
4785 -- ************************************************************
4786 -- STEP 2. Setup of intermedia query strings for Acquisition query
4787 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
4788 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
4789 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);
4790
4791 -- Setup Search Context ID
4792 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
4793 x_search_ctx_id := l_search_ctx_id;
4794
4795 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4796 hz_utility_v2pub.debug(p_message=>'l_match_str '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4797 hz_utility_v2pub.debug(p_message=>'l_party_site_contains_str '||l_party_site_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4798 hz_utility_v2pub.debug(p_message=>'l_contact_pt_contains_str '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4799 hz_utility_v2pub.debug(p_message=>'l_search_ctx_id '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4800 END IF;
4801 IF l_party_site_contains_str IS NULL THEN
4802 defps := 1;
4803 END IF;
4804 IF l_contact_pt_contains_str IS NULL THEN
4805 defcpt := 1;
4806 END IF;
4807
4808 IF l_party_site_contains_str IS NOT NULL THEN
4809 open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,'N', 'N',l_party_site_cur);
4810 LOOP
4811 FETCH l_party_site_cur INTO
4812 l_party_site_id, l_ps_party_id, l_ps_contact_id , l_TX4, l_TX11;
4813 EXIT WHEN l_party_site_cur%NOTFOUND;
4814 IF (p_dup_party_site_id IS NULL OR (
4815 p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND
4816 l_party_site_id <> p_dup_party_site_id)) THEN
4817 l_index := map_id(l_party_site_id);
4818 l_match_ps_list(l_cnt):= l_party_site_id ;
4819 l_cnt:=l_cnt+1;
4820 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX4,l_TX11);
4821 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);
4822 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4823 hz_utility_v2pub.debug(p_message=>'Party Site Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4824 hz_utility_v2pub.debug(p_message=>'l_party_site_id '||l_party_site_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4825 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4826 END IF;
4827 END IF;
4828 END LOOP;
4829 CLOSE l_party_site_cur;
4830 END IF;
4831
4832 IF l_contact_pt_contains_str IS NOT NULL THEN
4833 SAVEPOINT eval_start;
4834 IF l_match_str = ' AND ' OR (
4835 ((l_cpt_max_score/l_entered_max_score)<(474/790))
4836 ) THEN
4837 FORALL I in 1..l_match_ps_list.COUNT
4838 INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
4839 values (l_search_ctx_id,l_match_ps_list(I));
4840 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');
4841 ELSE
4842 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
4843 END IF;
4844 LOOP
4845 FETCH l_contact_pt_cur INTO
4846 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id , l_TX2;
4847 EXIT WHEN l_contact_pt_cur%NOTFOUND;
4848 IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (
4849 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
4850 l_index := map_id(l_cpt_ps_id);
4851 IF l_match_str = ' OR ' THEN
4852 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
4853 IF NOT H_SCORES.EXISTS(l_index) THEN
4854 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);
4855 ELSE
4856 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
4857 H_SCORES(l_index).TOTAL_SCORE :=
4858 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4859 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
4860 END IF;
4861 END IF;
4862 ELSE
4863 IF H_SCORES.EXISTS(l_index) THEN
4864 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
4865 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
4866 H_SCORES(l_index).TOTAL_SCORE :=
4867 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4868 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
4869 END IF;
4870 ELSIF defps=1 THEN
4871 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
4872 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);
4873 END IF;
4874 END IF;
4875 END IF;
4876 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4877 hz_utility_v2pub.debug(p_message=>'Contact_point Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4878 hz_utility_v2pub.debug(p_message=>'l_party_site_id '||l_cpt_ps_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4879 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4880 END IF;
4881 END LOOP;
4882 CLOSE l_contact_pt_cur;
4883 ROLLBACK TO eval_start;
4884 END IF;
4885 x_num_matches := 0;
4886 l_party_site_id := H_SCORES.FIRST;
4887 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4888 hz_utility_v2pub.debug(p_message=>'Evaluating Matches. Threshold : 60 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4889 END IF;
4890 WHILE l_party_site_id IS NOT NULL LOOP
4891 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4892 hz_utility_v2pub.debug(p_message=>'Match Party Site ID '||H_SCORES(l_party_site_id).PARTY_SITE_ID,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4893 hz_utility_v2pub.debug(p_message=>'Score '||round((H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)*100),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4894 END IF;
4895 IF l_match_str = ' OR ' THEN
4896 IF (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=( 474/790 ) THEN
4897 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE)
4898 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);
4899 x_num_matches := x_num_matches+1;
4900 END IF;
4901 ELSE
4902 IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND
4903 H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND
4904 (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=(474/790) THEN
4905 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE)
4906 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));
4907 x_num_matches := x_num_matches+1;
4908 END IF;
4909 END IF;
4910 l_party_site_id:=H_SCORES.NEXT(l_party_site_id);
4911 END LOOP;
4912 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4913 hz_utility_v2pub.debug(p_message=>'get_matching_party_sites(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4914 END IF;
4915 EXCEPTION
4916 WHEN FND_API.G_EXC_ERROR THEN
4917 RAISE FND_API.G_EXC_ERROR;
4918 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4919 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4920 WHEN OTHERS THEN
4921 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4922 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.get_matching_party_sites');
4923 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4924 FND_MSG_PUB.ADD;
4925 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4926 END get_matching_party_sites;
4927
4928
4929 PROCEDURE get_matching_contacts (
4930 p_rule_id IN NUMBER,
4931 p_party_id IN NUMBER,
4932 p_contact_list IN HZ_PARTY_SEARCH.CONTACT_LIST,
4933 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
4934 p_restrict_sql IN VARCHAR2,
4935 p_match_type IN VARCHAR2,
4936 p_dup_contact_id IN NUMBER,
4937 x_search_ctx_id OUT NUMBER,
4938 x_num_matches OUT NUMBER
4939 ) IS
4940
4941 -- Strings to hold the generated Intermedia query strings
4942 l_party_contains_str VARCHAR2(32000);
4943 l_party_site_contains_str VARCHAR2(32000);
4944 l_contact_contains_str VARCHAR2(32000);
4945 l_contact_pt_contains_str VARCHAR2(32000);
4946 l_tmp VARCHAR2(32000);
4947
4948 -- Other local variables
4949 l_match_str VARCHAR2(30); -- Match type (AND or OR)
4950 l_match_idx NUMBER;
4951 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
4952 -- For Score calculation
4953 l_max_score NUMBER;
4954 l_entered_max_score NUMBER;
4955 FIRST BOOLEAN;
4956 l_search_ctx_id NUMBER; -- Generated Search Context ID
4957
4958 l_TX2 VARCHAR2(2000);
4959 H_SCORES HZ_PARTY_SEARCH.score_list;
4960
4961 l_score NUMBER;
4962 l_idx NUMBER;
4963 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
4964 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
4965 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
4966 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
4967 l_party_id NUMBER;
4968 l_ps_party_id NUMBER;
4969 l_ct_party_id NUMBER;
4970 l_cpt_party_id NUMBER;
4971 l_cpt_ps_id NUMBER;
4972 l_cpt_contact_id NUMBER;
4973 l_cpt_type VARCHAR2(100);
4974 l_party_site_id NUMBER;
4975 l_org_contact_id NUMBER;
4976 l_contact_pt_id NUMBER;
4977
4978 defpt NUMBER :=0;
4979 defps NUMBER :=0;
4980 defct NUMBER :=0;
4981 defcpt NUMBER :=0;
4982 l_index NUMBER;
4983 l_party_max_score NUMBER;
4984 l_ps_max_score NUMBER;
4985 l_contact_max_score NUMBER;
4986 l_cpt_max_score NUMBER;
4987 l_match_contact_list HZ_PARTY_SEARCH.IDList;
4988 l_cnt NUMBER:=1;
4989
4990
4991 BEGIN
4992 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4993 hz_utility_v2pub.debug(p_message=>'get_matching_contacts(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
4994 END IF;
4995 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4996 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4997 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4998 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
4999 hz_utility_v2pub.debug(p_message=>'p_dup_contact_id '||p_dup_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5000 END IF;
5001
5002 -- ************************************
5003 -- STEP 1. Initialization and error checks
5004
5005 l_match_str := ' AND ';
5006 IF p_match_type = 'AND' THEN
5007 l_match_str := ' AND ';
5008 ELSIF p_match_type = 'OR' THEN
5009 l_match_str := ' OR ';
5010 END IF;
5011 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);
5012 g_score_until_thresh := false;
5013 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5014
5015 -- ************************************************************
5016 -- STEP 2. Setup of intermedia query strings for Acquisition query
5017 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5018 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5019 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);
5020
5021 -- Setup Search Context ID
5022 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5023 x_search_ctx_id := l_search_ctx_id;
5024
5025 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5026 hz_utility_v2pub.debug(p_message=>'l_match_str '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5027 hz_utility_v2pub.debug(p_message=>'l_contact_contains_str '||l_contact_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5028 hz_utility_v2pub.debug(p_message=>'l_contact_pt_contains_str '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5029 hz_utility_v2pub.debug(p_message=>'l_search_ctx_id '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5030 END IF;
5031 IF l_contact_contains_str IS NULL THEN
5032 defct := 1;
5033 END IF;
5034 IF l_contact_pt_contains_str IS NULL THEN
5035 defcpt := 1;
5036 END IF;
5037
5038 IF l_contact_contains_str IS NOT NULL THEN
5039 open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);
5040 LOOP
5041 FETCH l_contact_cur INTO
5042 l_org_contact_id, l_ct_party_id ;
5043 EXIT WHEN l_contact_cur%NOTFOUND;
5044 IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN
5045 l_index := map_id(l_org_contact_id);
5046 l_match_contact_list(l_cnt):=l_org_contact_id;
5047 l_cnt:=l_cnt+1;
5048 l_score := GET_CONTACTS_SCORE(l_match_idx);
5049 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);
5050 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5051 hz_utility_v2pub.debug(p_message=>'Contact Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5052 hz_utility_v2pub.debug(p_message=>'l_org_contact_id '||l_org_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5053 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5054 END IF;
5055 END IF;
5056 END LOOP;
5057 CLOSE l_contact_cur;
5058 END IF;
5059
5060 IF l_contact_pt_contains_str IS NOT NULL THEN
5061 SAVEPOINT eval_start;
5062 IF l_match_str = ' AND ' OR (
5063 ((l_cpt_max_score/l_entered_max_score)<(474/790))
5064 ) THEN
5065 FORALL I in 1..l_match_contact_list.COUNT
5066 INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5067 values (l_search_ctx_id,l_match_contact_list(I));
5068 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');
5069 ELSE
5070 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5071 END IF;
5072 LOOP
5073 FETCH l_contact_pt_cur INTO
5074 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id , l_TX2;
5075 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5076 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
5077 l_index := map_id(l_cpt_contact_id);
5078 IF l_match_str = ' OR ' THEN
5079 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
5080 IF NOT H_SCORES.EXISTS(l_index) THEN
5081 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);
5082 ELSE
5083 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5084 H_SCORES(l_index).TOTAL_SCORE :=
5085 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5086 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5087 END IF;
5088 END IF;
5089 ELSE
5090 IF H_SCORES.EXISTS(l_index) THEN
5091 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
5092 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5093 H_SCORES(l_index).TOTAL_SCORE :=
5094 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5095 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5096 END IF;
5097 ELSIF defps=1 THEN
5098 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
5099 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);
5100 END IF;
5101 END IF;
5102 END IF;
5103 END LOOP;
5104 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5105 hz_utility_v2pub.debug(p_message=>'Contact_point Level Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5106 hz_utility_v2pub.debug(p_message=>'l_org_contact_id '||l_cpt_contact_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5107 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5108 END IF;
5109 CLOSE l_contact_pt_cur;
5110 END IF;
5111 x_num_matches := 0;
5112 l_org_contact_id := H_SCORES.FIRST;
5113 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5114 hz_utility_v2pub.debug(p_message=>'Evaluating Matches. Threshold : 60 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5115 END IF;
5116 WHILE l_org_contact_id IS NOT NULL LOOP
5117 IF l_match_str = ' OR ' THEN
5118 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5119 hz_utility_v2pub.debug(p_message=>'Match Contact ID '||H_SCORES(l_org_contact_id).ORG_CONTACT_ID,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5120 hz_utility_v2pub.debug(p_message=>'Score '||round((H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)*100),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5121 END IF;
5122 IF (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(474/790) THEN
5123 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE)
5124 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);
5125 x_num_matches := x_num_matches+1;
5126 END IF;
5127 ELSE
5128 IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND
5129 H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND
5130 (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(474/790) THEN
5131 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE)
5132 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));
5133 x_num_matches := x_num_matches+1;
5134 END IF;
5135 END IF;
5136 l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);
5137 END LOOP;
5138 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5139 hz_utility_v2pub.debug(p_message=>'get_matching_contacts(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
5140 END IF;
5141 EXCEPTION
5142 WHEN FND_API.G_EXC_ERROR THEN
5143 RAISE FND_API.G_EXC_ERROR;
5144 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5145 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5146 WHEN OTHERS THEN
5147 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5148 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.get_matching_contacts');
5149 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5150 FND_MSG_PUB.ADD;
5151 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5152 END get_matching_contacts;
5153
5154
5155 PROCEDURE get_matching_contact_points (
5156 p_rule_id IN NUMBER,
5157 p_party_id IN NUMBER,
5158 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5159 p_restrict_sql IN VARCHAR2,
5160 p_match_type IN VARCHAR2,
5161 p_dup_contact_point_id IN NUMBER,
5162 x_search_ctx_id OUT NUMBER,
5163 x_num_matches OUT NUMBER
5164 ) IS
5165
5166
5167 -- Strings to hold the generated Intermedia query strings
5168 l_contact_pt_contains_str VARCHAR2(32000);
5169 l_tmp VARCHAR2(32000);
5170
5171 -- Other local variables
5172 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5173 l_match_idx NUMBER;
5174 -- For Score calculation
5175 l_entered_max_score NUMBER;
5176 l_search_ctx_id NUMBER; -- Generated Search Context ID
5177
5178 l_TX2 VARCHAR2(2000);
5179
5180 l_score NUMBER;
5181 l_idx NUMBER;
5182 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5183 l_cpt_party_id NUMBER;
5184 l_cpt_ps_id NUMBER;
5185 l_cpt_contact_id NUMBER;
5186 l_contact_pt_id NUMBER;
5187 l_cpt_type VARCHAR2(100);
5188 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
5189 H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;
5190 H_SCORE HZ_PARTY_SEARCH.IDList;
5191
5192 cnt NUMBER :=0;
5193 l_party_max_score NUMBER;
5194 l_ps_max_score NUMBER;
5195 l_contact_max_score NUMBER;
5196 l_cpt_max_score NUMBER;
5197
5198
5199 BEGIN
5200 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5201 hz_utility_v2pub.debug(p_message=>'get_matching_contact_points(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
5202 END IF;
5203 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5204 hz_utility_v2pub.debug(p_message=>'Input Parameters:',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5205 hz_utility_v2pub.debug(p_message=>'p_match_type '||p_match_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5206 hz_utility_v2pub.debug(p_message=>'p_restrict_sql '||p_restrict_sql,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5207 hz_utility_v2pub.debug(p_message=>'p_dup_contact_point_id '||p_dup_contact_point_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5208 END IF;
5209
5210 -- ************************************
5211 -- STEP 1. Initialization and error checks
5212
5213 l_match_str := ' AND ';
5214 IF p_match_type = 'AND' THEN
5215 l_match_str := ' AND ';
5216 ELSIF p_match_type = 'OR' THEN
5217 l_match_str := ' OR ';
5218 END IF;
5219 l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,
5220 HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
5221 p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
5222 g_score_until_thresh := false;
5223 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5224
5225 -- ************************************************************
5226 -- STEP 2. Setup of intermedia query strings for Acquisition query
5227 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5228 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);
5229
5230 -- Setup Search Context ID
5231 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5232 x_search_ctx_id := l_search_ctx_id;
5233 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5234 hz_utility_v2pub.debug(p_message=>'l_match_str '||l_match_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5235 hz_utility_v2pub.debug(p_message=>'l_contact_pt_contains_str '||l_contact_pt_contains_str,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5236 hz_utility_v2pub.debug(p_message=>'l_search_ctx_id '||l_search_ctx_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5237 END IF;
5238
5239 IF l_contact_pt_contains_str IS NOT NULL THEN
5240 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5241 cnt := 1;
5242 LOOP
5243 FETCH l_contact_pt_cur INTO
5244 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id , l_TX2;
5245 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5246 IF (p_dup_contact_point_id IS NULL OR (
5247 p_dup_contact_point_id IS NOT NULL AND
5248 l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND
5249 p_dup_contact_point_id <> l_contact_pt_id)) THEN
5250 H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;
5251 H_PARTY_ID(cnt) := l_cpt_party_id;
5252 H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
5253 cnt := cnt+1;
5254 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5255 hz_utility_v2pub.debug(p_message=>'Contact Point Matches',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5256 hz_utility_v2pub.debug(p_message=>'l_contact_pt_id '||l_contact_pt_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5257 hz_utility_v2pub.debug(p_message=>'l_score '||l_score,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5258 END IF;
5259 END IF;
5260 END LOOP;
5261 CLOSE l_contact_pt_cur;
5262 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5263 hz_utility_v2pub.debug(p_message=>'Evaluating Matches. Threshold : 60 ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5264 END IF;
5265 x_num_matches := 0;
5266 FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP
5267 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5268 hz_utility_v2pub.debug(p_message=>'Match Contact Point ID '||H_CONTACT_POINT_ID(I),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5269 hz_utility_v2pub.debug(p_message=>'Score '||round((H_SCORE(I)/l_entered_max_score)*100),p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5270 END IF;
5271 IF (H_SCORE(I)/l_entered_max_score) >= (474/790) THEN
5272 INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
5273 l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);
5274 x_num_matches := x_num_matches + 1;
5275 END IF;
5276 END LOOP;
5277 END IF;
5278 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5279 hz_utility_v2pub.debug(p_message=>'get_matching_contact_points(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
5280 END IF;
5281 EXCEPTION
5282 WHEN FND_API.G_EXC_ERROR THEN
5283 RAISE FND_API.G_EXC_ERROR;
5284 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5285 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5286 WHEN OTHERS THEN
5287 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5288 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.get_matching_contact_points');
5289 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5290 FND_MSG_PUB.ADD;
5291 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5292 END get_matching_contact_points;
5293
5294 /**********************************************************
5295 This procedure finds the score details for a specific party that
5296 matched
5297
5298 **********************************************************/
5299
5300 PROCEDURE get_score_details (
5301 p_rule_id IN NUMBER,
5302 p_party_id IN NUMBER,
5303 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
5304 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
5305 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
5306 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
5307 x_search_ctx_id IN OUT NUMBER
5308 ) IS
5309
5310 -- Strings to hold the generated Intermedia query strings
5311 l_party_contains_str VARCHAR2(32000);
5312 l_party_site_contains_str VARCHAR2(32000);
5313 l_contact_contains_str VARCHAR2(32000);
5314 l_contact_pt_contains_str VARCHAR2(32000);
5315 l_tmp VARCHAR2(32000);
5316
5317 -- Other local variables
5318 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5319 -- For Score calculation
5320 l_max_score NUMBER;
5321 l_entered_max_score NUMBER;
5322 FIRST BOOLEAN;
5323 l_search_ctx_id NUMBER; -- Generated Search Context ID
5324
5325 l_TX2 VARCHAR2(2000);
5326 l_max_TX2 VARCHAR2(2000);
5327 l_TX46 VARCHAR2(2000);
5328 l_max_TX46 VARCHAR2(2000);
5329 l_TX4 VARCHAR2(2000);
5330 l_max_TX4 VARCHAR2(2000);
5331 l_TX11 VARCHAR2(2000);
5332 l_max_TX11 VARCHAR2(2000);
5333 l_TX45 VARCHAR2(2000);
5334 l_max_TX45 VARCHAR2(2000);
5335 H_SCORES HZ_PARTY_SEARCH.score_list;
5336
5337 l_score NUMBER;
5338 l_match_idx NUMBER;
5339 l_idx NUMBER;
5340 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5341 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5342 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5343 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5344 l_party_id NUMBER;
5345 l_ps_party_id NUMBER;
5346 l_ct_party_id NUMBER;
5347 l_cpt_party_id NUMBER;
5348 l_cpt_ps_id NUMBER;
5349 l_cpt_contact_id NUMBER;
5350 l_cpt_type VARCHAR2(100);
5351 l_party_site_id NUMBER;
5352 l_org_contact_id NUMBER;
5353 l_contact_pt_id NUMBER;
5354 l_ps_contact_id NUMBER;
5355 l_max_id NUMBER;
5356 l_max_idx NUMBER;
5357
5358 l_index NUMBER;
5359 l_party_max_score NUMBER;
5360 l_ps_max_score NUMBER;
5361 l_contact_max_score NUMBER;
5362 l_cpt_max_score NUMBER;
5363
5364 --Fix for bug 4417124
5365 l_use_contact_addr_info BOOLEAN:=TRUE;
5366 l_use_contact_cpt_info BOOLEAN:=TRUE;
5367 l_TX35_new VARCHAR2(4000);
5368
5369 BEGIN
5370
5371 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5372 hz_utility_v2pub.debug(p_message=>'get_score_details(+) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5373 END IF;
5374 -- ************************************
5375 -- STEP 1. Initialization and error checks
5376
5377 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);
5378 g_score_until_thresh := false;
5379 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5380 -- ************************************************************
5381 -- STEP 2. Setup of intermedia query strings for Acquisition query
5382 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
5383 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5384 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5385 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
5386
5387 -- Setup Search Context ID
5388 IF x_search_ctx_id IS NULL THEN
5389 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5390 x_search_ctx_id := l_search_ctx_id;
5391 ELSE
5392 l_search_ctx_id := x_search_ctx_id;
5393 END IF;
5394
5395 open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);
5396 LOOP
5397 FETCH l_party_cur INTO
5398 l_party_id , l_TX4, l_TX45, l_TX46;
5399 EXIT WHEN l_party_cur%NOTFOUND;
5400 INSERT_PARTY_SCORE(p_party_id, p_party_id, l_search_ctx_id, p_party_search_rec, g_party_stage_rec, l_TX4,l_TX45,l_TX46,1);
5401 END LOOP;
5402 CLOSE l_party_cur;
5403
5404 IF l_party_site_contains_str IS NOT NULL THEN
5405 l_max_score := 0;
5406 l_max_id := 0;
5407 l_max_idx := 0;
5408 IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_addr_info THEN
5409 open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'Y','N',l_party_site_cur);
5410 ELSE
5411 open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'N','N',l_party_site_cur);
5412 END IF;
5413 LOOP
5414 FETCH l_party_site_cur INTO
5415 l_party_site_id, l_ps_party_id,l_ps_contact_id , l_TX4, l_TX11;
5416 EXIT WHEN l_party_site_cur%NOTFOUND;
5417 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX4,l_TX11);
5418 IF l_score > l_max_score THEN
5419 l_max_score := l_score;
5420 l_max_id := l_party_site_id;
5421 l_max_idx := l_match_idx;
5422 l_max_TX4 := l_TX4;
5423 l_max_TX11 := l_TX11;
5424 END IF;
5425 END LOOP;
5426 CLOSE l_party_site_cur;
5427 IF l_max_score>0 THEN
5428 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) ,l_max_TX4,l_max_TX11,l_max_idx);
5429 END IF;
5430 END IF;
5431
5432 IF l_contact_contains_str IS NOT NULL THEN
5433 l_max_score := 0;
5434 l_max_id := 0;
5435 l_max_idx := 0;
5436 open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);
5437 LOOP
5438 FETCH l_contact_cur INTO
5439 l_org_contact_id, l_ct_party_id ;
5440 EXIT WHEN l_contact_cur%NOTFOUND;
5441 l_score := GET_CONTACTS_SCORE(l_match_idx);
5442 IF l_score > l_max_score THEN
5443 l_max_score := l_score;
5444 l_max_id := l_org_contact_id;
5445 l_max_idx := l_match_idx;
5446 END IF;
5447 END LOOP;
5448 CLOSE l_contact_cur;
5449 IF l_max_score>0 THEN
5450 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) ,l_max_idx);
5451 END IF;
5452 END IF;
5453
5454 IF l_contact_pt_contains_str IS NOT NULL THEN
5455 l_max_score := 0;
5456 l_max_id := 0;
5457 l_max_idx := 0;
5458 IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_cpt_info THEN
5459 open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'Y','N',l_contact_pt_cur);
5460 ELSE
5461 open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'N','N',l_contact_pt_cur);
5462 END IF;
5463 LOOP
5464 FETCH l_contact_pt_cur INTO
5465 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id , l_TX2;
5466 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5467 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX2);
5468 IF l_score > l_max_score THEN
5469 l_max_score := l_score;
5470 l_max_id := l_contact_pt_id;
5471 l_max_idx := l_match_idx;
5472 l_max_TX2 := l_TX2;
5473 END IF;
5474 END LOOP;
5475 IF l_max_score>0 THEN
5476 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) ,l_max_TX2,l_max_idx);
5477 END IF;
5478 CLOSE l_contact_pt_cur;
5479 END IF;
5480 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5481 hz_utility_v2pub.debug(p_message=>'get_score_details(-) ',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_procedure);
5482 END IF;
5483 EXCEPTION
5484 WHEN FND_API.G_EXC_ERROR THEN
5485 RAISE FND_API.G_EXC_ERROR;
5486 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5487 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5488 WHEN OTHERS THEN
5489 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5490 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_238.get_score_details');
5491 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5492 FND_MSG_PUB.ADD;
5493 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5494 END get_score_details;
5495
5496
5497 /************************************************
5498 This procedure retrieves the match rule attributes into
5499 the search record structures
5500 ************************************************/
5501
5502 PROCEDURE get_party_for_search (
5503 p_party_id IN NUMBER,
5504 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
5505 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
5506 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
5507 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5508 ) IS
5509 l_party_id NUMBER;
5510 l_party_site_ids HZ_PARTY_SEARCH.IDList;
5511 l_contact_ids HZ_PARTY_SEARCH.IDList;
5512 l_contact_pt_ids HZ_PARTY_SEARCH.IDList;
5513 ps NUMBER :=1;
5514 cpt NUMBER :=1;
5515 ct NUMBER :=1;
5516 l_use_contact_info varchar2(1);
5517 BEGIN
5518
5519 l_use_contact_info := 'Y';
5520 IF nvl(FND_PROFILE.VALUE('HZ_DQM_REL_PARTY_MATCH'),'N')='Y' THEN
5521 l_use_contact_info := 'N';
5522 END IF;
5523 l_party_id := p_party_id;
5524 FOR PARTY_SITES IN (
5525 SELECT party_site_id FROM (
5526 SELECT party_site_id,identifying_address_flag
5527 FROM HZ_PARTY_SITES
5528 WHERE party_id = p_party_id
5529 AND (status is null OR status = 'A')
5530 AND identifying_address_flag='Y'
5531 UNION
5532
5533 SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
5534 FROM HZ_PARTY_SITES
5535 WHERE party_id = p_party_id
5536 AND (status is null OR status = 'A')
5537 AND (identifying_address_flag IS NULL OR identifying_address_flag = 'N')
5538 AND ROWNUM<6
5539 UNION
5540
5541 SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
5542 FROM HZ_PARTY_SITES
5543 WHERE (status is null OR status = 'A')
5544 AND party_id in (
5545 SELECT party_id
5546 FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
5547 WHERE HZ_RELATIONSHIPS.object_id = p_party_id
5548 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5549 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5550 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5551 and l_use_contact_info = 'Y'
5552 )
5553 AND ROWNUM<6
5554 ) order by identifying_address_flag desc
5555 ) LOOP
5556 l_party_site_ids(ps) := PARTY_SITES.party_site_id;
5557 ps:=ps+1;
5558 END LOOP;
5559 FOR CONTACT_POINTS IN (
5560 SELECT CONTACT_POINT_ID
5561 FROM HZ_CONTACT_POINTS
5562 WHERE PRIMARY_FLAG = 'Y'
5563 AND owner_table_name = 'HZ_PARTIES'
5564 AND owner_table_id = p_party_id
5565
5566 UNION
5567
5568 SELECT CONTACT_POINT_ID
5569 FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
5570 WHERE PRIMARY_FLAG = 'Y'
5571 AND owner_table_name = 'HZ_PARTIES'
5572 AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id
5573 AND HZ_RELATIONSHIPS.object_id = p_party_id
5574 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5575 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5576 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5577 and l_use_contact_info = 'Y'
5578 AND ROWNUM<6
5579 UNION
5580
5581 SELECT CONTACT_POINT_ID
5582 FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES
5583 WHERE PRIMARY_FLAG = 'Y'
5584 AND owner_table_name = 'HZ_PARTY_SITES'
5585 AND owner_table_id = party_site_id
5586 AND PARTY_ID = p_party_id
5587 AND IDENTIFYING_ADDRESS_FLAG = 'Y') LOOP
5588 l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;
5589 cpt := cpt+1;
5590 END LOOP;
5591 get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,
5592 x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);
5593 EXCEPTION
5594 WHEN FND_API.G_EXC_ERROR THEN
5595 RAISE FND_API.G_EXC_ERROR;
5596 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5597 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5598 WHEN OTHERS THEN
5599 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5600 FND_MESSAGE.SET_TOKEN('PROC','get_party_for_search');
5601 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5602 FND_MSG_PUB.ADD;
5603 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5604 END get_party_for_search;
5605
5606 PROCEDURE get_search_criteria (
5607 p_party_id IN NUMBER,
5608 p_party_site_ids IN HZ_PARTY_SEARCH.IDList,
5609 p_contact_ids IN HZ_PARTY_SEARCH.IDList,
5610 p_contact_pt_ids IN HZ_PARTY_SEARCH.IDList,
5611 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
5612 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
5613 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
5614 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5615 ) IS
5616 BEGIN
5617
5618 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5619 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - get_search_criteria',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5620 END IF;
5621 IF p_party_id IS NOT NULL THEN
5622 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5623 hz_utility_v2pub.debug(p_message=>'Before Calling Procedure - get_party_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5624 END IF;
5625 get_party_rec(p_party_id, x_party_search_rec);
5626 END IF;
5627 IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN
5628 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5629 hz_utility_v2pub.debug(p_message=>'Before Calling Procedure - get_party_site_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5630 END IF;
5631 get_party_site_rec(p_party_site_ids, x_party_site_list);
5632 END IF;
5633 IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN
5634 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5635 hz_utility_v2pub.debug(p_message=>'Before Calling Procedure - get_contact_point_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5636 END IF;
5637 get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);
5638 END IF;
5639 EXCEPTION
5640 WHEN FND_API.G_EXC_ERROR THEN
5641 RAISE FND_API.G_EXC_ERROR;
5642 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5643 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5644 WHEN OTHERS THEN
5645 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5646 FND_MESSAGE.SET_TOKEN('PROC','get_search_criteria');
5647 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5648 FND_MSG_PUB.ADD;
5649 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5650 END get_search_criteria;
5651
5652
5653 /************************************************
5654 This procedure retrieves the match rule party attributes into
5655 the party search record structure
5656 ************************************************/
5657
5658 PROCEDURE get_party_rec (
5659 p_party_id IN NUMBER,
5660 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type
5661 ) IS
5662 l_party_type VARCHAR2(255);
5663 BEGIN
5664
5665 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5666 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - get_party_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5667 END IF;
5668 SELECT PARTY_TYPE INTO l_party_type
5669 FROM HZ_PARTIES
5670 WHERE PARTY_ID = p_party_id;
5671
5672 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5673 hz_utility_v2pub.debug(p_message=>'l_party_type is - '||l_party_type,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5674 END IF;
5675 IF l_party_type = 'ORGANIZATION' THEN
5676 SELECT
5677 translate(HZ_ORGANIZATION_PROFILES.JGZZ_FISCAL_CODE, '%',' ')
5678 ,translate(HZ_PARTIES.PARTY_NAME, '%',' ')
5679 ,translate(HZ_ORGANIZATION_PROFILES.SIC_CODE, '%',' ')
5680 INTO
5681 x_party_search_rec.JGZZ_FISCAL_CODE
5682 ,x_party_search_rec.PARTY_NAME
5683 ,x_party_search_rec.SIC_CODE
5684 FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES
5685 WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id
5686 AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL
5687 AND HZ_PARTIES.party_id = p_party_id;
5688 ELSIF l_party_type = 'PERSON' THEN
5689 SELECT
5690 translate(HZ_PERSON_PROFILES.JGZZ_FISCAL_CODE, '%',' ')
5691 ,translate(HZ_PARTIES.PARTY_NAME, '%',' ')
5692 INTO
5693 x_party_search_rec.JGZZ_FISCAL_CODE
5694 ,x_party_search_rec.PARTY_NAME
5695 FROM HZ_PARTIES, HZ_PERSON_PROFILES
5696 WHERE HZ_PARTIES.party_id = HZ_PERSON_PROFILES.party_id
5697 AND HZ_PERSON_PROFILES.effective_end_date is NULL
5698 AND HZ_PARTIES.party_id = p_party_id;
5699 END IF;
5700 x_party_search_rec.PARTY_TYPE := l_party_type;
5701 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5702 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - generate_custom_code',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5703 END IF;
5704
5705 EXCEPTION
5706 WHEN OTHERS THEN
5707 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5708 FND_MESSAGE.SET_TOKEN('PROC','get_party_rec');
5709 FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_id);
5710 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5711 FND_MSG_PUB.ADD;
5712 RAISE FND_API.G_EXC_ERROR;
5713 END get_party_rec;
5714
5715 /************************************************
5716 This procedure retrieves the match rule party site attributes into
5717 the party site search record structure
5718 ************************************************/
5719
5720 PROCEDURE get_party_site_rec (
5721 p_party_site_ids IN HZ_PARTY_SEARCH.IDList,
5722 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list
5723 ) IS
5724 CURSOR c_party_sites(cp_party_site_id NUMBER) IS
5725 SELECT party_site_id
5726 ,translate(HZ_LOCATIONS.POSTAL_CODE, '%',' ')
5727 FROM HZ_PARTY_SITES, HZ_LOCATIONS
5728 WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id
5729 AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;
5730
5731 I NUMBER;
5732 J NUMBER:=1;
5733 l_party_site_id NUMBER;
5734
5735 BEGIN
5736
5737 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5738 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - get_party_site_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5739 END IF;
5740 FOR I IN 1..p_party_site_ids.COUNT LOOP
5741 l_party_site_id := p_party_site_ids(I);
5742 OPEN c_party_sites(p_party_site_ids(I));
5743 LOOP
5744 FETCH c_party_sites INTO
5745 l_party_site_id
5746 ,x_party_site_list(J).POSTAL_CODE
5747 ;
5748 EXIT WHEN c_party_sites%NOTFOUND;
5749
5750 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5751 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - generate_custom_code',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5752 END IF;
5753 x_party_site_list(J).ADDRESS:=
5754 HZ_PARTY_ACQUIRE.get_address(l_party_site_id , 'PARTY_SITES','ADDRESS');
5755 J:=J+1;
5756
5757 END LOOP;
5758 CLOSE c_party_sites;
5759 END LOOP;
5760
5761 EXCEPTION
5762 WHEN OTHERS THEN
5763 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5764 FND_MESSAGE.SET_TOKEN('PROC','get_party_site_rec');
5765 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_party_site_id);
5766 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5767 FND_MSG_PUB.ADD;
5768 RAISE FND_API.G_EXC_ERROR;
5769 END get_party_site_rec;
5770
5771 /************************************************
5772 This procedure retrieves the match rule contact attributes into
5773 the contact search record structure
5774 ************************************************/
5775
5776 PROCEDURE get_contact_rec (
5777 p_contact_ids IN HZ_PARTY_SEARCH.IDList,
5778 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list
5779 ) IS
5780 CURSOR c_contacts(cp_org_contact_id NUMBER) IS
5781 SELECT org_contact_id
5782 FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES
5783 WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id
5784 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5785 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5786 AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
5787 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5788 AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id
5789 AND HZ_PERSON_PROFILES.effective_end_date IS NULL;
5790
5791 I NUMBER;
5792 l_org_contact_id NUMBER;
5793 J NUMBER:=1;
5794 BEGIN
5795
5796 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5797 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - get_contact_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5798 END IF;
5799 FOR I IN 1..p_contact_ids.COUNT LOOP
5800 l_org_contact_id := p_contact_ids(I);
5801 OPEN c_contacts(p_contact_ids(I));
5802 LOOP
5803 FETCH c_contacts INTO
5804 l_org_contact_id
5805 ;
5806 EXIT WHEN c_contacts%NOTFOUND;
5807
5808 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5809 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - generate_custom_code',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5810 END IF;
5811
5812 J:=J+1;
5813 END LOOP;
5814 CLOSE c_contacts;
5815 END LOOP;
5816
5817 EXCEPTION
5818 WHEN OTHERS THEN
5819 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5820 FND_MESSAGE.SET_TOKEN('PROC','get_contact_rec');
5821 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_org_contact_id);
5822 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5823 FND_MSG_PUB.ADD;
5824 RAISE FND_API.G_EXC_ERROR;
5825 END get_contact_rec;
5826
5827 /************************************************
5828 This procedure retrieves the match rule contact point attributes into
5829 the contact point search record structure
5830 ************************************************/
5831
5832 PROCEDURE get_contact_point_rec (
5833 p_contact_point_ids IN HZ_PARTY_SEARCH.IDList,
5834 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5835 ) IS
5836
5837 -- Cursor to fetch primary contact points for party
5838 CURSOR c_cpts(cp_contact_point_id NUMBER) IS
5839 SELECT contact_point_id, contact_point_type
5840 ,translate(HZ_CONTACT_POINTS.PHONE_NUMBER, '%',' ')
5841 FROM HZ_CONTACT_POINTS
5842 WHERE contact_point_id = cp_contact_point_id;
5843
5844 I NUMBER;
5845 l_contact_point_id NUMBER;
5846 J NUMBER:=1;
5847 BEGIN
5848
5849 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5850 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - get_contact_point_rec',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5851 END IF;
5852 FOR I in 1..p_contact_point_ids.COUNT LOOP
5853 l_contact_point_id := p_contact_point_ids(I);
5854 OPEN c_cpts(p_contact_point_ids(I));
5855 LOOP
5856 FETCH c_cpts INTO
5857 l_contact_point_id, x_contact_point_list(J).contact_point_type
5858 ,x_contact_point_list(J).PHONE_NUMBER
5859 ;
5860 EXIT WHEN c_cpts%NOTFOUND;
5861
5862 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5863 hz_utility_v2pub.debug(p_message=>'Inside calling procedure - generate_custom_code',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5864 END IF;
5865 J:=J+1;
5866
5867 END LOOP;
5868 CLOSE c_cpts;
5869 END LOOP;
5870
5871 EXCEPTION
5872 WHEN OTHERS THEN
5873 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5874 FND_MESSAGE.SET_TOKEN('PROC','get_contact_point_rec');
5875 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_contact_point_id);
5876 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5877 FND_MSG_PUB.ADD;
5878 RAISE FND_API.G_EXC_ERROR;
5879 END get_contact_point_rec;
5880
5881 /************************************************
5882 This procedure maps a search record from the logical
5883 record structure to the stage schema structure
5884 for the PARTY Entity after applying
5885 the defined transformations
5886 ************************************************/
5887
5888 PROCEDURE MAP_PARTY_REC(
5889 p_search_ctx IN BOOLEAN,
5890 p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
5891 x_entered_max_score OUT NUMBER,
5892 x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type
5893 ) IS
5894 tmp VARCHAR2(4000);
5895 l_party_name VARCHAR2(4000);
5896 BEGIN
5897 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5898 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - MAP_PARTY_REC',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
5899 END IF;
5900 IF p_search_ctx THEN
5901 x_stage_rec.TX8 := NULL;
5902 g_other_party_level_attribs:=FALSE;
5903 IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL
5904 OR p_search_rec.SIC_CODE IS NOT NULL
5905 THEN
5906 g_other_party_level_attribs:=TRUE;
5907 END IF;
5908 x_entered_max_score:=0;
5909 IF p_search_rec.PARTY_NAME IS NOT NULL THEN
5910 x_entered_max_score := x_entered_max_score+200;
5911 END IF;
5912 IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN
5913 x_entered_max_score := x_entered_max_score+300;
5914 END IF;
5915 IF p_search_rec.SIC_CODE IS NOT NULL THEN
5916 x_entered_max_score := x_entered_max_score+60;
5917 END IF;
5918 END IF;
5919 IF p_search_ctx THEN
5920 IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN
5921 x_stage_rec.TX45 :=
5922 HZ_TRANS_PKG.RM_SPLCHAR(
5923 p_search_rec.JGZZ_FISCAL_CODE
5924 ,null,'JGZZ_FISCAL_CODE'
5925 ,'PARTY','SEARCH');
5926 ELSE
5927 x_stage_rec.TX45 := '';
5928 END IF;
5929 ELSE
5930 IF p_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN
5931 tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
5932 x_stage_rec.TX45
5933 ,null,'JGZZ_FISCAL_CODE'
5934 ,'PARTY','SCORE');
5935 IF tmp IS NOT NULL THEN
5936 x_stage_rec.TX45 := tmp;
5937 END IF;
5938 END IF;
5939 END IF;
5940 IF p_search_ctx THEN
5941 IF p_search_rec.PARTY_NAME IS NOT NULL THEN
5942 x_stage_rec.TX4 :=
5943 HZ_TRANS_PKG.WRNAMES_CLEANSE(
5944 p_search_rec.PARTY_NAME
5945 ,null,'PARTY_NAME'
5946 ,'PARTY','SEARCH');
5947 ELSE
5948 x_stage_rec.TX4 := '';
5949 END IF;
5950 ELSE
5951 IF p_search_rec.PARTY_NAME IS NOT NULL THEN
5952 tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
5953 x_stage_rec.TX4
5954 ,null,'PARTY_NAME'
5955 ,'PARTY','SCORE');
5956 IF tmp IS NOT NULL THEN
5957 x_stage_rec.TX4 := tmp;
5958 END IF;
5959 END IF;
5960 END IF;
5961 IF p_search_ctx THEN
5962 IF p_search_rec.PARTY_TYPE IS NOT NULL THEN
5963 x_stage_rec.TX36 :=
5964 HZ_TRANS_PKG.EXACT(
5965 p_search_rec.PARTY_TYPE
5966 ,null,'PARTY_TYPE'
5967 ,'PARTY');
5968 ELSE
5969 x_stage_rec.TX36 := '';
5970 END IF;
5971 END IF;
5972 IF p_search_ctx THEN
5973 IF p_search_rec.SIC_CODE IS NOT NULL THEN
5974 x_stage_rec.TX46 :=
5975 HZ_TRANS_PKG.EXACT(
5976 p_search_rec.SIC_CODE
5977 ,null,'SIC_CODE'
5978 ,'PARTY');
5979 ELSE
5980 x_stage_rec.TX46 := '';
5981 END IF;
5982 END IF;
5983 l_party_name := p_search_rec.PARTY_NAME;
5984 IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
5985 l_party_name := p_search_rec.PARTY_ALL_NAMES;
5986 END IF;
5987 IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN
5988 x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,'PARTY_NAME','PARTY','SEARCH');
5989 END IF;
5990 EXCEPTION
5991 WHEN OTHERS THEN
5992 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
5993 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_REC');
5994 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
5995 FND_MSG_PUB.ADD;
5996 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5997 END;
5998
5999
6000 /************************************************
6001 This procedure maps a search record from the logical
6002 record structure to the stage schema structure
6003 for the PARTY_SITES Entity after applying
6004 the defined transformations
6005 ************************************************/
6006
6007 PROCEDURE MAP_PARTY_SITE_REC(
6008 p_search_ctx IN BOOLEAN,
6009 p_search_list IN HZ_PARTY_SEARCH.party_site_list,
6010 x_entered_max_score OUT NUMBER,
6011 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list
6012 ) IS
6013 l_current_max_score NUMBER;
6014 tmp VARCHAR2(4000);
6015 BEGIN
6016 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6017 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - MAP_PARTY_SITE_REC',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6018 END IF;
6019 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6020 hz_utility_v2pub.debug(p_message=>'p_entity - PARTY_SITES',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6021 END IF;
6022 IF p_search_ctx THEN
6023 g_ps_den_only:=TRUE;
6024 x_entered_max_score:=0;
6025 FOR I IN 1..p_search_list.COUNT LOOP
6026 l_current_max_score:=0;
6027 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6028 l_current_max_score := l_current_max_score+80;
6029 g_ps_den_only:=FALSE;
6030 END IF;
6031 IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN
6032 l_current_max_score := l_current_max_score+80;
6033 END IF;
6034 IF l_current_max_score>x_entered_max_score THEN
6035 x_entered_max_score:=l_current_max_score;
6036 END IF;
6037 END LOOP;
6038 END IF;
6039 FOR I IN 1..p_search_list.COUNT LOOP
6040 IF p_search_ctx THEN
6041 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6042 x_stage_list(I).TX4 :=
6043 HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6044 p_search_list(I).ADDRESS
6045 ,null,'ADDRESS'
6046 ,'PARTY_SITES','SEARCH');
6047 ELSE
6048 x_stage_list(I).TX4 := '';
6049 END IF;
6050 ELSE
6051 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6052 tmp := HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6053 x_stage_list(I).TX4
6054 ,null,'ADDRESS'
6055 ,'PARTY_SITES','SCORE');
6056 IF tmp IS NOT NULL THEN
6057 x_stage_list(I).TX4 := tmp;
6058 END IF;
6059 END IF;
6060 END IF;
6061 END LOOP;
6062 FOR I IN 1..p_search_list.COUNT LOOP
6063 IF p_search_ctx THEN
6064 IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN
6065 x_stage_list(I).TX11 :=
6066 HZ_TRANS_PKG.RM_SPLCHAR(
6067 p_search_list(I).POSTAL_CODE
6068 ,null,'POSTAL_CODE'
6069 ,'PARTY_SITES','SEARCH');
6070 ELSE
6071 x_stage_list(I).TX11 := '';
6072 END IF;
6073 ELSE
6074 IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN
6075 tmp := HZ_TRANS_PKG.RM_SPLCHAR(
6076 x_stage_list(I).TX11
6077 ,null,'POSTAL_CODE'
6078 ,'PARTY_SITES','SCORE');
6079 IF tmp IS NOT NULL THEN
6080 x_stage_list(I).TX11 := tmp;
6081 END IF;
6082 END IF;
6083 END IF;
6084 END LOOP;
6085 EXCEPTION
6086 WHEN OTHERS THEN
6087 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6088 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_SITE_REC');
6089 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6090 FND_MSG_PUB.ADD;
6091 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6092 END;
6093
6094
6095 /************************************************
6096 This procedure maps a search record from the logical
6097 record structure to the stage schema structure
6098 for the CONTACTS Entity after applying
6099 the defined transformations
6100 ************************************************/
6101
6102 PROCEDURE MAP_CONTACT_REC(
6103 p_search_ctx IN BOOLEAN,
6104 p_search_list IN HZ_PARTY_SEARCH.contact_list,
6105 x_entered_max_score OUT NUMBER,
6106 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list
6107 ) IS
6108 l_current_max_score NUMBER;
6109 tmp VARCHAR2(4000);
6110 BEGIN
6111 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6112 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - MAP_CONTACT_REC',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6113 END IF;
6114 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6115 hz_utility_v2pub.debug(p_message=>'p_entity - CONTACTS',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6116 END IF;
6117 IF p_search_ctx THEN
6118 x_entered_max_score:=0;
6119 FOR I IN 1..p_search_list.COUNT LOOP
6120 l_current_max_score:=0;
6121 IF l_current_max_score>x_entered_max_score THEN
6122 x_entered_max_score:=l_current_max_score;
6123 END IF;
6124 END LOOP;
6125 END IF;
6126 NULL;
6127 EXCEPTION
6128 WHEN OTHERS THEN
6129 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6130 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_REC');
6131 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6132 FND_MSG_PUB.ADD;
6133 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6134 END;
6135
6136
6137 /************************************************
6138 This procedure maps a search record from the logical
6139 record structure to the stage schema structure
6140 for the CONTACT_POINTS Entity after applying
6141 the defined transformations
6142 ************************************************/
6143
6144 PROCEDURE MAP_CONTACT_POINT_REC(
6145 p_search_ctx IN BOOLEAN,
6146 p_search_list IN HZ_PARTY_SEARCH.contact_point_list,
6147 x_entered_max_score OUT NUMBER,
6148 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list
6149 ) IS
6150 l_current_max_score NUMBER;
6151 tmp VARCHAR2(4000);
6152 TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);
6153 l_cnt_pt_type_index INDEX_VARCHAR100_TBL;
6154 TYPE CONTACT_PT_REC_TYPE IS RECORD (
6155 contact_pt_type VARCHAR2(100),
6156 max_score NUMBER) ;
6157 TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;
6158 l_cnt_pt_type contact_pt_list;
6159 N NUMBER := 1;
6160 x_modify VARCHAR2(1);
6161 BEGIN
6162 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6163 hz_utility_v2pub.debug(p_message=>'Inside Calling Procedure - MAP_CONTACT_POINT_REC',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6164 END IF;
6165 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6166 hz_utility_v2pub.debug(p_message=>'p_entity - CONTACT_POINTS',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
6167 END IF;
6168 IF p_search_ctx THEN
6169 x_entered_max_score:=0;
6170 FOR I IN 1..p_search_list.COUNT LOOP
6171 l_current_max_score:=0;
6172 x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;
6173 IF p_search_list(I).PHONE_NUMBER IS NOT NULL THEN
6174 l_current_max_score := l_current_max_score+70;
6175 END IF;
6176 x_modify := 'N';
6177 FOR J IN 1..l_cnt_pt_type.count LOOP
6178 if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then
6179 x_modify := 'Y';
6180 IF l_cnt_pt_type(J).max_score<l_current_max_score THEN
6181 l_cnt_pt_type(J).max_score :=l_current_max_score;
6182 EXIT;
6183 END IF;
6184 end if;
6185 END LOOP;
6186 if x_modify='N' then
6187 l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;
6188 l_cnt_pt_type(N).max_score := l_current_max_score;
6189 N:= N+1;
6190 end if;
6191 END LOOP;
6192 FOR M IN 1..l_cnt_pt_type.count LOOP
6193 x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;
6194 END LOOP;
6195 END IF;
6196 FOR I IN 1..p_search_list.COUNT LOOP
6197 IF p_search_ctx THEN
6198 IF p_search_list(I).PHONE_NUMBER IS NOT NULL THEN
6199 x_stage_list(I).TX2 :=
6200 HZ_TRANS_PKG.RM_SPLCHAR(
6201 p_search_list(I).PHONE_NUMBER
6202 ,null,'PHONE_NUMBER'
6203 ,'CONTACT_POINTS','SEARCH');
6204 ELSE
6205 x_stage_list(I).TX2 := '';
6206 END IF;
6207 ELSE
6208 IF p_search_list(I).PHONE_NUMBER IS NOT NULL THEN
6209 tmp := HZ_TRANS_PKG.RM_SPLCHAR(
6210 x_stage_list(I).TX2
6211 ,null,'PHONE_NUMBER'
6212 ,'CONTACT_POINTS','SCORE');
6213 IF tmp IS NOT NULL THEN
6214 x_stage_list(I).TX2 := tmp;
6215 END IF;
6216 END IF;
6217 END IF;
6218 END LOOP;
6219 EXCEPTION
6220 WHEN OTHERS THEN
6221 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6222 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_POINT_REC');
6223 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6224 FND_MSG_PUB.ADD;
6225 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6226 END;
6227
6228
6229 /************************************************
6230 This procedure checks if the input search criteria
6231 is valid. It checks if :
6232 1. At least one primary condition is passed
6233 2. Contact Point Type is not null for each condition
6234 ************************************************/
6235
6236 FUNCTION check_prim_cond(
6237 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
6238 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
6239 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
6240 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list)
6241 RETURN BOOLEAN IS
6242 BEGIN
6243 FOR I IN 1..p_contact_point_list.COUNT LOOP
6244 IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (
6245 p_contact_point_list(I).PHONE_NUMBER IS NOT NULL
6246 ) THEN
6247 FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
6248 FND_MSG_PUB.ADD;
6249 RAISE FND_API.G_EXC_ERROR;
6250 END IF;
6251 END LOOP;
6252
6253 IF p_party_search_rec.PARTY_NAME IS NOT NULL THEN
6254 RETURN TRUE;
6255 END IF;
6256 IF p_party_search_rec.JGZZ_FISCAL_CODE IS NOT NULL THEN
6257 RETURN TRUE;
6258 END IF;
6259 IF p_party_search_rec.SIC_CODE IS NOT NULL THEN
6260 RETURN TRUE;
6261 END IF;
6262 FOR I IN 1..p_party_site_list.COUNT LOOP
6263 IF p_party_site_list(I).ADDRESS IS NOT NULL THEN
6264 RETURN TRUE;
6265 END IF;
6266 END LOOP;
6267 FOR I IN 1..p_party_site_list.COUNT LOOP
6268 IF p_party_site_list(I).POSTAL_CODE IS NOT NULL THEN
6269 RETURN TRUE;
6270 END IF;
6271 END LOOP;
6272 FOR I IN 1..p_contact_point_list.COUNT LOOP
6273 IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL THEN
6274 RETURN TRUE;
6275 END IF;
6276 END LOOP;
6277 RETURN FALSE;
6278 EXCEPTION
6279 WHEN FND_API.G_EXC_ERROR THEN
6280 RAISE FND_API.G_EXC_ERROR;
6281 WHEN OTHERS THEN
6282 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6283 FND_MESSAGE.SET_TOKEN('PROC','check_prim_cond');
6284 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6285 FND_MSG_PUB.ADD;
6286 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6287 END check_prim_cond;
6288
6289 /************************************************
6290 This procedure checks if the input search condition
6291 has party site criteria.
6292 ************************************************/
6293
6294 PROCEDURE check_party_site_cond(
6295 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
6296 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
6297 x_secondary OUT BOOLEAN,
6298 x_primary OUT BOOLEAN
6299 ) IS
6300 BEGIN
6301 x_primary:= FALSE;
6302 x_secondary:= FALSE;
6303 FOR I IN 1..p_party_site_list.COUNT LOOP
6304 IF p_party_site_list(I).ADDRESS IS NOT NULL
6305 OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
6306 THEN
6307 x_primary := TRUE;
6308 END IF;
6309 EXIT WHEN x_primary;
6310 END LOOP;
6311 FOR I IN 1..p_contact_point_list.COUNT LOOP
6312 IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL
6313 THEN
6314 x_primary := TRUE;
6315 END IF;
6316 EXIT WHEN x_primary;
6317 END LOOP;
6318
6319 FOR I IN 1..p_party_site_list.COUNT LOOP
6320 IF p_party_site_list(I).ADDRESS IS NOT NULL
6321 OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
6322 THEN
6323 x_secondary := TRUE;
6324 END IF;
6325 EXIT WHEN x_secondary;
6326 END LOOP;
6327 FOR I IN 1..p_contact_point_list.COUNT LOOP
6328 IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL
6329 THEN
6330 x_secondary := TRUE;
6331 END IF;
6332 EXIT WHEN x_secondary;
6333 END LOOP;
6334 EXCEPTION
6335 WHEN OTHERS THEN
6336 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6337 FND_MESSAGE.SET_TOKEN('PROC','check_party_site_cond');
6338 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6339 FND_MSG_PUB.ADD;
6340 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6341 END check_party_site_cond;
6342
6343 /************************************************
6344 This procedure checks if the input search condition
6345 has contact criteria.
6346 ************************************************/
6347
6348 PROCEDURE check_contact_cond(
6349 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
6350 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
6351 x_secondary OUT BOOLEAN,
6352 x_primary OUT BOOLEAN
6353 ) IS
6354 BEGIN
6355 x_primary:= FALSE;
6356 x_secondary:= FALSE;
6357 FOR I IN 1..p_contact_list.COUNT LOOP
6358 NULL;
6359 END LOOP;
6360
6361 FOR I IN 1..p_contact_point_list.COUNT LOOP
6362 IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL
6363 THEN
6364 x_primary := TRUE;
6365 END IF;
6366 EXIT WHEN x_primary;
6367 END LOOP;
6368
6369 FOR I IN 1..p_contact_list.COUNT LOOP
6370 NULL;
6371 END LOOP;
6372
6373 FOR I IN 1..p_contact_point_list.COUNT LOOP
6374 IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL
6375 THEN
6376 x_secondary := TRUE;
6377 END IF;
6378 EXIT WHEN x_secondary;
6379 END LOOP;
6380 EXCEPTION
6381 WHEN OTHERS THEN
6382 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6383 FND_MESSAGE.SET_TOKEN('PROC','check_contact_cond');
6384 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6385 FND_MSG_PUB.ADD;
6386 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6387 END check_contact_cond;
6388
6389 /************************************************
6390 This procedure checks if the input search condition
6391 has valid contact point criteria.
6392 ************************************************/
6393
6394 PROCEDURE check_contact_point_cond(
6395 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
6396 x_secondary OUT BOOLEAN,
6397 x_primary OUT BOOLEAN
6398 ) IS
6399 BEGIN
6400 x_primary:= FALSE;
6401 x_secondary:= FALSE;
6402
6403 FOR I IN 1..p_contact_point_list.COUNT LOOP
6404 IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN
6405 FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
6406 FND_MSG_PUB.ADD;
6407 RAISE FND_API.G_EXC_ERROR;
6408 END IF;
6409 END LOOP;
6410
6411 FOR I IN 1..p_contact_point_list.COUNT LOOP
6412 IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL
6413 THEN
6414 x_primary := TRUE;
6415 END IF;
6416 EXIT WHEN x_primary;
6417 END LOOP;
6418 FOR I IN 1..p_contact_point_list.COUNT LOOP
6419 IF p_contact_point_list(I).PHONE_NUMBER IS NOT NULL
6420 THEN
6421 x_secondary := TRUE;
6422 END IF;
6423 EXIT WHEN x_secondary;
6424 END LOOP;
6425 EXCEPTION
6426 WHEN OTHERS THEN
6427 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6428 FND_MESSAGE.SET_TOKEN('PROC','check_contact_point_cond');
6429 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6430 FND_MSG_PUB.ADD;
6431 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6432 END check_contact_point_cond;
6433
6434 FUNCTION check_staged RETURN BOOLEAN IS
6435
6436 CURSOR c_check_staged IS
6437 SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL
6438 WHERE nvl(STAGED_FLAG,'N') = 'N'
6439 AND FUNCTION_ID in (
6440 8
6441 ,50
6442 ,51
6443 ,67
6444 ,74
6445 ,111
6446 );
6447 l_tmp NUMBER;
6448 BEGIN
6449 IF g_staged = 1 THEN
6450 RETURN TRUE;
6451 ELSIF g_staged = 0 THEN
6452 RETURN FALSE;
6453 END IF;
6454
6455 OPEN c_check_staged;
6456 FETCH c_check_staged INTO l_tmp;
6457 IF c_check_staged%FOUND THEN
6458 CLOSE c_check_staged;
6459 g_staged := 0;
6460 RETURN FALSE;
6461 ELSE
6462 CLOSE c_check_staged;
6463 g_staged := 1;
6464 RETURN TRUE;
6465 END IF;
6466 END check_staged;
6467
6468 -- Fix for Bug 4736139
6469 FUNCTION check_staged_var RETURN VARCHAR2 IS
6470 l_staged VARCHAR2(1);
6471 l_staged_bool BOOLEAN;
6472 BEGIN
6473 l_staged_bool := check_staged;
6474 IF l_staged_bool THEN
6475 l_staged := 'Y';
6476 ELSE
6477 l_staged := 'N';
6478 END IF;
6479 RETURN l_staged;
6480 END check_staged_var;
6481 -- End fix for Bug 4736139
6482
6483 END;
6484