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