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