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