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