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