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