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