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