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