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