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