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