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