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