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