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