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