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