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