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