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