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