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 | 28-NOV-2012 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
75 l_hits NUMBER := 0;
72 ustatus VARCHAR2(255);
73 dstatus VARCHAR2(255);
74 l_bool BOOLEAN;
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;
197 total := total+80;
194 RETURN total;
195 END IF;
196 ELSIF HZ_DQM_SEARCH_UTIL.is_match(g_party_stage_rec.TX4, p_table_TX4,8) THEN
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
489 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX8, p_table_TX8,(50000*(p_idx-1)+12)) 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;
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;
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);
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
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;
676 END IF;
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;
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
791 WHEN OTHERS THEN
788 HZ_WORD_CONDITIONS_PKG.set_gbl_condition_rec (36,p_search_list(1).COUNTRY);
789 END IF ;
790 EXCEPTION
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
909 g_mappings.DELETE;
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;
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';
1020 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1017 call_type(3) := 'AND';
1018 call_type(4) := 'AND';
1019 END IF;
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;
1079 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);
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
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);
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
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;
1296 END IF;
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);
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;
1326 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);
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
1341 l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
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 ';
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
1430 ,g_party_site_stage_list(1).TX22
1427 ,g_party_site_stage_list(1).TX14
1428 ,g_party_site_stage_list(1).TX14
1429 ,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 /*+ INDEX(stage HZ_STAGE_PARTIES_T1) */ 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
1513 ELSE
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) */';
1514 l_hint := '/*+ INDEX(stage HZ_STAGE_PARTIES_T1) */';
1515 END IF;
1516 IF p_search_ctx_id IS NULL THEN
1517 l_sqlstr := 'SELECT ' || l_hint || ' PARTY_ID , TX4, TX8, TX19, TX34, TX36, TX46'||
1518 ' FROM HZ_STAGED_PARTIES stage'||
1519 ' WHERE contains( concat_col, :cont)>0'||
1520 ' AND ((:TX36 IS NULL OR :TX36||'' '' = stage.TX36))'||
1521 ' AND ('||p_restrict_sql||')' ||
1522 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1523 IF l_search_merged = 'Y' THEN
1524 l_sqlstr := l_sqlstr ;
1525 ELSIF l_search_merged = 'I' THEN
1526 l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'', ''I'')';
1527 ELSE
1528 l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'')';
1529 END IF;
1530 output_long_strings('----------------------------------------------------------');
1531 output_long_strings('Party Contains String = '||p_contains_str);
1532 output_long_strings('Restrict Sql = '||p_restrict_sql);
1533 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1534 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1535 ,p_dup_party_id, p_dup_party_id;
1536 END IF;
1537 END IF;
1538 exception
1539 when others then
1540 if (instrb(SQLERRM,'DRG-51030')>0) then
1541 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1542 FND_MSG_PUB.ADD;
1543 RAISE FND_API.G_EXC_ERROR;
1544 elsif (instrb(SQLERRM,'DRG-50943')>0) then
1545 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1546 FND_MSG_PUB.ADD;
1547 RAISE FND_API.G_EXC_ERROR;
1548 elsif (instrb(SQLERRM,'ORA-20000')>0) then
1549 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1550 FND_MSG_PUB.ADD;
1551 RAISE FND_API.G_EXC_ERROR;
1552 else
1553 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1554 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1555 FND_MSG_PUB.ADD;
1556 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1557 end if;
1558 END;
1559
1560 PROCEDURE open_party_site_cursor(
1561 p_dup_party_id NUMBER,
1562 p_party_id NUMBER,
1563 p_restrict_sql VARCHAR2,
1564 p_contains_str VARCHAR2,
1565 p_search_ctx_id NUMBER,
1566 p_search_merged VARCHAR2,
1567 p_search_rel_sites VARCHAR2,
1568 p_person_api VARCHAR2,
1569 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1570 l_sqlstr VARCHAR2(4000);
1571 l_hint VARCHAR2(100);
1572 l_check NUMBER;
1573 l_check_dt NUMBER;
1574 l_search_merged VARCHAR2(1);
1575 l_status_sql VARCHAR2(100);
1576 p_restrict_sql1 VARCHAR2(4000);
1577
1578 BEGIN
1579 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1580 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);
1581 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);
1582 END IF;
1583 IF (p_search_merged is null) then
1584 l_search_merged := 'N';
1585 ELSE
1586 l_search_merged := p_search_merged;
1587 END IF;
1588 IF p_party_id IS NOT NULL THEN
1589 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1590 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);
1591 END IF;
1592 IF p_search_rel_sites = 'N' THEN
1593 OPEN x_cursor FOR
1594 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX4, TX10, TX14, TX22
1595 FROM HZ_STAGED_PARTY_SITES stage
1596 WHERE contains( concat_col, p_contains_str)>0
1597 AND( (l_search_merged ='Y' )
1598 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1599 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1600 AND stage.party_id = p_party_id;
1601 ELSE
1602 OPEN x_cursor FOR
1603 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX4, TX10, TX14, TX22
1604 FROM HZ_STAGED_PARTY_SITES stage
1605 WHERE contains( concat_col, p_contains_str)>0
1606 AND( (l_search_merged ='Y' )
1607 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1608 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1609 AND stage.party_id = p_party_id
1610 UNION
1611 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, stage.PARTY_ID, stage.ORG_CONTACT_ID, TX4, TX10, TX14, TX22
1612 FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc
1613 WHERE contains( concat_col, p_contains_str)>0
1614 AND( (l_search_merged ='Y' )
1615 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1616 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1617 AND r.object_id = p_party_id
1618 AND r.subject_id = stage.party_id
1619 AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
1620 AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES'
1621 AND r.relationship_id = oc.party_relationship_id
1622 AND oc.org_contact_id = stage.org_contact_id;
1623 END IF;
1624 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1625 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1626 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);
1627 END IF;
1628 IF p_search_ctx_id IS NULL THEN
1629 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1630 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);
1631 END IF;
1632 OPEN x_cursor FOR
1633 SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX4, TX10, TX14, TX22
1634 FROM HZ_STAGED_PARTY_SITES stage
1635 WHERE contains( concat_col, p_contains_str)>0
1636 AND EXISTS (
1637 SELECT 1 FROM HZ_STAGED_PARTIES p
1638 WHERE p.PARTY_ID = stage.PARTY_ID
1639 AND( (l_search_merged ='Y' )
1640 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
1641 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
1642 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
1643 AND( (l_search_merged ='Y' )
1644 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1645 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1646 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1647 ELSE
1648 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1649 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);
1650 END IF;
1651 IF p_person_api = 'Y' THEN
1652 OPEN x_cursor FOR
1653 SELECT PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX4, TX10, TX14, TX22
1654 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
1655 WHERE contains( concat_col, p_contains_str)>0
1656 AND( (l_search_merged ='Y' )
1657 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1658 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1659 AND d.search_context_id = p_search_ctx_id
1660 AND d.party_id = stage.party_id
1661 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
1662 UNION
1663 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ stage.PARTY_SITE_ID, r.subject_id, stage.ORG_CONTACT_ID, TX4, TX10, TX14, TX22
1664 FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage
1665 WHERE contains( concat_col, p_contains_str)>0
1666 AND( (l_search_merged ='Y' )
1667 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1668 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1669 AND d.search_context_id = p_search_ctx_id
1670 AND d.party_id = r.subject_id
1671 AND r.relationship_id = oc.party_relationship_id
1672 AND oc.org_contact_id = stage.org_contact_id
1673 AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
1674 ELSE
1675 OPEN x_cursor FOR
1676 SELECT PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX4, TX10, TX14, TX22
1677 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
1678 WHERE contains( concat_col, p_contains_str)>0
1679 AND( (l_search_merged ='Y' )
1680 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1681 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1682 AND d.search_context_id = p_search_ctx_id
1683 AND d.party_id = stage.party_id
1684 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1685 END IF;
1686 END IF;
1687 ELSE
1688 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1689 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);
1690 END IF;
1691 l_check := instrb(p_restrict_sql, 'SELECTIVE');
1692 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_PS');
1693 IF (l_check_dt > 0 ) THEN
1694 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1695 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);
1696 END IF;
1697 l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */';
1698 ELSIF (l_check > 0 ) THEN
1699 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1700 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);
1701 END IF;
1702 l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */';
1703 END IF;
1704 IF l_search_merged = 'Y' THEN
1705 l_status_sql := ' ' ;
1706 ELSIF l_search_merged = 'I' THEN
1707 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
1708 ELSE
1709 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
1710 END IF;
1711 /*Performance fix for Bug:4589953*/
1712 IF(p_person_api='Y') THEN
1713 IF (l_check > 0 ) THEN
1714 IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN
1715 p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
1716 ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN
1717 p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
1718 ELSE
1719 p_restrict_sql1 := 'stage1.'||p_restrict_sql;
1720 END IF;
1721 l_sqlstr := 'SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX4, TX10, TX14, TX22'||
1722 ' FROM HZ_STAGED_PARTY_SITES stage'||
1723 ' WHERE contains( concat_col, :cont)>0'||
1724 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1725 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1726 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1727 ' AND (ORG_CONTACT_ID IS NULL ' ||
1728 ' AND ('||p_restrict_sql||'))' ||
1729 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
1730 ' UNION ' ||
1731 'SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX4, TX10, TX14, TX22'||
1732 ' FROM HZ_STAGED_PARTY_SITES stage'||
1733 ' WHERE contains( concat_col, :cont)>0'||
1734 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1735 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1736 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1737 ' AND ORG_CONTACT_ID IN ' ||
1738 ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships ' ||
1739 ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
1740 ' where stage1.relationship_id = oc.party_relationship_id ' ||
1741 ' and ('||p_restrict_sql1|| ') )' ||
1742 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1743 OPEN x_cursor FOR l_sqlstr USING p_contains_str,
1747 ' FROM HZ_STAGED_PARTY_SITES stage'||
1744 p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
1745 ELSE
1746 l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX4, TX10, TX14, TX22'||
1748 ' WHERE contains( concat_col, :cont)>0'||
1749 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1750 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1751 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1752 ' AND EXISTS ('||
1753 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
1754 ' WHERE p.party_id = stage.party_id ' ||
1755 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
1756 ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
1757 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1758 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1759 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1760 ,p_dup_party_id, p_dup_party_id;
1761 END IF;
1762 ELSE
1763 l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX4, TX10, TX14, TX22'||
1764 ' FROM HZ_STAGED_PARTY_SITES stage'||
1765 ' WHERE contains( concat_col, :cont)>0'||
1766 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1767 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1768 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1769 ' AND EXISTS ('||
1770 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
1771 ' WHERE p.party_id = stage.party_id ' ||
1772 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
1773 ' AND ('||p_restrict_sql||')' ||
1774 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1775 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1776 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1777 ,p_dup_party_id, p_dup_party_id;
1778 END IF;
1779 END IF;
1780 output_long_strings('----------------------------------------------------------');
1781 output_long_strings('Party Site Contains String = '||p_contains_str);
1782 output_long_strings('Restrict Sql = '||p_restrict_sql);
1783 exception
1784 when others then
1785 if (instrb(SQLERRM,'DRG-51030')>0) then
1786 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1787 FND_MSG_PUB.ADD;
1788 RAISE FND_API.G_EXC_ERROR;
1789 elsif (instrb(SQLERRM,'DRG-50943')>0) then
1790 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1791 FND_MSG_PUB.ADD;
1792 RAISE FND_API.G_EXC_ERROR;
1793 elsif (instrb(SQLERRM,'ORA-20000')>0) then
1794 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1795 FND_MSG_PUB.ADD;
1796 RAISE FND_API.G_EXC_ERROR;
1797 else
1798 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1799 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1800 FND_MSG_PUB.ADD;
1801 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1802 end if;
1803 END;
1804
1805 PROCEDURE open_contact_cursor(
1806 p_dup_party_id NUMBER,
1807 p_party_id NUMBER,
1808 p_restrict_sql VARCHAR2,
1809 p_contains_str VARCHAR2,
1810 p_search_ctx_id NUMBER,
1811 p_search_merged VARCHAR2,
1812 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1813 l_sqlstr VARCHAR2(4000);
1814 l_hint VARCHAR2(100);
1815 l_check NUMBER;
1816 l_check_dt NUMBER;
1817 l_search_merged VARCHAR2(1);
1818 l_status_sql VARCHAR2(100);
1819
1820 BEGIN
1821 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1822 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);
1823 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);
1824 END IF;
1825 IF (p_search_merged is null) then
1826 l_search_merged := 'N';
1827 ELSE
1828 l_search_merged := p_search_merged;
1829 END IF;
1830 IF p_party_id IS NOT NULL THEN
1831 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1832 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);
1833 END IF;
1834 OPEN x_cursor FOR
1835 SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID
1836 FROM HZ_STAGED_CONTACTS stage
1837 WHERE contains( concat_col, p_contains_str)>0
1838 AND EXISTS (
1839 SELECT 1 FROM HZ_STAGED_PARTIES p
1840 WHERE p.PARTY_ID = stage.PARTY_ID
1841 AND( (l_search_merged ='Y' )
1842 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
1843 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
1844 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
1845 AND( (l_search_merged ='Y' )
1846 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1847 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1848 AND stage.party_id = p_party_id;
1849 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1850 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1854 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1851 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);
1852 END IF;
1853 IF p_search_ctx_id IS NULL THEN
1855 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);
1856 END IF;
1857 OPEN x_cursor FOR
1858 SELECT ORG_CONTACT_ID, PARTY_ID
1859 FROM HZ_STAGED_CONTACTS stage
1860 WHERE contains( concat_col, p_contains_str)>0
1861 AND EXISTS (
1862 SELECT 1 FROM HZ_STAGED_PARTIES p
1863 WHERE p.PARTY_ID = stage.PARTY_ID
1864 AND( (l_search_merged ='Y' )
1865 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
1866 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
1867 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
1868 AND( (l_search_merged ='Y' )
1869 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1870 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1871 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1872 ELSE
1873 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1874 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);
1875 END IF;
1876 OPEN x_cursor FOR
1877 SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID
1878 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage
1879 WHERE contains( concat_col, p_contains_str)>0
1880 AND d.search_context_id = p_search_ctx_id
1881 AND d.party_id = stage.party_id
1882 AND( (l_search_merged ='Y' )
1883 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1884 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1885 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1886 END IF;
1887 ELSE
1888 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1889 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);
1890 END IF;
1891 l_check := instrb(p_restrict_sql, 'SELECTIVE');
1892 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CT');
1893 IF (l_check_dt > 0 ) THEN
1894 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1898 ELSIF (l_check > 0 ) THEN
1895 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);
1896 END IF;
1897 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */';
1899 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1900 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);
1901 END IF;
1902 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */';
1903 END IF;
1904 IF l_search_merged = 'Y' THEN
1905 l_status_sql := ' ' ;
1906 ELSIF l_search_merged = 'I' THEN
1907 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
1908 ELSE
1909 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
1910 END IF;
1911 l_sqlstr := 'SELECT ' || l_hint || ' ORG_CONTACT_ID, PARTY_ID '||
1912 ' FROM HZ_STAGED_CONTACTS stage'||
1913 ' WHERE contains( concat_col, :cont)>0'||
1914 ' AND EXISTS ('||
1915 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
1916 ' WHERE p.party_id = stage.party_id ' ||
1917 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
1918 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1919 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1920 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1921 ' AND ('||p_restrict_sql||')' ||
1922 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1923 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1924 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1925 ,p_dup_party_id, p_dup_party_id;
1926 END IF;
1930 exception
1927 output_long_strings('----------------------------------------------------------');
1928 output_long_strings('Contacts Contains String = '||p_contains_str);
1929 output_long_strings('Restrict Sql = '||p_restrict_sql);
1931 when others then
1932 if (instrb(SQLERRM,'DRG-51030')>0) then
1933 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1934 FND_MSG_PUB.ADD;
1935 RAISE FND_API.G_EXC_ERROR;
1936 elsif (instrb(SQLERRM,'DRG-50943')>0) then
1937 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1938 FND_MSG_PUB.ADD;
1939 RAISE FND_API.G_EXC_ERROR;
1940 elsif (instrb(SQLERRM,'ORA-20000')>0) then
1941 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1942 FND_MSG_PUB.ADD;
1943 RAISE FND_API.G_EXC_ERROR;
1944 else
1945 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1946 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1947 FND_MSG_PUB.ADD;
1948 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1949 end if;
1950 END;
1951
1952 PROCEDURE open_contact_pt_cursor(
1953 p_dup_party_id NUMBER,
1954 p_party_id NUMBER,
1955 p_restrict_sql VARCHAR2,
1956 p_contains_str VARCHAR2,
1957 p_search_ctx_id NUMBER,
1958 p_search_merged VARCHAR2,
1959 p_search_rel_cpts VARCHAR2,
1960 p_person_api VARCHAR2,
1961 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,
1962 p_restrict_entity VARCHAR2 DEFAULT NULL) IS
1963 l_sqlstr VARCHAR2(4000);
1964 l_hint VARCHAR2(100);
1965 l_check NUMBER;
1966 l_check_dt NUMBER;
1967 l_search_merged VARCHAR2(1);
1968 l_status_sql VARCHAR2(100);
1969 p_restrict_sql1 VARCHAR2(4000);
1970
1971 BEGIN
1972 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1973 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);
1974 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);
1975 END IF;
1976 IF (p_search_merged is null) then
1977 l_search_merged := 'N';
1978 ELSE
1979 l_search_merged := p_search_merged;
1980 END IF;
1981 IF p_restrict_entity = 'CONTACTS'
1982 THEN
1983 OPEN x_cursor FOR
1984 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
1985 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
1986 WHERE contains( concat_col, p_contains_str)>0
1987 AND d.search_context_id = p_search_ctx_id
1988 AND( (l_search_merged ='Y' )
1989 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1990 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1991 AND d.party_id = stage.org_contact_id ;
1992 END IF;
1993 IF p_restrict_entity = 'PARTY_SITES'
1994 THEN
1995 OPEN x_cursor FOR
1996 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
1997 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
1998 WHERE contains( concat_col, p_contains_str)>0
1999 AND d.search_context_id = p_search_ctx_id
2000 AND( (l_search_merged ='Y' )
2001 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2002 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2003 AND d.party_id = stage.party_site_id ;
2004 END IF;
2005 IF p_restrict_entity IS NULL
2006 THEN
2007 IF p_party_id IS NOT NULL THEN
2008 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2009 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);
2010 END IF;
2011 IF p_search_rel_cpts = 'N' THEN
2012 OPEN x_cursor FOR
2013 SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID
2014 FROM HZ_STAGED_CONTACT_POINTS stage
2015 WHERE contains( concat_col, p_contains_str)>0
2016 AND( (l_search_merged ='Y' )
2017 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2018 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2019 AND stage.party_id = p_party_id;
2025 AND( (l_search_merged ='Y' )
2020 ELSE
2021 OPEN x_cursor FOR
2022 SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID
2023 FROM HZ_STAGED_CONTACT_POINTS stage
2024 WHERE contains( concat_col, p_contains_str)>0
2026 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2027 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2028 AND stage.party_id = p_party_id
2029 UNION
2030 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
2031 FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc
2032 WHERE contains( concat_col, p_contains_str)>0
2033 AND r.object_id = p_party_id
2034 AND( (l_search_merged ='Y' )
2035 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2036 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2037 AND r.subject_id = stage.party_id
2038 AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
2039 AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES'
2040 AND r.relationship_id = oc.party_relationship_id
2041 AND oc.org_contact_id = stage.org_contact_id;
2042 END IF;
2043 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2044 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2045 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);
2046 END IF;
2047 IF p_search_ctx_id IS NULL THEN
2048 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2049 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);
2050 END IF;
2051 OPEN x_cursor FOR
2052 SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID
2053 FROM HZ_STAGED_CONTACT_POINTS stage
2054 WHERE contains( concat_col, p_contains_str)>0
2055 AND EXISTS (
2056 SELECT 1 FROM HZ_STAGED_PARTIES p
2057 WHERE p.PARTY_ID = stage.PARTY_ID
2058 AND( (l_search_merged ='Y' )
2059 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
2060 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
2061 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
2062 AND( (l_search_merged ='Y' )
2063 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2064 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2065 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2066 ELSE
2067 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2068 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);
2069 END IF;
2070 IF p_person_api = 'Y' THEN
2071 OPEN x_cursor FOR
2072 SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID
2073 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2074 WHERE contains( concat_col, p_contains_str)>0
2075 AND d.search_context_id = p_search_ctx_id
2076 AND d.party_id = stage.party_id
2077 AND( (l_search_merged ='Y' )
2078 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2079 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2080 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2081 UNION
2082 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
2083 FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage
2084 WHERE contains( concat_col, p_contains_str)>0
2085 AND d.search_context_id = p_search_ctx_id
2086 AND d.party_id = r.subject_id
2087 AND r.relationship_id = oc.party_relationship_id
2088 AND oc.org_contact_id = stage.org_contact_id
2089 AND( (l_search_merged ='Y' )
2090 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2091 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2092 AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2093 ELSE
2094 OPEN x_cursor FOR
2095 SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID
2096 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2097 WHERE contains( concat_col, p_contains_str)>0
2098 AND d.search_context_id = p_search_ctx_id
2099 AND d.party_id = stage.party_id
2100 AND( (l_search_merged ='Y' )
2101 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2102 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2103 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2104 END IF;
2105 END IF;
2106 ELSE
2107 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2108 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);
2109 END IF;
2110 l_check := instrb(p_restrict_sql, 'SELECTIVE');
2111 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CPT');
2112 IF (l_check_dt > 0 ) THEN
2113 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2114 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);
2115 END IF;
2116 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */';
2117 ELSIF (l_check > 0 ) THEN
2118 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2119 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);
2120 END IF;
2121 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */';
2122 END IF;
2123 IF l_search_merged = 'Y' THEN
2124 l_status_sql := ' ' ;
2128 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
2125 ELSIF l_search_merged = 'I' THEN
2126 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
2127 ELSE
2129 END IF;
2130 IF p_person_api = 'Y' THEN
2131 /*Performance fix for Bug:4589953*/
2132 IF (l_check > 0 ) THEN
2133 IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN
2134 p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2135 ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN
2136 p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2137 ELSE
2138 p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2139 END IF;
2140 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 '||
2141 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2142 ' WHERE contains( concat_col, :cont)>0 '||
2143 ' AND (stage.org_contact_id is null '||
2144 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2145 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2146 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2147 ' AND ('||p_restrict_sql||'))' ||
2148 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2149 ' UNION ' ||
2150 ' SELECT /*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N2) */ CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '||
2151 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2152 ' WHERE contains( concat_col, :cont)>0 '||
2153 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2154 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2155 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2156 ' AND (stage.org_contact_id in ' ||
2157 ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r ' ||
2158 ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
2159 ' where stage1.relationship_id = oc.party_relationship_id ' ||
2160 ' and ('||p_restrict_sql1 || ') ) )' ||
2161 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2162 OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2163 p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2164 ELSE
2165 l_sqlstr := 'SELECT ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '||
2166 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2167 ' WHERE contains( concat_col, :cont)>0'||
2168 ' AND EXISTS ('||
2169 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2170 ' WHERE p.party_id = stage.party_id ' ||
2171 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2172 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2173 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2174 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2175 ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2176 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2177 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2178 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2179 ,p_dup_party_id, p_dup_party_id;
2180 END IF;
2181 ELSE
2182 l_sqlstr := 'SELECT ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID '||
2183 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2184 ' WHERE contains( concat_col, :cont)>0'||
2185 ' AND EXISTS ('||
2186 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2187 ' WHERE p.party_id = stage.party_id ' ||
2188 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2189 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2190 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2191 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2192 ' AND ('||p_restrict_sql||')' ||
2193 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2194 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2195 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2196 ,p_dup_party_id, p_dup_party_id;
2197 END IF;
2198 END IF;
2199 END IF;
2200 output_long_strings('----------------------------------------------------------');
2201 output_long_strings('Contact Points Contains String = '||p_contains_str);
2202 output_long_strings('Restrict Sql = '||p_restrict_sql);
2203 exception
2204 when others then
2205 if (instrb(SQLERRM,'DRG-51030')>0) then
2206 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2207 FND_MSG_PUB.ADD;
2208 RAISE FND_API.G_EXC_ERROR;
2209 elsif (instrb(SQLERRM,'DRG-50943')>0) then
2210 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2211 FND_MSG_PUB.ADD;
2212 RAISE FND_API.G_EXC_ERROR;
2213 elsif (instrb(SQLERRM,'ORA-20000')>0) then
2214 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2215 FND_MSG_PUB.ADD;
2216 RAISE FND_API.G_EXC_ERROR;
2217 else
2218 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2219 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2220 FND_MSG_PUB.ADD;
2221 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2222 end if;
2223 END;
2224
2225
2226 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
2227 l_sqlstr VARCHAR2(4000);
2228 l_search_merged VARCHAR2(1);
2229 BEGIN
2230 IF (p_search_merged is null) then
2231 l_search_merged := 'N';
2232 ELSE
2233 l_search_merged := p_search_merged;
2234 END IF;
2235 IF p_restrict_sql IS NULL THEN
2236 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
2237 SELECT p_search_ctx_id, PARTY_ID, 100
2238 FROM hz_staged_parties
2239 WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
2240 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = TX36))
2241 AND( (l_search_merged ='Y' )
2242 OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))
2243 OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))
2244 AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)
2245 AND rownum <= p_thresh;
2246 ELSE
2247 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 ';
2248 l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
2249 l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' = TX36) ';
2250 IF l_search_merged = 'N' THEN
2251 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
2252 ELSIF l_search_merged = 'Y' THEN
2253 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
2254 END IF;
2255 l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
2256 l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
2257 l_sqlstr := l_sqlstr || ' AND ROWNUM <= :thresh ';
2258 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;
2259 END IF;
2260 x_num_matches := SQL%ROWCOUNT;
2261 END;
2262
2263 FUNCTION get_new_score_rec (
2264 p_init_total_score NUMBER,
2265 p_init_party_score NUMBER,
2266 p_init_party_site_score NUMBER,
2267 p_init_contact_score NUMBER,
2268 p_init_contact_point_score NUMBER,
2269 p_party_id NUMBER,
2270 p_party_site_id NUMBER,
2271 p_org_contact_id NUMBER,
2272 p_contact_point_id NUMBER)
2273 RETURN HZ_PARTY_SEARCH.score_rec IS
2274 l_score_rec HZ_PARTY_SEARCH.score_rec;
2275 BEGIN
2276 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2277 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);
2278 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);
2279 END IF;
2280 l_score_rec.TOTAL_SCORE := p_init_total_score;
2281 l_score_rec.PARTY_SCORE := p_init_party_score;
2282 l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;
2283 l_score_rec.CONTACT_SCORE := p_init_contact_score;
2284 l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;
2285 l_score_rec.PARTY_ID := p_party_id;
2286 l_score_rec.PARTY_SITE_ID := p_party_site_id;
2287 l_score_rec.ORG_CONTACT_ID := p_org_contact_id;
2288 l_score_rec.CONTACT_POINT_ID := p_contact_point_id;
2289 RETURN l_score_rec;
2290 END;
2291
2292 /**********************************************************
2293 This procedure finds the set of parties that match the search
2294 criteria and returns a scored set of parties
2295
2296 The steps in executing the search are as follows
2297 1. Initialization and error checks
2298 2. Setup of intermedia query strings for Acquisition query
2299 3. Execution of Acquisition query
2300 4. Execution of Secondary queries to score results
2301 5. Setup of data temporary table to return search results
2302 **********************************************************/
2303
2304 PROCEDURE find_parties (
2305 p_rule_id IN NUMBER,
2306 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
2307 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
2308 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
2309 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
2310 p_restrict_sql IN VARCHAR2,
2311 p_match_type IN VARCHAR2,
2312 p_search_merged IN VARCHAR2,
2313 p_dup_party_id IN NUMBER,
2314 p_dup_set_id IN NUMBER,
2315 p_dup_batch_id IN NUMBER,
2316 p_ins_details IN VARCHAR2,
2317 x_search_ctx_id OUT NUMBER,
2318 x_num_matches OUT NUMBER
2319 ) IS
2320
2321 -- Strings to hold the generated Intermedia query strings
2322 l_party_contains_str VARCHAR2(32000);
2323 l_party_site_contains_str VARCHAR2(32000);
2324 l_contact_contains_str VARCHAR2(32000);
2325 l_contact_pt_contains_str VARCHAR2(32000);
2326 l_denorm_str VARCHAR2(32000);
2327 l_ps_denorm_str VARCHAR2(32000);
2328 l_ct_denorm_str VARCHAR2(32000);
2329 l_cpt_denorm_str VARCHAR2(32000);
2330
2331 -- Other local variables
2332 l_match_str VARCHAR2(30); -- Match type (AND or OR)
2333 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
2334 -- For Score calculation
2335 l_max_score NUMBER;
2336 l_match_idx NUMBER;
2337 l_entered_max_score NUMBER;
2338 FIRST BOOLEAN;
2339 l_search_ctx_id NUMBER; -- Generated Search Context ID
2340
2341 l_TX19 VARCHAR2(2000);
2342 l_TX46 VARCHAR2(2000);
2343 l_TX22 VARCHAR2(2000);
2344 l_TX4 VARCHAR2(2000);
2345 l_TX10 VARCHAR2(2000);
2346 l_TX8 VARCHAR2(2000);
2347 l_TX34 VARCHAR2(2000);
2348 l_TX36 VARCHAR2(2000);
2349 l_TX14 VARCHAR2(2000);
2350 H_SCORES HZ_PARTY_SEARCH.score_list;
2351 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
2352 H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
2353
2354 l_score NUMBER;
2355 l_idx NUMBER;
2356 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
2357 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
2358 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
2359 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
2360 l_party_id NUMBER;
2361 l_ps_party_id NUMBER;
2362 l_ct_party_id NUMBER;
2363 l_cpt_party_id NUMBER;
2364 l_cpt_ps_id NUMBER;
2365 l_cpt_contact_id NUMBER;
2366 l_cpt_type VARCHAR2(100);
2367 l_party_site_id NUMBER;
2368 l_org_contact_id NUMBER;
2369 l_contact_pt_id NUMBER;
2370 l_ps_contact_id NUMBER;
2371 l_party_max_score NUMBER;
2372 l_ps_max_score NUMBER;
2373 l_contact_max_score NUMBER;
2374 l_cpt_max_score NUMBER;
2375 l_denorm_max_score NUMBER;
2376 l_non_denorm_max_score NUMBER;
2377
2378 defpt NUMBER :=0;
2379 defps NUMBER :=0;
2380 defct NUMBER :=0;
2381 defcpt NUMBER :=0;
2382 l_index NUMBER;
2383 l_max_thresh NUMBER;
2384 l_tmp NUMBER;
2385 l_merge_flag VARCHAR2(1);
2386 l_num_eval NUMBER:=0;
2387
2388 --Fix for bug 4417124
2389 l_use_contact_addr_info BOOLEAN := TRUE;
2390 l_use_contact_cpt_info BOOLEAN := TRUE;
2391 l_use_contact_addr_flag VARCHAR2(1) := 'Y';
2392 l_use_contact_cpt_flag VARCHAR2(1) := 'Y';
2393
2394 L_RETURN_IMM_EXC EXCEPTION;
2395
2396
2397 /********************* Find Parties private procedures *******/
2398 PROCEDURE push_eval IS
2399 BEGIN
2400 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2401 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);
2402 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);
2403 END IF;
2404 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2405 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);
2406 END IF;
2407 H_PARTY_ID.DELETE;
2408 H_PARTY_ID_LIST.DELETE;
2409 H_SCORES.DELETE;
2410 g_mappings.DELETE;
2411 HZ_DQM_SEARCH_UTIL.set_num_eval(0);
2412 call_order(5) := call_order(1);
2413 call_type(5) := 'AND';
2414 call_max_score(5) := call_max_score(1);
2415 call_type(2) := 'OR';
2416 END;
2417
2418 /** Private procedure to acquire and score at party level ***/
2419 PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
2420 l_party_id_idx NUMBER:=1;
2421 l_ctx_id NUMBER;
2422 l_precalc_score BOOLEAN := FALSE;
2423 l_TX35_new varchar2(4000);
2424 BEGIN
2425 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2426 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);
2427 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);
2428 END IF;
2429 SAVEPOINT eval_start;
2430 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2431 l_ctx_id := l_search_ctx_id;
2432 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2433 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);
2434 END IF;
2435 FORALL I in 1..H_PARTY_ID.COUNT
2436 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2437 l_search_ctx_id,H_PARTY_ID(I));
2438 H_PARTY_ID.DELETE;
2439 H_PARTY_ID_LIST.DELETE;
2440 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2441 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2442 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);
2443 END IF;
2444 l_ctx_id := l_search_ctx_id;
2445 FORALL I in 1..H_PARTY_ID.COUNT
2446 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2447 l_search_ctx_id,H_PARTY_ID(I));
2448 l_party_id_idx := H_PARTY_ID.COUNT+1;
2449 ELSE
2450 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2451 and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
2452 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2453 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);
2454 END IF;
2455 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
2456 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2457 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);
2458 END IF;
2459 IF (l_party_site_contains_str IS NULL AND
2460 l_contact_contains_str IS NULL AND
2461 l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN
2462 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);
2463 RAISE L_RETURN_IMM_EXC;
2464 ELSE
2465 open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);
2466 END IF;
2467 ELSE
2468 IF p_index>1 THEN
2469 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2470 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);
2471 END IF;
2472 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2473 FND_MSG_PUB.ADD;
2474 RAISE FND_API.G_EXC_ERROR;
2475 ELSE
2476 push_eval;
2477 RETURN;
2478 END IF;
2479 END IF;
2480 END IF;
2481 l_ctx_id := NULL;
2482 l_party_id_idx := H_PARTY_ID.COUNT+1;
2483 END IF;
2484 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2485 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);
2486 END IF;
2487 IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
2488 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);
2489 END IF;
2490 LOOP
2491 FETCH l_party_cur INTO
2492 l_party_id , l_TX4, l_TX8, l_TX19, l_TX34, l_TX36, l_TX46;
2493 EXIT WHEN l_party_cur%NOTFOUND;
2494 l_index := map_id(l_party_id);
2495 l_score := GET_PARTY_SCORE(l_TX4,l_TX8,l_TX19,l_TX34,l_TX36,l_TX46);
2496 IF NOT H_SCORES.EXISTS(l_index) THEN
2497 H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
2498 ELSE
2499 H_SCORES(l_index).TOTAL_SCORE :=
2500 H_SCORES(l_index).TOTAL_SCORE+l_score;
2501 H_SCORES(l_index).PARTY_SCORE := l_score;
2502 END IF;
2503 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2504 H_PARTY_ID_LIST(l_index) := 1;
2505 H_PARTY_ID(l_party_id_idx) := l_party_id;
2506 l_party_id_idx:= l_party_id_idx+1;
2507 END IF;
2508 IF (l_party_id_idx-1)>l_max_thresh THEN
2509 IF p_index=1 AND call_order(2) = 'PARTY_SITE'
2510 AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
2511 AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL'
2512 AND l_contact_pt_contains_str IS NULL THEN
2513 EXIT;
2514 END IF;
2515 CLOSE l_party_cur;
2516 IF p_index>1 THEN
2517 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2521 FND_MSG_PUB.ADD;
2518 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);
2519 END IF;
2520 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2522 RAISE FND_API.G_EXC_ERROR;
2523 ELSE
2524 push_eval;
2525 RETURN;
2526 END IF;
2527 END IF;
2528 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2529 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);
2530 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);
2531 END IF;
2532 END LOOP;
2533 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2534 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);
2535 END IF;
2536 CLOSE l_party_cur;
2537 ROLLBACK to eval_start;
2538 END;
2539
2540 /** Private procedure to acquire and score at party site level ***/
2541 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
2542 l_party_id_idx NUMBER:=1;
2543 l_ctx_id NUMBER;
2544 h_ps_id HZ_PARTY_SEARCH.IDList;
2545 h_ps_party_id HZ_PARTY_SEARCH.IDList;
2546 h_ps_score HZ_PARTY_SEARCH.IDList;
2547 detcnt NUMBER := 1;
2548 BEGIN
2549 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2550 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);
2551 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);
2552 END IF;
2553 IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,'D_PS')>0
2554 AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and
2555 l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> 'Y' THEN
2556 l_party_id := H_SCORES.FIRST;
2557 WHILE l_party_id IS NOT NULL LOOP
2558 H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;
2559 l_party_id:=H_SCORES.NEXT(l_party_id);
2560 END LOOP;
2561 RETURN;
2562 END IF;
2563 SAVEPOINT eval_start;
2564 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2565 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2566 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);
2567 END IF;
2568 l_ctx_id := l_search_ctx_id;
2569 FORALL I in 1..H_PARTY_ID.COUNT
2570 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2571 l_search_ctx_id,H_PARTY_ID(I));
2572 H_PARTY_ID.DELETE;
2573 H_PARTY_ID_LIST.DELETE;
2574 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2575 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2576 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);
2577 END IF;
2578 l_ctx_id := l_search_ctx_id;
2579 FORALL I in 1..H_PARTY_ID.COUNT
2580 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2581 l_search_ctx_id,H_PARTY_ID(I));
2582 l_party_id_idx := H_PARTY_ID.COUNT+1;
2583 ELSE
2584 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2585 and check_estimate_hits('PARTY_SITES',p_party_site_contains_str)>l_max_thresh THEN
2586 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2587 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);
2588 END IF;
2589 IF p_index>1 THEN
2590 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2591 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);
2592 END IF;
2593 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2594 FND_MSG_PUB.ADD;
2595 RAISE FND_API.G_EXC_ERROR;
2596 ELSE
2597 push_eval;
2598 RETURN;
2599 END IF;
2600 END IF;
2601 l_party_id_idx := H_PARTY_ID.COUNT+1;
2602 l_ctx_id := NULL;
2603 END IF;
2604 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2605 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);
2606 END IF;
2607 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);
2608 LOOP
2609 FETCH l_party_site_cur INTO
2610 l_party_site_id, l_ps_party_id, l_ps_contact_id , l_TX4, l_TX10, l_TX14, l_TX22;
2611 EXIT WHEN l_party_site_cur%NOTFOUND;
2612 --Fix for bug 4417124
2613 IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN
2614 l_index := map_id(l_ps_party_id);
2615 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX4,l_TX10,l_TX14,l_TX22);
2616 IF NOT H_SCORES.EXISTS(l_index) THEN
2617 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);
2618 ELSE
2619 IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
2620 H_SCORES(l_index).TOTAL_SCORE :=
2621 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
2622 H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
2623 END IF;
2624 END IF;
2625 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2626 H_PARTY_ID_LIST(l_index) := 1;
2627 H_PARTY_ID(l_party_id_idx) := l_ps_party_id;
2628 l_party_id_idx:= l_party_id_idx+1;
2629 END IF;
2630 IF p_ins_details = 'Y' THEN
2631 h_ps_id(detcnt) := l_party_site_id;
2632 h_ps_party_id(detcnt) := l_ps_party_id;
2633 IF (p_emax_score > 0) THEN
2634 h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
2635 ELSE
2636 h_ps_score(detcnt) := 0;
2637 END IF;
2638 detcnt := detcnt +1;
2639 END IF;
2640 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2641 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);
2642 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);
2643 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);
2644 END IF;
2645 END IF;
2646 END LOOP;
2647 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2648 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);
2649 END IF;
2650 CLOSE l_party_site_cur;
2651 ROLLBACK to eval_start;
2652 IF p_ins_details = 'Y' THEN
2653 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2654 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);
2655 END IF;
2656 FORALL I in 1..h_ps_id.COUNT
2657 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
2658 l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
2659 END IF;
2660 END;
2661
2662 /** Private procedure to acquire and score at contact point level ***/
2663 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
2664 l_party_id_idx NUMBER:=1;
2665 l_ctx_id NUMBER;
2666 h_ct_id HZ_PARTY_SEARCH.IDList;
2667 h_ct_party_id HZ_PARTY_SEARCH.IDList;
2668 h_ct_score HZ_PARTY_SEARCH.IDList;
2669 detcnt NUMBER := 1;
2670 BEGIN
2671 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2672 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);
2673 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);
2674 END IF;
2675 SAVEPOINT eval_start;
2676 IF l_match_str = ' AND ' AND p_call_type='AND' THEN
2677 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2678 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);
2679 END IF;
2680 l_ctx_id := l_search_ctx_id;
2681 FORALL I in 1..H_PARTY_ID.COUNT
2682 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2683 l_search_ctx_id,H_PARTY_ID(I));
2684 H_PARTY_ID.DELETE;
2685 H_PARTY_ID_LIST.DELETE;
2686 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2687 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2688 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);
2689 END IF;
2690 l_ctx_id := l_search_ctx_id;
2691 FORALL I in 1..H_PARTY_ID.COUNT
2692 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2693 l_search_ctx_id,H_PARTY_ID(I));
2694 l_party_id_idx := H_PARTY_ID.COUNT+1;
2695 ELSE
2696 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2697 and check_estimate_hits('CONTACTS',p_contact_contains_str)>l_max_thresh THEN
2698 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2699 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);
2700 END IF;
2701 IF p_index>1 THEN
2702 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2703 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);
2704 END IF;
2705 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2706 FND_MSG_PUB.ADD;
2707 RAISE FND_API.G_EXC_ERROR;
2708 ELSE
2709 push_eval;
2710 RETURN;
2711 END IF;
2712 END IF;
2713 l_ctx_id := NULL;
2714 l_party_id_idx := H_PARTY_ID.COUNT+1;
2715 END IF;
2716 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2717 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);
2718 END IF;
2719 open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id, p_search_merged, l_contact_cur);
2720 LOOP
2721 FETCH l_contact_cur INTO
2722 l_org_contact_id, l_ct_party_id ;
2723 EXIT WHEN l_contact_cur%NOTFOUND;
2724 l_index := map_id(l_ct_party_id);
2725 l_score := GET_CONTACTS_SCORE(l_match_idx);
2726 IF NOT H_SCORES.EXISTS(l_index) THEN
2727 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);
2728 ELSE
2729 IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
2730 H_SCORES(l_index).TOTAL_SCORE :=
2731 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
2732 H_SCORES(l_index).CONTACT_SCORE := l_score;
2733 END IF;
2734 END IF;
2735 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2736 H_PARTY_ID_LIST(l_index) := 1;
2737 H_PARTY_ID(l_party_id_idx) := l_ct_party_id;
2738 l_party_id_idx:= l_party_id_idx+1;
2739 END IF;
2740 IF p_ins_details = 'Y' THEN
2741 h_ct_id(detcnt) := l_org_contact_id;
2742 h_ct_party_id(detcnt) := l_ct_party_id;
2743 IF (p_emax_score > 0) THEN
2744 h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
2745 ELSE
2746 h_ct_score(detcnt) := 0;
2747 END IF;
2748 detcnt := detcnt +1;
2749 END IF;
2750 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2751 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);
2752 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);
2753 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);
2754 END IF;
2755 END LOOP;
2756 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2757 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);
2758 END IF;
2759 CLOSE l_contact_cur;
2760 ROLLBACK to eval_start;
2761 IF p_ins_details = 'Y' THEN
2762 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2763 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);
2764 END IF;
2765 FORALL I in 1..h_ct_id.COUNT
2766 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
2767 l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
2768 END IF;
2769 END;
2770
2771 /** Private procedure to acquire and score at contact point level ***/
2772 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
2773 l_party_id_idx NUMBER:=1;
2774 l_ctx_id NUMBER;
2775 h_cpt_id HZ_PARTY_SEARCH.IDList;
2776 h_cpt_party_id HZ_PARTY_SEARCH.IDList;
2777 h_cpt_score HZ_PARTY_SEARCH.IDList;
2778 detcnt NUMBER := 1;
2779 l_cpt_flag VARCHAR2(1) := 'N';
2780 is_a_match VARCHAR2(1) := 'Y';
2781 BEGIN
2782 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2783 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);
2784 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);
2785 END IF;
2786 SAVEPOINT eval_start;
2787 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2788 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2789 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);
2790 END IF;
2791 l_ctx_id := l_search_ctx_id;
2792 FORALL I in 1..H_PARTY_ID.COUNT
2793 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2794 l_search_ctx_id,H_PARTY_ID(I));
2795 H_PARTY_ID.DELETE;
2796 H_PARTY_ID_LIST.DELETE;
2797 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2798 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2799 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);
2800 END IF;
2801 l_ctx_id := l_search_ctx_id;
2802 FORALL I in 1..H_PARTY_ID.COUNT
2803 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2804 l_search_ctx_id,H_PARTY_ID(I));
2805 l_party_id_idx := H_PARTY_ID.COUNT+1;
2806 ELSE
2807 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2808 and check_estimate_hits('CONTACT_POINTS',p_contact_pt_contains_str)>l_max_thresh THEN
2809 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2810 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);
2811 END IF;
2812 IF p_index>1 THEN
2813 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2814 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);
2815 END IF;
2816 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2817 FND_MSG_PUB.ADD;
2818 RAISE FND_API.G_EXC_ERROR;
2819 ELSE
2820 push_eval;
2821 RETURN;
2822 END IF;
2823 END IF;
2824 l_ctx_id := NULL;
2825 l_party_id_idx := H_PARTY_ID.COUNT+1;
2826 END IF;
2827 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2828 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);
2829 END IF;
2830 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);
2831 LOOP
2832 FETCH l_contact_pt_cur INTO
2833 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id ;
2834 EXIT WHEN l_contact_pt_cur%NOTFOUND;
2835 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2836 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);
2837 END IF;
2838 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2839 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);
2840 END IF;
2841 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2842 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);
2843 END IF;
2847 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
2844 --Fix for bug 4417124
2845 IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN
2846 l_index := map_id(l_cpt_party_id);
2848 IF NOT H_SCORES.EXISTS(l_index) THEN
2849 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);
2850 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2851 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);
2852 END IF;
2853 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2854 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);
2855 END IF;
2856 ELSE
2857 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
2858 H_SCORES(l_index).TOTAL_SCORE :=
2859 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
2860 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
2861 END IF;
2862 END IF;
2863 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2864 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);
2865 END IF;
2866 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2867 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);
2868 END IF;
2869 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2870 H_PARTY_ID_LIST(l_index) := 1;
2871 H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;
2872 l_party_id_idx:= l_party_id_idx+1;
2873 END IF;
2874 IF p_ins_details = 'Y' THEN
2875 FOR I IN 1..h_cpt_id.COUNT LOOP
2876 IF h_cpt_id(I)=l_contact_pt_id THEN
2877 l_cpt_flag := 'Y';
2878 END IF;
2879 END LOOP;
2880 IF l_cpt_flag = 'Y' THEN
2881 NULL;
2882 ELSE
2883 h_cpt_id(detcnt) := l_contact_pt_id;
2884 h_cpt_party_id(detcnt) := l_cpt_party_id;
2885 IF (p_emax_score > 0) THEN
2886 h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
2887 ELSE
2888 h_cpt_score(detcnt) := 0;
2889 END IF;
2890 detcnt := detcnt +1;
2891 END IF;
2892 END IF;
2893 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2894 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);
2895 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);
2896 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);
2897 END IF;
2898 END IF;
2899 END LOOP;
2900 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2901 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);
2902 END IF;
2903 CLOSE l_contact_pt_cur;
2904 ROLLBACK to eval_start;
2905 IF p_ins_details = 'Y' THEN
2906 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2907 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);
2908 END IF;
2909 FORALL I in 1..h_cpt_id.COUNT
2910 INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
2911 l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
2912 END IF;
2913 END eval_cpt_level;
2914
2915 /** Private procedure to call the eval procedure at each entity in the correct order ***/
2916 PROCEDURE do_eval (p_index NUMBER) IS
2917 l_ctx_id NUMBER;
2918 l_threshold NUMBER;
2919 other_acq_criteria_exists BOOLEAN;
2920 acq_cnt NUMBER;
2921 BEGIN
2922 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2923 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);
2924 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);
2925 END IF;
2926 IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
2927 l_threshold := 100;
2928 other_acq_criteria_exists := TRUE ;
2929 --check if acquisition criteria exists for any other entity
2930 IF l_party_contains_str IS NOT NULL THEN
2931 acq_cnt := 1;
2932 END IF;
2933 IF l_party_site_contains_str IS NOT NULL THEN
2934 acq_cnt := acq_cnt+1;
2935 END IF;
2936 IF l_contact_contains_str IS NOT NULL THEN
2937 acq_cnt := acq_cnt+1;
2938 END IF;
2939 IF l_contact_pt_contains_str IS NOT NULL THEN
2940 acq_cnt := acq_cnt+1;
2941 END IF;
2942 IF acq_cnt>1 THEN
2943 other_acq_criteria_exists := TRUE;
2944 ELSE
2945 other_acq_criteria_exists := FALSE;
2946 END IF;
2950 IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
2947 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);
2948 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);
2949 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);
2951 IF ( call_max_score(p_index) < l_threshold) THEN
2952 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2953 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);
2954 END IF;
2955 RETURN;
2956 ELSE
2957 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2958 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);
2959 END IF;
2960 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2961 FND_MSG_PUB.ADD;
2962 RAISE FND_API.G_EXC_ERROR;
2963 END IF;
2964 ELSE
2965 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2966 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);
2967 END IF;
2968 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2969 FND_MSG_PUB.ADD;
2970 RAISE FND_API.G_EXC_ERROR;
2971 END IF;
2972 END IF;
2973 IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
2974 eval_party_level(l_party_contains_str,call_type(p_index), p_index);
2975 ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
2976 eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
2977 ELSIF call_order(p_index) = 'CONTACT' AND l_contact_contains_str IS NOT NULL THEN
2978 eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
2979 ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
2980 eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
2981 END IF;
2982 END;
2983 /************ End of find_parties private procedures **********/
2984
2985 BEGIN
2986
2987 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2988 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);
2989 END IF;
2990 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2991 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);
2992 END IF;
2993 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2994 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);
2995 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);
2996 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);
2997 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);
2998 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);
2999 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);
3000 END IF;
3001 -- ************************************
3002 -- STEP 1. Initialization and error checks
3003
3004 l_match_str := ' OR ';
3005 IF p_match_type = 'AND' THEN
3006 l_match_str := ' AND ';
3007 ELSIF p_match_type = 'OR' THEN
3008 l_match_str := ' OR ';
3009 END IF;
3010 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);
3011 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
3012
3013 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3014 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);
3015 END IF;
3016 IF l_entered_max_score < 100 THEN
3017 x_num_matches:=0;
3018 x_search_ctx_id:=0;
3019 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3020 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);
3021 END IF;
3022 RETURN;
3023 END IF;
3024
3025 --Fix for bug 4417124
3026
3027 SELECT use_contact_addr_flag, use_contact_cpt_flag
3028 INTO l_use_contact_addr_flag, l_use_contact_cpt_flag
3029 FROM hz_match_rules_b
3030 WHERE match_rule_id = 48;
3031
3032 IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
3036 IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
3033 l_use_contact_addr_info := FALSE;
3034 END IF;
3035
3037 l_use_contact_cpt_info := FALSE;
3038 END IF;
3039
3040 --End fix for bug 4417124
3041
3042 IF p_dup_batch_id IS NOT NULL THEN
3043 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH_BATCH'),10000);
3044 ELSE
3045 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
3046 END IF;
3047 IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
3048 g_score_until_thresh := true;
3049 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3050 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);
3051 END IF;
3052 ELSE
3053 g_score_until_thresh := false;
3054 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3055 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);
3056 END IF;
3057 END IF;
3058 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3059 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);
3060 END IF;
3061 -- ************************************************************
3062 -- STEP 2. Setup of intermedia query strings for Acquisition query
3063 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
3064 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
3065 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
3066 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3067 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);
3068 END IF;
3069 l_denorm_max_score:=0;
3070 l_non_denorm_max_score:=0;
3071 IF l_ps_denorm_str IS NOT NULL THEN
3072 l_denorm_max_score := l_denorm_max_score+l_ps_max_score;
3073 l_denorm_str := l_ps_denorm_str;
3074 ELSE
3075 l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;
3076 END IF;
3077 IF l_ct_denorm_str IS NOT NULL THEN
3078 l_denorm_max_score := l_denorm_max_score+l_contact_max_score;
3079 IF l_denorm_str IS NOT NULL THEN
3080 l_denorm_str := l_denorm_str || ' OR ' ||l_ct_denorm_str;
3081 ELSE
3082 l_denorm_str := l_ct_denorm_str;
3083 END IF;
3084 ELSE
3085 l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;
3086 END IF;
3087 IF l_cpt_denorm_str IS NOT NULL THEN
3088 l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;
3089 IF l_denorm_str IS NOT NULL THEN
3090 l_denorm_str := l_denorm_str || ' OR ' ||l_cpt_denorm_str;
3091 ELSE
3092 l_denorm_str := l_cpt_denorm_str;
3093 END IF;
3094 ELSE
3095 l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;
3096 END IF;
3097 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));
3098 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3099
3100 -- Setup Search Context ID
3101 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3102 x_search_ctx_id := l_search_ctx_id;
3103
3104 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3105 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);
3106 END IF;
3107 IF l_party_contains_str IS NULL THEN
3108 defpt := 1;
3109 END IF;
3110 IF l_party_site_contains_str IS NULL THEN
3111 defps := 1;
3112 END IF;
3113 IF l_contact_contains_str IS NULL THEN
3114 defct := 1;
3115 END IF;
3116 IF l_contact_pt_contains_str IS NULL THEN
3117 defcpt := 1;
3118 END IF;
3119
3120 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3121 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3122 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);
3123 END IF;
3124 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);
3125 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);
3126 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);
3127 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);
3128 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);
3129 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);
3130 END IF;
3131 FOR I in 1..5 LOOP
3135 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);
3132 do_eval(I);
3133 END LOOP;
3134 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3136 END IF;
3137 x_num_matches := 0;
3138 l_num_eval := 0;
3139 IF l_match_str = ' OR ' THEN
3140 l_party_id := H_SCORES.FIRST;
3141 ELSE
3142 l_party_id := H_PARTY_ID_LIST.FIRST;
3143 END IF;
3144 WHILE l_party_id IS NOT NULL LOOP
3145 l_num_eval:= l_num_eval+1;
3146 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3147 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3148 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);
3149 END IF;
3150 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);
3151 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);
3152 END IF;
3153 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3154 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);
3155 END IF;
3156 IF H_SCORES(l_party_id).TOTAL_SCORE>=100 THEN
3157 IF p_dup_set_id IS NULL THEN
3158 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
3159 VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);
3160 x_num_matches := x_num_matches+1;
3161 ELSE
3162 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3163 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);
3164 END IF;
3165 BEGIN
3166 SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES
3167 WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID
3168 AND DUP_SET_BATCH_ID = p_dup_batch_id
3169 AND ROWNUM=1;
3170 EXCEPTION
3171 WHEN NO_DATA_FOUND THEN
3172 IF H_SCORES(l_party_id).TOTAL_SCORE>=100 THEN
3173 l_merge_flag := 'Y';
3174 ELSE
3175 l_merge_flag := 'N';
3176 END IF;
3177 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3178 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);
3179 END IF;
3180 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3181 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);
3182 END IF;
3183 INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
3184 MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
3185 LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID)
3186 VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,
3187 H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,
3188 hz_utility_pub.created_by,hz_utility_pub.creation_date,
3189 hz_utility_pub.last_update_login,
3190 hz_utility_pub.last_update_date,
3191 hz_utility_pub.user_id,p_dup_batch_id);
3192 x_num_matches := x_num_matches+1;
3193 END;
3194 END IF;
3195 END IF;
3196 IF l_match_str = ' OR ' THEN
3197 l_party_id:=H_SCORES.NEXT(l_party_id);
3198 ELSE
3199 l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3200 END IF;
3201 END LOOP;
3202 HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3203 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3204 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);
3205 END IF;
3206 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3207 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);
3208 END IF;
3209 EXCEPTION
3210 WHEN L_RETURN_IMM_EXC THEN
3211 RETURN;
3212 WHEN FND_API.G_EXC_ERROR THEN
3213 RAISE FND_API.G_EXC_ERROR;
3214 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3215 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3216 WHEN OTHERS THEN
3217 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3218 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_48.find_parties');
3219 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3220 FND_MSG_PUB.ADD;
3221 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3222 END find_parties;
3223
3224 PROCEDURE find_persons (
3225 p_rule_id IN NUMBER,
3226 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
3227 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
3228 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
3232 p_search_merged IN VARCHAR2,
3229 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
3230 p_restrict_sql IN VARCHAR2,
3231 p_match_type IN VARCHAR2,
3233 p_dup_party_id IN NUMBER,
3234 p_dup_set_id IN NUMBER,
3235 p_dup_batch_id IN NUMBER,
3236 p_ins_details IN VARCHAR2,
3237 x_search_ctx_id OUT NUMBER,
3238 x_num_matches OUT NUMBER
3239 ) IS
3240
3241 -- Strings to hold the generated Intermedia query strings
3242 l_party_contains_str VARCHAR2(32000);
3243 l_party_site_contains_str VARCHAR2(32000);
3244 l_contact_contains_str VARCHAR2(32000);
3245 l_contact_pt_contains_str VARCHAR2(32000);
3246 l_denorm_str VARCHAR2(32000);
3247 l_ps_denorm_str VARCHAR2(32000);
3248 l_ct_denorm_str VARCHAR2(32000);
3249 l_cpt_denorm_str VARCHAR2(32000);
3250
3251 -- Other local variables
3252 l_match_str VARCHAR2(30); -- Match type (AND or OR)
3253 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
3254 -- For Score calculation
3255 l_max_score NUMBER;
3256 l_match_idx NUMBER;
3257 l_entered_max_score NUMBER;
3258 FIRST BOOLEAN;
3259 l_search_ctx_id NUMBER; -- Generated Search Context ID
3260
3261 l_TX19 VARCHAR2(2000);
3262 l_TX46 VARCHAR2(2000);
3263 l_TX22 VARCHAR2(2000);
3264 l_TX4 VARCHAR2(2000);
3265 l_TX10 VARCHAR2(2000);
3266 l_TX8 VARCHAR2(2000);
3267 l_TX34 VARCHAR2(2000);
3268 l_TX36 VARCHAR2(2000);
3269 l_TX14 VARCHAR2(2000);
3270 H_SCORES HZ_PARTY_SEARCH.score_list;
3271 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
3272 H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
3273
3274 l_score NUMBER;
3275 l_idx NUMBER;
3276 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
3277 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
3278 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
3279 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
3280 l_party_id NUMBER;
3281 l_ps_party_id NUMBER;
3282 l_ct_party_id NUMBER;
3283 l_cpt_party_id NUMBER;
3284 l_cpt_ps_id NUMBER;
3285 l_cpt_contact_id NUMBER;
3286 l_cpt_type VARCHAR2(100);
3287 l_party_site_id NUMBER;
3288 l_org_contact_id NUMBER;
3289 l_contact_pt_id NUMBER;
3290 l_cpt_level VARCHAR2(100);
3291 l_ps_contact_id NUMBER;
3292 l_party_max_score NUMBER;
3293 l_ps_max_score NUMBER;
3294 l_contact_max_score NUMBER;
3295 l_cpt_max_score NUMBER;
3296 l_denorm_max_score NUMBER;
3297 l_non_denorm_max_score NUMBER;
3298
3299 defpt NUMBER :=0;
3300 defps NUMBER :=0;
3301 defct NUMBER :=0;
3302 defcpt NUMBER :=0;
3303 l_index NUMBER;
3304 l_max_thresh NUMBER;
3305 l_tmp NUMBER;
3306 l_merge_flag VARCHAR2(1);
3307 l_num_eval NUMBER:=0;
3308
3309 L_RETURN_IMM_EXC Exception;
3310
3311
3312 /********************* Find Parties private procedures *******/
3313 PROCEDURE set_person_party_type IS
3314 BEGIN
3315 g_party_stage_rec.TX36:=
3316 HZ_TRANS_PKG.EXACT(
3317 'PERSON'
3318 ,null,'PARTY_TYPE'
3319 ,'PARTY');
3320 END;
3321
3322 PROCEDURE unset_person_party_type IS
3323 BEGIN
3324 g_party_stage_rec.TX36 := '';
3325 END;
3326
3327 FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER)
3328 RETURN NUMBER IS
3329 l_party_type VARCHAR2(255);
3330 l_person_id NUMBER(15);
3331 BEGIN
3332 SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;
3333 IF l_party_type = 'PERSON' THEN
3334 RETURN p_party_id;
3335 ELSIF p_contact_id IS NULL THEN
3336 RETURN NULL;
3337 ELSE
3338 BEGIN
3339 SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p
3340 WHERE oc.org_contact_id = p_contact_id
3341 AND r.relationship_id = oc.party_relationship_id
3342 AND r.object_id = p_party_id
3343 AND p.party_id = r.subject_id
3344 AND p.party_type = 'PERSON'
3345 AND ROWNUM=1;
3346
3347 RETURN l_person_id;
3348 EXCEPTION
3349 WHEN NO_DATA_FOUND THEN
3350 RETURN NULL;
3351 END;
3352 END IF;
3353 END;
3354
3355 PROCEDURE push_eval IS
3356 BEGIN
3357 H_PARTY_ID.DELETE;
3358 H_PARTY_ID_LIST.DELETE;
3359 H_SCORES.DELETE;
3360 g_mappings.DELETE;
3361 HZ_DQM_SEARCH_UTIL.set_num_eval(0);
3362 call_order(5) := call_order(1);
3363 call_type(5) := 'AND';
3364 call_max_score(5) := call_max_score(1);
3365 call_type(2) := 'OR';
3366 END;
3367
3368 /** Private procedure to acquire and score at party level ***/
3369 PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
3370 l_party_id_idx NUMBER:=1;
3371 l_ctx_id NUMBER;
3372 l_TX35_new varchar2(4000);
3373 BEGIN
3374 SAVEPOINT eval_start;
3375 set_person_party_type;
3376 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3377 l_ctx_id := l_search_ctx_id;
3378 FORALL I in 1..H_PARTY_ID.COUNT
3379 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3380 l_search_ctx_id,H_PARTY_ID(I));
3381 H_PARTY_ID.DELETE;
3382 H_PARTY_ID_LIST.DELETE;
3383 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3384 l_ctx_id := l_search_ctx_id;
3385 FORALL I in 1..H_PARTY_ID.COUNT
3389 ELSE
3386 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3387 l_search_ctx_id,H_PARTY_ID(I));
3388 l_party_id_idx := H_PARTY_ID.COUNT+1;
3390 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3391 and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh 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 estimated hits exceed threshold',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 g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' THEN
3396 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3397 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);
3398 END IF;
3399 IF (l_party_site_contains_str IS NULL AND
3400 l_contact_contains_str IS NULL AND
3401 l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN
3402 return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);
3403 RAISE L_RETURN_IMM_EXC;
3404 ELSE
3405 open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);
3406 END IF;
3407 ELSE
3408 IF p_index>1 THEN
3409 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3410 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);
3411 END IF;
3412 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3413 FND_MSG_PUB.ADD;
3414 RAISE FND_API.G_EXC_ERROR;
3415 ELSE
3416 push_eval;
3417 RETURN;
3418 END IF;
3419 END IF;
3420 END IF;
3421 l_ctx_id := NULL;
3422 l_party_id_idx := H_PARTY_ID.COUNT+1;
3423 END IF;
3424 IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
3425 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);
3426 END IF;
3427 LOOP
3428 FETCH l_party_cur INTO
3429 l_party_id , l_TX4, l_TX8, l_TX19, l_TX34, l_TX36, l_TX46;
3430 EXIT WHEN l_party_cur%NOTFOUND;
3431 l_index := map_id(l_party_id);
3432 l_score := GET_PARTY_SCORE(l_TX4,l_TX8,l_TX19,l_TX34,l_TX36,l_TX46);
3433 IF NOT H_SCORES.EXISTS(l_index) THEN
3434 H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
3435 ELSE
3436 H_SCORES(l_index).TOTAL_SCORE :=
3437 H_SCORES(l_index).TOTAL_SCORE+l_score;
3438 H_SCORES(l_index).PARTY_SCORE := l_score;
3439 END IF;
3440 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3441 H_PARTY_ID_LIST(l_index) := 1;
3442 H_PARTY_ID(l_party_id_idx) := l_party_id;
3443 l_party_id_idx:= l_party_id_idx+1;
3444 END IF;
3445 IF (l_party_id_idx-1)>l_max_thresh THEN
3446 IF p_index=1 AND call_order(2) = 'PARTY_SITE'
3447 AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
3448 AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL'
3449 AND l_contact_pt_contains_str IS NULL THEN
3450 H_PARTY_ID.DELETE(l_party_id_idx-1);
3451 H_PARTY_ID_LIST.DELETE(l_index);
3452 H_SCORES.DELETE(l_index);
3453 EXIT;
3454 END IF;
3455 CLOSE l_party_cur;
3456 IF p_index>1 THEN
3457 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3458 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);
3459 END IF;
3460 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3461 FND_MSG_PUB.ADD;
3462 RAISE FND_API.G_EXC_ERROR;
3463 ELSE
3464 push_eval;
3465 RETURN;
3466 END IF;
3467 END IF;
3468 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3469 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);
3470 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);
3471 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);
3472 END IF;
3473 END LOOP;
3474 CLOSE l_party_cur;
3475 ROLLBACK to eval_start;
3476 END;
3477 PROCEDURE open_person_contact_cursor(
3478 p_contains_str VARCHAR2,
3479 p_search_ctx_id NUMBER,
3480 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
3481 BEGIN
3482 OPEN x_cursor FOR
3483 SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID
3484 FROM HZ_STAGED_CONTACTS stage
3485 WHERE contains( concat_col, p_contains_str)>0
3486 AND ORG_CONTACT_ID in (
3487 SELECT /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/
3488 org_contact_id
3489 from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc
3490 where d.party_id = r.subject_id
3494 when others then
3491 and oc.party_relationship_id = r.relationship_id
3492 and d.search_context_id = p_search_ctx_id);
3493 exception
3495 if (instrb(SQLERRM,'DRG-51030')>0) then
3496 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
3497 FND_MSG_PUB.ADD;
3498 RAISE FND_API.G_EXC_ERROR;
3499 elsif (instrb(SQLERRM,'DRG-50943')>0) then
3500 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
3501 FND_MSG_PUB.ADD;
3502 RAISE FND_API.G_EXC_ERROR;
3503 else
3504 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3505 end if;
3506 END;
3507
3508 /** Private procedure to acquire and score at party site level ***/
3509 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
3510 l_party_id_idx NUMBER:=1;
3511 l_ctx_id NUMBER;
3512 h_ps_id HZ_PARTY_SEARCH.IDList;
3513 h_ps_party_id HZ_PARTY_SEARCH.IDList;
3514 h_ps_score HZ_PARTY_SEARCH.IDList;
3515 detcnt NUMBER := 1;
3516 l_person_id NUMBER;
3517 BEGIN
3518 SAVEPOINT eval_start;
3519 unset_person_party_type;
3520 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3521 l_ctx_id := l_search_ctx_id;
3522 FORALL I in 1..H_PARTY_ID.COUNT
3523 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3524 l_search_ctx_id,H_PARTY_ID(I));
3525 H_PARTY_ID.DELETE;
3526 H_PARTY_ID_LIST.DELETE;
3527 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3528 l_ctx_id := l_search_ctx_id;
3529 FORALL I in 1..H_PARTY_ID.COUNT
3530 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3531 l_search_ctx_id,H_PARTY_ID(I));
3532 l_party_id_idx := H_PARTY_ID.COUNT+1;
3533 ELSE
3534 l_party_id_idx := H_PARTY_ID.COUNT+1;
3535 l_ctx_id := NULL;
3536 END IF;
3537 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);
3538 LOOP
3539 FETCH l_party_site_cur INTO
3540 l_party_site_id, l_ps_party_id, l_ps_contact_id , l_TX4, l_TX10, l_TX14, l_TX22;
3541 EXIT WHEN l_party_site_cur%NOTFOUND;
3542 IF l_ctx_id IS NULL THEN
3543 l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);
3544 ELSE
3545 l_person_id := l_ps_party_id;
3546 END IF;
3547 IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3548 l_index := map_id(l_person_id);
3549 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX4,l_TX10,l_TX14,l_TX22);
3550 IF NOT H_SCORES.EXISTS(l_index) THEN
3551 IF l_ctx_id IS NULL THEN
3552 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);
3553 END IF;
3554 ELSE
3555 IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3556 H_SCORES(l_index).TOTAL_SCORE :=
3557 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3558 H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3559 END IF;
3560 END IF;
3561 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3562 H_PARTY_ID_LIST(l_index) := 1;
3563 H_PARTY_ID(l_party_id_idx) := l_person_id;
3564 l_party_id_idx:= l_party_id_idx+1;
3565 END IF;
3566 IF (l_party_id_idx-1)>l_max_thresh THEN
3567 CLOSE l_party_site_cur;
3568 IF p_index>1 THEN
3569 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3570 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);
3571 END IF;
3572 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3573 FND_MSG_PUB.ADD;
3574 RAISE FND_API.G_EXC_ERROR;
3575 ELSE
3576 push_eval;
3577 RETURN;
3578 END IF;
3579 END IF;
3580 IF p_ins_details = 'Y' THEN
3581 h_ps_id(detcnt) := l_party_site_id;
3582 h_ps_party_id(detcnt) := l_person_id;
3583 IF (p_emax_score > 0) THEN
3584 h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
3585 ELSE
3586 h_ps_score(detcnt) := 0;
3587 END IF;
3588 detcnt := detcnt +1;
3589 END IF;
3590 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3591 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);
3592 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);
3593 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);
3594 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);
3595 END IF;
3596 END IF;
3597 END LOOP;
3598 CLOSE l_party_site_cur;
3599 ROLLBACK to eval_start;
3600 IF p_ins_details = 'Y' THEN
3601 FORALL I in 1..h_ps_id.COUNT
3602 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
3603 l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
3604 END IF;
3605 END;
3606
3607 /** Private procedure to acquire and score at party site level ***/
3611 h_ct_id HZ_PARTY_SEARCH.IDList;
3608 PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
3609 l_party_id_idx NUMBER:=1;
3610 l_ctx_id NUMBER;
3612 h_ct_party_id HZ_PARTY_SEARCH.IDList;
3613 h_ct_score HZ_PARTY_SEARCH.IDList;
3614 detcnt NUMBER := 1;
3615 l_person_id NUMBER;
3616 BEGIN
3617 SAVEPOINT eval_start;
3618 l_ctx_id := l_search_ctx_id;
3619 unset_person_party_type;
3620 FORALL I in 1..H_PARTY_ID.COUNT
3621 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3622 l_search_ctx_id,H_PARTY_ID(I));
3623 l_party_id_idx := H_PARTY_ID.COUNT+1;
3624 open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);
3625 LOOP
3626 FETCH l_contact_cur INTO
3627 l_org_contact_id, l_ct_party_id ;
3628 EXIT WHEN l_contact_cur%NOTFOUND;
3629 l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);
3630 l_index := map_id(l_person_id);
3631 IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3632 l_score := GET_CONTACTS_SCORE(l_match_idx);
3633 IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
3634 H_SCORES(l_index).TOTAL_SCORE :=
3635 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
3636 H_SCORES(l_index).CONTACT_SCORE := l_score;
3637 END IF;
3638 END IF;
3639 IF p_ins_details = 'Y' THEN
3640 h_ct_id(detcnt) := l_org_contact_id;
3641 h_ct_party_id(detcnt) := l_person_id;
3642 IF (p_emax_score > 0) THEN
3643 h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
3644 ELSE
3645 h_ct_score(detcnt) := 0;
3646 END IF;
3647 detcnt := detcnt +1;
3648 END IF;
3649 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3650 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);
3651 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);
3652 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);
3653 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);
3654 END IF;
3655 END LOOP;
3656 CLOSE l_contact_cur;
3657 ROLLBACK to eval_start;
3658 IF p_ins_details = 'Y' THEN
3659 FORALL I in 1..h_ct_id.COUNT
3660 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
3661 l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
3662 END IF;
3663 END;
3664
3665 /** Private procedure to acquire and score at contact point level ***/
3666 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
3667 l_party_id_idx NUMBER:=1;
3668 l_ctx_id NUMBER;
3669 h_cpt_id HZ_PARTY_SEARCH.IDList;
3670 h_cpt_party_id HZ_PARTY_SEARCH.IDList;
3671 h_cpt_score HZ_PARTY_SEARCH.IDList;
3672 detcnt NUMBER := 1;
3673 l_person_id NUMBER;
3674 is_a_match VARCHAR2(1) := 'Y';
3675 l_cpt_flag VARCHAR2(1) := 'N';
3676 BEGIN
3677 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3678 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);
3679 END IF;
3680 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3681 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);
3682 END IF;
3683 SAVEPOINT eval_start;
3684 unset_person_party_type;
3685 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3686 l_ctx_id := l_search_ctx_id;
3687 FORALL I in 1..H_PARTY_ID.COUNT
3688 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3689 l_search_ctx_id,H_PARTY_ID(I));
3690 H_PARTY_ID.DELETE;
3691 H_PARTY_ID_LIST.DELETE;
3692 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3693 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3694 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);
3695 END IF;
3696 l_ctx_id := l_search_ctx_id;
3697 FORALL I in 1..H_PARTY_ID.COUNT
3698 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3699 l_search_ctx_id,H_PARTY_ID(I));
3700 l_party_id_idx := H_PARTY_ID.COUNT+1;
3701 ELSE
3702 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3703 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);
3704 END IF;
3705 l_ctx_id := NULL;
3706 l_party_id_idx := H_PARTY_ID.COUNT+1;
3707 END IF;
3708 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3712 LOOP
3709 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);
3710 END IF;
3711 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);
3713 FETCH l_contact_pt_cur INTO
3714 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id ;
3715 EXIT WHEN l_contact_pt_cur%NOTFOUND;
3716 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3717 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);
3718 END IF;
3719 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3720 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);
3721 END IF;
3722 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3723 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);
3724 END IF;
3725 IF l_ctx_id IS NULL THEN
3726 l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);
3727 ELSE
3728 l_person_id := l_cpt_party_id;
3729 END IF;
3730 IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3731 l_index := map_id(l_person_id);
3732 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
3733 IF NOT H_SCORES.EXISTS(l_index) THEN
3734 IF l_ctx_id IS NULL THEN
3735 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);
3736 END IF;
3737 ELSE
3738 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
3739 H_SCORES(l_index).TOTAL_SCORE :=
3740 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3741 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
3742 END IF;
3743 END IF;
3744 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3745 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);
3746 END IF;
3747 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3748 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);
3749 END IF;
3750 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3751 H_PARTY_ID_LIST(l_index) := 1;
3752 H_PARTY_ID(l_party_id_idx) := l_person_id;
3753 l_party_id_idx:= l_party_id_idx+1;
3754 END IF;
3755 IF (l_party_id_idx-1)>l_max_thresh THEN
3756 CLOSE l_contact_pt_cur;
3757 IF p_index>1 THEN
3758 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3759 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);
3760 END IF;
3761 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3762 FND_MSG_PUB.ADD;
3763 RAISE FND_API.G_EXC_ERROR;
3764 ELSE
3765 push_eval;
3766 RETURN;
3767 END IF;
3768 END IF;
3769 IF p_ins_details = 'Y' THEN
3770 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3771 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);
3772 END IF;
3773 FOR I IN 1..h_cpt_id.COUNT LOOP
3774 IF h_cpt_id(I)=l_contact_pt_id THEN
3775 l_cpt_flag := 'Y';
3776 END IF;
3777 END LOOP;
3778 IF l_cpt_flag = 'Y' THEN
3779 NULL;
3780 ELSE
3781 h_cpt_id(detcnt) := l_contact_pt_id;
3782 h_cpt_party_id(detcnt) := l_person_id;
3783 IF (p_emax_score > 0) THEN
3784 h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
3785 ELSE
3786 h_cpt_score(detcnt) := 0;
3787 END IF;
3788 detcnt := detcnt +1;
3789 END IF;
3790 END IF;
3791 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3792 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);
3793 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);
3794 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);
3795 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);
3796 END IF;
3797 END IF;
3798 END LOOP;
3799 CLOSE l_contact_pt_cur;
3800 ROLLBACK to eval_start;
3801 IF p_ins_details = 'Y' THEN
3802 FORALL I in 1..h_cpt_id.COUNT
3803 INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
3804 l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
3805 END IF;
3806 END;
3807
3808 /** Private procedure to call the eval procedure at each entity in the correct order ***/
3809 PROCEDURE do_eval (p_index NUMBER) IS
3810 l_ctx_id NUMBER;
3811 l_threshold NUMBER;
3812 other_acq_criteria_exists BOOLEAN;
3813 acq_cnt NUMBER;
3814 BEGIN
3815 IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
3816 l_threshold := 100;
3817 other_acq_criteria_exists := TRUE ;
3818 --check if acquisition criteria exists for any other entity
3819 IF l_party_contains_str IS NOT NULL THEN
3820 acq_cnt := 1;
3821 END IF;
3822 IF l_party_site_contains_str IS NOT NULL THEN
3823 acq_cnt := acq_cnt+1;
3824 END IF;
3825 IF l_contact_contains_str IS NOT NULL THEN
3826 acq_cnt := acq_cnt+1;
3827 END IF;
3828 IF l_contact_pt_contains_str IS NOT NULL THEN
3829 acq_cnt := acq_cnt+1;
3830 END IF;
3831 IF acq_cnt>1 THEN
3832 other_acq_criteria_exists := TRUE;
3833 ELSE
3834 other_acq_criteria_exists := FALSE;
3835 END IF;
3836 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);
3837 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);
3838 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);
3839 IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
3840 IF ( call_max_score(p_index) < l_threshold) THEN
3841 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3842 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);
3843 END IF;
3844 RETURN;
3845 ELSE
3846 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3847 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);
3848 END IF;
3849 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3850 FND_MSG_PUB.ADD;
3851 RAISE FND_API.G_EXC_ERROR;
3852 END IF;
3853 ELSE
3854 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3855 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);
3856 END IF;
3857 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3858 FND_MSG_PUB.ADD;
3859 RAISE FND_API.G_EXC_ERROR;
3860 END IF;
3861 END IF;
3862 IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
3863 eval_party_level(l_party_contains_str,call_type(p_index), p_index);
3864 ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
3865 eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3866 ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
3867 eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3868 END IF;
3869 END;
3870 /************ End of find_persons private procedures **********/
3871
3872 BEGIN
3873
3874 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3875 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);
3876 END IF;
3877 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3878 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);
3879 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);
3880 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);
3881 END IF;
3882 -- ************************************
3883 -- STEP 1. Initialization and error checks
3884
3885 l_match_str := ' OR ';
3886 IF p_match_type = 'AND' THEN
3887 l_match_str := ' AND ';
3888 ELSIF p_match_type = 'OR' THEN
3889 l_match_str := ' OR ';
3890 END IF;
3891 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);
3892 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
3893
3894 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
3895 IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
3896 g_score_until_thresh := true;
3897 ELSE
3898 g_score_until_thresh := false;
3899 END IF;
3900 -- ************************************************************
3901 -- STEP 2. Setup of intermedia query strings for Acquisition query
3902 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
3903 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
3904 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
3905 l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);
3906 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3907
3908 -- Setup Search Context ID
3909 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3910 x_search_ctx_id := l_search_ctx_id;
3911
3912 IF l_party_contains_str IS NULL THEN
3913 defpt := 1;
3914 END IF;
3915 IF l_party_site_contains_str IS NULL THEN
3916 defps := 1;
3917 END IF;
3918 IF l_contact_contains_str IS NULL THEN
3919 defct := 1;
3920 END IF;
3921 IF l_contact_pt_contains_str IS NULL THEN
3922 defcpt := 1;
3923 END IF;
3924
3925 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3926 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);
3927 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);
3928 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);
3929 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);
3930 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);
3931 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);
3932 END IF;
3933 FOR I in 1..5 LOOP
3934 do_eval(I);
3935 END LOOP;
3936 IF l_contact_contains_str IS NOT NULL THEN
3937 eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);
3938 END IF;
3939 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3940 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);
3941 END IF;
3942 x_num_matches := 0;
3943 l_num_eval := 0;
3944 IF l_match_str = ' OR ' THEN
3945 l_party_id := H_SCORES.FIRST;
3946 ELSE
3947 l_party_id := H_PARTY_ID_LIST.FIRST;
3948 END IF;
3949 WHILE l_party_id IS NOT NULL LOOP
3950 l_num_eval:= l_num_eval+1;
3951 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3952 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);
3953 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);
3954 END IF;
3955 IF H_SCORES(l_party_id).TOTAL_SCORE>=100 THEN
3956 IF p_dup_set_id IS NULL THEN
3957 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
3958 VALUES (l_search_ctx_id,H_SCORES(l_party_id).PARTY_ID,H_SCORES(l_party_id).TOTAL_SCORE);
3959 x_num_matches := x_num_matches+1;
3960 ELSE
3961 BEGIN
3962 SELECT 1 INTO l_tmp FROM HZ_DUP_SET_PARTIES
3963 WHERE DUP_PARTY_ID = H_SCORES(l_party_id).PARTY_ID
3964 AND DUP_SET_BATCH_ID = p_dup_batch_id
3965 AND ROWNUM=1;
3966 EXCEPTION
3967 WHEN NO_DATA_FOUND THEN
3971 l_merge_flag := 'N';
3968 IF H_SCORES(l_party_id).TOTAL_SCORE>=100 THEN
3969 l_merge_flag := 'Y';
3970 ELSE
3972 END IF;
3973 INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
3974 MERGE_BATCH_ID,SCORE,MERGE_FLAG, CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
3975 LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID)
3976 VALUES (H_SCORES(l_party_id).PARTY_ID,p_dup_set_id,0,0,
3977 H_SCORES(l_party_id).TOTAL_SCORE, l_merge_flag,
3978 hz_utility_pub.created_by,hz_utility_pub.creation_date,
3979 hz_utility_pub.last_update_login,
3980 hz_utility_pub.last_update_date,
3981 hz_utility_pub.user_id,p_dup_batch_id);
3982 x_num_matches := x_num_matches+1;
3983 END;
3984 END IF;
3985 END IF;
3986 IF l_match_str = ' OR ' THEN
3987 l_party_id:=H_SCORES.NEXT(l_party_id);
3988 ELSE
3989 l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3990 END IF;
3991 END LOOP;
3992 HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3993 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
3994 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);
3995 END IF;
3996 EXCEPTION
3997 WHEN L_RETURN_IMM_EXC THEN
3998 RETURN;
3999 WHEN FND_API.G_EXC_ERROR THEN
4000 RAISE FND_API.G_EXC_ERROR;
4001 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4002 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4003 WHEN OTHERS THEN
4004 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4005 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_48.find_persons');
4006 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4007 FND_MSG_PUB.ADD;
4008 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4009 END find_persons;
4010
4011 PROCEDURE find_persons (
4012 p_rule_id IN NUMBER,
4013 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
4014 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
4015 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
4016 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
4017 p_restrict_sql IN VARCHAR2,
4018 p_match_type IN VARCHAR2,
4019 p_search_merged IN VARCHAR2,
4020 p_ins_details IN VARCHAR2,
4021 x_search_ctx_id OUT NUMBER,
4022 x_num_matches OUT NUMBER
4023 ) IS
4024
4025 BEGIN
4026 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);
4027 END;
4028 PROCEDURE find_party_details (
4029 p_rule_id IN NUMBER,
4030 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
4031 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
4032 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
4033 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
4034 p_restrict_sql IN VARCHAR2,
4035 p_match_type IN VARCHAR2,
4036 p_search_merged IN VARCHAR2,
4037 x_search_ctx_id OUT NUMBER,
4038 x_num_matches OUT NUMBER
4039 ) IS
4040
4041 BEGIN
4042 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4043 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);
4044 END IF;
4045 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4046 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);
4047 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);
4048 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);
4049 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);
4050 END IF;
4051 find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,
4052 p_restrict_sql,p_match_type,p_search_merged,null,null, null,'Y',
4053 x_search_ctx_id,x_num_matches);
4054 DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
4055 AND NOT EXISTS
4056 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);
4057 DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
4058 AND NOT EXISTS
4059 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);
4060 DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
4061 AND NOT EXISTS
4062 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);
4063 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4064 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);
4065 END IF;
4066 EXCEPTION
4070 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4067 WHEN FND_API.G_EXC_ERROR THEN
4068 RAISE FND_API.G_EXC_ERROR;
4069 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4071 WHEN OTHERS THEN
4072 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4073 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_48.find_party_details');
4074 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4075 FND_MSG_PUB.ADD;
4076 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4077 END find_party_details;
4078
4079 PROCEDURE find_duplicate_parties (
4080 p_rule_id IN NUMBER,
4081 p_party_id IN NUMBER,
4082 p_restrict_sql IN VARCHAR2,
4083 p_match_type IN VARCHAR2,
4084 p_dup_batch_id IN NUMBER,
4085 p_search_merged IN VARCHAR2,
4086 x_dup_set_id OUT NUMBER,
4087 x_search_ctx_id OUT NUMBER,
4088 x_num_matches OUT NUMBER
4089 ) IS
4090 l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4091 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4092 l_contact_list HZ_PARTY_SEARCH.contact_list;
4093 l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4094 l_match_idx NUMBER;
4095
4096 --Fix for bug 4417124
4097 l_use_contact_addr_info BOOLEAN := TRUE;
4098 l_use_contact_cpt_info BOOLEAN := TRUE;
4099 l_use_contact_addr_flag VARCHAR2(1) := 'Y';
4100 l_use_contact_cpt_flag VARCHAR2(1) := 'Y';
4101
4102 BEGIN
4103
4104 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4105 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);
4106 END IF;
4107 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4108 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);
4109 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);
4110 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);
4111 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);
4112 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);
4113 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);
4114 END IF;
4115
4116 --Fix for bug 4417124
4117
4118 SELECT use_contact_addr_flag, use_contact_cpt_flag
4119 INTO l_use_contact_addr_flag, l_use_contact_cpt_flag
4120 FROM hz_match_rules_b
4121 WHERE match_rule_id = 48;
4122
4123 IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
4124 l_use_contact_addr_info := FALSE;
4125 END IF;
4126
4127 IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
4128 l_use_contact_cpt_info := FALSE;
4129 END IF;
4130
4131 --End fix for bug 4417124
4132
4133 get_party_for_search(
4134 p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);
4135
4136 IF NOT check_prim_cond (l_party_rec,
4137 l_party_site_list,
4138 l_contact_list,
4139 l_cpt_list) THEN
4140 x_dup_set_id:=NULL;
4141 x_search_ctx_id:=NULL;
4142 x_num_matches:=0;
4143 RETURN;
4144 END IF;
4145 x_dup_set_id := NULL;
4146 IF p_dup_batch_id IS NOT NULL THEN
4147 SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;
4148 END IF;
4149
4150 --Fix for bug 4417124
4151 IF l_party_rec.PARTY_TYPE = 'PERSON' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN
4152 find_persons(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 ELSE
4156 find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4157 p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4158 x_search_ctx_id,x_num_matches);
4159 END IF;
4160
4161 IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN
4162 INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,
4163 STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,
4164 LAST_UPDATE_DATE, LAST_UPDATED_BY)
4165 VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, 'SYSBATCH',
4166 'PARTY_MERGE', hz_utility_pub.created_by, hz_utility_pub.creation_date,
4167 hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,
4168 hz_utility_pub.user_id);
4169
4170 INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
4171 MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
4172 LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID)
4173 VALUES (p_party_id,x_dup_set_id,0,0,
4174 'Y',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,
4175 hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,
4176 hz_utility_pub.user_id,p_dup_batch_id);
4177 ELSE
4178 x_dup_set_id := NULL;
4179 END IF;
4180 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4184 WHEN FND_API.G_EXC_ERROR THEN
4181 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);
4182 END IF;
4183 EXCEPTION
4185 RAISE FND_API.G_EXC_ERROR;
4186 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4187 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4188 WHEN OTHERS THEN
4189 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4190 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_48.find_duplicate_parties');
4191 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4192 FND_MSG_PUB.ADD;
4193 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4194 END find_duplicate_parties;
4195
4196 PROCEDURE find_duplicate_party_sites (
4197 p_rule_id IN NUMBER,
4198 p_party_site_id IN NUMBER,
4199 p_party_id IN NUMBER,
4200 p_restrict_sql IN VARCHAR2,
4201 p_match_type IN VARCHAR2,
4202 x_search_ctx_id OUT NUMBER,
4203 x_num_matches OUT NUMBER
4204 ) IS
4205
4206 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4207 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4208 l_contact_list HZ_PARTY_SEARCH.contact_list;
4209 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4210 contact_point_ids HZ_PARTY_SEARCH.IDList;
4211 p_party_site_list HZ_PARTY_SEARCH.IDList;
4212 p_contact_ids HZ_PARTY_SEARCH.IDList;
4213 l_match_idx NUMBER;
4214 cursor get_cpts_for_party_sites is select contact_point_id
4215 from hz_contact_points
4216 where owner_table_name = 'HZ_PARTY_SITES'
4217 and primary_flag='Y'
4218 and owner_table_id = p_party_site_id;
4219 BEGIN
4220 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4221 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);
4222 END IF;
4223 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4224 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);
4225 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);
4226 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);
4227 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);
4228 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);
4229 END IF;
4230 p_party_site_list(1) := p_party_site_id;
4231 OPEN get_cpts_for_party_sites;
4232 LOOP
4233 FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids;
4234 EXIT WHEN get_cpts_for_party_sites%NOTFOUND;
4235 END LOOP;
4236 CLOSE get_cpts_for_party_sites;
4237
4238 get_search_criteria (
4239 null,
4240 p_party_site_list,
4241 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4242 contact_point_ids,
4243 l_party_search_rec,
4244 l_party_site_list,
4245 l_contact_list,
4246 l_contact_point_list) ;
4247 IF NOT check_prim_cond (l_party_search_rec,
4248 l_party_site_list,
4249 l_contact_list,
4250 l_contact_point_list) THEN
4251 x_search_ctx_id:=NULL;
4252 x_num_matches:=0;
4253 RETURN;
4254 END IF;
4255
4256 get_matching_party_sites (p_rule_id,
4257 p_party_id,
4258 l_party_site_list,
4259 l_contact_point_list,
4260 p_restrict_sql,
4261 p_match_type,
4262 p_party_site_id,
4263 x_search_ctx_id,
4264 x_num_matches);
4265 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4266 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);
4267 END IF;
4268 EXCEPTION
4269 WHEN FND_API.G_EXC_ERROR THEN
4270 RAISE FND_API.G_EXC_ERROR;
4271 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4272 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4273 WHEN OTHERS THEN
4274 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4275 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_48.find_duplicate_party_sites');
4276 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4277 FND_MSG_PUB.ADD;
4278 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4279 END find_duplicate_party_sites;
4280
4281 PROCEDURE find_duplicate_contacts (
4282 p_rule_id IN NUMBER,
4283 p_org_contact_id IN NUMBER,
4284 p_party_id IN NUMBER,
4285 p_restrict_sql IN VARCHAR2,
4286 p_match_type IN VARCHAR2,
4287 x_search_ctx_id OUT NUMBER,
4288 x_num_matches OUT NUMBER
4289 ) IS
4290
4291 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4292 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4293 l_contact_list HZ_PARTY_SEARCH.contact_list;
4294 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4295 contact_point_ids HZ_PARTY_SEARCH.IDList;
4296 p_party_site_list HZ_PARTY_SEARCH.IDList;
4297 p_contact_ids HZ_PARTY_SEARCH.IDList;
4298 l_match_idx NUMBER;
4302 and c.owner_table_name = 'HZ_PARTIES'
4299 cursor get_cpt_for_contact_id is select contact_point_id
4300 from hz_org_contacts a, hz_relationships b, hz_contact_points c
4301 where a.party_relationship_id = b.relationship_id
4303 and c.primary_flag='Y'
4304 and c.owner_table_id = b.party_id
4305 and b.directional_flag = 'F'
4306 and a.org_contact_id = p_org_contact_id;
4307 BEGIN
4308 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4309 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);
4310 END IF;
4311 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4312 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);
4313 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);
4314 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);
4315 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);
4316 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);
4317 END IF;
4318 p_contact_ids(1) := p_org_contact_id;
4319 OPEN get_cpt_for_contact_id;
4320 LOOP
4321 FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids;
4322 EXIT WHEN get_cpt_for_contact_id%NOTFOUND;
4323 END LOOP;
4324 CLOSE get_cpt_for_contact_id;
4325
4326 get_search_criteria (
4327 null,
4328 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4329 p_contact_ids,
4330 contact_point_ids,
4331 l_party_search_rec,
4332 l_party_site_list,
4333 l_contact_list,
4334 l_contact_point_list) ;
4335 IF NOT check_prim_cond (l_party_search_rec,
4336 l_party_site_list,
4337 l_contact_list,
4338 l_contact_point_list) THEN
4339 x_search_ctx_id:=NULL;
4340 x_num_matches:=0;
4341 RETURN;
4342 END IF;
4343
4344 get_matching_contacts (p_rule_id,
4345 p_party_id,
4346 l_contact_list,
4347 l_contact_point_list,
4348 p_restrict_sql,
4349 p_match_type,
4350 p_org_contact_id,
4351 x_search_ctx_id,
4352 x_num_matches);
4353
4354 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4355 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);
4356 END IF;
4357 EXCEPTION
4358 WHEN FND_API.G_EXC_ERROR THEN
4359 RAISE FND_API.G_EXC_ERROR;
4360 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4361 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4362 WHEN OTHERS THEN
4363 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4364 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_48.find_duplicate_contacts');
4365 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4366 FND_MSG_PUB.ADD;
4367 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4368 END find_duplicate_contacts;
4369
4370 PROCEDURE find_duplicate_contact_points (
4371 p_rule_id IN NUMBER,
4372 p_contact_point_id IN NUMBER,
4373 p_party_id IN NUMBER,
4374 p_restrict_sql IN VARCHAR2,
4375 p_match_type IN VARCHAR2,
4376 x_search_ctx_id OUT NUMBER,
4377 x_num_matches OUT NUMBER
4378 ) IS
4379 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4380 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4381 l_contact_list HZ_PARTY_SEARCH.contact_list;
4382 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4383 contact_point_ids HZ_PARTY_SEARCH.IDList;
4384 p_party_site_list HZ_PARTY_SEARCH.IDList;
4385 p_contact_ids HZ_PARTY_SEARCH.IDList;
4386 l_match_idx NUMBER;
4387
4388 BEGIN
4389 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4390 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);
4391 END IF;
4392 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4393 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);
4394 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);
4395 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);
4396 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);
4397 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);
4398 END IF;
4399 contact_point_ids(1) := p_contact_point_id;
4400 get_search_criteria (
4401 null,
4402 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4403 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4404 contact_point_ids,
4405 l_party_search_rec,
4406 l_party_site_list,
4407 l_contact_list,
4408 l_contact_point_list );
4409
4410 IF NOT check_prim_cond (l_party_search_rec,
4411 l_party_site_list,
4412 l_contact_list,
4413 l_contact_point_list) THEN
4414 x_search_ctx_id:=NULL;
4415 x_num_matches:=0;
4416 RETURN;
4417 END IF;
4418 get_matching_contact_points (
4419 p_rule_id,
4420 p_party_id,
4421 l_contact_point_list,
4422 p_restrict_sql,
4423 p_match_type,
4424 p_contact_point_id,
4425 x_search_ctx_id,
4426 x_num_matches );
4427 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4428 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);
4429 END IF;
4430 EXCEPTION
4431 WHEN FND_API.G_EXC_ERROR THEN
4432 RAISE FND_API.G_EXC_ERROR;
4433 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4434 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4435 WHEN OTHERS THEN
4436 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4437 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_48.find_duplicate_contact_points');
4438 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4439 FND_MSG_PUB.ADD;
4440 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4441 END find_duplicate_contact_points;
4442
4443 PROCEDURE find_parties_dynamic (
4444 p_rule_id IN NUMBER,
4445 p_attrib_id1 IN NUMBER,
4446 p_attrib_id2 IN NUMBER,
4447 p_attrib_id3 IN NUMBER,
4448 p_attrib_id4 IN NUMBER,
4449 p_attrib_id5 IN NUMBER,
4450 p_attrib_id6 IN NUMBER,
4451 p_attrib_id7 IN NUMBER,
4452 p_attrib_id8 IN NUMBER,
4453 p_attrib_id9 IN NUMBER,
4454 p_attrib_id10 IN NUMBER,
4455 p_attrib_id11 IN NUMBER,
4456 p_attrib_id12 IN NUMBER,
4457 p_attrib_id13 IN NUMBER,
4458 p_attrib_id14 IN NUMBER,
4459 p_attrib_id15 IN NUMBER,
4460 p_attrib_id16 IN NUMBER,
4461 p_attrib_id17 IN NUMBER,
4462 p_attrib_id18 IN NUMBER,
4463 p_attrib_id19 IN NUMBER,
4464 p_attrib_id20 IN NUMBER,
4465 p_attrib_val1 IN VARCHAR2,
4466 p_attrib_val2 IN VARCHAR2,
4467 p_attrib_val3 IN VARCHAR2,
4468 p_attrib_val4 IN VARCHAR2,
4469 p_attrib_val5 IN VARCHAR2,
4470 p_attrib_val6 IN VARCHAR2,
4471 p_attrib_val7 IN VARCHAR2,
4472 p_attrib_val8 IN VARCHAR2,
4473 p_attrib_val9 IN VARCHAR2,
4474 p_attrib_val10 IN VARCHAR2,
4475 p_attrib_val11 IN VARCHAR2,
4476 p_attrib_val12 IN VARCHAR2,
4477 p_attrib_val13 IN VARCHAR2,
4478 p_attrib_val14 IN VARCHAR2,
4479 p_attrib_val15 IN VARCHAR2,
4480 p_attrib_val16 IN VARCHAR2,
4481 p_attrib_val17 IN VARCHAR2,
4482 p_attrib_val18 IN VARCHAR2,
4483 p_attrib_val19 IN VARCHAR2,
4484 p_attrib_val20 IN VARCHAR2,
4485 p_restrict_sql IN VARCHAR2,
4486 p_match_type IN VARCHAR2,
4487 p_search_merged IN VARCHAR2,
4488 x_search_ctx_id OUT NUMBER,
4489 x_num_matches OUT NUMBER
4490 ) IS
4491 BEGIN
4492 call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,
4493 p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,
4494 p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,
4495 p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,
4496 p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,
4497 p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,
4498 p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,
4502
4499 p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,
4500 p_restrict_sql,'FIND_PARTIES',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);
4501 END;
4503 PROCEDURE call_api_dynamic (
4504 p_rule_id IN NUMBER,
4505 p_attrib_id1 IN NUMBER,
4506 p_attrib_id2 IN NUMBER,
4507 p_attrib_id3 IN NUMBER,
4508 p_attrib_id4 IN NUMBER,
4509 p_attrib_id5 IN NUMBER,
4510 p_attrib_id6 IN NUMBER,
4511 p_attrib_id7 IN NUMBER,
4512 p_attrib_id8 IN NUMBER,
4513 p_attrib_id9 IN NUMBER,
4514 p_attrib_id10 IN NUMBER,
4515 p_attrib_id11 IN NUMBER,
4516 p_attrib_id12 IN NUMBER,
4517 p_attrib_id13 IN NUMBER,
4518 p_attrib_id14 IN NUMBER,
4519 p_attrib_id15 IN NUMBER,
4520 p_attrib_id16 IN NUMBER,
4521 p_attrib_id17 IN NUMBER,
4522 p_attrib_id18 IN NUMBER,
4523 p_attrib_id19 IN NUMBER,
4524 p_attrib_id20 IN NUMBER,
4525 p_attrib_val1 IN VARCHAR2,
4526 p_attrib_val2 IN VARCHAR2,
4527 p_attrib_val3 IN VARCHAR2,
4528 p_attrib_val4 IN VARCHAR2,
4529 p_attrib_val5 IN VARCHAR2,
4530 p_attrib_val6 IN VARCHAR2,
4531 p_attrib_val7 IN VARCHAR2,
4532 p_attrib_val8 IN VARCHAR2,
4533 p_attrib_val9 IN VARCHAR2,
4534 p_attrib_val10 IN VARCHAR2,
4535 p_attrib_val11 IN VARCHAR2,
4536 p_attrib_val12 IN VARCHAR2,
4537 p_attrib_val13 IN VARCHAR2,
4538 p_attrib_val14 IN VARCHAR2,
4539 p_attrib_val15 IN VARCHAR2,
4540 p_attrib_val16 IN VARCHAR2,
4541 p_attrib_val17 IN VARCHAR2,
4542 p_attrib_val18 IN VARCHAR2,
4543 p_attrib_val19 IN VARCHAR2,
4544 p_attrib_val20 IN VARCHAR2,
4545 p_restrict_sql IN VARCHAR2,
4546 p_api_name IN VARCHAR2,
4547 p_match_type IN VARCHAR2,
4548 p_party_id IN NUMBER,
4549 p_search_merged IN VARCHAR2,
4550 x_search_ctx_id OUT NUMBER,
4551 x_num_matches OUT NUMBER
4552 ) IS
4553 TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
4554 l_match_idx NUMBER;
4555 AttrVals AttrList;
4556 l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4557 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4558 l_contact_list HZ_PARTY_SEARCH.contact_list;
4559 l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4560 l_dup_set_id NUMBER;
4561 l_idx NUMBER;
4562 l_cpt_type VARCHAR2(255);
4563 FIRST BOOLEAN := TRUE;
4564
4565 BEGIN
4566 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4567 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);
4568 END IF;
4569
4570 IF p_attrib_id1 IS NOT NULL THEN
4571 AttrVals(p_attrib_id1):=p_attrib_val1;
4572 END IF;
4573 IF p_attrib_id2 IS NOT NULL THEN
4574 AttrVals(p_attrib_id2):=p_attrib_val2;
4575 END IF;
4576 IF p_attrib_id3 IS NOT NULL THEN
4577 AttrVals(p_attrib_id3):=p_attrib_val3;
4578 END IF;
4579 IF p_attrib_id4 IS NOT NULL THEN
4580 AttrVals(p_attrib_id4):=p_attrib_val4;
4581 END IF;
4582 IF p_attrib_id5 IS NOT NULL THEN
4583 AttrVals(p_attrib_id5):=p_attrib_val5;
4584 END IF;
4585 IF p_attrib_id6 IS NOT NULL THEN
4586 AttrVals(p_attrib_id6):=p_attrib_val6;
4587 END IF;
4588 IF p_attrib_id7 IS NOT NULL THEN
4589 AttrVals(p_attrib_id7):=p_attrib_val7;
4590 END IF;
4591 IF p_attrib_id8 IS NOT NULL THEN
4592 AttrVals(p_attrib_id8):=p_attrib_val8;
4593 END IF;
4594 IF p_attrib_id9 IS NOT NULL THEN
4595 AttrVals(p_attrib_id9):=p_attrib_val9;
4596 END IF;
4597 IF p_attrib_id10 IS NOT NULL THEN
4598 AttrVals(p_attrib_id10):=p_attrib_val10;
4599 END IF;
4600 IF p_attrib_id11 IS NOT NULL THEN
4601 AttrVals(p_attrib_id11):=p_attrib_val11;
4602 END IF;
4603 IF p_attrib_id12 IS NOT NULL THEN
4604 AttrVals(p_attrib_id12):=p_attrib_val12;
4605 END IF;
4606 IF p_attrib_id13 IS NOT NULL THEN
4607 AttrVals(p_attrib_id13):=p_attrib_val13;
4608 END IF;
4609 IF p_attrib_id14 IS NOT NULL THEN
4610 AttrVals(p_attrib_id14):=p_attrib_val14;
4611 END IF;
4612 IF p_attrib_id15 IS NOT NULL THEN
4613 AttrVals(p_attrib_id15):=p_attrib_val15;
4614 END IF;
4615 IF p_attrib_id16 IS NOT NULL THEN
4616 AttrVals(p_attrib_id16):=p_attrib_val16;
4617 END IF;
4618 IF p_attrib_id17 IS NOT NULL THEN
4619 AttrVals(p_attrib_id17):=p_attrib_val17;
4620 END IF;
4621 IF p_attrib_id18 IS NOT NULL THEN
4622 AttrVals(p_attrib_id18):=p_attrib_val18;
4623 END IF;
4624 IF p_attrib_id19 IS NOT NULL THEN
4625 AttrVals(p_attrib_id19):=p_attrib_val19;
4626 END IF;
4627 IF p_attrib_id20 IS NOT NULL THEN
4628 AttrVals(p_attrib_id20):=p_attrib_val20;
4629 END IF;
4630 IF AttrVals.EXISTS(8) THEN
4631 l_party_rec.PARTY_NAME:= AttrVals(8);
4632 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4633 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);
4634 END IF;
4635 END IF;
4636
4637 IF AttrVals.EXISTS(12) THEN
4638 l_party_rec.PARTY_NUMBER:= AttrVals(12);
4639 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4640 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);
4641 END IF;
4642 END IF;
4643
4644 IF AttrVals.EXISTS(14) THEN
4645 l_party_rec.PARTY_TYPE:= AttrVals(14);
4646 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4647 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);
4648 END IF;
4649 END IF;
4650
4651 IF AttrVals.EXISTS(20) THEN
4652 l_party_rec.SIC_CODE:= AttrVals(20);
4653 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4654 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);
4655 END IF;
4656 END IF;
4657
4658 IF AttrVals.EXISTS(27) THEN
4659 l_party_site_list(1).ADDRESS:= AttrVals(27);
4660 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4661 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);
4662 END IF;
4663 END IF;
4664
4665 IF AttrVals.EXISTS(29) THEN
4666 l_party_site_list(1).CITY:= AttrVals(29);
4667 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4668 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);
4669 END IF;
4670 END IF;
4671
4672 IF AttrVals.EXISTS(32) THEN
4673 l_party_site_list(1).STATE:= AttrVals(32);
4674 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4675 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);
4676 END IF;
4677 END IF;
4678
4679 IF AttrVals.EXISTS(36) THEN
4680 l_party_site_list(1).COUNTRY:= AttrVals(36);
4681 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4682 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);
4683 END IF;
4684 END IF;
4685
4686
4687 IF AttrVals.EXISTS(14) THEN
4688 l_party_rec.PARTY_TYPE:= AttrVals(14);
4689 END IF;
4690 IF upper(p_api_name) = 'FIND_PARTIES' THEN
4691 find_parties(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,NULL,NULL,NULL,'N',
4693 x_search_ctx_id,x_num_matches);
4694 ELSIF upper(p_api_name) = 'FIND_PARTY_DETAILS' THEN
4695 find_party_details(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,
4697 x_search_ctx_id,x_num_matches);
4698 ELSIF upper(p_api_name) = 'FIND_PERSONS' THEN
4699 find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4700 p_restrict_sql,p_match_type,p_search_merged,'N',
4701 x_search_ctx_id,x_num_matches);
4702 ELSIF upper(p_api_name) = 'GET_MATCHING_PARTY_SITES' THEN
4703 get_matching_party_sites(p_rule_id,p_party_id,l_party_site_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_CONTACTS' THEN
4707 get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,
4708 p_restrict_sql,p_match_type,NULL,
4709 x_search_ctx_id,x_num_matches);
4710 ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACT_POINTS' THEN
4711 get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,
4712 p_restrict_sql,p_match_type,NULL,
4713 x_search_ctx_id,x_num_matches);
4714 END IF;
4715 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4716 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);
4717 END IF;
4718 EXCEPTION
4719 WHEN FND_API.G_EXC_ERROR THEN
4720 RAISE FND_API.G_EXC_ERROR;
4721 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4722 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4723 WHEN OTHERS THEN
4724 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4725 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_48.call_api_dynamic');
4726 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4727 FND_MSG_PUB.ADD;
4728 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4729 END call_api_dynamic;
4730
4731
4732 PROCEDURE get_matching_party_sites (
4733 p_rule_id IN NUMBER,
4734 p_party_id IN NUMBER,
4735 p_party_site_list IN HZ_PARTY_SEARCH.PARTY_SITE_LIST,
4736 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
4737 p_restrict_sql IN VARCHAR2,
4738 p_match_type IN VARCHAR2,
4739 p_dup_party_site_id IN NUMBER,
4740 x_search_ctx_id OUT NUMBER,
4741 x_num_matches OUT NUMBER
4742 ) IS
4743
4744 -- Strings to hold the generated Intermedia query strings
4745 l_party_contains_str VARCHAR2(32000);
4746 l_match_idx NUMBER;
4747 l_party_site_contains_str VARCHAR2(32000);
4748 l_contact_contains_str VARCHAR2(32000);
4749 l_contact_pt_contains_str VARCHAR2(32000);
4750 l_tmp VARCHAR2(32000);
4751
4752 -- Other local variables
4753 l_match_str VARCHAR2(30); -- Match type (AND or OR)
4754 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
4755 -- For Score calculation
4756 l_max_score NUMBER;
4757 l_entered_max_score NUMBER;
4758 FIRST BOOLEAN;
4759 l_search_ctx_id NUMBER; -- Generated Search Context ID
4760
4761 l_TX22 VARCHAR2(2000);
4762 l_TX4 VARCHAR2(2000);
4763 l_TX10 VARCHAR2(2000);
4764 l_TX14 VARCHAR2(2000);
4765 H_SCORES HZ_PARTY_SEARCH.score_list;
4766
4767 l_score NUMBER;
4768 l_idx NUMBER;
4769 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
4770 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
4771 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
4772 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
4773 l_party_id NUMBER;
4774 l_ps_party_id NUMBER;
4775 l_ct_party_id NUMBER;
4776 l_cpt_party_id NUMBER;
4777 l_cpt_ps_id NUMBER;
4778 l_cpt_contact_id NUMBER;
4779 l_cpt_type VARCHAR2(100);
4780 l_cpt_level VARCHAR2(100);
4781 l_party_site_id NUMBER;
4782 l_org_contact_id NUMBER;
4783 l_contact_pt_id NUMBER;
4784 l_cpt_level VARCHAR2(100);
4785 l_ps_contact_id NUMBER;
4786 l_party_max_score NUMBER;
4787 l_ps_max_score NUMBER;
4788 l_contact_max_score NUMBER;
4789 l_cpt_max_score NUMBER;
4790
4791 defpt NUMBER :=0;
4792 defps NUMBER :=0;
4793 defct NUMBER :=0;
4794 defcpt NUMBER :=0;
4795 l_index NUMBER;
4796 l_match_ps_list HZ_PARTY_SEARCH.IDList;
4797 l_cnt NUMBER:=1;
4798
4799
4800 BEGIN
4801 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4802 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);
4803 END IF;
4804 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4805 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);
4806 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);
4807 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);
4808 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);
4809 END IF;
4810
4811 -- ************************************
4812 -- STEP 1. Initialization and error checks
4813
4814 l_match_str := ' OR ';
4815 IF p_match_type = 'AND' THEN
4816 l_match_str := ' AND ';
4817 ELSIF p_match_type = 'OR' THEN
4818 l_match_str := ' OR ';
4819 END IF;
4820 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);
4821 g_score_until_thresh := false;
4822 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4823
4824 -- ************************************************************
4825 -- STEP 2. Setup of intermedia query strings for Acquisition query
4826 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
4827 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
4828 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);
4829
4830 -- Setup Search Context ID
4831 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
4832 x_search_ctx_id := l_search_ctx_id;
4833
4834 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4835 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);
4836 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);
4837 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);
4838 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);
4839 END IF;
4840 IF l_party_site_contains_str IS NULL THEN
4841 defps := 1;
4842 END IF;
4843 IF l_contact_pt_contains_str IS NULL THEN
4844 defcpt := 1;
4845 END IF;
4846
4847 IF l_party_site_contains_str IS NOT NULL THEN
4848 open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,'N', 'N',l_party_site_cur);
4849 LOOP
4850 FETCH l_party_site_cur INTO
4851 l_party_site_id, l_ps_party_id, l_ps_contact_id , l_TX4, l_TX10, l_TX14, l_TX22;
4852 EXIT WHEN l_party_site_cur%NOTFOUND;
4853 IF (p_dup_party_site_id IS NULL OR (
4854 p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND
4855 l_party_site_id <> p_dup_party_site_id)) THEN
4856 l_index := map_id(l_party_site_id);
4857 l_match_ps_list(l_cnt):= l_party_site_id ;
4858 l_cnt:=l_cnt+1;
4859 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX4,l_TX10,l_TX14,l_TX22);
4860 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);
4861 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4862 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);
4863 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);
4864 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);
4865 END IF;
4866 END IF;
4867 END LOOP;
4868 CLOSE l_party_site_cur;
4869 END IF;
4870
4871 IF l_contact_pt_contains_str IS NOT NULL THEN
4872 SAVEPOINT eval_start;
4873 IF l_match_str = ' AND ' OR (
4874 ((l_cpt_max_score/l_entered_max_score)<(100/275))
4875 ) THEN
4876 FORALL I in 1..l_match_ps_list.COUNT
4877 INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
4878 values (l_search_ctx_id,l_match_ps_list(I));
4879 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');
4880 ELSE
4881 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
4882 END IF;
4883 LOOP
4884 FETCH l_contact_pt_cur INTO
4885 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id ;
4886 EXIT WHEN l_contact_pt_cur%NOTFOUND;
4887 IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (
4888 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
4889 l_index := map_id(l_cpt_ps_id);
4890 IF l_match_str = ' OR ' THEN
4891 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
4892 IF NOT H_SCORES.EXISTS(l_index) THEN
4893 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);
4894 ELSE
4895 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
4896 H_SCORES(l_index).TOTAL_SCORE :=
4897 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4898 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
4899 END IF;
4900 END IF;
4901 ELSE
4902 IF H_SCORES.EXISTS(l_index) THEN
4903 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
4904 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
4905 H_SCORES(l_index).TOTAL_SCORE :=
4906 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4907 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
4908 END IF;
4909 ELSIF defps=1 THEN
4910 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
4911 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);
4912 END IF;
4913 END IF;
4914 END IF;
4915 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4916 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);
4917 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);
4918 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);
4919 END IF;
4920 END LOOP;
4921 CLOSE l_contact_pt_cur;
4922 ROLLBACK TO eval_start;
4923 END IF;
4927 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 x_num_matches := 0;
4925 l_party_site_id := H_SCORES.FIRST;
4926 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4928 END IF;
4929 WHILE l_party_site_id IS NOT NULL LOOP
4930 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4931 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);
4932 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);
4933 END IF;
4934 IF l_match_str = ' OR ' THEN
4935 IF (H_SCORES(l_party_site_id).TOTAL_SCORE)>=( ROUND((45/275) * 100) ) THEN
4936 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE)
4937 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);
4938 x_num_matches := x_num_matches+1;
4939 END IF;
4940 ELSE
4941 IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND
4942 H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND
4943 (H_SCORES(l_party_site_id).TOTAL_SCORE)>=(ROUND((45/275) * 100)) THEN
4944 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE)
4945 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));
4946 x_num_matches := x_num_matches+1;
4947 END IF;
4948 END IF;
4949 l_party_site_id:=H_SCORES.NEXT(l_party_site_id);
4950 END LOOP;
4951 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4952 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);
4953 END IF;
4954 EXCEPTION
4955 WHEN FND_API.G_EXC_ERROR THEN
4956 RAISE FND_API.G_EXC_ERROR;
4957 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4958 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4959 WHEN OTHERS THEN
4960 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4961 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_48.get_matching_party_sites');
4962 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4963 FND_MSG_PUB.ADD;
4964 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4965 END get_matching_party_sites;
4966
4967
4968 PROCEDURE get_matching_contacts (
4969 p_rule_id IN NUMBER,
4970 p_party_id IN NUMBER,
4971 p_contact_list IN HZ_PARTY_SEARCH.CONTACT_LIST,
4972 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
4973 p_restrict_sql IN VARCHAR2,
4974 p_match_type IN VARCHAR2,
4975 p_dup_contact_id IN NUMBER,
4976 x_search_ctx_id OUT NUMBER,
4977 x_num_matches OUT NUMBER
4978 ) IS
4979
4980 -- Strings to hold the generated Intermedia query strings
4981 l_party_contains_str VARCHAR2(32000);
4982 l_party_site_contains_str VARCHAR2(32000);
4983 l_contact_contains_str VARCHAR2(32000);
4984 l_contact_pt_contains_str VARCHAR2(32000);
4985 l_tmp VARCHAR2(32000);
4986
4987 -- Other local variables
4988 l_match_str VARCHAR2(30); -- Match type (AND or OR)
4989 l_match_idx NUMBER;
4990 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
4991 -- For Score calculation
4992 l_max_score NUMBER;
4993 l_entered_max_score NUMBER;
4994 FIRST BOOLEAN;
4995 l_search_ctx_id NUMBER; -- Generated Search Context ID
4996
4997 H_SCORES HZ_PARTY_SEARCH.score_list;
4998
4999 l_score NUMBER;
5000 l_idx NUMBER;
5001 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5002 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5003 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5004 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5005 l_party_id NUMBER;
5006 l_ps_party_id NUMBER;
5007 l_ct_party_id NUMBER;
5008 l_cpt_party_id NUMBER;
5009 l_cpt_ps_id NUMBER;
5010 l_cpt_contact_id NUMBER;
5011 l_cpt_type VARCHAR2(100);
5012 l_party_site_id NUMBER;
5013 l_org_contact_id NUMBER;
5014 l_contact_pt_id NUMBER;
5015
5016 defpt NUMBER :=0;
5017 defps NUMBER :=0;
5018 defct NUMBER :=0;
5019 defcpt NUMBER :=0;
5020 l_index NUMBER;
5021 l_party_max_score NUMBER;
5022 l_ps_max_score NUMBER;
5023 l_contact_max_score NUMBER;
5024 l_cpt_max_score NUMBER;
5025 l_match_contact_list HZ_PARTY_SEARCH.IDList;
5026 l_cnt NUMBER:=1;
5027
5028
5029 BEGIN
5030 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5031 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);
5032 END IF;
5033 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5034 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);
5035 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);
5039
5036 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);
5037 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);
5038 END IF;
5040 -- ************************************
5041 -- STEP 1. Initialization and error checks
5042
5043 l_match_str := ' OR ';
5044 IF p_match_type = 'AND' THEN
5045 l_match_str := ' AND ';
5046 ELSIF p_match_type = 'OR' THEN
5047 l_match_str := ' OR ';
5048 END IF;
5049 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);
5050 g_score_until_thresh := false;
5051 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5052
5053 -- ************************************************************
5054 -- STEP 2. Setup of intermedia query strings for Acquisition query
5055 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5056 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5057 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);
5058
5059 -- Setup Search Context ID
5060 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5061 x_search_ctx_id := l_search_ctx_id;
5062
5063 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5064 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);
5065 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);
5066 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);
5067 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);
5068 END IF;
5069 IF l_contact_contains_str IS NULL THEN
5070 defct := 1;
5071 END IF;
5072 IF l_contact_pt_contains_str IS NULL THEN
5073 defcpt := 1;
5074 END IF;
5075
5076 IF l_contact_contains_str IS NOT NULL THEN
5077 open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);
5078 LOOP
5079 FETCH l_contact_cur INTO
5080 l_org_contact_id, l_ct_party_id ;
5081 EXIT WHEN l_contact_cur%NOTFOUND;
5082 IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN
5083 l_index := map_id(l_org_contact_id);
5084 l_match_contact_list(l_cnt):=l_org_contact_id;
5085 l_cnt:=l_cnt+1;
5086 l_score := GET_CONTACTS_SCORE(l_match_idx);
5087 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);
5088 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5089 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);
5090 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);
5091 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);
5092 END IF;
5093 END IF;
5094 END LOOP;
5095 CLOSE l_contact_cur;
5096 END IF;
5097
5098 IF l_contact_pt_contains_str IS NOT NULL THEN
5099 SAVEPOINT eval_start;
5100 IF l_match_str = ' AND ' OR (
5101 ((l_cpt_max_score/l_entered_max_score)<(100/275))
5102 ) THEN
5103 FORALL I in 1..l_match_contact_list.COUNT
5104 INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5105 values (l_search_ctx_id,l_match_contact_list(I));
5106 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');
5107 ELSE
5108 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5109 END IF;
5110 LOOP
5111 FETCH l_contact_pt_cur INTO
5112 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id ;
5113 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5114 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
5115 l_index := map_id(l_cpt_contact_id);
5116 IF l_match_str = ' OR ' THEN
5117 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
5118 IF NOT H_SCORES.EXISTS(l_index) THEN
5119 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);
5120 ELSE
5121 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5122 H_SCORES(l_index).TOTAL_SCORE :=
5123 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5124 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5125 END IF;
5126 END IF;
5127 ELSE
5128 IF H_SCORES.EXISTS(l_index) THEN
5129 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
5130 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5131 H_SCORES(l_index).TOTAL_SCORE :=
5132 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5133 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5134 END IF;
5135 ELSIF defps=1 THEN
5136 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
5137 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);
5138 END IF;
5139 END IF;
5140 END IF;
5141 END LOOP;
5142 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5143 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);
5144 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);
5145 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);
5146 END IF;
5147 CLOSE l_contact_pt_cur;
5148 END IF;
5149 x_num_matches := 0;
5150 l_org_contact_id := H_SCORES.FIRST;
5151 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5152 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);
5153 END IF;
5154 WHILE l_org_contact_id IS NOT NULL LOOP
5155 IF l_match_str = ' OR ' THEN
5156 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5157 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);
5158 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);
5159 END IF;
5160 IF (H_SCORES(l_org_contact_id).TOTAL_SCORE)>=(ROUND((0/275) * 100)) THEN
5161 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE)
5162 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);
5163 x_num_matches := x_num_matches+1;
5164 END IF;
5165 ELSE
5166 IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND
5167 H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND
5168 (H_SCORES(l_org_contact_id).TOTAL_SCORE)>=(ROUND((0/275) * 100)) THEN
5169 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE)
5170 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));
5171 x_num_matches := x_num_matches+1;
5172 END IF;
5173 END IF;
5174 l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);
5175 END LOOP;
5176 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5177 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);
5178 END IF;
5179 EXCEPTION
5180 WHEN FND_API.G_EXC_ERROR THEN
5181 RAISE FND_API.G_EXC_ERROR;
5182 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5183 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5184 WHEN OTHERS THEN
5185 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5186 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_48.get_matching_contacts');
5187 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5188 FND_MSG_PUB.ADD;
5189 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5190 END get_matching_contacts;
5191
5192
5193 PROCEDURE get_matching_contact_points (
5194 p_rule_id IN NUMBER,
5195 p_party_id IN NUMBER,
5196 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5197 p_restrict_sql IN VARCHAR2,
5198 p_match_type IN VARCHAR2,
5199 p_dup_contact_point_id IN NUMBER,
5200 x_search_ctx_id OUT NUMBER,
5201 x_num_matches OUT NUMBER
5202 ) IS
5203
5204
5205 -- Strings to hold the generated Intermedia query strings
5206 l_contact_pt_contains_str VARCHAR2(32000);
5207 l_tmp VARCHAR2(32000);
5208
5209 -- Other local variables
5210 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5211 l_match_idx NUMBER;
5212 -- For Score calculation
5213 l_entered_max_score NUMBER;
5214 l_search_ctx_id NUMBER; -- Generated Search Context ID
5215
5216
5217 l_score NUMBER;
5218 l_idx NUMBER;
5219 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5220 l_cpt_party_id NUMBER;
5221 l_cpt_ps_id NUMBER;
5222 l_cpt_contact_id NUMBER;
5223 l_contact_pt_id NUMBER;
5224 l_cpt_type VARCHAR2(100);
5225 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
5226 H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;
5227 H_SCORE HZ_PARTY_SEARCH.IDList;
5228
5229 cnt NUMBER :=0;
5230 l_party_max_score NUMBER;
5231 l_ps_max_score NUMBER;
5232 l_contact_max_score NUMBER;
5233 l_cpt_max_score NUMBER;
5234
5235
5236 BEGIN
5237 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5238 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);
5239 END IF;
5240 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5241 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);
5242 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);
5243 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);
5244 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);
5245 END IF;
5246
5247 -- ************************************
5248 -- STEP 1. Initialization and error checks
5249
5250 l_match_str := ' OR ';
5251 IF p_match_type = 'AND' THEN
5252 l_match_str := ' AND ';
5253 ELSIF p_match_type = 'OR' THEN
5254 l_match_str := ' OR ';
5255 END IF;
5256 l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,
5257 HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
5258 p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
5259 g_score_until_thresh := false;
5260 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5261
5262 -- ************************************************************
5263 -- STEP 2. Setup of intermedia query strings for Acquisition query
5264 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5265 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);
5266
5267 -- Setup Search Context ID
5268 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5269 x_search_ctx_id := l_search_ctx_id;
5270 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5271 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);
5272 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);
5273 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);
5274 END IF;
5275
5276 IF l_contact_pt_contains_str IS NOT NULL THEN
5277 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5278 cnt := 1;
5279 LOOP
5280 FETCH l_contact_pt_cur INTO
5281 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id ;
5282 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5283 IF (p_dup_contact_point_id IS NULL OR (
5284 p_dup_contact_point_id IS NOT NULL AND
5285 l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND
5286 p_dup_contact_point_id <> l_contact_pt_id)) THEN
5287 H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;
5288 H_PARTY_ID(cnt) := l_cpt_party_id;
5289 H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx);
5290 cnt := cnt+1;
5291 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5292 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);
5293 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);
5294 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);
5295 END IF;
5296 END IF;
5297 END LOOP;
5298 CLOSE l_contact_pt_cur;
5299 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5300 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);
5301 END IF;
5302 x_num_matches := 0;
5303 FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP
5304 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5305 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);
5306 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);
5307 END IF;
5308 IF (H_SCORE(I)) >= (ROUND((0/275) * 100)) THEN
5309 INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
5310 l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);
5311 x_num_matches := x_num_matches + 1;
5312 END IF;
5313 END LOOP;
5314 END IF;
5315 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5316 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);
5317 END IF;
5318 EXCEPTION
5319 WHEN FND_API.G_EXC_ERROR THEN
5320 RAISE FND_API.G_EXC_ERROR;
5321 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5322 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5323 WHEN OTHERS THEN
5324 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5325 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_48.get_matching_contact_points');
5326 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5327 FND_MSG_PUB.ADD;
5328 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5332 This procedure finds the score details for a specific party that
5329 END get_matching_contact_points;
5330
5331 /**********************************************************
5333 matched
5334
5335 **********************************************************/
5336
5337 PROCEDURE get_score_details (
5338 p_rule_id IN NUMBER,
5339 p_party_id IN NUMBER,
5340 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
5341 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
5342 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
5343 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
5344 x_search_ctx_id IN OUT NUMBER
5345 ) IS
5346
5347 -- Strings to hold the generated Intermedia query strings
5348 l_party_contains_str VARCHAR2(32000);
5349 l_party_site_contains_str VARCHAR2(32000);
5350 l_contact_contains_str VARCHAR2(32000);
5351 l_contact_pt_contains_str VARCHAR2(32000);
5352 l_tmp VARCHAR2(32000);
5353
5354 -- Other local variables
5355 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5356 -- For Score calculation
5357 l_max_score NUMBER;
5358 l_entered_max_score NUMBER;
5359 FIRST BOOLEAN;
5360 l_search_ctx_id NUMBER; -- Generated Search Context ID
5361
5362 l_TX19 VARCHAR2(2000);
5363 l_max_TX19 VARCHAR2(2000);
5364 l_TX46 VARCHAR2(2000);
5365 l_max_TX46 VARCHAR2(2000);
5366 l_TX22 VARCHAR2(2000);
5367 l_max_TX22 VARCHAR2(2000);
5368 l_TX4 VARCHAR2(2000);
5369 l_max_TX4 VARCHAR2(2000);
5370 l_TX10 VARCHAR2(2000);
5371 l_max_TX10 VARCHAR2(2000);
5372 l_TX8 VARCHAR2(2000);
5373 l_max_TX8 VARCHAR2(2000);
5374 l_TX34 VARCHAR2(2000);
5375 l_max_TX34 VARCHAR2(2000);
5376 l_TX36 VARCHAR2(2000);
5377 l_max_TX36 VARCHAR2(2000);
5378 l_TX14 VARCHAR2(2000);
5379 l_max_TX14 VARCHAR2(2000);
5380 H_SCORES HZ_PARTY_SEARCH.score_list;
5381
5382 l_score NUMBER;
5383 l_match_idx NUMBER;
5384 l_idx NUMBER;
5385 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5386 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5387 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5388 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5389 l_party_id NUMBER;
5390 l_ps_party_id NUMBER;
5391 l_ct_party_id NUMBER;
5392 l_cpt_party_id NUMBER;
5393 l_cpt_ps_id NUMBER;
5394 l_cpt_contact_id NUMBER;
5395 l_cpt_type VARCHAR2(100);
5396 l_party_site_id NUMBER;
5397 l_org_contact_id NUMBER;
5398 l_contact_pt_id NUMBER;
5399 l_ps_contact_id NUMBER;
5400 l_max_id NUMBER;
5401 l_max_idx NUMBER;
5402
5403 l_index NUMBER;
5404 l_party_max_score NUMBER;
5405 l_ps_max_score NUMBER;
5406 l_contact_max_score NUMBER;
5407 l_cpt_max_score NUMBER;
5408
5409 --Fix for bug 4417124
5410 l_use_contact_addr_info BOOLEAN:=TRUE;
5411 l_use_contact_cpt_info BOOLEAN:=TRUE;
5412 l_TX35_new VARCHAR2(4000);
5413
5414 BEGIN
5415
5416 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5417 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);
5418 END IF;
5419 -- ************************************
5420 -- STEP 1. Initialization and error checks
5421
5422 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);
5423 g_score_until_thresh := false;
5424 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5425 -- ************************************************************
5426 -- STEP 2. Setup of intermedia query strings for Acquisition query
5427 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
5428 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5429 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5430 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
5431
5432 -- Setup Search Context ID
5433 IF x_search_ctx_id IS NULL THEN
5434 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5435 x_search_ctx_id := l_search_ctx_id;
5436 ELSE
5437 l_search_ctx_id := x_search_ctx_id;
5438 END IF;
5439
5440 open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);
5441 LOOP
5442 FETCH l_party_cur INTO
5443 l_party_id , l_TX4, l_TX8, l_TX19, l_TX34, l_TX36, l_TX46;
5444 EXIT WHEN l_party_cur%NOTFOUND;
5445 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);
5446 END LOOP;
5447 CLOSE l_party_cur;
5448
5449 IF l_party_site_contains_str IS NOT NULL THEN
5450 l_max_score := 0;
5451 l_max_id := 0;
5452 l_max_idx := 0;
5453 IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_addr_info THEN
5454 open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'Y','N',l_party_site_cur);
5455 ELSE
5456 open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'N','N',l_party_site_cur);
5457 END IF;
5458 LOOP
5459 FETCH l_party_site_cur INTO
5460 l_party_site_id, l_ps_party_id,l_ps_contact_id , l_TX4, l_TX10, l_TX14, l_TX22;
5461 EXIT WHEN l_party_site_cur%NOTFOUND;
5462 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX4,l_TX10,l_TX14,l_TX22);
5463 IF l_score > l_max_score THEN
5467 l_max_TX22 := l_TX22;
5464 l_max_score := l_score;
5465 l_max_id := l_party_site_id;
5466 l_max_idx := l_match_idx;
5468 l_max_TX4 := l_TX4;
5469 l_max_TX10 := l_TX10;
5470 l_max_TX14 := l_TX14;
5471 END IF;
5472 END LOOP;
5473 CLOSE l_party_site_cur;
5474 IF l_max_score>0 THEN
5475 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);
5476 END IF;
5477 END IF;
5478
5479 IF l_contact_contains_str IS NOT NULL THEN
5480 l_max_score := 0;
5481 l_max_id := 0;
5482 l_max_idx := 0;
5483 open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);
5484 LOOP
5485 FETCH l_contact_cur INTO
5486 l_org_contact_id, l_ct_party_id ;
5487 EXIT WHEN l_contact_cur%NOTFOUND;
5488 l_score := GET_CONTACTS_SCORE(l_match_idx);
5489 IF l_score > l_max_score THEN
5490 l_max_score := l_score;
5491 l_max_id := l_org_contact_id;
5492 l_max_idx := l_match_idx;
5493 END IF;
5494 END LOOP;
5495 CLOSE l_contact_cur;
5496 IF l_max_score>0 THEN
5497 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);
5498 END IF;
5499 END IF;
5500
5501 IF l_contact_pt_contains_str IS NOT NULL THEN
5502 l_max_score := 0;
5503 l_max_id := 0;
5504 l_max_idx := 0;
5505 IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_cpt_info THEN
5506 open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'Y','N',l_contact_pt_cur);
5507 ELSE
5508 open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'N','N',l_contact_pt_cur);
5509 END IF;
5510 LOOP
5511 FETCH l_contact_pt_cur INTO
5512 l_contact_pt_id, l_cpt_type, l_cpt_party_id, l_cpt_ps_id, l_cpt_contact_id ;
5513 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5514 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx);
5515 IF l_score > l_max_score THEN
5516 l_max_score := l_score;
5517 l_max_id := l_contact_pt_id;
5518 l_max_idx := l_match_idx;
5519 END IF;
5520 END LOOP;
5521 IF l_max_score>0 THEN
5522 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);
5523 END IF;
5524 CLOSE l_contact_pt_cur;
5525 END IF;
5526 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5527 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);
5528 END IF;
5529 EXCEPTION
5530 WHEN FND_API.G_EXC_ERROR THEN
5531 RAISE FND_API.G_EXC_ERROR;
5532 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5533 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5534 WHEN OTHERS THEN
5535 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5536 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_48.get_score_details');
5537 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5538 FND_MSG_PUB.ADD;
5539 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5540 END get_score_details;
5541
5542
5543 /************************************************
5544 This procedure retrieves the match rule attributes into
5545 the search record structures
5546 ************************************************/
5547
5548 PROCEDURE get_party_for_search (
5549 p_party_id IN NUMBER,
5550 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
5551 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
5552 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
5553 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5554 ) IS
5555 l_party_id NUMBER;
5556 l_party_site_ids HZ_PARTY_SEARCH.IDList;
5557 l_contact_ids HZ_PARTY_SEARCH.IDList;
5558 l_contact_pt_ids HZ_PARTY_SEARCH.IDList;
5559 ps NUMBER :=1;
5560 cpt NUMBER :=1;
5561 ct NUMBER :=1;
5562 l_use_contact_info varchar2(1);
5563 BEGIN
5564
5565 l_use_contact_info := 'Y';
5566 IF nvl(FND_PROFILE.VALUE('HZ_DQM_REL_PARTY_MATCH'),'N')='Y' THEN
5567 l_use_contact_info := 'N';
5568 END IF;
5569 l_party_id := p_party_id;
5570 FOR PARTY_SITES IN (
5571 SELECT party_site_id FROM (
5572 SELECT party_site_id,identifying_address_flag
5573 FROM HZ_PARTY_SITES
5574 WHERE party_id = p_party_id
5575 AND (status is null OR status = 'A')
5576 AND identifying_address_flag='Y'
5577 UNION
5578
5579 SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
5580 FROM HZ_PARTY_SITES
5581 WHERE party_id = p_party_id
5582 AND (status is null OR status = 'A')
5583 AND (identifying_address_flag IS NULL OR identifying_address_flag = 'N')
5584 AND ROWNUM<6
5585 UNION
5586
5587 SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
5588 FROM HZ_PARTY_SITES
5589 WHERE (status is null OR status = 'A')
5590 AND party_id in (
5591 SELECT party_id
5592 FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
5593 WHERE HZ_RELATIONSHIPS.object_id = p_party_id
5594 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5595 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5596 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5597 and l_use_contact_info = 'Y'
5598 )
5599 AND ROWNUM<6
5600 ) order by identifying_address_flag desc
5601 ) LOOP
5602 l_party_site_ids(ps) := PARTY_SITES.party_site_id;
5603 ps:=ps+1;
5604 END LOOP;
5605 get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,
5606 x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);
5607 EXCEPTION
5608 WHEN FND_API.G_EXC_ERROR THEN
5609 RAISE FND_API.G_EXC_ERROR;
5610 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5611 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5612 WHEN OTHERS THEN
5613 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5614 FND_MESSAGE.SET_TOKEN('PROC','get_party_for_search');
5615 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5616 FND_MSG_PUB.ADD;
5617 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5618 END get_party_for_search;
5619
5620 PROCEDURE get_search_criteria (
5621 p_party_id IN NUMBER,
5622 p_party_site_ids IN HZ_PARTY_SEARCH.IDList,
5623 p_contact_ids IN HZ_PARTY_SEARCH.IDList,
5624 p_contact_pt_ids IN HZ_PARTY_SEARCH.IDList,
5625 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
5626 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
5627 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
5628 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5629 ) IS
5630 BEGIN
5631
5632 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5633 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);
5634 END IF;
5635 IF p_party_id IS NOT NULL THEN
5636 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5637 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);
5638 END IF;
5639 get_party_rec(p_party_id, x_party_search_rec);
5640 END IF;
5641 IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN
5642 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5643 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);
5644 END IF;
5645 get_party_site_rec(p_party_site_ids, x_party_site_list);
5646 END IF;
5647 EXCEPTION
5648 WHEN FND_API.G_EXC_ERROR THEN
5649 RAISE FND_API.G_EXC_ERROR;
5650 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5651 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5652 WHEN OTHERS THEN
5653 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5654 FND_MESSAGE.SET_TOKEN('PROC','get_search_criteria');
5655 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5656 FND_MSG_PUB.ADD;
5657 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5658 END get_search_criteria;
5659
5660
5661 /************************************************
5662 This procedure retrieves the match rule party attributes into
5663 the party search record structure
5664 ************************************************/
5665
5666 PROCEDURE get_party_rec (
5667 p_party_id IN NUMBER,
5668 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type
5669 ) IS
5670 l_party_type VARCHAR2(255);
5671 BEGIN
5672
5673 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5674 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);
5675 END IF;
5676 SELECT PARTY_TYPE INTO l_party_type
5677 FROM HZ_PARTIES
5678 WHERE PARTY_ID = p_party_id;
5679
5680 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5681 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);
5682 END IF;
5683 IF l_party_type = 'ORGANIZATION' THEN
5684 SELECT
5685 translate(HZ_PARTIES.PARTY_NAME, '%',' ')
5686 ,translate(HZ_PARTIES.PARTY_NUMBER, '%',' ')
5687 ,translate(HZ_PARTIES.PARTY_TYPE, '%',' ')
5688 ,translate(HZ_ORGANIZATION_PROFILES.SIC_CODE, '%',' ')
5689 INTO
5690 x_party_search_rec.PARTY_NAME
5691 ,x_party_search_rec.PARTY_NUMBER
5692 ,x_party_search_rec.PARTY_TYPE
5693 ,x_party_search_rec.SIC_CODE
5694 FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES
5695 WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id
5696 AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL
5697 AND HZ_PARTIES.party_id = p_party_id;
5698 ELSIF l_party_type = 'PERSON' THEN
5699 SELECT
5700 translate(HZ_PARTIES.PARTY_NAME, '%',' ')
5701 ,translate(HZ_PARTIES.PARTY_NUMBER, '%',' ')
5702 ,translate(HZ_PARTIES.PARTY_TYPE, '%',' ')
5703 INTO
5704 x_party_search_rec.PARTY_NAME
5705 ,x_party_search_rec.PARTY_NUMBER
5706 ,x_party_search_rec.PARTY_TYPE
5707 FROM HZ_PARTIES, HZ_PERSON_PROFILES
5708 WHERE HZ_PARTIES.party_id = HZ_PERSON_PROFILES.party_id
5709 AND HZ_PERSON_PROFILES.effective_end_date is NULL
5710 AND HZ_PARTIES.party_id = p_party_id;
5711 END IF;
5712 x_party_search_rec.PARTY_TYPE := l_party_type;
5713 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5714 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);
5715 END IF;
5716
5717 EXCEPTION
5718 WHEN OTHERS THEN
5719 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5720 FND_MESSAGE.SET_TOKEN('PROC','get_party_rec');
5721 FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_id);
5722 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5723 FND_MSG_PUB.ADD;
5724 RAISE FND_API.G_EXC_ERROR;
5725 END get_party_rec;
5726
5727 /************************************************
5728 This procedure retrieves the match rule party site attributes into
5729 the party site search record structure
5730 ************************************************/
5731
5732 PROCEDURE get_party_site_rec (
5733 p_party_site_ids IN HZ_PARTY_SEARCH.IDList,
5734 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list
5735 ) IS
5736 CURSOR c_party_sites(cp_party_site_id NUMBER) IS
5737 SELECT party_site_id
5738 ,translate(HZ_LOCATIONS.CITY, '%',' ')
5739 ,translate(HZ_LOCATIONS.COUNTRY, '%',' ')
5740 ,translate(HZ_LOCATIONS.STATE, '%',' ')
5741 FROM HZ_PARTY_SITES, HZ_LOCATIONS
5742 WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id
5743 AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;
5744
5745 I NUMBER;
5746 J NUMBER:=1;
5747 l_party_site_id NUMBER;
5748
5749 BEGIN
5750
5751 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5752 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);
5753 END IF;
5754 FOR I IN 1..p_party_site_ids.COUNT LOOP
5755 l_party_site_id := p_party_site_ids(I);
5756 OPEN c_party_sites(p_party_site_ids(I));
5757 LOOP
5758 FETCH c_party_sites INTO
5759 l_party_site_id
5760 ,x_party_site_list(J).CITY
5761 ,x_party_site_list(J).COUNTRY
5762 ,x_party_site_list(J).STATE
5763 ;
5764 EXIT WHEN c_party_sites%NOTFOUND;
5765
5766 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5767 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);
5768 END IF;
5769 x_party_site_list(J).ADDRESS:=
5770 HZ_PARTY_ACQUIRE.get_address(l_party_site_id , 'PARTY_SITES','ADDRESS');
5771 J:=J+1;
5772
5773 END LOOP;
5774 CLOSE c_party_sites;
5775 END LOOP;
5776
5777 EXCEPTION
5778 WHEN OTHERS THEN
5779 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5780 FND_MESSAGE.SET_TOKEN('PROC','get_party_site_rec');
5781 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_party_site_id);
5782 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5783 FND_MSG_PUB.ADD;
5784 RAISE FND_API.G_EXC_ERROR;
5785 END get_party_site_rec;
5786
5787 /************************************************
5788 This procedure retrieves the match rule contact attributes into
5789 the contact search record structure
5790 ************************************************/
5791
5792 PROCEDURE get_contact_rec (
5793 p_contact_ids IN HZ_PARTY_SEARCH.IDList,
5794 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list
5795 ) IS
5796 CURSOR c_contacts(cp_org_contact_id NUMBER) IS
5797 SELECT org_contact_id
5798 FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES
5799 WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id
5800 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5801 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5802 AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
5803 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5804 AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id
5805 AND HZ_PERSON_PROFILES.effective_end_date IS NULL;
5806
5807 I NUMBER;
5808 l_org_contact_id NUMBER;
5809 J NUMBER:=1;
5813 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);
5810 BEGIN
5811
5812 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5814 END IF;
5815 FOR I IN 1..p_contact_ids.COUNT LOOP
5816 l_org_contact_id := p_contact_ids(I);
5817 OPEN c_contacts(p_contact_ids(I));
5818 LOOP
5819 FETCH c_contacts INTO
5820 l_org_contact_id
5821 ;
5822 EXIT WHEN c_contacts%NOTFOUND;
5823
5824 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5825 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);
5826 END IF;
5827
5828 J:=J+1;
5829 END LOOP;
5830 CLOSE c_contacts;
5831 END LOOP;
5832
5833 EXCEPTION
5834 WHEN OTHERS THEN
5835 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5836 FND_MESSAGE.SET_TOKEN('PROC','get_contact_rec');
5837 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_org_contact_id);
5838 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5839 FND_MSG_PUB.ADD;
5840 RAISE FND_API.G_EXC_ERROR;
5841 END get_contact_rec;
5842
5843 /************************************************
5844 This procedure retrieves the match rule contact point attributes into
5845 the contact point search record structure
5846 ************************************************/
5847
5848 PROCEDURE get_contact_point_rec (
5849 p_contact_point_ids IN HZ_PARTY_SEARCH.IDList,
5850 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5851 ) IS
5852
5853 -- Cursor to fetch primary contact points for party
5854 CURSOR c_cpts(cp_contact_point_id NUMBER) IS
5855 SELECT contact_point_id, contact_point_type
5856 FROM HZ_CONTACT_POINTS
5857 WHERE contact_point_id = cp_contact_point_id;
5858
5859 I NUMBER;
5860 l_contact_point_id NUMBER;
5861 J NUMBER:=1;
5862 BEGIN
5863
5864 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5865 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);
5866 END IF;
5867 FOR I in 1..p_contact_point_ids.COUNT LOOP
5868 l_contact_point_id := p_contact_point_ids(I);
5869 OPEN c_cpts(p_contact_point_ids(I));
5870 LOOP
5871 FETCH c_cpts INTO
5872 l_contact_point_id, x_contact_point_list(J).contact_point_type
5873 ;
5874 EXIT WHEN c_cpts%NOTFOUND;
5875
5876 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5877 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);
5878 END IF;
5879 J:=J+1;
5880
5881 END LOOP;
5882 CLOSE c_cpts;
5883 END LOOP;
5884
5885 EXCEPTION
5886 WHEN OTHERS THEN
5887 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
5888 FND_MESSAGE.SET_TOKEN('PROC','get_contact_point_rec');
5889 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_contact_point_id);
5890 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5891 FND_MSG_PUB.ADD;
5892 RAISE FND_API.G_EXC_ERROR;
5893 END get_contact_point_rec;
5894
5895 /************************************************
5896 This procedure maps a search record from the logical
5897 record structure to the stage schema structure
5898 for the PARTY Entity after applying
5899 the defined transformations
5900 ************************************************/
5901
5902 PROCEDURE MAP_PARTY_REC(
5903 p_search_ctx IN BOOLEAN,
5904 p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
5905 x_entered_max_score OUT NUMBER,
5906 x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type
5907 ) IS
5908 tmp VARCHAR2(4000);
5909 l_party_name VARCHAR2(4000);
5910 BEGIN
5911 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5912 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);
5913 END IF;
5914 IF p_search_ctx THEN
5915 x_stage_rec.TX8 := NULL;
5916 g_other_party_level_attribs:=FALSE;
5917 IF p_search_rec.PARTY_NUMBER IS NOT NULL
5918 OR p_search_rec.SIC_CODE IS NOT NULL
5919 THEN
5920 g_other_party_level_attribs:=TRUE;
5921 END IF;
5922 x_entered_max_score:=0;
5923 IF p_search_rec.PARTY_NAME IS NOT NULL THEN
5924 x_entered_max_score := x_entered_max_score+100;
5925 END IF;
5926 IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN
5927 x_entered_max_score := x_entered_max_score+100;
5928 END IF;
5929 IF p_search_rec.PARTY_TYPE IS NOT NULL THEN
5930 x_entered_max_score := x_entered_max_score+10;
5931 END IF;
5932 IF p_search_rec.SIC_CODE IS NOT NULL THEN
5933 x_entered_max_score := x_entered_max_score+20;
5934 END IF;
5935 END IF;
5936 IF p_search_ctx THEN
5937 IF p_search_rec.PARTY_NAME IS NOT NULL THEN
5938 x_stage_rec.TX19 :=
5939 HZ_TRANS_PKG.SOUNDX(
5940 p_search_rec.PARTY_NAME
5941 ,null,'PARTY_NAME'
5942 ,'PARTY');
5943 ELSE
5944 x_stage_rec.TX19 := '';
5945 END IF;
5946 END IF;
5947 IF p_search_ctx THEN
5948 IF p_search_rec.PARTY_NAME IS NOT NULL THEN
5949 x_stage_rec.TX4 :=
5950 HZ_TRANS_PKG.WRNAMES_CLEANSE(
5954 ELSE
5951 p_search_rec.PARTY_NAME
5952 ,null,'PARTY_NAME'
5953 ,'PARTY','SDIB');
5955 x_stage_rec.TX4 := '';
5956 END IF;
5957 ELSE
5958 IF p_search_rec.PARTY_NAME IS NOT NULL THEN
5959 tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
5960 x_stage_rec.TX4
5961 ,null,'PARTY_NAME'
5962 ,'PARTY','SCORE');
5963 IF tmp IS NOT NULL THEN
5964 x_stage_rec.TX4 := tmp;
5965 END IF;
5966 END IF;
5967 END IF;
5968 IF p_search_ctx THEN
5969 IF p_search_rec.PARTY_NAME IS NOT NULL THEN
5970 x_stage_rec.TX8 :=
5971 HZ_TRANS_PKG.WRNAMES_EXACT(
5972 p_search_rec.PARTY_NAME
5973 ,null,'PARTY_NAME'
5974 ,'PARTY','SDIB');
5975 ELSE
5976 x_stage_rec.TX8 := '';
5977 END IF;
5978 ELSE
5979 IF p_search_rec.PARTY_NAME IS NOT NULL THEN
5980 tmp :=HZ_TRANS_PKG.WRNAMES_EXACT(
5981 x_stage_rec.TX8
5982 ,null,'PARTY_NAME'
5983 ,'PARTY','SCORE');
5984 IF tmp IS NOT NULL THEN
5985 x_stage_rec.TX8 := tmp;
5986 END IF;
5987 END IF;
5988 END IF;
5989 IF p_search_ctx THEN
5990 IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN
5991 x_stage_rec.TX34 :=
5992 HZ_TRANS_PKG.RM_SPLCHAR(
5993 p_search_rec.PARTY_NUMBER
5994 ,null,'PARTY_NUMBER'
5995 ,'PARTY','SDIB');
5996 ELSE
5997 x_stage_rec.TX34 := '';
5998 END IF;
5999 ELSE
6000 IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN
6001 tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
6002 x_stage_rec.TX34
6003 ,null,'PARTY_NUMBER'
6004 ,'PARTY','SCORE');
6005 IF tmp IS NOT NULL THEN
6006 x_stage_rec.TX34 := tmp;
6007 END IF;
6008 END IF;
6009 END IF;
6010 IF p_search_ctx THEN
6011 IF p_search_rec.PARTY_TYPE IS NOT NULL THEN
6012 x_stage_rec.TX36 :=
6013 HZ_TRANS_PKG.EXACT(
6014 p_search_rec.PARTY_TYPE
6015 ,null,'PARTY_TYPE'
6016 ,'PARTY');
6017 ELSE
6018 x_stage_rec.TX36 := '';
6019 END IF;
6020 END IF;
6021 IF p_search_ctx THEN
6022 IF p_search_rec.SIC_CODE IS NOT NULL THEN
6023 x_stage_rec.TX46 :=
6024 HZ_TRANS_PKG.EXACT(
6025 p_search_rec.SIC_CODE
6026 ,null,'SIC_CODE'
6027 ,'PARTY');
6028 ELSE
6029 x_stage_rec.TX46 := '';
6030 END IF;
6031 END IF;
6032 l_party_name := p_search_rec.PARTY_NAME;
6033 IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6034 l_party_name := p_search_rec.PARTY_ALL_NAMES;
6035 END IF;
6036 IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN
6037 x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,'PARTY_NAME','PARTY','SDIB');
6038 END IF;
6039 EXCEPTION
6040 WHEN OTHERS THEN
6041 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6042 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_REC');
6043 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6044 FND_MSG_PUB.ADD;
6045 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6046 END;
6047
6048
6049 /************************************************
6050 This procedure maps a search record from the logical
6051 record structure to the stage schema structure
6052 for the PARTY_SITES Entity after applying
6053 the defined transformations
6054 ************************************************/
6055
6056 PROCEDURE MAP_PARTY_SITE_REC(
6057 p_search_ctx IN BOOLEAN,
6058 p_search_list IN HZ_PARTY_SEARCH.party_site_list,
6059 x_entered_max_score OUT NUMBER,
6060 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list
6061 ) IS
6062 l_current_max_score NUMBER;
6063 tmp VARCHAR2(4000);
6064 BEGIN
6065 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6066 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);
6067 END IF;
6068 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6069 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);
6070 END IF;
6071 IF p_search_ctx THEN
6072 g_ps_den_only:=TRUE;
6073 x_entered_max_score:=0;
6074 FOR I IN 1..p_search_list.COUNT LOOP
6075 l_current_max_score:=0;
6076 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6077 l_current_max_score := l_current_max_score+25;
6078 g_ps_den_only:=FALSE;
6079 END IF;
6080 IF p_search_list(I).CITY IS NOT NULL THEN
6081 l_current_max_score := l_current_max_score+10;
6082 END IF;
6083 IF p_search_list(I).STATE IS NOT NULL THEN
6084 l_current_max_score := l_current_max_score+5;
6085 END IF;
6086 IF p_search_list(I).COUNTRY IS NOT NULL THEN
6087 l_current_max_score := l_current_max_score+5;
6088 END IF;
6089 IF l_current_max_score>x_entered_max_score THEN
6090 x_entered_max_score:=l_current_max_score;
6091 END IF;
6092 END LOOP;
6093 END IF;
6094 FOR I IN 1..p_search_list.COUNT LOOP
6095 IF p_search_ctx THEN
6096 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6097 x_stage_list(I).TX4 :=
6098 HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6099 p_search_list(I).ADDRESS
6100 ,null,'ADDRESS'
6104 END IF;
6101 ,'PARTY_SITES','SDIB');
6102 ELSE
6103 x_stage_list(I).TX4 := '';
6105 ELSE
6106 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6107 tmp := HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6108 x_stage_list(I).TX4
6109 ,null,'ADDRESS'
6110 ,'PARTY_SITES','SCORE');
6111 IF tmp IS NOT NULL THEN
6112 x_stage_list(I).TX4 := tmp;
6113 END IF;
6114 END IF;
6115 END IF;
6116 END LOOP;
6117 FOR I IN 1..p_search_list.COUNT LOOP
6118 IF p_search_ctx THEN
6119 IF p_search_list(I).CITY IS NOT NULL THEN
6120 x_stage_list(I).TX10 :=
6121 HZ_TRANS_PKG.CLEANSE(
6122 p_search_list(I).CITY
6123 ,null,'CITY'
6124 ,'PARTY_SITES');
6125 ELSE
6126 x_stage_list(I).TX10 := '';
6127 END IF;
6128 END IF;
6129 END LOOP;
6130 FOR I IN 1..p_search_list.COUNT LOOP
6131 IF p_search_ctx THEN
6132 IF p_search_list(I).COUNTRY IS NOT NULL THEN
6133 x_stage_list(I).TX22 :=
6134 HZ_TRANS_PKG.EXACT(
6135 p_search_list(I).COUNTRY
6136 ,null,'COUNTRY'
6137 ,'PARTY_SITES');
6138 ELSE
6139 x_stage_list(I).TX22 := '';
6140 END IF;
6141 END IF;
6142 END LOOP;
6143 FOR I IN 1..p_search_list.COUNT LOOP
6144 IF p_search_ctx THEN
6145 IF p_search_list(I).STATE IS NOT NULL THEN
6146 x_stage_list(I).TX14 :=
6147 HZ_TRANS_PKG.WRSTATE_EXACT(
6148 p_search_list(I).STATE
6149 ,null,'STATE'
6150 ,'PARTY_SITES','SDIB');
6151 ELSE
6152 x_stage_list(I).TX14 := '';
6153 END IF;
6154 ELSE
6155 IF p_search_list(I).STATE IS NOT NULL THEN
6156 tmp := HZ_TRANS_PKG.WRSTATE_EXACT(
6157 x_stage_list(I).TX14
6158 ,null,'STATE'
6159 ,'PARTY_SITES','SCORE');
6160 IF tmp IS NOT NULL THEN
6161 x_stage_list(I).TX14 := tmp;
6162 END IF;
6163 END IF;
6164 END IF;
6165 END LOOP;
6166 EXCEPTION
6167 WHEN OTHERS THEN
6168 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6169 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_SITE_REC');
6170 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6171 FND_MSG_PUB.ADD;
6172 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6173 END;
6174
6175
6176 /************************************************
6177 This procedure maps a search record from the logical
6178 record structure to the stage schema structure
6179 for the CONTACTS Entity after applying
6180 the defined transformations
6181 ************************************************/
6182
6183 PROCEDURE MAP_CONTACT_REC(
6184 p_search_ctx IN BOOLEAN,
6185 p_search_list IN HZ_PARTY_SEARCH.contact_list,
6186 x_entered_max_score OUT NUMBER,
6187 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list
6188 ) IS
6189 l_current_max_score NUMBER;
6190 tmp VARCHAR2(4000);
6191 BEGIN
6192 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6193 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);
6194 END IF;
6195 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6196 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);
6197 END IF;
6198 IF p_search_ctx THEN
6199 x_entered_max_score:=0;
6200 FOR I IN 1..p_search_list.COUNT LOOP
6201 l_current_max_score:=0;
6202 IF l_current_max_score>x_entered_max_score THEN
6203 x_entered_max_score:=l_current_max_score;
6204 END IF;
6205 END LOOP;
6206 END IF;
6207 NULL;
6208 EXCEPTION
6209 WHEN OTHERS THEN
6210 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6211 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_REC');
6212 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6213 FND_MSG_PUB.ADD;
6214 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6215 END;
6216
6217
6218 /************************************************
6219 This procedure maps a search record from the logical
6220 record structure to the stage schema structure
6221 for the CONTACT_POINTS Entity after applying
6222 the defined transformations
6223 ************************************************/
6224
6225 PROCEDURE MAP_CONTACT_POINT_REC(
6226 p_search_ctx IN BOOLEAN,
6227 p_search_list IN HZ_PARTY_SEARCH.contact_point_list,
6228 x_entered_max_score OUT NUMBER,
6229 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list
6230 ) IS
6231 l_current_max_score NUMBER;
6232 tmp VARCHAR2(4000);
6233 BEGIN
6234 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6235 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);
6236 END IF;
6237 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6238 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);
6239 END IF;
6240 IF p_search_ctx THEN
6241 x_entered_max_score:=0;
6242 FOR I IN 1..p_search_list.COUNT LOOP
6243 l_current_max_score:=0;
6247 END IF;
6244 x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;
6245 IF l_current_max_score>x_entered_max_score THEN
6246 x_entered_max_score:=l_current_max_score;
6248 END LOOP;
6249 END IF;
6250 NULL;
6251 EXCEPTION
6252 WHEN OTHERS THEN
6253 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6254 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_POINT_REC');
6255 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6256 FND_MSG_PUB.ADD;
6257 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6258 END;
6259
6260
6261 /************************************************
6262 This procedure checks if the input search criteria
6263 is valid. It checks if :
6264 1. At least one primary condition is passed
6265 2. Contact Point Type is not null for each condition
6266 ************************************************/
6267
6268 FUNCTION check_prim_cond(
6269 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
6270 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
6271 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
6272 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list)
6273 RETURN BOOLEAN IS
6274 BEGIN
6275 IF p_party_search_rec.PARTY_NAME IS NOT NULL THEN
6276 RETURN TRUE;
6277 END IF;
6278 IF p_party_search_rec.PARTY_NUMBER IS NOT NULL THEN
6279 RETURN TRUE;
6280 END IF;
6281 IF p_party_search_rec.PARTY_TYPE IS NOT NULL THEN
6282 RETURN TRUE;
6283 END IF;
6284 IF p_party_search_rec.SIC_CODE IS NOT NULL THEN
6285 RETURN TRUE;
6286 END IF;
6287 FOR I IN 1..p_party_site_list.COUNT LOOP
6288 IF p_party_site_list(I).ADDRESS 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).CITY 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).STATE IS NOT NULL THEN
6299 RETURN TRUE;
6300 END IF;
6301 END LOOP;
6302 FOR I IN 1..p_party_site_list.COUNT LOOP
6303 IF p_party_site_list(I).COUNTRY IS NOT NULL THEN
6304 RETURN TRUE;
6305 END IF;
6306 END LOOP;
6307 RETURN FALSE;
6308 EXCEPTION
6309 WHEN FND_API.G_EXC_ERROR THEN
6310 RAISE FND_API.G_EXC_ERROR;
6311 WHEN OTHERS THEN
6312 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6313 FND_MESSAGE.SET_TOKEN('PROC','check_prim_cond');
6314 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6315 FND_MSG_PUB.ADD;
6316 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6317 END check_prim_cond;
6318
6319 /************************************************
6320 This procedure checks if the input search condition
6321 has party site criteria.
6322 ************************************************/
6323
6324 PROCEDURE check_party_site_cond(
6325 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
6326 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
6327 x_secondary OUT BOOLEAN,
6328 x_primary OUT BOOLEAN
6329 ) IS
6330 BEGIN
6331 x_primary:= FALSE;
6332 x_secondary:= FALSE;
6333 FOR I IN 1..p_party_site_list.COUNT LOOP
6334 IF p_party_site_list(I).ADDRESS IS NOT NULL
6335 OR p_party_site_list(I).CITY IS NOT NULL
6336 OR p_party_site_list(I).STATE IS NOT NULL
6337 OR p_party_site_list(I).COUNTRY IS NOT NULL
6338 THEN
6339 x_primary := TRUE;
6340 END IF;
6341 EXIT WHEN x_primary;
6342 END LOOP;
6343 FOR I IN 1..p_contact_point_list.COUNT LOOP
6344 NULL;
6345 END LOOP;
6346
6347 FOR I IN 1..p_party_site_list.COUNT LOOP
6348 IF p_party_site_list(I).ADDRESS IS NOT NULL
6349 OR p_party_site_list(I).CITY IS NOT NULL
6350 OR p_party_site_list(I).STATE IS NOT NULL
6351 OR p_party_site_list(I).COUNTRY IS NOT NULL
6352 THEN
6353 x_secondary := TRUE;
6354 END IF;
6355 EXIT WHEN x_secondary;
6356 END LOOP;
6357 FOR I IN 1..p_contact_point_list.COUNT LOOP
6358 NULL;
6359 END LOOP;
6360 EXCEPTION
6361 WHEN OTHERS THEN
6362 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6363 FND_MESSAGE.SET_TOKEN('PROC','check_party_site_cond');
6364 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6365 FND_MSG_PUB.ADD;
6366 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6367 END check_party_site_cond;
6368
6369 /************************************************
6370 This procedure checks if the input search condition
6371 has contact criteria.
6372 ************************************************/
6373
6374 PROCEDURE check_contact_cond(
6375 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
6376 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
6377 x_secondary OUT BOOLEAN,
6378 x_primary OUT BOOLEAN
6379 ) IS
6380 BEGIN
6381 x_primary:= FALSE;
6382 x_secondary:= FALSE;
6383 FOR I IN 1..p_contact_list.COUNT LOOP
6384 NULL;
6385 END LOOP;
6386
6387 FOR I IN 1..p_contact_point_list.COUNT LOOP
6388 NULL;
6389 END LOOP;
6390
6391 FOR I IN 1..p_contact_list.COUNT LOOP
6392 NULL;
6393 END LOOP;
6394
6395 FOR I IN 1..p_contact_point_list.COUNT LOOP
6399 WHEN OTHERS THEN
6396 NULL;
6397 END LOOP;
6398 EXCEPTION
6400 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6401 FND_MESSAGE.SET_TOKEN('PROC','check_contact_cond');
6402 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6403 FND_MSG_PUB.ADD;
6404 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6405 END check_contact_cond;
6406
6407 /************************************************
6408 This procedure checks if the input search condition
6409 has valid contact point criteria.
6410 ************************************************/
6411
6412 PROCEDURE check_contact_point_cond(
6413 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
6414 x_secondary OUT BOOLEAN,
6415 x_primary OUT BOOLEAN
6416 ) IS
6417 BEGIN
6418 x_primary:= FALSE;
6419 x_secondary:= FALSE;
6420
6421 FOR I IN 1..p_contact_point_list.COUNT LOOP
6422 IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN
6423 FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
6424 FND_MSG_PUB.ADD;
6425 RAISE FND_API.G_EXC_ERROR;
6426 END IF;
6427 END LOOP;
6428
6429 FOR I IN 1..p_contact_point_list.COUNT LOOP
6430 NULL;
6431 END LOOP;
6432 FOR I IN 1..p_contact_point_list.COUNT LOOP
6433 NULL;
6434 END LOOP;
6435 EXCEPTION
6436 WHEN OTHERS THEN
6437 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6438 FND_MESSAGE.SET_TOKEN('PROC','check_contact_point_cond');
6439 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6440 FND_MSG_PUB.ADD;
6441 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6442 END check_contact_point_cond;
6443
6444 FUNCTION check_staged RETURN BOOLEAN IS
6445
6446 CURSOR c_check_staged IS
6447 SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL
6448 WHERE nvl(STAGED_FLAG,'N') = 'N'
6449 AND FUNCTION_ID in (
6450 8
6451 ,12
6452 ,23
6453 ,38
6454 ,40
6455 ,51
6456 ,67
6457 ,73
6458 ,77
6459 ,85
6460 );
6461 l_tmp NUMBER;
6462 BEGIN
6463 IF g_staged = 1 THEN
6464 RETURN TRUE;
6465 ELSIF g_staged = 0 THEN
6466 RETURN FALSE;
6467 END IF;
6468
6469 OPEN c_check_staged;
6470 FETCH c_check_staged INTO l_tmp;
6471 IF c_check_staged%FOUND THEN
6472 CLOSE c_check_staged;
6473 g_staged := 0;
6474 RETURN FALSE;
6475 ELSE
6476 CLOSE c_check_staged;
6477 g_staged := 1;
6478 RETURN TRUE;
6479 END IF;
6480 END check_staged;
6481
6482 -- Fix for Bug 4736139
6483 FUNCTION check_staged_var RETURN VARCHAR2 IS
6484 l_staged VARCHAR2(1);
6485 l_staged_bool BOOLEAN;
6486 BEGIN
6487 l_staged_bool := check_staged;
6488 IF l_staged_bool THEN
6489 l_staged := 'Y';
6490 ELSE
6491 l_staged := 'N';
6492 END IF;
6493 RETURN l_staged;
6494 END check_staged_var;
6495 -- End fix for Bug 4736139
6496
6497 END;
6498