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 | 28-NOV-2012 Generated by HZ Match Rule Compiler
23 |
24 *=======================================================================*/
25
26 -- ==========================================================================================
27 -- ============MATCH RULE COMPILER GENERATED CODE FOR SEARCH MATCH RULES ====================
28 -- ==========================================================================================
29
30 TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;
31 call_order vlisttype;
32 call_max_score HZ_PARTY_SEARCH.IDList;
33 call_type vlisttype;
34 g_party_stage_rec HZ_PARTY_STAGE.party_stage_rec_type;
35 g_party_site_stage_list HZ_PARTY_STAGE.party_site_stage_list;
36 g_contact_stage_list HZ_PARTY_STAGE.contact_stage_list;
37 g_contact_pt_stage_list HZ_PARTY_STAGE.contact_pt_stage_list;
38 g_mappings HZ_PARTY_SEARCH.IDList;
39 g_max_id NUMBER:=2000000000;
40 g_other_party_level_attribs BOOLEAN;
41
42 g_debug_count NUMBER := 0;
43 g_score_until_thresh BOOLEAN:=false;
44
45 g_thres_score NUMBER:=1000;
46 g_ps_den_only BOOLEAN;
47 g_index_owner VARCHAR2(255);
48 distinct_search_cpt_types NUMBER ;
49
50 PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)
51 IS
52 remainder_str VARCHAR2(4000);
53 current_pos NUMBER ;
54 temp VARCHAR2(300) ;
55 BEGIN
56 remainder_str := input_str ;
57 current_pos := 1 ;
58 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
59 WHILE remainder_str IS NOT NULL
60 LOOP
61 temp := substr(remainder_str, 1 , 255 );
62 hz_utility_v2pub.debug(p_message=>' '||temp,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
63 current_pos := current_pos + 255 ;
64 remainder_str := substr(input_str,current_pos );
65 END LOOP ;
66 END IF;
67 END ;
68 FUNCTION check_estimate_hits (
69 p_entity VARCHAR2,
70 p_contains_str VARCHAR2) RETURN NUMBER IS
71
72 ustatus VARCHAR2(255);
73 dstatus VARCHAR2(255);
74 l_bool BOOLEAN;
75 l_hits NUMBER := 0;
76 BEGIN
77 IF g_index_owner IS NULL THEN
78 l_bool := fnd_installation.GET_APP_INFO('AR',ustatus,dstatus,g_index_owner);
79 END IF;
80 IF p_entity='PARTY' THEN
81
82 l_hits := CTX_QUERY.count_hits(
83 g_index_owner||'.'||'HZ_STAGE_PARTIES_T1',p_contains_str, false);
84 ELSIF p_entity='PARTY_SITES' THEN
85 l_hits := CTX_QUERY.count_hits(
86 g_index_owner||'.'||'HZ_STAGE_PARTY_SITES_T1',p_contains_str, false);
87 ELSIF p_entity='CONTACTS' THEN
88 l_hits := CTX_QUERY.count_hits(
89 g_index_owner||'.'||'HZ_STAGE_CONTACT_T1',p_contains_str, false);
90 ELSIF p_entity='CONTACT_POINTS' THEN
91 l_hits := CTX_QUERY.count_hits(
92 g_index_owner||'.'||'HZ_STAGE_CPT_T1',p_contains_str, false);
93 END IF;
94 RETURN floor(l_hits/2) ;
95
96
97 exception
98 when others then
99 if (instrb(SQLERRM,'DRG-51030')>0) then
100 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
101 FND_MSG_PUB.ADD;
102 RAISE FND_API.G_EXC_ERROR;
103 elsif (instrb(SQLERRM,'DRG-50943')>0) then
104 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
105 FND_MSG_PUB.ADD;
106 RAISE FND_API.G_EXC_ERROR;
107 else
108 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
109 end if;
110 END;
111
112
113 FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)
114 RETURN VARCHAR2
115 IS
116 p_person_restrict_sql VARCHAR2(32767);
117 p_restrict1_sql VARCHAR2(32767);
118 p_final_restrict_sql VARCHAR2(32767);
119 BEGIN
120 p_final_restrict_sql := p_restrict_sql ;
121 IF p_restrict_sql IS NOT NULL
122 THEN
123 IF instrb(p_restrict_sql, 'STAGE.') > 0
124 THEN
125 p_restrict1_sql := replace( p_restrict_sql, 'STAGE.', 'stage1.');
126 ELSIF instrb(p_restrict_sql, 'stage.') > 0
127 THEN
128 p_restrict1_sql := replace( p_restrict_sql, 'stage.', 'stage1.');
129 END IF;
130 p_person_restrict_sql := 'exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r'
131 || ' where oc.org_contact_id = stage.org_contact_id and'
132 || ' r.relationship_id = oc.party_relationship_id'
133 || ' and r.subject_type = ''PERSON'' AND r.object_type = ''ORGANIZATION'' '
134 || ' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id'
135 || ' and ' || p_restrict1_sql || ' ) )' ;
136 p_final_restrict_sql := '((stage.org_contact_id is null and ' || p_restrict_sql || ') or (stage.org_contact_id is not null and '
137 || p_person_restrict_sql || ' ))';
138 END IF;
139 return p_final_restrict_sql ;
140 END;
141 FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS
142 l_newidx NUMBER;
143 BEGIN
144 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
145 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
146 hz_utility_v2pub.debug(p_message=>'calling the function map_id',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
147 END IF;
148 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
149 hz_utility_v2pub.debug(p_message=>'argument in_id = '||in_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
150 END IF;
151 IF in_id<g_max_id THEN
152 RETURN in_id;
153 ELSE
154 FOR I in 1..g_mappings.COUNT LOOP
155 IF in_id = g_mappings(I) THEN
156 RETURN (g_max_id+I);
157 END IF;
158 END LOOP;
159 l_newidx := g_mappings.COUNT+1;
160 g_mappings(l_newidx) := in_id;
161 RETURN (g_max_id+l_newidx);
162 END IF;
163 END;
164 FUNCTION GET_PARTY_SCORE
165 (
166 p_table_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 /*+ INDEX(stage HZ_STAGE_PARTIES_T1) */ 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 ELSE
1676 l_hint := '/*+ INDEX(stage HZ_STAGE_PARTIES_T1) */';
1677 END IF;
1678 IF p_search_ctx_id IS NULL THEN
1679 l_sqlstr := 'SELECT ' || l_hint || ' PARTY_ID , TX39, TX40, lpad(rtrim(TX41),9,chr(48))'||
1680 ' FROM HZ_STAGED_PARTIES stage'||
1681 ' WHERE contains( concat_col, :cont)>0'||
1682 ' AND ((:TX36 IS NULL OR :TX36||'' '' = stage.TX36))'||
1683 ' AND ('||p_restrict_sql||')' ||
1684 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1685 IF l_search_merged = 'Y' THEN
1686 l_sqlstr := l_sqlstr ;
1687 ELSIF l_search_merged = 'I' THEN
1688 l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'', ''I'')';
1689 ELSE
1690 l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'')';
1691 END IF;
1692 output_long_strings('----------------------------------------------------------');
1693 output_long_strings('Party Contains String = '||p_contains_str);
1694 output_long_strings('Restrict Sql = '||p_restrict_sql);
1695 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1696 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1697 ,p_dup_party_id, p_dup_party_id;
1698 END IF;
1699 END IF;
1700 exception
1701 when others then
1702 if (instrb(SQLERRM,'DRG-51030')>0) then
1703 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1704 FND_MSG_PUB.ADD;
1705 RAISE FND_API.G_EXC_ERROR;
1706 elsif (instrb(SQLERRM,'DRG-50943')>0) then
1707 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1708 FND_MSG_PUB.ADD;
1709 RAISE FND_API.G_EXC_ERROR;
1710 elsif (instrb(SQLERRM,'ORA-20000')>0) then
1711 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1712 FND_MSG_PUB.ADD;
1713 RAISE FND_API.G_EXC_ERROR;
1714 else
1715 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1716 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1717 FND_MSG_PUB.ADD;
1718 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1719 end if;
1720 END;
1721
1722 PROCEDURE open_party_site_cursor(
1723 p_dup_party_id NUMBER,
1724 p_party_id NUMBER,
1725 p_restrict_sql VARCHAR2,
1726 p_contains_str VARCHAR2,
1727 p_search_ctx_id NUMBER,
1728 p_search_merged VARCHAR2,
1729 p_search_rel_sites VARCHAR2,
1730 p_person_api VARCHAR2,
1731 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1732 l_sqlstr VARCHAR2(4000);
1733 l_hint VARCHAR2(100);
1734 l_check NUMBER;
1735 l_check_dt NUMBER;
1736 l_search_merged VARCHAR2(1);
1737 l_status_sql VARCHAR2(100);
1738 p_restrict_sql1 VARCHAR2(4000);
1739
1740 BEGIN
1741 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1742 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);
1743 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);
1744 END IF;
1745 IF (p_search_merged is null) then
1746 l_search_merged := 'N';
1747 ELSE
1748 l_search_merged := p_search_merged;
1749 END IF;
1750 IF p_party_id IS NOT NULL THEN
1751 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1752 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);
1753 END IF;
1754 IF p_search_rel_sites = 'N' THEN
1755 OPEN x_cursor FOR
1756 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15
1757 FROM HZ_STAGED_PARTY_SITES stage
1758 WHERE contains( concat_col, p_contains_str)>0
1759 AND( (l_search_merged ='Y' )
1760 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1761 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1762 AND stage.party_id = p_party_id;
1763 ELSE
1764 OPEN x_cursor FOR
1765 SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15
1766 FROM HZ_STAGED_PARTY_SITES stage
1767 WHERE contains( concat_col, p_contains_str)>0
1768 AND( (l_search_merged ='Y' )
1769 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1770 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1771 AND stage.party_id = p_party_id
1772 UNION
1773 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
1774 FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc
1775 WHERE contains( concat_col, p_contains_str)>0
1776 AND( (l_search_merged ='Y' )
1777 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1778 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1779 AND r.object_id = p_party_id
1780 AND r.subject_id = stage.party_id
1781 AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
1782 AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES'
1783 AND r.relationship_id = oc.party_relationship_id
1784 AND oc.org_contact_id = stage.org_contact_id;
1785 END IF;
1786 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1787 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1788 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);
1789 END IF;
1790 IF p_search_ctx_id IS NULL THEN
1791 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1792 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);
1793 END IF;
1794 OPEN x_cursor FOR
1795 SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15
1796 FROM HZ_STAGED_PARTY_SITES stage
1797 WHERE contains( concat_col, p_contains_str)>0
1798 AND EXISTS (
1799 SELECT 1 FROM HZ_STAGED_PARTIES p
1800 WHERE p.PARTY_ID = stage.PARTY_ID
1801 AND( (l_search_merged ='Y' )
1802 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
1803 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
1804 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
1805 AND( (l_search_merged ='Y' )
1806 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1807 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1808 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1809 ELSE
1810 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1811 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);
1812 END IF;
1813 IF p_person_api = 'Y' THEN
1814 OPEN x_cursor FOR
1815 SELECT PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15
1816 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
1817 WHERE contains( concat_col, p_contains_str)>0
1818 AND( (l_search_merged ='Y' )
1819 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1820 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1821 AND d.search_context_id = p_search_ctx_id
1822 AND d.party_id = stage.party_id
1823 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
1824 UNION
1825 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
1826 FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage
1827 WHERE contains( concat_col, p_contains_str)>0
1828 AND( (l_search_merged ='Y' )
1829 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1830 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1831 AND d.search_context_id = p_search_ctx_id
1832 AND d.party_id = r.subject_id
1833 AND r.relationship_id = oc.party_relationship_id
1834 AND oc.org_contact_id = stage.org_contact_id
1835 AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
1836 ELSE
1837 OPEN x_cursor FOR
1838 SELECT PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15
1839 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
1840 WHERE contains( concat_col, p_contains_str)>0
1841 AND( (l_search_merged ='Y' )
1842 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1843 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1844 AND d.search_context_id = p_search_ctx_id
1845 AND d.party_id = stage.party_id
1846 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
1847 END IF;
1848 END IF;
1849 ELSE
1850 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1851 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);
1852 END IF;
1853 l_check := instrb(p_restrict_sql, 'SELECTIVE');
1854 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_PS');
1855 IF (l_check_dt > 0 ) THEN
1856 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1857 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);
1858 END IF;
1859 l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */';
1860 ELSIF (l_check > 0 ) THEN
1861 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1862 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);
1863 END IF;
1864 l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */';
1865 END IF;
1866 IF l_search_merged = 'Y' THEN
1867 l_status_sql := ' ' ;
1868 ELSIF l_search_merged = 'I' THEN
1869 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
1870 ELSE
1871 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
1872 END IF;
1873 /*Performance fix for Bug:4589953*/
1874 IF(p_person_api='Y') THEN
1875 IF (l_check > 0 ) THEN
1876 IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN
1877 p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
1878 ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN
1879 p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
1880 ELSE
1881 p_restrict_sql1 := 'stage1.'||p_restrict_sql;
1882 END IF;
1883 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'||
1884 ' FROM HZ_STAGED_PARTY_SITES stage'||
1885 ' WHERE contains( concat_col, :cont)>0'||
1886 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1887 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1888 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1889 ' AND (ORG_CONTACT_ID IS NULL ' ||
1890 ' AND ('||p_restrict_sql||'))' ||
1891 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
1892 ' UNION ' ||
1893 'SELECT /*+ INDEX(stage HZ_STAGED_PARTY_SITES_N2) */ PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15'||
1894 ' FROM HZ_STAGED_PARTY_SITES stage'||
1895 ' WHERE contains( concat_col, :cont)>0'||
1896 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1897 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1898 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1899 ' AND ORG_CONTACT_ID IN ' ||
1900 ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships ' ||
1901 ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
1902 ' where stage1.relationship_id = oc.party_relationship_id ' ||
1903 ' and ('||p_restrict_sql1|| ') )' ||
1904 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1905 OPEN x_cursor FOR l_sqlstr USING p_contains_str,
1906 p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
1907 ELSE
1908 l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15'||
1909 ' FROM HZ_STAGED_PARTY_SITES stage'||
1910 ' WHERE contains( concat_col, :cont)>0'||
1911 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1912 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1913 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1914 ' AND EXISTS ('||
1915 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
1916 ' WHERE p.party_id = stage.party_id ' ||
1917 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
1918 ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
1919 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1920 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1921 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1922 ,p_dup_party_id, p_dup_party_id;
1923 END IF;
1924 ELSE
1925 l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15'||
1926 ' FROM HZ_STAGED_PARTY_SITES stage'||
1927 ' WHERE contains( concat_col, :cont)>0'||
1928 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
1929 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
1930 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
1931 ' AND EXISTS ('||
1932 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
1933 ' WHERE p.party_id = stage.party_id ' ||
1934 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
1935 ' AND ('||p_restrict_sql||')' ||
1936 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1937 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1938 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1939 ,p_dup_party_id, p_dup_party_id;
1940 END IF;
1941 END IF;
1942 output_long_strings('----------------------------------------------------------');
1943 output_long_strings('Party Site Contains String = '||p_contains_str);
1944 output_long_strings('Restrict Sql = '||p_restrict_sql);
1945 exception
1946 when others then
1947 if (instrb(SQLERRM,'DRG-51030')>0) then
1948 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1949 FND_MSG_PUB.ADD;
1950 RAISE FND_API.G_EXC_ERROR;
1951 elsif (instrb(SQLERRM,'DRG-50943')>0) then
1952 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1953 FND_MSG_PUB.ADD;
1954 RAISE FND_API.G_EXC_ERROR;
1955 elsif (instrb(SQLERRM,'ORA-20000')>0) then
1956 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1957 FND_MSG_PUB.ADD;
1958 RAISE FND_API.G_EXC_ERROR;
1959 else
1960 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1961 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1962 FND_MSG_PUB.ADD;
1963 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1964 end if;
1965 END;
1966
1967 PROCEDURE open_contact_cursor(
1968 p_dup_party_id NUMBER,
1969 p_party_id NUMBER,
1970 p_restrict_sql VARCHAR2,
1971 p_contains_str VARCHAR2,
1972 p_search_ctx_id NUMBER,
1973 p_search_merged VARCHAR2,
1974 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1975 l_sqlstr VARCHAR2(4000);
1976 l_hint VARCHAR2(100);
1977 l_check NUMBER;
1978 l_check_dt NUMBER;
1979 l_search_merged VARCHAR2(1);
1980 l_status_sql VARCHAR2(100);
1981
1982 BEGIN
1983 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1984 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);
1985 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);
1986 END IF;
1987 IF (p_search_merged is null) then
1988 l_search_merged := 'N';
1989 ELSE
1990 l_search_merged := p_search_merged;
1991 END IF;
1992 IF p_party_id IS NOT NULL THEN
1993 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1994 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);
1995 END IF;
1996 OPEN x_cursor FOR
1997 SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID, TX6, TX5
1998 FROM HZ_STAGED_CONTACTS stage
1999 WHERE contains( concat_col, p_contains_str)>0
2000 AND EXISTS (
2001 SELECT 1 FROM HZ_STAGED_PARTIES p
2002 WHERE p.PARTY_ID = stage.PARTY_ID
2003 AND( (l_search_merged ='Y' )
2004 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
2005 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
2006 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
2007 AND( (l_search_merged ='Y' )
2008 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2009 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2010 AND stage.party_id = p_party_id;
2011 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2012 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2013 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);
2014 END IF;
2015 IF p_search_ctx_id IS NULL THEN
2016 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2017 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);
2018 END IF;
2019 OPEN x_cursor FOR
2020 SELECT ORG_CONTACT_ID, PARTY_ID, TX6, TX5
2021 FROM HZ_STAGED_CONTACTS stage
2022 WHERE contains( concat_col, p_contains_str)>0
2023 AND EXISTS (
2024 SELECT 1 FROM HZ_STAGED_PARTIES p
2025 WHERE p.PARTY_ID = stage.PARTY_ID
2026 AND( (l_search_merged ='Y' )
2027 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
2028 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
2029 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
2030 AND( (l_search_merged ='Y' )
2031 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2032 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2033 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2034 ELSE
2035 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2036 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);
2037 END IF;
2038 OPEN x_cursor FOR
2039 SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID, TX6, TX5
2040 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage
2041 WHERE contains( concat_col, p_contains_str)>0
2042 AND d.search_context_id = p_search_ctx_id
2043 AND d.party_id = stage.party_id
2044 AND( (l_search_merged ='Y' )
2045 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2046 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2047 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2048 END IF;
2049 ELSE
2050 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2051 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);
2052 END IF;
2053 l_check := instrb(p_restrict_sql, 'SELECTIVE');
2054 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CT');
2055 IF (l_check_dt > 0 ) THEN
2056 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2057 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);
2058 END IF;
2059 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */';
2060 ELSIF (l_check > 0 ) THEN
2061 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2062 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);
2063 END IF;
2064 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */';
2065 END IF;
2066 IF l_search_merged = 'Y' THEN
2067 l_status_sql := ' ' ;
2068 ELSIF l_search_merged = 'I' THEN
2069 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
2070 ELSE
2071 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
2072 END IF;
2073 l_sqlstr := 'SELECT ' || l_hint || ' ORG_CONTACT_ID, PARTY_ID , TX6, TX5'||
2074 ' FROM HZ_STAGED_CONTACTS stage'||
2075 ' WHERE contains( concat_col, :cont)>0'||
2076 ' AND EXISTS ('||
2077 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2078 ' WHERE p.party_id = stage.party_id ' ||
2079 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2080 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2081 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2082 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2083 ' AND ('||p_restrict_sql||')' ||
2084 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2085 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2086 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2087 ,p_dup_party_id, p_dup_party_id;
2088 END IF;
2089 output_long_strings('----------------------------------------------------------');
2090 output_long_strings('Contacts Contains String = '||p_contains_str);
2091 output_long_strings('Restrict Sql = '||p_restrict_sql);
2092 exception
2093 when others then
2094 if (instrb(SQLERRM,'DRG-51030')>0) then
2095 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2096 FND_MSG_PUB.ADD;
2097 RAISE FND_API.G_EXC_ERROR;
2098 elsif (instrb(SQLERRM,'DRG-50943')>0) then
2099 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2100 FND_MSG_PUB.ADD;
2101 RAISE FND_API.G_EXC_ERROR;
2102 elsif (instrb(SQLERRM,'ORA-20000')>0) then
2103 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2104 FND_MSG_PUB.ADD;
2105 RAISE FND_API.G_EXC_ERROR;
2106 else
2107 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2108 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2109 FND_MSG_PUB.ADD;
2110 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2111 end if;
2112 END;
2113
2114 PROCEDURE open_contact_pt_cursor(
2115 p_dup_party_id NUMBER,
2116 p_party_id NUMBER,
2117 p_restrict_sql VARCHAR2,
2118 p_contains_str VARCHAR2,
2119 p_search_ctx_id NUMBER,
2120 p_search_merged VARCHAR2,
2121 p_search_rel_cpts VARCHAR2,
2122 p_person_api VARCHAR2,
2123 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,
2124 p_restrict_entity VARCHAR2 DEFAULT NULL) IS
2125 l_sqlstr VARCHAR2(4000);
2126 l_hint VARCHAR2(100);
2127 l_check NUMBER;
2128 l_check_dt NUMBER;
2129 l_search_merged VARCHAR2(1);
2130 l_status_sql VARCHAR2(100);
2131 p_restrict_sql1 VARCHAR2(4000);
2132
2133 BEGIN
2134 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2135 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);
2136 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);
2137 END IF;
2138 IF (p_search_merged is null) then
2139 l_search_merged := 'N';
2140 ELSE
2141 l_search_merged := p_search_merged;
2142 END IF;
2143 IF p_restrict_entity = 'CONTACTS'
2144 THEN
2145 OPEN x_cursor FOR
2146 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
2147 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2148 WHERE contains( concat_col, p_contains_str)>0
2149 AND d.search_context_id = p_search_ctx_id
2150 AND( (l_search_merged ='Y' )
2151 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2152 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2153 AND d.party_id = stage.org_contact_id ;
2154 END IF;
2155 IF p_restrict_entity = 'PARTY_SITES'
2156 THEN
2157 OPEN x_cursor FOR
2158 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
2159 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2160 WHERE contains( concat_col, p_contains_str)>0
2161 AND d.search_context_id = p_search_ctx_id
2162 AND( (l_search_merged ='Y' )
2163 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2164 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2165 AND d.party_id = stage.party_site_id ;
2166 END IF;
2167 IF p_restrict_entity IS NULL
2168 THEN
2169 IF p_party_id IS NOT NULL THEN
2170 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2171 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);
2172 END IF;
2173 IF p_search_rel_cpts = 'N' THEN
2174 OPEN x_cursor FOR
2175 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
2176 FROM HZ_STAGED_CONTACT_POINTS stage
2177 WHERE contains( concat_col, p_contains_str)>0
2178 AND( (l_search_merged ='Y' )
2179 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2180 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2181 AND stage.party_id = p_party_id;
2182 ELSE
2183 OPEN x_cursor FOR
2184 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
2185 FROM HZ_STAGED_CONTACT_POINTS stage
2186 WHERE contains( concat_col, p_contains_str)>0
2187 AND( (l_search_merged ='Y' )
2188 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2189 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2190 AND stage.party_id = p_party_id
2191 UNION
2192 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
2193 FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc
2194 WHERE contains( concat_col, p_contains_str)>0
2195 AND r.object_id = p_party_id
2196 AND( (l_search_merged ='Y' )
2197 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2198 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2199 AND r.subject_id = stage.party_id
2200 AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
2201 AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES'
2202 AND r.relationship_id = oc.party_relationship_id
2203 AND oc.org_contact_id = stage.org_contact_id;
2204 END IF;
2205 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2206 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2207 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);
2208 END IF;
2209 IF p_search_ctx_id IS NULL THEN
2210 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2211 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);
2212 END IF;
2213 OPEN x_cursor FOR
2214 SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX5, TX6, TX8
2215 FROM HZ_STAGED_CONTACT_POINTS stage
2216 WHERE contains( concat_col, p_contains_str)>0
2217 AND EXISTS (
2218 SELECT 1 FROM HZ_STAGED_PARTIES p
2219 WHERE p.PARTY_ID = stage.PARTY_ID
2220 AND( (l_search_merged ='Y' )
2221 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
2222 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
2223 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
2224 AND( (l_search_merged ='Y' )
2225 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2226 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2227 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2228 ELSE
2229 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2230 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);
2231 END IF;
2232 IF p_person_api = 'Y' THEN
2233 OPEN x_cursor FOR
2234 SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX5, TX6, TX8
2235 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2236 WHERE contains( concat_col, p_contains_str)>0
2237 AND d.search_context_id = p_search_ctx_id
2238 AND d.party_id = stage.party_id
2239 AND( (l_search_merged ='Y' )
2240 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2241 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2242 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2243 UNION
2244 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
2245 FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage
2246 WHERE contains( concat_col, p_contains_str)>0
2247 AND d.search_context_id = p_search_ctx_id
2248 AND d.party_id = r.subject_id
2249 AND r.relationship_id = oc.party_relationship_id
2250 AND oc.org_contact_id = stage.org_contact_id
2251 AND( (l_search_merged ='Y' )
2252 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2253 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2254 AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2255 ELSE
2256 OPEN x_cursor FOR
2257 SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX5, TX6, TX8
2258 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2259 WHERE contains( concat_col, p_contains_str)>0
2260 AND d.search_context_id = p_search_ctx_id
2261 AND d.party_id = stage.party_id
2262 AND( (l_search_merged ='Y' )
2263 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2264 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2265 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2266 END IF;
2267 END IF;
2268 ELSE
2269 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2270 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);
2271 END IF;
2272 l_check := instrb(p_restrict_sql, 'SELECTIVE');
2273 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CPT');
2274 IF (l_check_dt > 0 ) THEN
2275 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2276 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);
2277 END IF;
2278 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */';
2279 ELSIF (l_check > 0 ) THEN
2280 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2281 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);
2282 END IF;
2283 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */';
2284 END IF;
2285 IF l_search_merged = 'Y' THEN
2286 l_status_sql := ' ' ;
2287 ELSIF l_search_merged = 'I' THEN
2288 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
2289 ELSE
2290 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
2291 END IF;
2292 IF p_person_api = 'Y' THEN
2293 /*Performance fix for Bug:4589953*/
2294 IF (l_check > 0 ) THEN
2295 IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN
2296 p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2297 ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN
2298 p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2299 ELSE
2300 p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2301 END IF;
2302 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'||
2303 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2304 ' WHERE contains( concat_col, :cont)>0 '||
2305 ' AND (stage.org_contact_id is null '||
2306 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2307 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2308 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2309 ' AND ('||p_restrict_sql||'))' ||
2310 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2311 ' UNION ' ||
2312 ' 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'||
2313 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2314 ' WHERE contains( concat_col, :cont)>0 '||
2315 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2316 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2317 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2318 ' AND (stage.org_contact_id in ' ||
2319 ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r ' ||
2320 ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
2321 ' where stage1.relationship_id = oc.party_relationship_id ' ||
2322 ' and ('||p_restrict_sql1 || ') ) )' ||
2323 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2324 OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2325 p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2326 ELSE
2327 l_sqlstr := 'SELECT ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX5, TX6, TX8'||
2328 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2329 ' WHERE contains( concat_col, :cont)>0'||
2330 ' AND EXISTS ('||
2331 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2332 ' WHERE p.party_id = stage.party_id ' ||
2333 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2334 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2335 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2336 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2337 ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2338 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2339 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2340 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2341 ,p_dup_party_id, p_dup_party_id;
2342 END IF;
2343 ELSE
2344 l_sqlstr := 'SELECT ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX5, TX6, TX8'||
2345 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2346 ' WHERE contains( concat_col, :cont)>0'||
2347 ' AND EXISTS ('||
2348 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2349 ' WHERE p.party_id = stage.party_id ' ||
2350 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2351 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2352 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2353 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2354 ' AND ('||p_restrict_sql||')' ||
2355 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2356 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2357 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2358 ,p_dup_party_id, p_dup_party_id;
2359 END IF;
2360 END IF;
2361 END IF;
2362 output_long_strings('----------------------------------------------------------');
2363 output_long_strings('Contact Points Contains String = '||p_contains_str);
2364 output_long_strings('Restrict Sql = '||p_restrict_sql);
2365 exception
2366 when others then
2367 if (instrb(SQLERRM,'DRG-51030')>0) then
2368 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2369 FND_MSG_PUB.ADD;
2370 RAISE FND_API.G_EXC_ERROR;
2371 elsif (instrb(SQLERRM,'DRG-50943')>0) then
2372 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2373 FND_MSG_PUB.ADD;
2374 RAISE FND_API.G_EXC_ERROR;
2375 elsif (instrb(SQLERRM,'ORA-20000')>0) then
2376 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2377 FND_MSG_PUB.ADD;
2378 RAISE FND_API.G_EXC_ERROR;
2379 else
2380 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2381 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2382 FND_MSG_PUB.ADD;
2383 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2384 end if;
2385 END;
2386
2387
2388 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
2389 l_sqlstr VARCHAR2(4000);
2390 l_search_merged VARCHAR2(1);
2391 BEGIN
2392 IF (p_search_merged is null) then
2393 l_search_merged := 'N';
2394 ELSE
2395 l_search_merged := p_search_merged;
2396 END IF;
2397 IF p_restrict_sql IS NULL THEN
2398 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
2399 SELECT p_search_ctx_id, PARTY_ID, decode(TX8,g_party_stage_rec.TX8||' ',100,90)
2400 FROM hz_staged_parties
2401 WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
2402 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = TX36))
2403 AND( (l_search_merged ='Y' )
2404 OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))
2405 OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))
2406 AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)
2407 AND rownum <= p_thresh;
2408 ELSE
2409 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 ';
2410 l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
2411 l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' = TX36) ';
2412 IF l_search_merged = 'N' THEN
2413 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
2414 ELSIF l_search_merged = 'Y' THEN
2415 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
2416 END IF;
2417 l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
2418 l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
2419 l_sqlstr := l_sqlstr || ' AND ROWNUM <= :thresh ';
2420 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;
2421 END IF;
2422 x_num_matches := SQL%ROWCOUNT;
2423 END;
2424
2425 FUNCTION get_new_score_rec (
2426 p_init_total_score NUMBER,
2427 p_init_party_score NUMBER,
2428 p_init_party_site_score NUMBER,
2429 p_init_contact_score NUMBER,
2430 p_init_contact_point_score NUMBER,
2431 p_party_id NUMBER,
2432 p_party_site_id NUMBER,
2433 p_org_contact_id NUMBER,
2434 p_contact_point_id NUMBER)
2435 RETURN HZ_PARTY_SEARCH.score_rec IS
2436 l_score_rec HZ_PARTY_SEARCH.score_rec;
2437 BEGIN
2438 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2439 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);
2440 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);
2441 END IF;
2442 l_score_rec.TOTAL_SCORE := p_init_total_score;
2443 l_score_rec.PARTY_SCORE := p_init_party_score;
2444 l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;
2445 l_score_rec.CONTACT_SCORE := p_init_contact_score;
2446 l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;
2447 l_score_rec.PARTY_ID := p_party_id;
2448 l_score_rec.PARTY_SITE_ID := p_party_site_id;
2449 l_score_rec.ORG_CONTACT_ID := p_org_contact_id;
2450 l_score_rec.CONTACT_POINT_ID := p_contact_point_id;
2451 RETURN l_score_rec;
2452 END;
2453
2454 /**********************************************************
2455 This procedure finds the set of parties that match the search
2456 criteria and returns a scored set of parties
2457
2458 The steps in executing the search are as follows
2459 1. Initialization and error checks
2460 2. Setup of intermedia query strings for Acquisition query
2461 3. Execution of Acquisition query
2462 4. Execution of Secondary queries to score results
2463 5. Setup of data temporary table to return search results
2464 **********************************************************/
2465
2466 PROCEDURE find_parties (
2467 p_rule_id IN NUMBER,
2468 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
2469 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
2470 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
2471 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
2472 p_restrict_sql IN VARCHAR2,
2473 p_match_type IN VARCHAR2,
2474 p_search_merged IN VARCHAR2,
2475 p_dup_party_id IN NUMBER,
2476 p_dup_set_id IN NUMBER,
2477 p_dup_batch_id IN NUMBER,
2478 p_ins_details IN VARCHAR2,
2479 x_search_ctx_id OUT NUMBER,
2480 x_num_matches OUT NUMBER
2481 ) IS
2482
2483 -- Strings to hold the generated Intermedia query strings
2484 l_party_contains_str VARCHAR2(32000);
2485 l_party_site_contains_str VARCHAR2(32000);
2486 l_contact_contains_str VARCHAR2(32000);
2487 l_contact_pt_contains_str VARCHAR2(32000);
2488 l_denorm_str VARCHAR2(32000);
2489 l_ps_denorm_str VARCHAR2(32000);
2490 l_ct_denorm_str VARCHAR2(32000);
2491 l_cpt_denorm_str VARCHAR2(32000);
2492
2493 -- Other local variables
2494 l_match_str VARCHAR2(30); -- Match type (AND or OR)
2495 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
2496 -- For Score calculation
2497 l_max_score NUMBER;
2498 l_match_idx NUMBER;
2499 l_entered_max_score NUMBER;
2500 FIRST BOOLEAN;
2501 l_search_ctx_id NUMBER; -- Generated Search Context ID
2502
2503 l_TX39 VARCHAR2(2000);
2504 l_TX41 VARCHAR2(2000);
2505 l_TX9 VARCHAR2(2000);
2506 l_TX1 VARCHAR2(2000);
2507 l_TX3 VARCHAR2(2000);
2508 l_TX15 VARCHAR2(2000);
2509 l_TX4 VARCHAR2(2000);
2510 l_TX10 VARCHAR2(2000);
2511 l_TX11 VARCHAR2(2000);
2512 l_TX5 VARCHAR2(2000);
2513 l_TX40 VARCHAR2(2000);
2514 l_TX8 VARCHAR2(2000);
2515 l_TX14 VARCHAR2(2000);
2516 l_TX6 VARCHAR2(2000);
2517 H_SCORES HZ_PARTY_SEARCH.score_list;
2518 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
2519 H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
2520
2521 l_score NUMBER;
2522 l_idx NUMBER;
2523 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
2524 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
2525 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
2526 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
2527 l_party_id NUMBER;
2528 l_ps_party_id NUMBER;
2529 l_ct_party_id NUMBER;
2530 l_cpt_party_id NUMBER;
2531 l_cpt_ps_id NUMBER;
2532 l_cpt_contact_id NUMBER;
2533 l_cpt_type VARCHAR2(100);
2534 l_party_site_id NUMBER;
2535 l_org_contact_id NUMBER;
2536 l_contact_pt_id NUMBER;
2537 l_ps_contact_id NUMBER;
2538 l_party_max_score NUMBER;
2539 l_ps_max_score NUMBER;
2540 l_contact_max_score NUMBER;
2541 l_cpt_max_score NUMBER;
2542 l_denorm_max_score NUMBER;
2543 l_non_denorm_max_score NUMBER;
2544
2545 defpt NUMBER :=0;
2546 defps NUMBER :=0;
2547 defct NUMBER :=0;
2548 defcpt NUMBER :=0;
2549 l_index NUMBER;
2550 l_max_thresh NUMBER;
2551 l_tmp NUMBER;
2552 l_merge_flag VARCHAR2(1);
2553 l_num_eval NUMBER:=0;
2554
2555 --Fix for bug 4417124
2556 l_use_contact_addr_info BOOLEAN := TRUE;
2557 l_use_contact_cpt_info BOOLEAN := TRUE;
2558 l_use_contact_addr_flag VARCHAR2(1) := 'Y';
2559 l_use_contact_cpt_flag VARCHAR2(1) := 'Y';
2560
2561 L_RETURN_IMM_EXC EXCEPTION;
2562
2563
2564 /********************* Find Parties private procedures *******/
2565 PROCEDURE push_eval IS
2566 BEGIN
2567 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2568 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);
2569 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);
2570 END IF;
2571 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2572 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);
2573 END IF;
2574 H_PARTY_ID.DELETE;
2575 H_PARTY_ID_LIST.DELETE;
2576 H_SCORES.DELETE;
2577 g_mappings.DELETE;
2578 HZ_DQM_SEARCH_UTIL.set_num_eval(0);
2579 call_order(5) := call_order(1);
2580 call_type(5) := 'AND';
2581 call_max_score(5) := call_max_score(1);
2582 call_type(2) := 'OR';
2583 END;
2584
2585 /** Private procedure to acquire and score at party level ***/
2586 PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
2587 l_party_id_idx NUMBER:=1;
2588 l_ctx_id NUMBER;
2589 l_precalc_score BOOLEAN := FALSE;
2590 l_TX35_new varchar2(4000);
2591 BEGIN
2592 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2593 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);
2594 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);
2595 END IF;
2596 SAVEPOINT eval_start;
2597 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2598 l_ctx_id := l_search_ctx_id;
2599 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2600 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);
2601 END IF;
2602 FORALL I in 1..H_PARTY_ID.COUNT
2603 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2604 l_search_ctx_id,H_PARTY_ID(I));
2605 H_PARTY_ID.DELETE;
2606 H_PARTY_ID_LIST.DELETE;
2607 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2608 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2609 hz_utility_v2pub.debug(p_message=>'Match rule is OR and call type is AND. Inserting into HZ_DQM_PARTIES_GT, from the H_PARTY_ID list',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2610 END IF;
2611 l_ctx_id := l_search_ctx_id;
2612 FORALL I in 1..H_PARTY_ID.COUNT
2613 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2614 l_search_ctx_id,H_PARTY_ID(I));
2615 l_party_id_idx := H_PARTY_ID.COUNT+1;
2616 ELSE
2617 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2618 and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
2619 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2620 hz_utility_v2pub.debug(p_message=>'In eval party level estimated hits exceed threshold',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2621 END IF;
2622 IF 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
2623 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2624 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);
2625 END IF;
2626 IF (l_party_site_contains_str IS NULL AND
2627 l_contact_contains_str IS NULL AND
2628 l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN
2629 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);
2630 RAISE L_RETURN_IMM_EXC;
2631 ELSE
2632 open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);
2633 END IF;
2634 ELSE
2635 IF p_index>1 THEN
2636 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2637 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);
2638 END IF;
2639 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2640 FND_MSG_PUB.ADD;
2641 RAISE FND_API.G_EXC_ERROR;
2642 ELSE
2643 push_eval;
2644 RETURN;
2645 END IF;
2646 END IF;
2647 END IF;
2648 l_ctx_id := NULL;
2649 l_party_id_idx := H_PARTY_ID.COUNT+1;
2650 END IF;
2651 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2652 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);
2653 END IF;
2654 IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
2655 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);
2656 END IF;
2657 LOOP
2658 FETCH l_party_cur INTO
2659 l_party_id , l_TX39, l_TX40, l_TX41;
2660 EXIT WHEN l_party_cur%NOTFOUND;
2661 l_index := map_id(l_party_id);
2662 l_score := GET_PARTY_SCORE(l_TX39,l_TX40,l_TX41);
2663 IF NOT H_SCORES.EXISTS(l_index) THEN
2664 H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
2665 ELSE
2666 H_SCORES(l_index).TOTAL_SCORE :=
2667 H_SCORES(l_index).TOTAL_SCORE+l_score;
2668 H_SCORES(l_index).PARTY_SCORE := l_score;
2669 END IF;
2670 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2671 H_PARTY_ID_LIST(l_index) := 1;
2672 H_PARTY_ID(l_party_id_idx) := l_party_id;
2673 l_party_id_idx:= l_party_id_idx+1;
2674 END IF;
2675 IF (l_party_id_idx-1)>l_max_thresh THEN
2676 IF p_index=1 AND call_order(2) = 'PARTY_SITE'
2677 AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
2678 AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL'
2679 AND l_contact_pt_contains_str IS NULL THEN
2680 EXIT;
2681 END IF;
2682 CLOSE l_party_cur;
2683 IF p_index>1 THEN
2684 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2685 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);
2686 END IF;
2687 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2688 FND_MSG_PUB.ADD;
2689 RAISE FND_API.G_EXC_ERROR;
2690 ELSE
2691 push_eval;
2692 RETURN;
2693 END IF;
2694 END IF;
2695 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2696 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);
2697 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);
2698 END IF;
2699 END LOOP;
2700 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2701 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);
2702 END IF;
2703 CLOSE l_party_cur;
2704 ROLLBACK to eval_start;
2705 END;
2706
2707 /** Private procedure to acquire and score at party site level ***/
2708 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
2709 l_party_id_idx NUMBER:=1;
2710 l_ctx_id NUMBER;
2711 h_ps_id HZ_PARTY_SEARCH.IDList;
2712 h_ps_party_id HZ_PARTY_SEARCH.IDList;
2713 h_ps_score HZ_PARTY_SEARCH.IDList;
2714 detcnt NUMBER := 1;
2715 BEGIN
2716 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2717 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);
2718 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);
2719 END IF;
2720 IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,'D_PS')>0
2721 AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and
2722 l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> 'Y' THEN
2723 l_party_id := H_SCORES.FIRST;
2724 WHILE l_party_id IS NOT NULL LOOP
2725 H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;
2726 l_party_id:=H_SCORES.NEXT(l_party_id);
2727 END LOOP;
2728 RETURN;
2729 END IF;
2730 SAVEPOINT eval_start;
2731 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2732 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2733 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);
2734 END IF;
2735 l_ctx_id := l_search_ctx_id;
2736 FORALL I in 1..H_PARTY_ID.COUNT
2737 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2738 l_search_ctx_id,H_PARTY_ID(I));
2739 H_PARTY_ID.DELETE;
2740 H_PARTY_ID_LIST.DELETE;
2741 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2742 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2743 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);
2744 END IF;
2745 l_ctx_id := l_search_ctx_id;
2746 FORALL I in 1..H_PARTY_ID.COUNT
2747 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2748 l_search_ctx_id,H_PARTY_ID(I));
2749 l_party_id_idx := H_PARTY_ID.COUNT+1;
2750 ELSE
2751 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2752 and check_estimate_hits('PARTY_SITES',p_party_site_contains_str)>l_max_thresh THEN
2753 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2754 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);
2755 END IF;
2756 IF p_index>1 THEN
2757 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2758 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);
2759 END IF;
2760 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2761 FND_MSG_PUB.ADD;
2762 RAISE FND_API.G_EXC_ERROR;
2763 ELSE
2764 push_eval;
2765 RETURN;
2766 END IF;
2767 END IF;
2768 l_party_id_idx := H_PARTY_ID.COUNT+1;
2769 l_ctx_id := NULL;
2770 END IF;
2771 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2772 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);
2773 END IF;
2774 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);
2775 LOOP
2776 FETCH l_party_site_cur INTO
2777 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;
2778 EXIT WHEN l_party_site_cur%NOTFOUND;
2779 --Fix for bug 4417124
2780 IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN
2781 l_index := map_id(l_ps_party_id);
2782 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX3,l_TX4,l_TX9,l_TX10,l_TX11,l_TX14,l_TX15);
2783 IF NOT H_SCORES.EXISTS(l_index) THEN
2784 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);
2785 ELSE
2786 IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
2787 H_SCORES(l_index).TOTAL_SCORE :=
2788 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
2789 H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
2790 END IF;
2791 END IF;
2792 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2793 H_PARTY_ID_LIST(l_index) := 1;
2794 H_PARTY_ID(l_party_id_idx) := l_ps_party_id;
2795 l_party_id_idx:= l_party_id_idx+1;
2796 END IF;
2797 IF p_ins_details = 'Y' THEN
2798 h_ps_id(detcnt) := l_party_site_id;
2799 h_ps_party_id(detcnt) := l_ps_party_id;
2800 IF (p_emax_score > 0) THEN
2801 h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
2802 ELSE
2803 h_ps_score(detcnt) := 0;
2804 END IF;
2805 detcnt := detcnt +1;
2806 END IF;
2807 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2808 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);
2809 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);
2810 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);
2811 END IF;
2812 END IF;
2813 END LOOP;
2814 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2815 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);
2816 END IF;
2817 CLOSE l_party_site_cur;
2818 ROLLBACK to eval_start;
2819 IF p_ins_details = 'Y' THEN
2820 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2821 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);
2822 END IF;
2823 FORALL I in 1..h_ps_id.COUNT
2824 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
2825 l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
2826 END IF;
2827 END;
2828
2829 /** Private procedure to acquire and score at contact point level ***/
2830 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
2831 l_party_id_idx NUMBER:=1;
2832 l_ctx_id NUMBER;
2833 h_ct_id HZ_PARTY_SEARCH.IDList;
2834 h_ct_party_id HZ_PARTY_SEARCH.IDList;
2835 h_ct_score HZ_PARTY_SEARCH.IDList;
2836 detcnt NUMBER := 1;
2837 BEGIN
2838 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2839 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);
2840 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);
2841 END IF;
2842 SAVEPOINT eval_start;
2843 IF l_match_str = ' AND ' AND p_call_type='AND' THEN
2844 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2845 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);
2846 END IF;
2847 l_ctx_id := l_search_ctx_id;
2848 FORALL I in 1..H_PARTY_ID.COUNT
2849 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2850 l_search_ctx_id,H_PARTY_ID(I));
2851 H_PARTY_ID.DELETE;
2852 H_PARTY_ID_LIST.DELETE;
2853 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2854 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2855 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);
2856 END IF;
2857 l_ctx_id := l_search_ctx_id;
2858 FORALL I in 1..H_PARTY_ID.COUNT
2859 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2860 l_search_ctx_id,H_PARTY_ID(I));
2861 l_party_id_idx := H_PARTY_ID.COUNT+1;
2862 ELSE
2863 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2864 and check_estimate_hits('CONTACTS',p_contact_contains_str)>l_max_thresh THEN
2865 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2866 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);
2867 END IF;
2868 IF p_index>1 THEN
2869 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2870 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);
2871 END IF;
2872 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2873 FND_MSG_PUB.ADD;
2874 RAISE FND_API.G_EXC_ERROR;
2875 ELSE
2876 push_eval;
2877 RETURN;
2878 END IF;
2879 END IF;
2880 l_ctx_id := NULL;
2881 l_party_id_idx := H_PARTY_ID.COUNT+1;
2882 END IF;
2883 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2884 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);
2885 END IF;
2886 open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id, p_search_merged, l_contact_cur);
2887 LOOP
2888 FETCH l_contact_cur INTO
2889 l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
2890 EXIT WHEN l_contact_cur%NOTFOUND;
2891 l_index := map_id(l_ct_party_id);
2892 l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
2893 IF NOT H_SCORES.EXISTS(l_index) THEN
2894 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);
2895 ELSE
2896 IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
2897 H_SCORES(l_index).TOTAL_SCORE :=
2898 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
2899 H_SCORES(l_index).CONTACT_SCORE := l_score;
2900 END IF;
2901 END IF;
2902 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2903 H_PARTY_ID_LIST(l_index) := 1;
2904 H_PARTY_ID(l_party_id_idx) := l_ct_party_id;
2905 l_party_id_idx:= l_party_id_idx+1;
2906 END IF;
2907 IF p_ins_details = 'Y' THEN
2908 h_ct_id(detcnt) := l_org_contact_id;
2909 h_ct_party_id(detcnt) := l_ct_party_id;
2910 IF (p_emax_score > 0) THEN
2911 h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
2912 ELSE
2913 h_ct_score(detcnt) := 0;
2914 END IF;
2915 detcnt := detcnt +1;
2916 END IF;
2917 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2918 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);
2919 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);
2920 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);
2921 END IF;
2922 END LOOP;
2923 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2924 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);
2925 END IF;
2926 CLOSE l_contact_cur;
2927 ROLLBACK to eval_start;
2928 IF p_ins_details = 'Y' THEN
2929 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2930 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);
2931 END IF;
2932 FORALL I in 1..h_ct_id.COUNT
2933 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
2934 l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
2935 END IF;
2936 END;
2937
2938 /** Private procedure to acquire and score at contact point level ***/
2939 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
2940 l_party_id_idx NUMBER:=1;
2941 l_ctx_id NUMBER;
2942 h_cpt_id HZ_PARTY_SEARCH.IDList;
2943 h_cpt_party_id HZ_PARTY_SEARCH.IDList;
2944 h_cpt_score HZ_PARTY_SEARCH.IDList;
2945 detcnt NUMBER := 1;
2946 l_cpt_flag VARCHAR2(1) := 'N';
2947 is_a_match VARCHAR2(1) := 'Y';
2948 BEGIN
2949 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2950 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);
2951 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);
2952 END IF;
2953 SAVEPOINT eval_start;
2954 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2955 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2956 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);
2957 END IF;
2958 l_ctx_id := l_search_ctx_id;
2959 FORALL I in 1..H_PARTY_ID.COUNT
2960 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2961 l_search_ctx_id,H_PARTY_ID(I));
2962 H_PARTY_ID.DELETE;
2963 H_PARTY_ID_LIST.DELETE;
2964 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2965 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2966 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);
2967 END IF;
2968 l_ctx_id := l_search_ctx_id;
2969 FORALL I in 1..H_PARTY_ID.COUNT
2970 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2971 l_search_ctx_id,H_PARTY_ID(I));
2972 l_party_id_idx := H_PARTY_ID.COUNT+1;
2973 ELSE
2974 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2975 and check_estimate_hits('CONTACT_POINTS',p_contact_pt_contains_str)>l_max_thresh THEN
2976 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2977 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);
2978 END IF;
2979 IF p_index>1 THEN
2980 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2981 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);
2982 END IF;
2983 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2984 FND_MSG_PUB.ADD;
2985 RAISE FND_API.G_EXC_ERROR;
2986 ELSE
2987 push_eval;
2988 RETURN;
2989 END IF;
2990 END IF;
2991 l_ctx_id := NULL;
2992 l_party_id_idx := H_PARTY_ID.COUNT+1;
2993 END IF;
2994 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2995 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);
2996 END IF;
2997 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);
2998 LOOP
2999 FETCH l_contact_pt_cur INTO
3000 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;
3001 EXIT WHEN l_contact_pt_cur%NOTFOUND;
3002 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3003 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);
3004 END IF;
3005 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3006 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);
3007 END IF;
3008 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3009 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);
3010 END IF;
3011 --Fix for bug 4417124
3012 IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN
3013 l_index := map_id(l_cpt_party_id);
3014 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
3015 IF NOT H_SCORES.EXISTS(l_index) THEN
3016 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);
3017 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3018 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3019 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);
3020 END IF;
3021 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3022 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);
3023 END IF;
3024 ELSE
3025 IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
3026 IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
3027 H_SCORES(l_index).TOTAL_SCORE :=
3028 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;
3029 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;
3030 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3031 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3032 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);
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).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);
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).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);
3039 END IF;
3040 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3041 hz_utility_v2pub.debug(p_message=>'H_SCORES(l_index).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);
3042 END IF;
3043 END IF;
3044 ELSE
3045 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3046 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);
3047 END IF;
3048 H_SCORES(l_index).TOTAL_SCORE :=
3049 H_SCORES(l_index).TOTAL_SCORE+l_score;
3050 H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3051 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3052 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3053 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);
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).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);
3057 END IF;
3058 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3059 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);
3060 END IF;
3061 END IF;
3062 END IF;
3063 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3064 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);
3065 END IF;
3066 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3067 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);
3068 END IF;
3069 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3070 -- If rule is match all
3071 IF l_match_str = ' AND ' THEN
3072 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3073 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);
3074 END IF;
3075 IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3076 is_a_match := 'Y';
3077 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3078 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);
3079 END IF;
3080 ELSE
3081 is_a_match := 'N';
3082 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3083 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);
3084 END IF;
3085 END IF;
3086 -- Else it is construed to be a match anyway
3087 ELSE
3088 is_a_match := 'Y';
3089 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3090 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);
3091 END IF;
3092 END IF;
3093 IF (is_a_match='Y') then
3094 H_PARTY_ID_LIST(l_index) := 1;
3095 H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;
3096 l_party_id_idx:= l_party_id_idx+1;
3097 end if;
3098 END IF;
3099 IF p_ins_details = 'Y' THEN
3100 IF l_match_str = ' AND ' THEN
3101 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3102 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);
3103 END IF;
3104 IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3105 is_a_match := 'Y';
3106 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3107 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);
3108 END IF;
3109 ELSE
3110 is_a_match := 'N';
3111 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3112 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);
3113 END IF;
3114 END IF;
3115 ELSE
3116 is_a_match := 'Y';
3117 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3118 hz_utility_v2pub.debug(p_message=>'is_a_match is '||is_a_match,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3119 END IF;
3120 END IF;
3121 IF (is_a_match='Y') THEN
3122 FOR I IN 1..h_cpt_id.COUNT LOOP
3123 IF h_cpt_id(I)=l_contact_pt_id THEN
3124 l_cpt_flag := 'Y';
3125 END IF;
3126 END LOOP;
3127 IF l_cpt_flag = 'Y' THEN
3128 NULL;
3129 ELSE
3130 h_cpt_id(detcnt) := l_contact_pt_id;
3131 h_cpt_party_id(detcnt) := l_cpt_party_id;
3132 IF (p_emax_score > 0) THEN
3133 h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
3134 ELSE
3135 h_cpt_score(detcnt) := 0;
3136 END IF;
3137 detcnt := detcnt +1;
3138 END IF;
3139 end if;
3140 END IF;
3141 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3142 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);
3143 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);
3144 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);
3145 END IF;
3146 END IF;
3147 END LOOP;
3148 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3149 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);
3150 END IF;
3151 CLOSE l_contact_pt_cur;
3152 ROLLBACK to eval_start;
3153 IF p_ins_details = 'Y' THEN
3154 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3155 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);
3156 END IF;
3157 FORALL I in 1..h_cpt_id.COUNT
3158 INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
3159 l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
3160 END IF;
3161 END eval_cpt_level;
3162
3163 /** Private procedure to call the eval procedure at each entity in the correct order ***/
3164 PROCEDURE do_eval (p_index NUMBER) IS
3165 l_ctx_id NUMBER;
3166 l_threshold NUMBER;
3167 other_acq_criteria_exists BOOLEAN;
3168 acq_cnt NUMBER;
3169 BEGIN
3170 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3171 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);
3172 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);
3173 END IF;
3174 IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
3175 l_threshold := round(( l_entered_max_score / 460) * 78);
3176 other_acq_criteria_exists := TRUE ;
3177 --check if acquisition criteria exists for any other entity
3178 IF l_party_contains_str IS NOT NULL THEN
3179 acq_cnt := 1;
3180 END IF;
3181 IF l_party_site_contains_str IS NOT NULL THEN
3182 acq_cnt := acq_cnt+1;
3183 END IF;
3184 IF l_contact_contains_str IS NOT NULL THEN
3185 acq_cnt := acq_cnt+1;
3186 END IF;
3187 IF l_contact_pt_contains_str IS NOT NULL THEN
3188 acq_cnt := acq_cnt+1;
3189 END IF;
3190 IF acq_cnt>1 THEN
3191 other_acq_criteria_exists := TRUE;
3192 ELSE
3193 other_acq_criteria_exists := FALSE;
3194 END IF;
3195 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);
3196 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);
3197 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);
3198 IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
3199 IF ( call_max_score(p_index) < l_threshold) THEN
3200 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3201 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);
3202 END IF;
3203 RETURN;
3204 ELSE
3205 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3206 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);
3207 END IF;
3208 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3209 FND_MSG_PUB.ADD;
3210 RAISE FND_API.G_EXC_ERROR;
3211 END IF;
3212 ELSE
3213 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3214 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);
3215 END IF;
3216 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3217 FND_MSG_PUB.ADD;
3218 RAISE FND_API.G_EXC_ERROR;
3219 END IF;
3220 END IF;
3221 IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
3222 eval_party_level(l_party_contains_str,call_type(p_index), p_index);
3223 ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
3224 eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3225 ELSIF call_order(p_index) = 'CONTACT' AND l_contact_contains_str IS NOT NULL THEN
3226 eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3227 ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
3228 eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3229 END IF;
3230 END;
3231 /************ End of find_parties private procedures **********/
3232
3233 BEGIN
3234
3235 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3236 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);
3237 END IF;
3238 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3239 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);
3240 END IF;
3241 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3242 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);
3243 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);
3244 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);
3245 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);
3246 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);
3247 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);
3248 END IF;
3249 -- ************************************
3250 -- STEP 1. Initialization and error checks
3251
3252 l_match_str := ' AND ';
3253 IF p_match_type = 'AND' THEN
3254 l_match_str := ' AND ';
3255 ELSIF p_match_type = 'OR' THEN
3256 l_match_str := ' OR ';
3257 END IF;
3258 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);
3259 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
3260
3261
3262 --Fix for bug 4417124
3263
3264 SELECT use_contact_addr_flag, use_contact_cpt_flag
3265 INTO l_use_contact_addr_flag, l_use_contact_cpt_flag
3266 FROM hz_match_rules_b
3267 WHERE match_rule_id = 8;
3268
3269 IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
3270 l_use_contact_addr_info := FALSE;
3271 END IF;
3272
3273 IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
3274 l_use_contact_cpt_info := FALSE;
3275 END IF;
3276
3277 --End fix for bug 4417124
3278
3279 IF p_dup_batch_id IS NOT NULL THEN
3280 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH_BATCH'),10000);
3281 ELSE
3282 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
3283 END IF;
3284 IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
3285 g_score_until_thresh := true;
3286 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3287 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);
3288 END IF;
3289 ELSE
3290 g_score_until_thresh := false;
3291 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3292 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);
3293 END IF;
3294 END IF;
3295 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3296 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);
3297 END IF;
3298 -- ************************************************************
3299 -- STEP 2. Setup of intermedia query strings for Acquisition query
3300 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
3301 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
3302 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
3303 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3304 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);
3305 END IF;
3306 l_denorm_max_score:=0;
3307 l_non_denorm_max_score:=0;
3308 IF l_ps_denorm_str IS NOT NULL THEN
3309 l_denorm_max_score := l_denorm_max_score+l_ps_max_score;
3310 l_denorm_str := l_ps_denorm_str;
3311 ELSE
3312 l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;
3313 END IF;
3314 IF l_ct_denorm_str IS NOT NULL THEN
3315 l_denorm_max_score := l_denorm_max_score+l_contact_max_score;
3316 IF l_denorm_str IS NOT NULL THEN
3317 l_denorm_str := l_denorm_str || ' OR ' ||l_ct_denorm_str;
3318 ELSE
3319 l_denorm_str := l_ct_denorm_str;
3320 END IF;
3321 ELSE
3322 l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;
3323 END IF;
3324 IF l_cpt_denorm_str IS NOT NULL THEN
3325 l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;
3326 IF l_denorm_str IS NOT NULL THEN
3327 l_denorm_str := l_denorm_str || ' OR ' ||l_cpt_denorm_str;
3328 ELSE
3329 l_denorm_str := l_cpt_denorm_str;
3330 END IF;
3331 ELSE
3332 l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;
3333 END IF;
3334 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));
3335 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3336
3337 -- Setup Search Context ID
3338 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3339 x_search_ctx_id := l_search_ctx_id;
3340
3341 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3342 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);
3343 END IF;
3344 IF l_party_contains_str IS NULL THEN
3345 defpt := 1;
3346 END IF;
3347 IF l_party_site_contains_str IS NULL THEN
3348 defps := 1;
3349 END IF;
3350 IF l_contact_contains_str IS NULL THEN
3351 defct := 1;
3352 END IF;
3353 IF l_contact_pt_contains_str IS NULL THEN
3354 defcpt := 1;
3355 END IF;
3356
3357 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3358 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3359 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);
3360 END IF;
3361 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);
3362 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);
3363 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);
3364 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);
3365 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);
3366 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);
3367 END IF;
3368 FOR I in 1..5 LOOP
3369 do_eval(I);
3370 END LOOP;
3371 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3372 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);
3373 END IF;
3374 x_num_matches := 0;
3375 l_num_eval := 0;
3376 IF l_match_str = ' OR ' THEN
3377 l_party_id := H_SCORES.FIRST;
3378 ELSE
3379 l_party_id := H_PARTY_ID_LIST.FIRST;
3380 END IF;
3381 WHILE l_party_id IS NOT NULL LOOP
3382 l_num_eval:= l_num_eval+1;
3383 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3384 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3385 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);
3386 END IF;
3387 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);
3388 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);
3389 END IF;
3390 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3391 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);
3392 END IF;
3393 IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(78/460) THEN
3394 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
3395 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));
3396 x_num_matches := x_num_matches+1;
3397 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3398 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);
3399 END IF;
3400 END IF;
3401 IF l_match_str = ' OR ' THEN
3402 l_party_id:=H_SCORES.NEXT(l_party_id);
3403 ELSE
3404 l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3405 END IF;
3406 END LOOP;
3407 HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3408 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3409 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);
3410 END IF;
3411 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3412 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);
3413 END IF;
3414 EXCEPTION
3415 WHEN L_RETURN_IMM_EXC THEN
3416 RETURN;
3417 WHEN FND_API.G_EXC_ERROR THEN
3418 RAISE FND_API.G_EXC_ERROR;
3419 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3420 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3421 WHEN OTHERS THEN
3422 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3423 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_parties');
3424 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3425 FND_MSG_PUB.ADD;
3426 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3427 END find_parties;
3428
3429 PROCEDURE find_persons (
3430 p_rule_id IN NUMBER,
3431 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
3432 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
3433 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
3434 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
3435 p_restrict_sql IN VARCHAR2,
3436 p_match_type IN VARCHAR2,
3437 p_search_merged IN VARCHAR2,
3438 p_dup_party_id IN NUMBER,
3439 p_dup_set_id IN NUMBER,
3440 p_dup_batch_id IN NUMBER,
3441 p_ins_details IN VARCHAR2,
3442 x_search_ctx_id OUT NUMBER,
3443 x_num_matches OUT NUMBER
3444 ) IS
3445
3446 -- Strings to hold the generated Intermedia query strings
3447 l_party_contains_str VARCHAR2(32000);
3448 l_party_site_contains_str VARCHAR2(32000);
3449 l_contact_contains_str VARCHAR2(32000);
3450 l_contact_pt_contains_str VARCHAR2(32000);
3451 l_denorm_str VARCHAR2(32000);
3452 l_ps_denorm_str VARCHAR2(32000);
3453 l_ct_denorm_str VARCHAR2(32000);
3454 l_cpt_denorm_str VARCHAR2(32000);
3455
3456 -- Other local variables
3457 l_match_str VARCHAR2(30); -- Match type (AND or OR)
3458 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
3459 -- For Score calculation
3460 l_max_score NUMBER;
3461 l_match_idx NUMBER;
3462 l_entered_max_score NUMBER;
3463 FIRST BOOLEAN;
3464 l_search_ctx_id NUMBER; -- Generated Search Context ID
3465
3466 l_TX39 VARCHAR2(2000);
3467 l_TX41 VARCHAR2(2000);
3468 l_TX9 VARCHAR2(2000);
3469 l_TX1 VARCHAR2(2000);
3470 l_TX3 VARCHAR2(2000);
3471 l_TX15 VARCHAR2(2000);
3472 l_TX4 VARCHAR2(2000);
3473 l_TX10 VARCHAR2(2000);
3474 l_TX11 VARCHAR2(2000);
3475 l_TX5 VARCHAR2(2000);
3476 l_TX40 VARCHAR2(2000);
3477 l_TX8 VARCHAR2(2000);
3478 l_TX14 VARCHAR2(2000);
3479 l_TX6 VARCHAR2(2000);
3480 H_SCORES HZ_PARTY_SEARCH.score_list;
3481 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
3482 H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
3483
3484 l_score NUMBER;
3485 l_idx NUMBER;
3486 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
3487 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
3488 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
3489 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
3490 l_party_id NUMBER;
3491 l_ps_party_id NUMBER;
3492 l_ct_party_id NUMBER;
3493 l_cpt_party_id NUMBER;
3494 l_cpt_ps_id NUMBER;
3495 l_cpt_contact_id NUMBER;
3496 l_cpt_type VARCHAR2(100);
3497 l_party_site_id NUMBER;
3498 l_org_contact_id NUMBER;
3499 l_contact_pt_id NUMBER;
3500 l_cpt_level VARCHAR2(100);
3501 l_ps_contact_id NUMBER;
3502 l_party_max_score NUMBER;
3503 l_ps_max_score NUMBER;
3504 l_contact_max_score NUMBER;
3505 l_cpt_max_score NUMBER;
3506 l_denorm_max_score NUMBER;
3507 l_non_denorm_max_score NUMBER;
3508
3509 defpt NUMBER :=0;
3510 defps NUMBER :=0;
3511 defct NUMBER :=0;
3512 defcpt NUMBER :=0;
3513 l_index NUMBER;
3514 l_max_thresh NUMBER;
3515 l_tmp NUMBER;
3516 l_merge_flag VARCHAR2(1);
3517 l_num_eval NUMBER:=0;
3518
3519 L_RETURN_IMM_EXC Exception;
3520
3521
3522 /********************* Find Parties private procedures *******/
3523 PROCEDURE set_person_party_type IS
3524 BEGIN
3525 g_party_stage_rec.TX36:=
3526 HZ_TRANS_PKG.EXACT(
3527 'PERSON'
3528 ,null,'PARTY_TYPE'
3529 ,'PARTY');
3530 END;
3531
3532 PROCEDURE unset_person_party_type IS
3533 BEGIN
3534 g_party_stage_rec.TX36 := '';
3535 END;
3536
3537 FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER)
3538 RETURN NUMBER IS
3539 l_party_type VARCHAR2(255);
3540 l_person_id NUMBER(15);
3541 BEGIN
3542 SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;
3543 IF l_party_type = 'PERSON' THEN
3544 RETURN p_party_id;
3545 ELSIF p_contact_id IS NULL THEN
3546 RETURN NULL;
3547 ELSE
3548 BEGIN
3549 SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p
3550 WHERE oc.org_contact_id = p_contact_id
3551 AND r.relationship_id = oc.party_relationship_id
3552 AND r.object_id = p_party_id
3553 AND p.party_id = r.subject_id
3554 AND p.party_type = 'PERSON'
3555 AND ROWNUM=1;
3556
3557 RETURN l_person_id;
3558 EXCEPTION
3559 WHEN NO_DATA_FOUND THEN
3560 RETURN NULL;
3561 END;
3562 END IF;
3563 END;
3564
3565 PROCEDURE push_eval IS
3566 BEGIN
3567 H_PARTY_ID.DELETE;
3568 H_PARTY_ID_LIST.DELETE;
3569 H_SCORES.DELETE;
3570 g_mappings.DELETE;
3571 HZ_DQM_SEARCH_UTIL.set_num_eval(0);
3572 call_order(5) := call_order(1);
3573 call_type(5) := 'AND';
3574 call_max_score(5) := call_max_score(1);
3575 call_type(2) := 'OR';
3576 END;
3577
3578 /** Private procedure to acquire and score at party level ***/
3579 PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
3580 l_party_id_idx NUMBER:=1;
3581 l_ctx_id NUMBER;
3582 l_TX35_new varchar2(4000);
3583 BEGIN
3584 SAVEPOINT eval_start;
3585 set_person_party_type;
3586 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3587 l_ctx_id := l_search_ctx_id;
3588 FORALL I in 1..H_PARTY_ID.COUNT
3589 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3590 l_search_ctx_id,H_PARTY_ID(I));
3591 H_PARTY_ID.DELETE;
3592 H_PARTY_ID_LIST.DELETE;
3593 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3594 l_ctx_id := l_search_ctx_id;
3595 FORALL I in 1..H_PARTY_ID.COUNT
3596 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3597 l_search_ctx_id,H_PARTY_ID(I));
3598 l_party_id_idx := H_PARTY_ID.COUNT+1;
3599 ELSE
3600 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3601 and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh 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 estimated hits exceed threshold',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 g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' THEN
3606 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3607 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);
3608 END IF;
3609 IF (l_party_site_contains_str IS NULL AND
3610 l_contact_contains_str IS NULL AND
3611 l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN
3612 return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);
3613 RAISE L_RETURN_IMM_EXC;
3614 ELSE
3615 open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);
3616 END IF;
3617 ELSE
3618 IF p_index>1 THEN
3619 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3620 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);
3621 END IF;
3622 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3623 FND_MSG_PUB.ADD;
3624 RAISE FND_API.G_EXC_ERROR;
3625 ELSE
3626 push_eval;
3627 RETURN;
3628 END IF;
3629 END IF;
3630 END IF;
3631 l_ctx_id := NULL;
3632 l_party_id_idx := H_PARTY_ID.COUNT+1;
3633 END IF;
3634 IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
3635 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);
3636 END IF;
3637 LOOP
3638 FETCH l_party_cur INTO
3639 l_party_id , l_TX39, l_TX40, l_TX41;
3640 EXIT WHEN l_party_cur%NOTFOUND;
3641 l_index := map_id(l_party_id);
3642 l_score := GET_PARTY_SCORE(l_TX39,l_TX40,l_TX41);
3643 IF NOT H_SCORES.EXISTS(l_index) THEN
3644 H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
3645 ELSE
3646 H_SCORES(l_index).TOTAL_SCORE :=
3647 H_SCORES(l_index).TOTAL_SCORE+l_score;
3648 H_SCORES(l_index).PARTY_SCORE := l_score;
3649 END IF;
3650 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3651 H_PARTY_ID_LIST(l_index) := 1;
3652 H_PARTY_ID(l_party_id_idx) := l_party_id;
3653 l_party_id_idx:= l_party_id_idx+1;
3654 END IF;
3655 IF (l_party_id_idx-1)>l_max_thresh THEN
3656 IF p_index=1 AND call_order(2) = 'PARTY_SITE'
3657 AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
3658 AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL'
3659 AND l_contact_pt_contains_str IS NULL THEN
3660 H_PARTY_ID.DELETE(l_party_id_idx-1);
3661 H_PARTY_ID_LIST.DELETE(l_index);
3662 H_SCORES.DELETE(l_index);
3663 EXIT;
3664 END IF;
3665 CLOSE l_party_cur;
3666 IF p_index>1 THEN
3667 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3668 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);
3669 END IF;
3670 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3671 FND_MSG_PUB.ADD;
3672 RAISE FND_API.G_EXC_ERROR;
3673 ELSE
3674 push_eval;
3675 RETURN;
3676 END IF;
3677 END IF;
3678 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3679 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);
3680 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);
3681 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);
3682 END IF;
3683 END LOOP;
3684 CLOSE l_party_cur;
3685 ROLLBACK to eval_start;
3686 END;
3687 PROCEDURE open_person_contact_cursor(
3688 p_contains_str VARCHAR2,
3689 p_search_ctx_id NUMBER,
3690 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
3691 BEGIN
3692 OPEN x_cursor FOR
3693 SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID, TX6, TX5
3694 FROM HZ_STAGED_CONTACTS stage
3695 WHERE contains( concat_col, p_contains_str)>0
3696 AND ORG_CONTACT_ID in (
3697 SELECT /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/
3698 org_contact_id
3699 from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc
3700 where d.party_id = r.subject_id
3701 and oc.party_relationship_id = r.relationship_id
3702 and d.search_context_id = p_search_ctx_id);
3703 exception
3704 when others then
3705 if (instrb(SQLERRM,'DRG-51030')>0) then
3706 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
3707 FND_MSG_PUB.ADD;
3708 RAISE FND_API.G_EXC_ERROR;
3709 elsif (instrb(SQLERRM,'DRG-50943')>0) then
3710 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
3711 FND_MSG_PUB.ADD;
3712 RAISE FND_API.G_EXC_ERROR;
3713 else
3714 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3715 end if;
3716 END;
3717
3718 /** Private procedure to acquire and score at party site level ***/
3719 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
3720 l_party_id_idx NUMBER:=1;
3721 l_ctx_id NUMBER;
3722 h_ps_id HZ_PARTY_SEARCH.IDList;
3723 h_ps_party_id HZ_PARTY_SEARCH.IDList;
3724 h_ps_score HZ_PARTY_SEARCH.IDList;
3725 detcnt NUMBER := 1;
3726 l_person_id NUMBER;
3727 BEGIN
3728 SAVEPOINT eval_start;
3729 unset_person_party_type;
3730 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3731 l_ctx_id := l_search_ctx_id;
3732 FORALL I in 1..H_PARTY_ID.COUNT
3733 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3734 l_search_ctx_id,H_PARTY_ID(I));
3735 H_PARTY_ID.DELETE;
3736 H_PARTY_ID_LIST.DELETE;
3737 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3738 l_ctx_id := l_search_ctx_id;
3739 FORALL I in 1..H_PARTY_ID.COUNT
3740 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3741 l_search_ctx_id,H_PARTY_ID(I));
3742 l_party_id_idx := H_PARTY_ID.COUNT+1;
3743 ELSE
3744 l_party_id_idx := H_PARTY_ID.COUNT+1;
3745 l_ctx_id := NULL;
3746 END IF;
3747 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);
3748 LOOP
3749 FETCH l_party_site_cur INTO
3750 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;
3751 EXIT WHEN l_party_site_cur%NOTFOUND;
3752 IF l_ctx_id IS NULL THEN
3753 l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);
3754 ELSE
3755 l_person_id := l_ps_party_id;
3756 END IF;
3757 IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3758 l_index := map_id(l_person_id);
3759 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX3,l_TX4,l_TX9,l_TX10,l_TX11,l_TX14,l_TX15);
3760 IF NOT H_SCORES.EXISTS(l_index) THEN
3761 IF l_ctx_id IS NULL THEN
3762 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);
3763 END IF;
3764 ELSE
3765 IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3766 H_SCORES(l_index).TOTAL_SCORE :=
3767 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3768 H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3769 END IF;
3770 END IF;
3771 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3772 H_PARTY_ID_LIST(l_index) := 1;
3773 H_PARTY_ID(l_party_id_idx) := l_person_id;
3774 l_party_id_idx:= l_party_id_idx+1;
3775 END IF;
3776 IF (l_party_id_idx-1)>l_max_thresh THEN
3777 CLOSE l_party_site_cur;
3778 IF p_index>1 THEN
3779 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3780 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);
3781 END IF;
3782 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3783 FND_MSG_PUB.ADD;
3784 RAISE FND_API.G_EXC_ERROR;
3785 ELSE
3786 push_eval;
3787 RETURN;
3788 END IF;
3789 END IF;
3790 IF p_ins_details = 'Y' THEN
3791 h_ps_id(detcnt) := l_party_site_id;
3792 h_ps_party_id(detcnt) := l_person_id;
3793 IF (p_emax_score > 0) THEN
3794 h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
3795 ELSE
3796 h_ps_score(detcnt) := 0;
3797 END IF;
3798 detcnt := detcnt +1;
3799 END IF;
3800 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3801 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);
3802 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);
3803 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);
3804 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);
3805 END IF;
3806 END IF;
3807 END LOOP;
3808 CLOSE l_party_site_cur;
3809 ROLLBACK to eval_start;
3810 IF p_ins_details = 'Y' THEN
3811 FORALL I in 1..h_ps_id.COUNT
3812 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
3813 l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
3814 END IF;
3815 END;
3816
3817 /** Private procedure to acquire and score at party site level ***/
3818 PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
3819 l_party_id_idx NUMBER:=1;
3820 l_ctx_id NUMBER;
3821 h_ct_id HZ_PARTY_SEARCH.IDList;
3822 h_ct_party_id HZ_PARTY_SEARCH.IDList;
3823 h_ct_score HZ_PARTY_SEARCH.IDList;
3824 detcnt NUMBER := 1;
3825 l_person_id NUMBER;
3826 BEGIN
3827 SAVEPOINT eval_start;
3828 l_ctx_id := l_search_ctx_id;
3829 unset_person_party_type;
3830 FORALL I in 1..H_PARTY_ID.COUNT
3831 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3832 l_search_ctx_id,H_PARTY_ID(I));
3833 l_party_id_idx := H_PARTY_ID.COUNT+1;
3834 open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);
3835 LOOP
3836 FETCH l_contact_cur INTO
3837 l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
3838 EXIT WHEN l_contact_cur%NOTFOUND;
3839 l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);
3840 l_index := map_id(l_person_id);
3841 IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3842 l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
3843 IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
3844 H_SCORES(l_index).TOTAL_SCORE :=
3845 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
3846 H_SCORES(l_index).CONTACT_SCORE := l_score;
3847 END IF;
3848 END IF;
3849 IF p_ins_details = 'Y' THEN
3850 h_ct_id(detcnt) := l_org_contact_id;
3851 h_ct_party_id(detcnt) := l_person_id;
3852 IF (p_emax_score > 0) THEN
3853 h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
3854 ELSE
3855 h_ct_score(detcnt) := 0;
3856 END IF;
3857 detcnt := detcnt +1;
3858 END IF;
3859 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3860 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);
3861 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);
3862 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);
3863 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);
3864 END IF;
3865 END LOOP;
3866 CLOSE l_contact_cur;
3867 ROLLBACK to eval_start;
3868 IF p_ins_details = 'Y' THEN
3869 FORALL I in 1..h_ct_id.COUNT
3870 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
3871 l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
3872 END IF;
3873 END;
3874
3875 /** Private procedure to acquire and score at contact point level ***/
3876 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
3877 l_party_id_idx NUMBER:=1;
3878 l_ctx_id NUMBER;
3879 h_cpt_id HZ_PARTY_SEARCH.IDList;
3880 h_cpt_party_id HZ_PARTY_SEARCH.IDList;
3881 h_cpt_score HZ_PARTY_SEARCH.IDList;
3882 detcnt NUMBER := 1;
3883 l_person_id NUMBER;
3884 is_a_match VARCHAR2(1) := 'Y';
3885 l_cpt_flag VARCHAR2(1) := 'N';
3886 BEGIN
3887 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3888 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);
3889 END IF;
3890 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3891 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);
3892 END IF;
3893 SAVEPOINT eval_start;
3894 unset_person_party_type;
3895 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3896 l_ctx_id := l_search_ctx_id;
3897 FORALL I in 1..H_PARTY_ID.COUNT
3898 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3899 l_search_ctx_id,H_PARTY_ID(I));
3900 H_PARTY_ID.DELETE;
3901 H_PARTY_ID_LIST.DELETE;
3902 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3903 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3904 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);
3905 END IF;
3906 l_ctx_id := l_search_ctx_id;
3907 FORALL I in 1..H_PARTY_ID.COUNT
3908 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3909 l_search_ctx_id,H_PARTY_ID(I));
3910 l_party_id_idx := H_PARTY_ID.COUNT+1;
3911 ELSE
3912 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3913 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);
3914 END IF;
3915 l_ctx_id := NULL;
3916 l_party_id_idx := H_PARTY_ID.COUNT+1;
3917 END IF;
3918 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3919 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);
3920 END IF;
3921 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);
3922 LOOP
3923 FETCH l_contact_pt_cur INTO
3924 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;
3925 EXIT WHEN l_contact_pt_cur%NOTFOUND;
3926 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3927 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);
3928 END IF;
3929 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3930 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);
3931 END IF;
3932 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3933 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);
3934 END IF;
3935 IF l_ctx_id IS NULL THEN
3936 l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);
3937 ELSE
3938 l_person_id := l_cpt_party_id;
3939 END IF;
3940 IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3941 l_index := map_id(l_person_id);
3942 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
3943 IF NOT H_SCORES.EXISTS(l_index) THEN
3944 IF l_ctx_id IS NULL THEN
3945 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);
3946 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3947 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3948 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);
3949 END IF;
3950 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3951 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);
3952 END IF;
3953 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3954 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);
3955 END IF;
3956 END IF;
3957 ELSE
3958 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3959 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);
3960 END IF;
3961 IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
3962 IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
3963 H_SCORES(l_index).TOTAL_SCORE :=
3964 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;
3965 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;
3966 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3967 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3968 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);
3969 END IF;
3970 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3971 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);
3972 END IF;
3973 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3974 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);
3975 END IF;
3976 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3977 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);
3978 END IF;
3979 END IF;
3980 ELSE
3981 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3982 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);
3983 END IF;
3984 H_SCORES(l_index).TOTAL_SCORE :=
3985 H_SCORES(l_index).TOTAL_SCORE+l_score;
3986 H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3987 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3988 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3989 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);
3990 END IF;
3991 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3992 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);
3993 END IF;
3994 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3995 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);
3996 END IF;
3997 END IF;
3998 END IF;
3999 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4000 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);
4001 END IF;
4002 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4003 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);
4004 END IF;
4005 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
4006 -- If rule is match all
4007 IF l_match_str = ' AND ' THEN
4008 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4009 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);
4010 END IF;
4011 IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4012 is_a_match := 'Y';
4013 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4014 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);
4015 END IF;
4016 ELSE
4017 is_a_match := 'N';
4018 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4019 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);
4020 END IF;
4021 END IF;
4022 -- Else it is construed as a match anyway
4023 ELSE
4024 is_a_match := 'Y';
4025 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4026 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);
4027 END IF;
4028 END IF;
4029 IF (is_a_match='Y') THEN
4030 H_PARTY_ID_LIST(l_index) := 1;
4031 H_PARTY_ID(l_party_id_idx) := l_person_id;
4032 l_party_id_idx:= l_party_id_idx+1;
4033 end if;
4034 END IF;
4035 IF (l_party_id_idx-1)>l_max_thresh THEN
4036 CLOSE l_contact_pt_cur;
4037 IF p_index>1 THEN
4038 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4039 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);
4040 END IF;
4041 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4042 FND_MSG_PUB.ADD;
4043 RAISE FND_API.G_EXC_ERROR;
4044 ELSE
4045 push_eval;
4046 RETURN;
4047 END IF;
4048 END IF;
4049 IF p_ins_details = 'Y' THEN
4050 -- If rule is match all
4051 IF l_match_str = ' AND ' THEN
4052 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4053 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);
4054 END IF;
4055 IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4056 is_a_match := 'Y';
4057 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4058 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);
4059 END IF;
4060 ELSE
4061 is_a_match := 'N';
4062 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4063 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);
4064 END IF;
4065 END IF;
4066 -- Else it is construed as a match anyway
4067 ELSE
4068 is_a_match := 'Y';
4069 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4070 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);
4071 END IF;
4072 END IF;
4073 IF (is_a_match='Y') THEN
4074 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4075 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);
4076 END IF;
4077 FOR I IN 1..h_cpt_id.COUNT LOOP
4078 IF h_cpt_id(I)=l_contact_pt_id THEN
4079 l_cpt_flag := 'Y';
4080 END IF;
4081 END LOOP;
4082 IF l_cpt_flag = 'Y' THEN
4083 NULL;
4084 ELSE
4085 h_cpt_id(detcnt) := l_contact_pt_id;
4086 h_cpt_party_id(detcnt) := l_person_id;
4087 IF (p_emax_score > 0) THEN
4088 h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
4089 ELSE
4090 h_cpt_score(detcnt) := 0;
4091 END IF;
4092 detcnt := detcnt +1;
4093 END IF;
4094 end if;
4095 END IF;
4096 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4097 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);
4098 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);
4099 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);
4100 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);
4101 END IF;
4102 END IF;
4103 END LOOP;
4104 CLOSE l_contact_pt_cur;
4105 ROLLBACK to eval_start;
4106 IF p_ins_details = 'Y' THEN
4107 FORALL I in 1..h_cpt_id.COUNT
4108 INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
4109 l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
4110 END IF;
4111 END;
4112
4113 /** Private procedure to call the eval procedure at each entity in the correct order ***/
4114 PROCEDURE do_eval (p_index NUMBER) IS
4115 l_ctx_id NUMBER;
4116 l_threshold NUMBER;
4117 other_acq_criteria_exists BOOLEAN;
4118 acq_cnt NUMBER;
4119 BEGIN
4120 IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
4121 l_threshold := round(( l_entered_max_score / 460) * 78);
4122 other_acq_criteria_exists := TRUE ;
4123 --check if acquisition criteria exists for any other entity
4124 IF l_party_contains_str IS NOT NULL THEN
4125 acq_cnt := 1;
4126 END IF;
4127 IF l_party_site_contains_str IS NOT NULL THEN
4128 acq_cnt := acq_cnt+1;
4129 END IF;
4130 IF l_contact_contains_str IS NOT NULL THEN
4131 acq_cnt := acq_cnt+1;
4132 END IF;
4133 IF l_contact_pt_contains_str IS NOT NULL THEN
4134 acq_cnt := acq_cnt+1;
4135 END IF;
4136 IF acq_cnt>1 THEN
4137 other_acq_criteria_exists := TRUE;
4138 ELSE
4139 other_acq_criteria_exists := FALSE;
4140 END IF;
4141 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);
4142 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);
4143 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);
4144 IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
4145 IF ( call_max_score(p_index) < l_threshold) THEN
4146 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4147 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);
4148 END IF;
4149 RETURN;
4150 ELSE
4151 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4152 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);
4153 END IF;
4154 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4155 FND_MSG_PUB.ADD;
4156 RAISE FND_API.G_EXC_ERROR;
4157 END IF;
4158 ELSE
4159 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4160 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);
4161 END IF;
4162 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4163 FND_MSG_PUB.ADD;
4164 RAISE FND_API.G_EXC_ERROR;
4165 END IF;
4166 END IF;
4167 IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
4168 eval_party_level(l_party_contains_str,call_type(p_index), p_index);
4169 ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
4170 eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4171 ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
4172 eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4173 END IF;
4174 END;
4175 /************ End of find_persons private procedures **********/
4176
4177 BEGIN
4178
4179 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4180 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);
4181 END IF;
4182 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4183 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);
4184 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);
4185 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);
4186 END IF;
4187 -- ************************************
4188 -- STEP 1. Initialization and error checks
4189
4190 l_match_str := ' AND ';
4191 IF p_match_type = 'AND' THEN
4192 l_match_str := ' AND ';
4193 ELSIF p_match_type = 'OR' THEN
4194 l_match_str := ' OR ';
4195 END IF;
4196 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);
4197 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4198
4199 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
4200 IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
4201 g_score_until_thresh := true;
4202 ELSE
4203 g_score_until_thresh := false;
4204 END IF;
4205 -- ************************************************************
4206 -- STEP 2. Setup of intermedia query strings for Acquisition query
4207 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
4208 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
4209 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
4210 l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);
4211 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
4212
4213 -- Setup Search Context ID
4214 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
4215 x_search_ctx_id := l_search_ctx_id;
4216
4217 IF l_party_contains_str IS NULL THEN
4218 defpt := 1;
4219 END IF;
4220 IF l_party_site_contains_str IS NULL THEN
4221 defps := 1;
4222 END IF;
4223 IF l_contact_contains_str IS NULL THEN
4224 defct := 1;
4225 END IF;
4226 IF l_contact_pt_contains_str IS NULL THEN
4227 defcpt := 1;
4228 END IF;
4229
4230 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4231 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);
4232 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);
4233 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);
4234 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);
4235 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);
4236 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);
4237 END IF;
4238 FOR I in 1..5 LOOP
4239 do_eval(I);
4240 END LOOP;
4241 IF l_contact_contains_str IS NOT NULL THEN
4242 eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);
4243 END IF;
4244 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4245 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);
4246 END IF;
4247 x_num_matches := 0;
4248 l_num_eval := 0;
4249 IF l_match_str = ' OR ' THEN
4250 l_party_id := H_SCORES.FIRST;
4251 ELSE
4252 l_party_id := H_PARTY_ID_LIST.FIRST;
4253 END IF;
4254 WHILE l_party_id IS NOT NULL LOOP
4255 l_num_eval:= l_num_eval+1;
4256 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4257 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);
4258 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);
4259 END IF;
4260 IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(78/460) THEN
4261 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
4262 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));
4263 x_num_matches := x_num_matches+1;
4264 END IF;
4265 IF l_match_str = ' OR ' THEN
4266 l_party_id:=H_SCORES.NEXT(l_party_id);
4267 ELSE
4268 l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
4269 END IF;
4270 END LOOP;
4271 HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
4272 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4273 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);
4274 END IF;
4275 EXCEPTION
4276 WHEN L_RETURN_IMM_EXC THEN
4277 RETURN;
4278 WHEN FND_API.G_EXC_ERROR THEN
4279 RAISE FND_API.G_EXC_ERROR;
4280 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4281 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4282 WHEN OTHERS THEN
4283 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4284 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_persons');
4285 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4286 FND_MSG_PUB.ADD;
4287 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4288 END find_persons;
4289
4290 PROCEDURE find_persons (
4291 p_rule_id IN NUMBER,
4292 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
4293 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
4294 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
4295 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
4296 p_restrict_sql IN VARCHAR2,
4297 p_match_type IN VARCHAR2,
4298 p_search_merged IN VARCHAR2,
4299 p_ins_details IN VARCHAR2,
4300 x_search_ctx_id OUT NUMBER,
4301 x_num_matches OUT NUMBER
4302 ) IS
4303
4304 BEGIN
4305 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);
4306 END;
4307 PROCEDURE find_party_details (
4308 p_rule_id IN NUMBER,
4309 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
4310 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
4311 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
4312 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
4313 p_restrict_sql IN VARCHAR2,
4314 p_match_type IN VARCHAR2,
4315 p_search_merged IN VARCHAR2,
4316 x_search_ctx_id OUT NUMBER,
4317 x_num_matches OUT NUMBER
4318 ) IS
4319
4320 BEGIN
4321 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4322 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);
4323 END IF;
4324 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4325 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);
4326 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);
4327 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);
4328 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);
4329 END IF;
4330 find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,
4331 p_restrict_sql,p_match_type,p_search_merged,null,null, null,'Y',
4332 x_search_ctx_id,x_num_matches);
4333 DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
4334 AND NOT EXISTS
4335 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);
4336 DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
4337 AND NOT EXISTS
4338 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);
4339 DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
4340 AND NOT EXISTS
4341 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);
4342 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4343 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);
4344 END IF;
4345 EXCEPTION
4346 WHEN FND_API.G_EXC_ERROR THEN
4347 RAISE FND_API.G_EXC_ERROR;
4348 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4349 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4350 WHEN OTHERS THEN
4351 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4352 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_party_details');
4353 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4354 FND_MSG_PUB.ADD;
4355 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4356 END find_party_details;
4357
4358 PROCEDURE find_duplicate_parties (
4359 p_rule_id IN NUMBER,
4360 p_party_id IN NUMBER,
4361 p_restrict_sql IN VARCHAR2,
4362 p_match_type IN VARCHAR2,
4363 p_dup_batch_id IN NUMBER,
4364 p_search_merged IN VARCHAR2,
4365 x_dup_set_id OUT NUMBER,
4366 x_search_ctx_id OUT NUMBER,
4367 x_num_matches OUT NUMBER
4368 ) IS
4369 l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4370 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4371 l_contact_list HZ_PARTY_SEARCH.contact_list;
4372 l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4373 l_match_idx NUMBER;
4374
4375 --Fix for bug 4417124
4376 l_use_contact_addr_info BOOLEAN := TRUE;
4377 l_use_contact_cpt_info BOOLEAN := TRUE;
4378 l_use_contact_addr_flag VARCHAR2(1) := 'Y';
4379 l_use_contact_cpt_flag VARCHAR2(1) := 'Y';
4380
4381 BEGIN
4382
4383 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4384 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);
4385 END IF;
4386 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4387 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);
4388 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);
4389 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);
4390 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);
4391 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);
4392 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);
4393 END IF;
4394
4395 --Fix for bug 4417124
4396
4397 SELECT use_contact_addr_flag, use_contact_cpt_flag
4398 INTO l_use_contact_addr_flag, l_use_contact_cpt_flag
4399 FROM hz_match_rules_b
4400 WHERE match_rule_id = 8;
4401
4402 IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
4403 l_use_contact_addr_info := FALSE;
4404 END IF;
4405
4406 IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
4407 l_use_contact_cpt_info := FALSE;
4408 END IF;
4409
4410 --End fix for bug 4417124
4411
4412 get_party_for_search(
4413 p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);
4414
4415 IF NOT check_prim_cond (l_party_rec,
4416 l_party_site_list,
4417 l_contact_list,
4418 l_cpt_list) THEN
4419 x_dup_set_id:=NULL;
4420 x_search_ctx_id:=NULL;
4421 x_num_matches:=0;
4422 RETURN;
4423 END IF;
4424 x_dup_set_id := NULL;
4425 IF p_dup_batch_id IS NOT NULL THEN
4426 SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;
4427 END IF;
4428
4429 --Fix for bug 4417124
4430 IF l_party_rec.PARTY_TYPE = 'PERSON' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN
4431 find_persons(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 ELSE
4435 find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4436 p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4437 x_search_ctx_id,x_num_matches);
4438 END IF;
4439
4440 IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN
4441 INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,
4442 STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,
4443 LAST_UPDATE_DATE, LAST_UPDATED_BY)
4444 VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, 'SYSBATCH',
4445 'PARTY_MERGE', hz_utility_pub.created_by, hz_utility_pub.creation_date,
4446 hz_utility_pub.last_update_login, hz_utility_pub.last_update_date,
4447 hz_utility_pub.user_id);
4448
4449 INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
4450 MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
4451 LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID)
4452 VALUES (p_party_id,x_dup_set_id,0,0,
4453 'Y',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,
4454 hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,
4455 hz_utility_pub.user_id,p_dup_batch_id);
4456 ELSE
4457 x_dup_set_id := NULL;
4458 END IF;
4459 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4460 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);
4461 END IF;
4462 EXCEPTION
4463 WHEN FND_API.G_EXC_ERROR THEN
4464 RAISE FND_API.G_EXC_ERROR;
4465 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4466 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4467 WHEN OTHERS THEN
4468 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4469 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_duplicate_parties');
4470 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4471 FND_MSG_PUB.ADD;
4472 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4473 END find_duplicate_parties;
4474
4475 PROCEDURE find_duplicate_party_sites (
4476 p_rule_id IN NUMBER,
4477 p_party_site_id IN NUMBER,
4478 p_party_id IN NUMBER,
4479 p_restrict_sql IN VARCHAR2,
4480 p_match_type IN VARCHAR2,
4481 x_search_ctx_id OUT NUMBER,
4482 x_num_matches OUT NUMBER
4483 ) IS
4484
4485 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4486 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4487 l_contact_list HZ_PARTY_SEARCH.contact_list;
4488 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4489 contact_point_ids HZ_PARTY_SEARCH.IDList;
4490 p_party_site_list HZ_PARTY_SEARCH.IDList;
4491 p_contact_ids HZ_PARTY_SEARCH.IDList;
4492 l_match_idx NUMBER;
4493 cursor get_cpts_for_party_sites is select contact_point_id
4494 from hz_contact_points
4495 where owner_table_name = 'HZ_PARTY_SITES'
4496 and primary_flag='Y'
4497 and owner_table_id = p_party_site_id;
4498 BEGIN
4499 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4500 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);
4501 END IF;
4502 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4503 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);
4504 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);
4505 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);
4506 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);
4507 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);
4508 END IF;
4509 p_party_site_list(1) := p_party_site_id;
4510 OPEN get_cpts_for_party_sites;
4511 LOOP
4512 FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids;
4513 EXIT WHEN get_cpts_for_party_sites%NOTFOUND;
4514 END LOOP;
4515 CLOSE get_cpts_for_party_sites;
4516
4517 get_search_criteria (
4518 null,
4519 p_party_site_list,
4520 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4521 contact_point_ids,
4522 l_party_search_rec,
4523 l_party_site_list,
4524 l_contact_list,
4525 l_contact_point_list) ;
4526 IF NOT check_prim_cond (l_party_search_rec,
4527 l_party_site_list,
4528 l_contact_list,
4529 l_contact_point_list) THEN
4530 x_search_ctx_id:=NULL;
4531 x_num_matches:=0;
4532 RETURN;
4533 END IF;
4534
4535 get_matching_party_sites (p_rule_id,
4536 p_party_id,
4537 l_party_site_list,
4538 l_contact_point_list,
4539 p_restrict_sql,
4540 p_match_type,
4541 p_party_site_id,
4542 x_search_ctx_id,
4543 x_num_matches);
4544 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4545 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);
4546 END IF;
4547 EXCEPTION
4548 WHEN FND_API.G_EXC_ERROR THEN
4549 RAISE FND_API.G_EXC_ERROR;
4550 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4551 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4552 WHEN OTHERS THEN
4553 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4554 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_duplicate_party_sites');
4555 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4556 FND_MSG_PUB.ADD;
4557 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4558 END find_duplicate_party_sites;
4559
4560 PROCEDURE find_duplicate_contacts (
4561 p_rule_id IN NUMBER,
4562 p_org_contact_id IN NUMBER,
4563 p_party_id IN NUMBER,
4564 p_restrict_sql IN VARCHAR2,
4565 p_match_type IN VARCHAR2,
4566 x_search_ctx_id OUT NUMBER,
4567 x_num_matches OUT NUMBER
4568 ) IS
4569
4570 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4571 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4572 l_contact_list HZ_PARTY_SEARCH.contact_list;
4573 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4574 contact_point_ids HZ_PARTY_SEARCH.IDList;
4575 p_party_site_list HZ_PARTY_SEARCH.IDList;
4576 p_contact_ids HZ_PARTY_SEARCH.IDList;
4577 l_match_idx NUMBER;
4578 cursor get_cpt_for_contact_id is select contact_point_id
4579 from hz_org_contacts a, hz_relationships b, hz_contact_points c
4580 where a.party_relationship_id = b.relationship_id
4581 and c.owner_table_name = 'HZ_PARTIES'
4582 and c.primary_flag='Y'
4583 and c.owner_table_id = b.party_id
4584 and b.directional_flag = 'F'
4585 and a.org_contact_id = p_org_contact_id;
4586 BEGIN
4587 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4588 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);
4589 END IF;
4590 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4591 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);
4592 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);
4593 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);
4594 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);
4595 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);
4596 END IF;
4597 p_contact_ids(1) := p_org_contact_id;
4598 OPEN get_cpt_for_contact_id;
4599 LOOP
4600 FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids;
4601 EXIT WHEN get_cpt_for_contact_id%NOTFOUND;
4602 END LOOP;
4603 CLOSE get_cpt_for_contact_id;
4604
4605 get_search_criteria (
4606 null,
4607 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4608 p_contact_ids,
4609 contact_point_ids,
4610 l_party_search_rec,
4611 l_party_site_list,
4612 l_contact_list,
4613 l_contact_point_list) ;
4614 IF NOT check_prim_cond (l_party_search_rec,
4615 l_party_site_list,
4616 l_contact_list,
4617 l_contact_point_list) THEN
4618 x_search_ctx_id:=NULL;
4619 x_num_matches:=0;
4620 RETURN;
4621 END IF;
4622
4623 get_matching_contacts (p_rule_id,
4624 p_party_id,
4625 l_contact_list,
4626 l_contact_point_list,
4627 p_restrict_sql,
4628 p_match_type,
4629 p_org_contact_id,
4630 x_search_ctx_id,
4631 x_num_matches);
4632
4633 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4634 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);
4635 END IF;
4636 EXCEPTION
4637 WHEN FND_API.G_EXC_ERROR THEN
4638 RAISE FND_API.G_EXC_ERROR;
4639 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4640 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4641 WHEN OTHERS THEN
4642 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4643 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_duplicate_contacts');
4644 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4645 FND_MSG_PUB.ADD;
4646 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4647 END find_duplicate_contacts;
4648
4649 PROCEDURE find_duplicate_contact_points (
4650 p_rule_id IN NUMBER,
4651 p_contact_point_id IN NUMBER,
4652 p_party_id IN NUMBER,
4653 p_restrict_sql IN VARCHAR2,
4654 p_match_type IN VARCHAR2,
4655 x_search_ctx_id OUT NUMBER,
4656 x_num_matches OUT NUMBER
4657 ) IS
4658 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4659 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4660 l_contact_list HZ_PARTY_SEARCH.contact_list;
4661 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4662 contact_point_ids HZ_PARTY_SEARCH.IDList;
4663 p_party_site_list HZ_PARTY_SEARCH.IDList;
4664 p_contact_ids HZ_PARTY_SEARCH.IDList;
4665 l_match_idx NUMBER;
4666
4667 BEGIN
4668 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4669 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);
4670 END IF;
4671 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4672 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);
4673 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);
4674 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);
4675 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);
4676 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);
4677 END IF;
4678 contact_point_ids(1) := p_contact_point_id;
4679 get_search_criteria (
4680 null,
4681 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4682 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4683 contact_point_ids,
4684 l_party_search_rec,
4685 l_party_site_list,
4686 l_contact_list,
4687 l_contact_point_list );
4688
4689 IF NOT check_prim_cond (l_party_search_rec,
4690 l_party_site_list,
4691 l_contact_list,
4692 l_contact_point_list) THEN
4693 x_search_ctx_id:=NULL;
4694 x_num_matches:=0;
4695 RETURN;
4696 END IF;
4697 get_matching_contact_points (
4698 p_rule_id,
4699 p_party_id,
4700 l_contact_point_list,
4701 p_restrict_sql,
4702 p_match_type,
4703 p_contact_point_id,
4704 x_search_ctx_id,
4705 x_num_matches );
4706 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4707 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);
4708 END IF;
4709 EXCEPTION
4710 WHEN FND_API.G_EXC_ERROR THEN
4711 RAISE FND_API.G_EXC_ERROR;
4712 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4713 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4714 WHEN OTHERS THEN
4715 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4716 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.find_duplicate_contact_points');
4717 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4718 FND_MSG_PUB.ADD;
4719 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4720 END find_duplicate_contact_points;
4721
4722 PROCEDURE find_parties_dynamic (
4723 p_rule_id IN NUMBER,
4724 p_attrib_id1 IN NUMBER,
4725 p_attrib_id2 IN NUMBER,
4726 p_attrib_id3 IN NUMBER,
4727 p_attrib_id4 IN NUMBER,
4728 p_attrib_id5 IN NUMBER,
4729 p_attrib_id6 IN NUMBER,
4730 p_attrib_id7 IN NUMBER,
4731 p_attrib_id8 IN NUMBER,
4732 p_attrib_id9 IN NUMBER,
4733 p_attrib_id10 IN NUMBER,
4734 p_attrib_id11 IN NUMBER,
4735 p_attrib_id12 IN NUMBER,
4736 p_attrib_id13 IN NUMBER,
4737 p_attrib_id14 IN NUMBER,
4738 p_attrib_id15 IN NUMBER,
4739 p_attrib_id16 IN NUMBER,
4740 p_attrib_id17 IN NUMBER,
4741 p_attrib_id18 IN NUMBER,
4742 p_attrib_id19 IN NUMBER,
4743 p_attrib_id20 IN NUMBER,
4744 p_attrib_val1 IN VARCHAR2,
4745 p_attrib_val2 IN VARCHAR2,
4746 p_attrib_val3 IN VARCHAR2,
4747 p_attrib_val4 IN VARCHAR2,
4748 p_attrib_val5 IN VARCHAR2,
4749 p_attrib_val6 IN VARCHAR2,
4750 p_attrib_val7 IN VARCHAR2,
4751 p_attrib_val8 IN VARCHAR2,
4752 p_attrib_val9 IN VARCHAR2,
4753 p_attrib_val10 IN VARCHAR2,
4754 p_attrib_val11 IN VARCHAR2,
4755 p_attrib_val12 IN VARCHAR2,
4756 p_attrib_val13 IN VARCHAR2,
4757 p_attrib_val14 IN VARCHAR2,
4758 p_attrib_val15 IN VARCHAR2,
4759 p_attrib_val16 IN VARCHAR2,
4760 p_attrib_val17 IN VARCHAR2,
4761 p_attrib_val18 IN VARCHAR2,
4762 p_attrib_val19 IN VARCHAR2,
4763 p_attrib_val20 IN VARCHAR2,
4764 p_restrict_sql IN VARCHAR2,
4765 p_match_type IN VARCHAR2,
4766 p_search_merged IN VARCHAR2,
4767 x_search_ctx_id OUT NUMBER,
4768 x_num_matches OUT NUMBER
4769 ) IS
4770 BEGIN
4771 call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,
4772 p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,
4773 p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,
4774 p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,
4775 p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,
4776 p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,
4777 p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,
4778 p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,
4779 p_restrict_sql,'FIND_PARTIES',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);
4780 END;
4781
4782 PROCEDURE call_api_dynamic (
4783 p_rule_id IN NUMBER,
4784 p_attrib_id1 IN NUMBER,
4785 p_attrib_id2 IN NUMBER,
4786 p_attrib_id3 IN NUMBER,
4787 p_attrib_id4 IN NUMBER,
4788 p_attrib_id5 IN NUMBER,
4789 p_attrib_id6 IN NUMBER,
4790 p_attrib_id7 IN NUMBER,
4791 p_attrib_id8 IN NUMBER,
4792 p_attrib_id9 IN NUMBER,
4793 p_attrib_id10 IN NUMBER,
4794 p_attrib_id11 IN NUMBER,
4795 p_attrib_id12 IN NUMBER,
4796 p_attrib_id13 IN NUMBER,
4797 p_attrib_id14 IN NUMBER,
4798 p_attrib_id15 IN NUMBER,
4799 p_attrib_id16 IN NUMBER,
4800 p_attrib_id17 IN NUMBER,
4801 p_attrib_id18 IN NUMBER,
4802 p_attrib_id19 IN NUMBER,
4803 p_attrib_id20 IN NUMBER,
4804 p_attrib_val1 IN VARCHAR2,
4805 p_attrib_val2 IN VARCHAR2,
4806 p_attrib_val3 IN VARCHAR2,
4807 p_attrib_val4 IN VARCHAR2,
4808 p_attrib_val5 IN VARCHAR2,
4809 p_attrib_val6 IN VARCHAR2,
4810 p_attrib_val7 IN VARCHAR2,
4811 p_attrib_val8 IN VARCHAR2,
4812 p_attrib_val9 IN VARCHAR2,
4813 p_attrib_val10 IN VARCHAR2,
4814 p_attrib_val11 IN VARCHAR2,
4815 p_attrib_val12 IN VARCHAR2,
4816 p_attrib_val13 IN VARCHAR2,
4817 p_attrib_val14 IN VARCHAR2,
4818 p_attrib_val15 IN VARCHAR2,
4819 p_attrib_val16 IN VARCHAR2,
4820 p_attrib_val17 IN VARCHAR2,
4821 p_attrib_val18 IN VARCHAR2,
4822 p_attrib_val19 IN VARCHAR2,
4823 p_attrib_val20 IN VARCHAR2,
4824 p_restrict_sql IN VARCHAR2,
4825 p_api_name IN VARCHAR2,
4826 p_match_type IN VARCHAR2,
4827 p_party_id IN NUMBER,
4828 p_search_merged IN VARCHAR2,
4829 x_search_ctx_id OUT NUMBER,
4830 x_num_matches OUT NUMBER
4831 ) IS
4832 TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
4833 l_match_idx NUMBER;
4834 AttrVals AttrList;
4835 l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4836 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4837 l_contact_list HZ_PARTY_SEARCH.contact_list;
4838 l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4839 l_dup_set_id NUMBER;
4840 l_idx NUMBER;
4841 l_cpt_type VARCHAR2(255);
4842 FIRST BOOLEAN := TRUE;
4843
4844 BEGIN
4845 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4846 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);
4847 END IF;
4848
4849 IF p_attrib_id1 IS NOT NULL THEN
4850 AttrVals(p_attrib_id1):=p_attrib_val1;
4851 END IF;
4852 IF p_attrib_id2 IS NOT NULL THEN
4853 AttrVals(p_attrib_id2):=p_attrib_val2;
4854 END IF;
4855 IF p_attrib_id3 IS NOT NULL THEN
4856 AttrVals(p_attrib_id3):=p_attrib_val3;
4857 END IF;
4858 IF p_attrib_id4 IS NOT NULL THEN
4859 AttrVals(p_attrib_id4):=p_attrib_val4;
4860 END IF;
4861 IF p_attrib_id5 IS NOT NULL THEN
4862 AttrVals(p_attrib_id5):=p_attrib_val5;
4863 END IF;
4864 IF p_attrib_id6 IS NOT NULL THEN
4865 AttrVals(p_attrib_id6):=p_attrib_val6;
4866 END IF;
4867 IF p_attrib_id7 IS NOT NULL THEN
4868 AttrVals(p_attrib_id7):=p_attrib_val7;
4869 END IF;
4870 IF p_attrib_id8 IS NOT NULL THEN
4871 AttrVals(p_attrib_id8):=p_attrib_val8;
4872 END IF;
4873 IF p_attrib_id9 IS NOT NULL THEN
4874 AttrVals(p_attrib_id9):=p_attrib_val9;
4875 END IF;
4876 IF p_attrib_id10 IS NOT NULL THEN
4877 AttrVals(p_attrib_id10):=p_attrib_val10;
4878 END IF;
4879 IF p_attrib_id11 IS NOT NULL THEN
4880 AttrVals(p_attrib_id11):=p_attrib_val11;
4881 END IF;
4882 IF p_attrib_id12 IS NOT NULL THEN
4883 AttrVals(p_attrib_id12):=p_attrib_val12;
4884 END IF;
4885 IF p_attrib_id13 IS NOT NULL THEN
4886 AttrVals(p_attrib_id13):=p_attrib_val13;
4887 END IF;
4888 IF p_attrib_id14 IS NOT NULL THEN
4889 AttrVals(p_attrib_id14):=p_attrib_val14;
4890 END IF;
4891 IF p_attrib_id15 IS NOT NULL THEN
4892 AttrVals(p_attrib_id15):=p_attrib_val15;
4893 END IF;
4894 IF p_attrib_id16 IS NOT NULL THEN
4895 AttrVals(p_attrib_id16):=p_attrib_val16;
4896 END IF;
4897 IF p_attrib_id17 IS NOT NULL THEN
4898 AttrVals(p_attrib_id17):=p_attrib_val17;
4899 END IF;
4900 IF p_attrib_id18 IS NOT NULL THEN
4901 AttrVals(p_attrib_id18):=p_attrib_val18;
4902 END IF;
4903 IF p_attrib_id19 IS NOT NULL THEN
4904 AttrVals(p_attrib_id19):=p_attrib_val19;
4905 END IF;
4906 IF p_attrib_id20 IS NOT NULL THEN
4907 AttrVals(p_attrib_id20):=p_attrib_val20;
4908 END IF;
4909 IF AttrVals.EXISTS(15) THEN
4910 l_party_rec.PARTY_ALL_NAMES:= AttrVals(15);
4911 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4912 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);
4913 END IF;
4914 END IF;
4915
4916 IF AttrVals.EXISTS(16) THEN
4917 l_party_rec.DUNS_NUMBER_C:= AttrVals(16);
4918 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4919 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);
4920 END IF;
4921 END IF;
4922
4923 IF AttrVals.EXISTS(27) THEN
4924 l_party_site_list(1).ADDRESS:= AttrVals(27);
4925 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4926 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);
4927 END IF;
4928 END IF;
4929
4930 IF AttrVals.EXISTS(29) THEN
4931 l_party_site_list(1).CITY:= AttrVals(29);
4932 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4933 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);
4934 END IF;
4935 END IF;
4936
4937 IF AttrVals.EXISTS(30) THEN
4938 l_party_site_list(1).POSTAL_CODE:= AttrVals(30);
4939 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4940 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);
4941 END IF;
4942 END IF;
4943
4944 IF AttrVals.EXISTS(32) THEN
4945 l_party_site_list(1).STATE:= AttrVals(32);
4946 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4947 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);
4948 END IF;
4949 END IF;
4950
4951 IF AttrVals.EXISTS(39) THEN
4952 l_contact_list(1).CONTACT_NAME:= AttrVals(39);
4953 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4954 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);
4955 END IF;
4956 END IF;
4957
4958 IF AttrVals.EXISTS(44) THEN
4959 l_cpt_type := 'PHONE';
4960 FIRST := FALSE;
4961 FOR I in 1..l_cpt_list.COUNT LOOP
4962 IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
4963 l_cpt_list(I).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
4964 FIRST := TRUE;
4965 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4966 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);
4967 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);
4968 END IF;
4969 END IF;
4970 END LOOP;
4971 IF not FIRST THEN
4972 l_idx := l_cpt_list.COUNT+1;
4973 l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
4974 l_cpt_list(l_idx).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
4975 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4976 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);
4977 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);
4978 END IF;
4979 END IF;
4980 END IF;
4981
4982 IF AttrVals.EXISTS(48) THEN
4983 l_cpt_type := 'EMAIL';
4984 FIRST := FALSE;
4985 FOR I in 1..l_cpt_list.COUNT LOOP
4986 IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
4987 l_cpt_list(I).EMAIL_ADDRESS:= AttrVals(48);
4988 FIRST := TRUE;
4989 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4990 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);
4991 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);
4992 END IF;
4993 END IF;
4994 END LOOP;
4995 IF not FIRST THEN
4996 l_idx := l_cpt_list.COUNT+1;
4997 l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
4998 l_cpt_list(l_idx).EMAIL_ADDRESS:= AttrVals(48);
4999 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5000 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);
5001 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);
5002 END IF;
5003 END IF;
5004 END IF;
5005
5006 IF AttrVals.EXISTS(49) THEN
5007 l_cpt_type := 'WEB';
5008 FIRST := FALSE;
5009 FOR I in 1..l_cpt_list.COUNT LOOP
5010 IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5011 l_cpt_list(I).URL:= AttrVals(49);
5012 FIRST := TRUE;
5013 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5014 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);
5015 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);
5016 END IF;
5017 END IF;
5018 END LOOP;
5019 IF not FIRST THEN
5020 l_idx := l_cpt_list.COUNT+1;
5021 l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5022 l_cpt_list(l_idx).URL:= AttrVals(49);
5023 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5024 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);
5025 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);
5026 END IF;
5027 END IF;
5028 END IF;
5029
5030
5031 IF AttrVals.EXISTS(14) THEN
5032 l_party_rec.PARTY_TYPE:= AttrVals(14);
5033 END IF;
5034 IF upper(p_api_name) = 'FIND_PARTIES' THEN
5035 find_parties(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,NULL,NULL,NULL,'N',
5037 x_search_ctx_id,x_num_matches);
5038 ELSIF upper(p_api_name) = 'FIND_PARTY_DETAILS' THEN
5039 find_party_details(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,
5041 x_search_ctx_id,x_num_matches);
5042 ELSIF upper(p_api_name) = 'FIND_PERSONS' THEN
5043 find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5044 p_restrict_sql,p_match_type,p_search_merged,'N',
5045 x_search_ctx_id,x_num_matches);
5046 ELSIF upper(p_api_name) = 'GET_MATCHING_PARTY_SITES' THEN
5047 get_matching_party_sites(p_rule_id,p_party_id,l_party_site_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_CONTACTS' THEN
5051 get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,
5052 p_restrict_sql,p_match_type,NULL,
5053 x_search_ctx_id,x_num_matches);
5054 ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACT_POINTS' THEN
5055 get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,
5056 p_restrict_sql,p_match_type,NULL,
5057 x_search_ctx_id,x_num_matches);
5058 END IF;
5059 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5060 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);
5061 END IF;
5062 EXCEPTION
5063 WHEN FND_API.G_EXC_ERROR THEN
5064 RAISE FND_API.G_EXC_ERROR;
5065 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5066 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5067 WHEN OTHERS THEN
5068 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5069 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.call_api_dynamic');
5070 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5071 FND_MSG_PUB.ADD;
5072 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5073 END call_api_dynamic;
5074
5075
5076 PROCEDURE get_matching_party_sites (
5077 p_rule_id IN NUMBER,
5078 p_party_id IN NUMBER,
5079 p_party_site_list IN HZ_PARTY_SEARCH.PARTY_SITE_LIST,
5080 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5081 p_restrict_sql IN VARCHAR2,
5082 p_match_type IN VARCHAR2,
5083 p_dup_party_site_id IN NUMBER,
5084 x_search_ctx_id OUT NUMBER,
5085 x_num_matches OUT NUMBER
5086 ) IS
5087
5088 -- Strings to hold the generated Intermedia query strings
5089 l_party_contains_str VARCHAR2(32000);
5090 l_match_idx NUMBER;
5091 l_party_site_contains_str VARCHAR2(32000);
5092 l_contact_contains_str VARCHAR2(32000);
5093 l_contact_pt_contains_str VARCHAR2(32000);
5094 l_tmp VARCHAR2(32000);
5095
5096 -- Other local variables
5097 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5098 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5099 -- For Score calculation
5100 l_max_score NUMBER;
5101 l_entered_max_score NUMBER;
5102 FIRST BOOLEAN;
5103 l_search_ctx_id NUMBER; -- Generated Search Context ID
5104
5105 l_TX9 VARCHAR2(2000);
5106 l_TX1 VARCHAR2(2000);
5107 l_TX3 VARCHAR2(2000);
5108 l_TX15 VARCHAR2(2000);
5109 l_TX4 VARCHAR2(2000);
5110 l_TX10 VARCHAR2(2000);
5111 l_TX11 VARCHAR2(2000);
5112 l_TX5 VARCHAR2(2000);
5113 l_TX8 VARCHAR2(2000);
5114 l_TX14 VARCHAR2(2000);
5115 l_TX6 VARCHAR2(2000);
5116 H_SCORES HZ_PARTY_SEARCH.score_list;
5117
5118 l_score NUMBER;
5119 l_idx NUMBER;
5120 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5121 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5122 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5123 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5124 l_party_id NUMBER;
5125 l_ps_party_id NUMBER;
5126 l_ct_party_id NUMBER;
5127 l_cpt_party_id NUMBER;
5128 l_cpt_ps_id NUMBER;
5129 l_cpt_contact_id NUMBER;
5130 l_cpt_type VARCHAR2(100);
5131 l_cpt_level VARCHAR2(100);
5132 l_party_site_id NUMBER;
5133 l_org_contact_id NUMBER;
5134 l_contact_pt_id NUMBER;
5135 l_cpt_level VARCHAR2(100);
5136 l_ps_contact_id NUMBER;
5137 l_party_max_score NUMBER;
5138 l_ps_max_score NUMBER;
5139 l_contact_max_score NUMBER;
5140 l_cpt_max_score NUMBER;
5141
5142 defpt NUMBER :=0;
5143 defps NUMBER :=0;
5144 defct NUMBER :=0;
5145 defcpt NUMBER :=0;
5146 l_index NUMBER;
5147 l_match_ps_list HZ_PARTY_SEARCH.IDList;
5148 l_cnt NUMBER:=1;
5149
5150
5151 BEGIN
5152 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5153 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);
5154 END IF;
5155 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5156 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);
5157 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);
5158 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);
5159 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);
5160 END IF;
5161
5162 -- ************************************
5163 -- STEP 1. Initialization and error checks
5164
5165 l_match_str := ' AND ';
5166 IF p_match_type = 'AND' THEN
5167 l_match_str := ' AND ';
5168 ELSIF p_match_type = 'OR' THEN
5169 l_match_str := ' OR ';
5170 END IF;
5171 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);
5172 g_score_until_thresh := false;
5173 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5174
5175 -- ************************************************************
5176 -- STEP 2. Setup of intermedia query strings for Acquisition query
5177 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
5178 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5179 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);
5180
5181 -- Setup Search Context ID
5182 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5183 x_search_ctx_id := l_search_ctx_id;
5184
5185 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5186 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);
5187 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);
5188 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);
5189 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);
5190 END IF;
5191 IF l_party_site_contains_str IS NULL THEN
5192 defps := 1;
5193 END IF;
5194 IF l_contact_pt_contains_str IS NULL THEN
5195 defcpt := 1;
5196 END IF;
5197
5198 IF l_party_site_contains_str IS NOT NULL THEN
5199 open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,'N', 'N',l_party_site_cur);
5200 LOOP
5201 FETCH l_party_site_cur INTO
5202 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;
5203 EXIT WHEN l_party_site_cur%NOTFOUND;
5204 IF (p_dup_party_site_id IS NULL OR (
5205 p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND
5206 l_party_site_id <> p_dup_party_site_id)) THEN
5207 l_index := map_id(l_party_site_id);
5208 l_match_ps_list(l_cnt):= l_party_site_id ;
5209 l_cnt:=l_cnt+1;
5210 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX3,l_TX4,l_TX9,l_TX10,l_TX11,l_TX14,l_TX15);
5211 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);
5212 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5213 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);
5214 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);
5215 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);
5216 END IF;
5217 END IF;
5218 END LOOP;
5219 CLOSE l_party_site_cur;
5220 END IF;
5221
5222 IF l_contact_pt_contains_str IS NOT NULL THEN
5223 SAVEPOINT eval_start;
5224 IF l_match_str = ' AND ' OR (
5225 ((l_cpt_max_score/l_entered_max_score)<(78/460))
5226 ) THEN
5227 FORALL I in 1..l_match_ps_list.COUNT
5228 INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5229 values (l_search_ctx_id,l_match_ps_list(I));
5230 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');
5231 ELSE
5232 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5233 END IF;
5234 LOOP
5235 FETCH l_contact_pt_cur INTO
5236 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;
5237 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5238 IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (
5239 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
5240 l_index := map_id(l_cpt_ps_id);
5241 IF l_match_str = ' OR ' THEN
5242 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5243 IF NOT H_SCORES.EXISTS(l_index) THEN
5244 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);
5245 ELSE
5246 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5247 H_SCORES(l_index).TOTAL_SCORE :=
5248 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5249 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5250 END IF;
5251 END IF;
5252 ELSE
5253 IF H_SCORES.EXISTS(l_index) THEN
5254 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5255 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5256 H_SCORES(l_index).TOTAL_SCORE :=
5257 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5258 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5259 END IF;
5260 ELSIF defps=1 THEN
5261 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5262 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);
5263 END IF;
5264 END IF;
5265 END IF;
5266 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5267 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);
5268 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);
5269 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);
5270 END IF;
5271 END LOOP;
5272 CLOSE l_contact_pt_cur;
5273 ROLLBACK TO eval_start;
5274 END IF;
5275 x_num_matches := 0;
5276 l_party_site_id := H_SCORES.FIRST;
5277 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5278 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);
5279 END IF;
5280 WHILE l_party_site_id IS NOT NULL LOOP
5281 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5282 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);
5283 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);
5284 END IF;
5285 IF l_match_str = ' OR ' THEN
5286 IF (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=( 78/460 ) THEN
5287 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE)
5288 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);
5289 x_num_matches := x_num_matches+1;
5290 END IF;
5291 ELSE
5292 IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND
5293 H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND
5294 (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=(78/460) THEN
5295 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE)
5296 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));
5297 x_num_matches := x_num_matches+1;
5298 END IF;
5299 END IF;
5300 l_party_site_id:=H_SCORES.NEXT(l_party_site_id);
5301 END LOOP;
5302 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5303 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);
5304 END IF;
5305 EXCEPTION
5306 WHEN FND_API.G_EXC_ERROR THEN
5307 RAISE FND_API.G_EXC_ERROR;
5308 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5309 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5310 WHEN OTHERS THEN
5311 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5312 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.get_matching_party_sites');
5313 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5314 FND_MSG_PUB.ADD;
5315 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5316 END get_matching_party_sites;
5317
5318
5319 PROCEDURE get_matching_contacts (
5320 p_rule_id IN NUMBER,
5321 p_party_id IN NUMBER,
5322 p_contact_list IN HZ_PARTY_SEARCH.CONTACT_LIST,
5323 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5324 p_restrict_sql IN VARCHAR2,
5325 p_match_type IN VARCHAR2,
5326 p_dup_contact_id IN NUMBER,
5327 x_search_ctx_id OUT NUMBER,
5328 x_num_matches OUT NUMBER
5329 ) IS
5330
5331 -- Strings to hold the generated Intermedia query strings
5332 l_party_contains_str VARCHAR2(32000);
5333 l_party_site_contains_str VARCHAR2(32000);
5334 l_contact_contains_str VARCHAR2(32000);
5335 l_contact_pt_contains_str VARCHAR2(32000);
5336 l_tmp VARCHAR2(32000);
5337
5338 -- Other local variables
5339 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5340 l_match_idx NUMBER;
5341 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5342 -- For Score calculation
5343 l_max_score NUMBER;
5344 l_entered_max_score NUMBER;
5345 FIRST BOOLEAN;
5346 l_search_ctx_id NUMBER; -- Generated Search Context ID
5347
5348 l_TX1 VARCHAR2(2000);
5349 l_TX5 VARCHAR2(2000);
5350 l_TX8 VARCHAR2(2000);
5351 l_TX6 VARCHAR2(2000);
5352 H_SCORES HZ_PARTY_SEARCH.score_list;
5353
5354 l_score NUMBER;
5355 l_idx NUMBER;
5356 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5357 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5358 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5359 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5360 l_party_id NUMBER;
5361 l_ps_party_id NUMBER;
5362 l_ct_party_id NUMBER;
5363 l_cpt_party_id NUMBER;
5364 l_cpt_ps_id NUMBER;
5365 l_cpt_contact_id NUMBER;
5366 l_cpt_type VARCHAR2(100);
5367 l_party_site_id NUMBER;
5368 l_org_contact_id NUMBER;
5369 l_contact_pt_id NUMBER;
5370
5371 defpt NUMBER :=0;
5372 defps NUMBER :=0;
5373 defct NUMBER :=0;
5374 defcpt NUMBER :=0;
5375 l_index NUMBER;
5376 l_party_max_score NUMBER;
5377 l_ps_max_score NUMBER;
5378 l_contact_max_score NUMBER;
5379 l_cpt_max_score NUMBER;
5380 l_match_contact_list HZ_PARTY_SEARCH.IDList;
5381 l_cnt NUMBER:=1;
5382
5383
5384 BEGIN
5385 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5386 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);
5387 END IF;
5388 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5389 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);
5390 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);
5391 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);
5392 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);
5393 END IF;
5394
5395 -- ************************************
5396 -- STEP 1. Initialization and error checks
5397
5398 l_match_str := ' AND ';
5399 IF p_match_type = 'AND' THEN
5400 l_match_str := ' AND ';
5401 ELSIF p_match_type = 'OR' THEN
5402 l_match_str := ' OR ';
5403 END IF;
5404 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);
5405 g_score_until_thresh := false;
5406 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5407
5408 -- ************************************************************
5409 -- STEP 2. Setup of intermedia query strings for Acquisition query
5410 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5411 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5412 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);
5413
5414 -- Setup Search Context ID
5415 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5416 x_search_ctx_id := l_search_ctx_id;
5417
5418 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5419 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);
5420 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);
5421 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);
5422 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);
5423 END IF;
5424 IF l_contact_contains_str IS NULL THEN
5425 defct := 1;
5426 END IF;
5427 IF l_contact_pt_contains_str IS NULL THEN
5428 defcpt := 1;
5429 END IF;
5430
5431 IF l_contact_contains_str IS NOT NULL THEN
5432 open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);
5433 LOOP
5434 FETCH l_contact_cur INTO
5435 l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
5436 EXIT WHEN l_contact_cur%NOTFOUND;
5437 IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN
5438 l_index := map_id(l_org_contact_id);
5439 l_match_contact_list(l_cnt):=l_org_contact_id;
5440 l_cnt:=l_cnt+1;
5441 l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
5442 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);
5443 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5444 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);
5445 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);
5446 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);
5447 END IF;
5448 END IF;
5449 END LOOP;
5450 CLOSE l_contact_cur;
5451 END IF;
5452
5453 IF l_contact_pt_contains_str IS NOT NULL THEN
5454 SAVEPOINT eval_start;
5455 IF l_match_str = ' AND ' OR (
5456 ((l_cpt_max_score/l_entered_max_score)<(78/460))
5457 ) THEN
5458 FORALL I in 1..l_match_contact_list.COUNT
5459 INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5460 values (l_search_ctx_id,l_match_contact_list(I));
5461 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');
5462 ELSE
5463 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5464 END IF;
5465 LOOP
5466 FETCH l_contact_pt_cur INTO
5467 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;
5468 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5469 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
5470 l_index := map_id(l_cpt_contact_id);
5471 IF l_match_str = ' OR ' THEN
5472 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5473 IF NOT H_SCORES.EXISTS(l_index) THEN
5474 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);
5475 ELSE
5476 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5477 H_SCORES(l_index).TOTAL_SCORE :=
5478 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5479 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5480 END IF;
5481 END IF;
5482 ELSE
5483 IF H_SCORES.EXISTS(l_index) THEN
5484 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5485 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5486 H_SCORES(l_index).TOTAL_SCORE :=
5487 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5488 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5489 END IF;
5490 ELSIF defps=1 THEN
5491 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5492 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);
5493 END IF;
5494 END IF;
5495 END IF;
5496 END LOOP;
5497 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5498 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);
5499 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);
5500 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);
5501 END IF;
5502 CLOSE l_contact_pt_cur;
5503 END IF;
5504 x_num_matches := 0;
5505 l_org_contact_id := H_SCORES.FIRST;
5506 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5507 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);
5508 END IF;
5509 WHILE l_org_contact_id IS NOT NULL LOOP
5510 IF l_match_str = ' OR ' THEN
5511 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5512 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);
5513 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);
5514 END IF;
5515 IF (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(78/460) THEN
5516 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE)
5517 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);
5518 x_num_matches := x_num_matches+1;
5519 END IF;
5520 ELSE
5521 IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND
5522 H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND
5523 (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(78/460) THEN
5524 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE)
5525 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));
5526 x_num_matches := x_num_matches+1;
5527 END IF;
5528 END IF;
5529 l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);
5530 END LOOP;
5531 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5532 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);
5533 END IF;
5534 EXCEPTION
5535 WHEN FND_API.G_EXC_ERROR THEN
5536 RAISE FND_API.G_EXC_ERROR;
5537 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5538 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5539 WHEN OTHERS THEN
5540 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5541 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.get_matching_contacts');
5542 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5543 FND_MSG_PUB.ADD;
5544 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5545 END get_matching_contacts;
5546
5547
5548 PROCEDURE get_matching_contact_points (
5549 p_rule_id IN NUMBER,
5550 p_party_id IN NUMBER,
5551 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5552 p_restrict_sql IN VARCHAR2,
5553 p_match_type IN VARCHAR2,
5554 p_dup_contact_point_id IN NUMBER,
5555 x_search_ctx_id OUT NUMBER,
5556 x_num_matches OUT NUMBER
5557 ) IS
5558
5559
5560 -- Strings to hold the generated Intermedia query strings
5561 l_contact_pt_contains_str VARCHAR2(32000);
5562 l_tmp VARCHAR2(32000);
5563
5564 -- Other local variables
5565 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5566 l_match_idx NUMBER;
5567 -- For Score calculation
5568 l_entered_max_score NUMBER;
5569 l_search_ctx_id NUMBER; -- Generated Search Context ID
5570
5571 l_TX1 VARCHAR2(2000);
5572 l_TX5 VARCHAR2(2000);
5573 l_TX8 VARCHAR2(2000);
5574 l_TX6 VARCHAR2(2000);
5575
5576 l_score NUMBER;
5577 l_idx NUMBER;
5578 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5579 l_cpt_party_id NUMBER;
5580 l_cpt_ps_id NUMBER;
5581 l_cpt_contact_id NUMBER;
5582 l_contact_pt_id NUMBER;
5583 l_cpt_type VARCHAR2(100);
5584 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
5585 H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;
5586 H_SCORE HZ_PARTY_SEARCH.IDList;
5587
5588 cnt NUMBER :=0;
5589 l_party_max_score NUMBER;
5590 l_ps_max_score NUMBER;
5591 l_contact_max_score NUMBER;
5592 l_cpt_max_score NUMBER;
5593
5594
5595 BEGIN
5596 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5597 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);
5598 END IF;
5599 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5600 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);
5601 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);
5602 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);
5603 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);
5604 END IF;
5605
5606 -- ************************************
5607 -- STEP 1. Initialization and error checks
5608
5609 l_match_str := ' AND ';
5610 IF p_match_type = 'AND' THEN
5611 l_match_str := ' AND ';
5612 ELSIF p_match_type = 'OR' THEN
5613 l_match_str := ' OR ';
5614 END IF;
5615 l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,
5616 HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
5617 p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
5618 g_score_until_thresh := false;
5619 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5620
5621 -- ************************************************************
5622 -- STEP 2. Setup of intermedia query strings for Acquisition query
5623 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5624 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);
5625
5626 -- Setup Search Context ID
5627 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5628 x_search_ctx_id := l_search_ctx_id;
5629 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5630 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);
5631 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);
5632 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);
5633 END IF;
5634
5635 IF l_contact_pt_contains_str IS NOT NULL THEN
5636 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5637 cnt := 1;
5638 LOOP
5639 FETCH l_contact_pt_cur INTO
5640 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;
5641 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5642 IF (p_dup_contact_point_id IS NULL OR (
5643 p_dup_contact_point_id IS NOT NULL AND
5644 l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND
5645 p_dup_contact_point_id <> l_contact_pt_id)) THEN
5646 H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;
5647 H_PARTY_ID(cnt) := l_cpt_party_id;
5648 H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5649 cnt := cnt+1;
5650 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5651 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);
5652 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);
5653 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);
5654 END IF;
5655 END IF;
5656 END LOOP;
5657 CLOSE l_contact_pt_cur;
5658 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5659 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);
5660 END IF;
5661 x_num_matches := 0;
5662 FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP
5663 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5664 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);
5665 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);
5666 END IF;
5667 IF (H_SCORE(I)/l_entered_max_score) >= (78/460) THEN
5668 INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
5669 l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);
5670 x_num_matches := x_num_matches + 1;
5671 END IF;
5672 END LOOP;
5673 END IF;
5674 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5675 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);
5676 END IF;
5677 EXCEPTION
5678 WHEN FND_API.G_EXC_ERROR THEN
5679 RAISE FND_API.G_EXC_ERROR;
5680 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5681 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5682 WHEN OTHERS THEN
5683 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5684 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.get_matching_contact_points');
5685 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5686 FND_MSG_PUB.ADD;
5687 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5688 END get_matching_contact_points;
5689
5690 /**********************************************************
5691 This procedure finds the score details for a specific party that
5692 matched
5693
5694 **********************************************************/
5695
5696 PROCEDURE get_score_details (
5697 p_rule_id IN NUMBER,
5698 p_party_id IN NUMBER,
5699 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
5700 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
5701 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
5702 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
5703 x_search_ctx_id IN OUT NUMBER
5704 ) IS
5705
5706 -- Strings to hold the generated Intermedia query strings
5707 l_party_contains_str VARCHAR2(32000);
5708 l_party_site_contains_str VARCHAR2(32000);
5709 l_contact_contains_str VARCHAR2(32000);
5710 l_contact_pt_contains_str VARCHAR2(32000);
5711 l_tmp VARCHAR2(32000);
5712
5713 -- Other local variables
5714 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5715 -- For Score calculation
5716 l_max_score NUMBER;
5717 l_entered_max_score NUMBER;
5718 FIRST BOOLEAN;
5719 l_search_ctx_id NUMBER; -- Generated Search Context ID
5720
5721 l_TX39 VARCHAR2(2000);
5722 l_max_TX39 VARCHAR2(2000);
5723 l_TX41 VARCHAR2(2000);
5724 l_max_TX41 VARCHAR2(2000);
5725 l_TX9 VARCHAR2(2000);
5726 l_max_TX9 VARCHAR2(2000);
5727 l_TX1 VARCHAR2(2000);
5728 l_max_TX1 VARCHAR2(2000);
5729 l_TX3 VARCHAR2(2000);
5730 l_max_TX3 VARCHAR2(2000);
5731 l_TX15 VARCHAR2(2000);
5732 l_max_TX15 VARCHAR2(2000);
5733 l_TX4 VARCHAR2(2000);
5734 l_max_TX4 VARCHAR2(2000);
5735 l_TX10 VARCHAR2(2000);
5736 l_max_TX10 VARCHAR2(2000);
5737 l_TX11 VARCHAR2(2000);
5738 l_max_TX11 VARCHAR2(2000);
5739 l_TX5 VARCHAR2(2000);
5740 l_max_TX5 VARCHAR2(2000);
5741 l_TX40 VARCHAR2(2000);
5742 l_max_TX40 VARCHAR2(2000);
5743 l_TX8 VARCHAR2(2000);
5744 l_max_TX8 VARCHAR2(2000);
5745 l_TX14 VARCHAR2(2000);
5746 l_max_TX14 VARCHAR2(2000);
5747 l_TX6 VARCHAR2(2000);
5748 l_max_TX6 VARCHAR2(2000);
5749 H_SCORES HZ_PARTY_SEARCH.score_list;
5750
5751 l_score NUMBER;
5752 l_match_idx NUMBER;
5753 l_idx NUMBER;
5754 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5755 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5756 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5757 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5758 l_party_id NUMBER;
5759 l_ps_party_id NUMBER;
5760 l_ct_party_id NUMBER;
5761 l_cpt_party_id NUMBER;
5762 l_cpt_ps_id NUMBER;
5763 l_cpt_contact_id NUMBER;
5764 l_cpt_type VARCHAR2(100);
5765 l_party_site_id NUMBER;
5766 l_org_contact_id NUMBER;
5767 l_contact_pt_id NUMBER;
5768 l_ps_contact_id NUMBER;
5769 l_max_id NUMBER;
5770 l_max_idx NUMBER;
5771
5772 l_index NUMBER;
5773 l_party_max_score NUMBER;
5774 l_ps_max_score NUMBER;
5775 l_contact_max_score NUMBER;
5776 l_cpt_max_score NUMBER;
5777
5778 --Fix for bug 4417124
5779 l_use_contact_addr_info BOOLEAN:=TRUE;
5780 l_use_contact_cpt_info BOOLEAN:=TRUE;
5781 l_TX35_new VARCHAR2(4000);
5782
5783 BEGIN
5784
5785 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5786 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);
5787 END IF;
5788 -- ************************************
5789 -- STEP 1. Initialization and error checks
5790
5791 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);
5792 g_score_until_thresh := false;
5793 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5794 -- ************************************************************
5795 -- STEP 2. Setup of intermedia query strings for Acquisition query
5796 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
5797 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5798 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5799 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
5800
5801 -- Setup Search Context ID
5802 IF x_search_ctx_id IS NULL THEN
5803 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5804 x_search_ctx_id := l_search_ctx_id;
5805 ELSE
5806 l_search_ctx_id := x_search_ctx_id;
5807 END IF;
5808
5809 open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);
5810 LOOP
5811 FETCH l_party_cur INTO
5812 l_party_id , l_TX39, l_TX40, l_TX41;
5813 EXIT WHEN l_party_cur%NOTFOUND;
5814 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);
5815 END LOOP;
5816 CLOSE l_party_cur;
5817
5818 IF l_party_site_contains_str IS NOT NULL THEN
5819 l_max_score := 0;
5820 l_max_id := 0;
5821 l_max_idx := 0;
5822 IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_addr_info THEN
5823 open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'Y','N',l_party_site_cur);
5824 ELSE
5825 open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'N','N',l_party_site_cur);
5826 END IF;
5827 LOOP
5828 FETCH l_party_site_cur INTO
5829 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;
5830 EXIT WHEN l_party_site_cur%NOTFOUND;
5831 l_score := GET_PARTY_SITES_SCORE(l_match_idx,l_TX3,l_TX4,l_TX9,l_TX10,l_TX11,l_TX14,l_TX15);
5832 IF l_score > l_max_score THEN
5833 l_max_score := l_score;
5834 l_max_id := l_party_site_id;
5835 l_max_idx := l_match_idx;
5836 l_max_TX9 := l_TX9;
5837 l_max_TX3 := l_TX3;
5838 l_max_TX15 := l_TX15;
5839 l_max_TX4 := l_TX4;
5840 l_max_TX10 := l_TX10;
5841 l_max_TX11 := l_TX11;
5842 l_max_TX14 := l_TX14;
5843 END IF;
5844 END LOOP;
5845 CLOSE l_party_site_cur;
5846 IF l_max_score>0 THEN
5847 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);
5848 END IF;
5849 END IF;
5850
5851 IF l_contact_contains_str IS NOT NULL THEN
5852 l_max_score := 0;
5853 l_max_id := 0;
5854 l_max_idx := 0;
5855 open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);
5856 LOOP
5857 FETCH l_contact_cur INTO
5858 l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
5859 EXIT WHEN l_contact_cur%NOTFOUND;
5860 l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
5861 IF l_score > l_max_score THEN
5862 l_max_score := l_score;
5863 l_max_id := l_org_contact_id;
5864 l_max_idx := l_match_idx;
5865 l_max_TX5 := l_TX5;
5866 l_max_TX6 := l_TX6;
5867 END IF;
5868 END LOOP;
5869 CLOSE l_contact_cur;
5870 IF l_max_score>0 THEN
5871 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);
5872 END IF;
5873 END IF;
5874
5875 IF l_contact_pt_contains_str IS NOT NULL THEN
5876 l_max_score := 0;
5877 l_max_id := 0;
5878 l_max_idx := 0;
5879 IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_cpt_info THEN
5880 open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'Y','N',l_contact_pt_cur);
5881 ELSE
5882 open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'N','N',l_contact_pt_cur);
5883 END IF;
5884 LOOP
5885 FETCH l_contact_pt_cur INTO
5886 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;
5887 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5888 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX5,l_TX6,l_TX8);
5889 IF l_score > l_max_score THEN
5890 l_max_score := l_score;
5891 l_max_id := l_contact_pt_id;
5892 l_max_idx := l_match_idx;
5893 l_max_TX1 := l_TX1;
5894 l_max_TX5 := l_TX5;
5895 l_max_TX8 := l_TX8;
5896 l_max_TX6 := l_TX6;
5897 END IF;
5898 END LOOP;
5899 IF l_max_score>0 THEN
5900 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);
5901 END IF;
5902 CLOSE l_contact_pt_cur;
5903 END IF;
5904 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5905 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);
5906 END IF;
5907 EXCEPTION
5908 WHEN FND_API.G_EXC_ERROR THEN
5909 RAISE FND_API.G_EXC_ERROR;
5910 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5911 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5912 WHEN OTHERS THEN
5913 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5914 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_8.get_score_details');
5915 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5916 FND_MSG_PUB.ADD;
5917 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5918 END get_score_details;
5919
5920
5921 /************************************************
5922 This procedure retrieves the match rule attributes into
5923 the search record structures
5924 ************************************************/
5925
5926 PROCEDURE get_party_for_search (
5927 p_party_id IN NUMBER,
5928 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
5929 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
5930 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
5931 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
5932 ) IS
5933 l_party_id NUMBER;
5934 l_party_site_ids HZ_PARTY_SEARCH.IDList;
5935 l_contact_ids HZ_PARTY_SEARCH.IDList;
5936 l_contact_pt_ids HZ_PARTY_SEARCH.IDList;
5937 ps NUMBER :=1;
5938 cpt NUMBER :=1;
5939 ct NUMBER :=1;
5940 l_use_contact_info varchar2(1);
5941 BEGIN
5942
5943 l_use_contact_info := 'Y';
5944 IF nvl(FND_PROFILE.VALUE('HZ_DQM_REL_PARTY_MATCH'),'N')='Y' THEN
5945 l_use_contact_info := 'N';
5946 END IF;
5947 l_party_id := p_party_id;
5948 FOR PARTY_SITES IN (
5949 SELECT party_site_id FROM (
5950 SELECT party_site_id,identifying_address_flag
5951 FROM HZ_PARTY_SITES
5952 WHERE party_id = p_party_id
5953 AND (status is null OR status = 'A')
5954 AND identifying_address_flag='Y'
5955 UNION
5956
5957 SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
5958 FROM HZ_PARTY_SITES
5959 WHERE party_id = p_party_id
5960 AND (status is null OR status = 'A')
5961 AND (identifying_address_flag IS NULL OR identifying_address_flag = 'N')
5962 AND ROWNUM<6
5963 UNION
5964
5965 SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
5966 FROM HZ_PARTY_SITES
5967 WHERE (status is null OR status = 'A')
5968 AND party_id in (
5969 SELECT party_id
5970 FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
5971 WHERE HZ_RELATIONSHIPS.object_id = p_party_id
5972 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5973 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5974 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5975 and l_use_contact_info = 'Y'
5976 )
5977 AND ROWNUM<6
5978 ) order by identifying_address_flag desc
5979 ) LOOP
5980 l_party_site_ids(ps) := PARTY_SITES.party_site_id;
5981 ps:=ps+1;
5982 END LOOP;
5983 FOR CONTACTS IN (
5984 SELECT org_contact_id
5985 FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
5986 WHERE HZ_RELATIONSHIPS.object_id = p_party_id
5987 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
5988 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
5989 AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
5990 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
5991 AND ROWNUM<6
5992 ) LOOP
5993 l_contact_ids(ct) := CONTACTS.org_contact_id;
5994 ct := ct+1;
5995 END LOOP;
5996 FOR CONTACT_POINTS IN (
5997 SELECT CONTACT_POINT_ID
5998 FROM HZ_CONTACT_POINTS
5999 WHERE PRIMARY_FLAG = 'Y'
6000 AND owner_table_name = 'HZ_PARTIES'
6001 AND owner_table_id = p_party_id
6002
6003 UNION
6004
6005 SELECT CONTACT_POINT_ID
6006 FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
6007 WHERE PRIMARY_FLAG = 'Y'
6008 AND owner_table_name = 'HZ_PARTIES'
6009 AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id
6010 AND HZ_RELATIONSHIPS.object_id = p_party_id
6011 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6012 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6013 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6014 and l_use_contact_info = 'Y'
6015 AND ROWNUM<6
6016 UNION
6017
6018 SELECT CONTACT_POINT_ID
6019 FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES
6020 WHERE PRIMARY_FLAG = 'Y'
6021 AND owner_table_name = 'HZ_PARTY_SITES'
6022 AND owner_table_id = party_site_id
6023 AND PARTY_ID = p_party_id
6024 AND IDENTIFYING_ADDRESS_FLAG = 'Y') LOOP
6025 l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;
6026 cpt := cpt+1;
6027 END LOOP;
6028 get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,
6029 x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);
6030 EXCEPTION
6031 WHEN FND_API.G_EXC_ERROR THEN
6032 RAISE FND_API.G_EXC_ERROR;
6033 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6034 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6035 WHEN OTHERS THEN
6036 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6037 FND_MESSAGE.SET_TOKEN('PROC','get_party_for_search');
6038 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6039 FND_MSG_PUB.ADD;
6040 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6041 END get_party_for_search;
6042
6043 PROCEDURE get_search_criteria (
6044 p_party_id IN NUMBER,
6045 p_party_site_ids IN HZ_PARTY_SEARCH.IDList,
6046 p_contact_ids IN HZ_PARTY_SEARCH.IDList,
6047 p_contact_pt_ids IN HZ_PARTY_SEARCH.IDList,
6048 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
6049 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
6050 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
6051 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6052 ) IS
6053 BEGIN
6054
6055 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6056 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);
6057 END IF;
6058 IF p_party_id IS NOT NULL THEN
6059 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6060 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);
6061 END IF;
6062 get_party_rec(p_party_id, x_party_search_rec);
6063 END IF;
6064 IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN
6065 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6066 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);
6067 END IF;
6068 get_party_site_rec(p_party_site_ids, x_party_site_list);
6069 END IF;
6070 IF p_contact_ids IS NOT NULL AND p_contact_ids.COUNT>0 THEN
6071 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6072 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);
6073 END IF;
6074 get_contact_rec(p_contact_ids, x_contact_list);
6075 END IF;
6076 IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN
6077 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6078 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);
6079 END IF;
6080 get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);
6081 END IF;
6082 EXCEPTION
6083 WHEN FND_API.G_EXC_ERROR THEN
6084 RAISE FND_API.G_EXC_ERROR;
6085 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6086 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6087 WHEN OTHERS THEN
6088 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6089 FND_MESSAGE.SET_TOKEN('PROC','get_search_criteria');
6090 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6091 FND_MSG_PUB.ADD;
6092 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6093 END get_search_criteria;
6094
6095
6096 /************************************************
6097 This procedure retrieves the match rule party attributes into
6098 the party search record structure
6099 ************************************************/
6100
6101 PROCEDURE get_party_rec (
6102 p_party_id IN NUMBER,
6103 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type
6104 ) IS
6105 l_party_type VARCHAR2(255);
6106 BEGIN
6107
6108 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6109 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);
6110 END IF;
6111 SELECT PARTY_TYPE INTO l_party_type
6112 FROM HZ_PARTIES
6113 WHERE PARTY_ID = p_party_id;
6114
6115 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6116 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);
6117 END IF;
6118 IF l_party_type = 'ORGANIZATION' THEN
6119 SELECT
6120 translate(HZ_ORGANIZATION_PROFILES.DUNS_NUMBER_C, '%',' ')
6121 INTO
6122 x_party_search_rec.DUNS_NUMBER_C
6123 FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES
6124 WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id
6125 AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL
6126 AND HZ_PARTIES.party_id = p_party_id;
6127 ELSIF l_party_type = 'PERSON' THEN
6128 NULL;
6129 END IF;
6130 x_party_search_rec.PARTY_TYPE := l_party_type;
6131 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6132 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);
6133 END IF;
6134 x_party_search_rec.PARTY_ALL_NAMES:=
6135 HZ_PARTY_ACQUIRE.get_known_as(p_party_id , 'PARTY','PARTY_ALL_NAMES');
6136
6137 EXCEPTION
6138 WHEN OTHERS THEN
6139 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6140 FND_MESSAGE.SET_TOKEN('PROC','get_party_rec');
6141 FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_id);
6142 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6143 FND_MSG_PUB.ADD;
6144 RAISE FND_API.G_EXC_ERROR;
6145 END get_party_rec;
6146
6147 /************************************************
6148 This procedure retrieves the match rule party site attributes into
6149 the party site search record structure
6150 ************************************************/
6151
6152 PROCEDURE get_party_site_rec (
6153 p_party_site_ids IN HZ_PARTY_SEARCH.IDList,
6154 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list
6155 ) IS
6156 CURSOR c_party_sites(cp_party_site_id NUMBER) IS
6157 SELECT party_site_id
6158 ,translate(HZ_LOCATIONS.CITY, '%',' ')
6159 ,translate(HZ_LOCATIONS.POSTAL_CODE, '%',' ')
6160 ,translate(HZ_LOCATIONS.STATE, '%',' ')
6161 FROM HZ_PARTY_SITES, HZ_LOCATIONS
6162 WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id
6163 AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;
6164
6165 I NUMBER;
6166 J NUMBER:=1;
6167 l_party_site_id NUMBER;
6168
6169 BEGIN
6170
6171 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6172 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);
6173 END IF;
6174 FOR I IN 1..p_party_site_ids.COUNT LOOP
6175 l_party_site_id := p_party_site_ids(I);
6176 OPEN c_party_sites(p_party_site_ids(I));
6177 LOOP
6178 FETCH c_party_sites INTO
6179 l_party_site_id
6180 ,x_party_site_list(J).CITY
6181 ,x_party_site_list(J).POSTAL_CODE
6182 ,x_party_site_list(J).STATE
6183 ;
6184 EXIT WHEN c_party_sites%NOTFOUND;
6185
6186 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6187 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);
6188 END IF;
6189 x_party_site_list(J).ADDRESS:=
6190 HZ_PARTY_ACQUIRE.get_address(l_party_site_id , 'PARTY_SITES','ADDRESS');
6191 J:=J+1;
6192
6193 END LOOP;
6194 CLOSE c_party_sites;
6195 END LOOP;
6196
6197 EXCEPTION
6198 WHEN OTHERS THEN
6199 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6200 FND_MESSAGE.SET_TOKEN('PROC','get_party_site_rec');
6201 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_party_site_id);
6202 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6203 FND_MSG_PUB.ADD;
6204 RAISE FND_API.G_EXC_ERROR;
6205 END get_party_site_rec;
6206
6207 /************************************************
6208 This procedure retrieves the match rule contact attributes into
6209 the contact search record structure
6210 ************************************************/
6211
6212 PROCEDURE get_contact_rec (
6213 p_contact_ids IN HZ_PARTY_SEARCH.IDList,
6214 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list
6215 ) IS
6216 CURSOR c_contacts(cp_org_contact_id NUMBER) IS
6217 SELECT org_contact_id
6218 FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES
6219 WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id
6220 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6221 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6222 AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
6223 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6224 AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id
6225 AND HZ_PERSON_PROFILES.effective_end_date IS NULL;
6226
6227 I NUMBER;
6228 l_org_contact_id NUMBER;
6229 J NUMBER:=1;
6230 BEGIN
6231
6232 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6233 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);
6234 END IF;
6235 FOR I IN 1..p_contact_ids.COUNT LOOP
6236 l_org_contact_id := p_contact_ids(I);
6237 OPEN c_contacts(p_contact_ids(I));
6238 LOOP
6239 FETCH c_contacts INTO
6240 l_org_contact_id
6241 ;
6242 EXIT WHEN c_contacts%NOTFOUND;
6243
6244 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6245 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);
6246 END IF;
6247 x_contact_list(J).CONTACT_NAME:=
6248 HZ_PARTY_ACQUIRE.get_contact_name(l_org_contact_id , 'CONTACTS','CONTACT_NAME');
6249
6250 J:=J+1;
6251 END LOOP;
6252 CLOSE c_contacts;
6253 END LOOP;
6254
6255 EXCEPTION
6256 WHEN OTHERS THEN
6257 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6258 FND_MESSAGE.SET_TOKEN('PROC','get_contact_rec');
6259 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_org_contact_id);
6260 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6261 FND_MSG_PUB.ADD;
6262 RAISE FND_API.G_EXC_ERROR;
6263 END get_contact_rec;
6264
6265 /************************************************
6266 This procedure retrieves the match rule contact point attributes into
6267 the contact point search record structure
6268 ************************************************/
6269
6270 PROCEDURE get_contact_point_rec (
6271 p_contact_point_ids IN HZ_PARTY_SEARCH.IDList,
6272 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6273 ) IS
6274
6275 -- Cursor to fetch primary contact points for party
6276 CURSOR c_cpts(cp_contact_point_id NUMBER) IS
6277 SELECT contact_point_id, contact_point_type
6278 ,translate(HZ_CONTACT_POINTS.EMAIL_ADDRESS, '%',' ')
6279 ,translate(HZ_CONTACT_POINTS.URL, '%',' ')
6280 FROM HZ_CONTACT_POINTS
6281 WHERE contact_point_id = cp_contact_point_id;
6282
6283 I NUMBER;
6284 l_contact_point_id NUMBER;
6285 J NUMBER:=1;
6286 BEGIN
6287
6288 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6289 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);
6290 END IF;
6291 FOR I in 1..p_contact_point_ids.COUNT LOOP
6292 l_contact_point_id := p_contact_point_ids(I);
6293 OPEN c_cpts(p_contact_point_ids(I));
6294 LOOP
6295 FETCH c_cpts INTO
6296 l_contact_point_id, x_contact_point_list(J).contact_point_type
6297 ,x_contact_point_list(J).EMAIL_ADDRESS
6298 ,x_contact_point_list(J).URL
6299 ;
6300 EXIT WHEN c_cpts%NOTFOUND;
6301
6302 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6303 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);
6304 END IF;
6305 x_contact_point_list(J).FLEX_FORMAT_PHONE_NUMBER:=
6306 HZ_PARTY_ACQUIRE.get_phone_number(l_contact_point_id , 'CONTACT_POINTS','FLEX_FORMAT_PHONE_NUMBER');
6307 J:=J+1;
6308
6309 END LOOP;
6310 CLOSE c_cpts;
6311 END LOOP;
6312
6313 EXCEPTION
6314 WHEN OTHERS THEN
6315 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6316 FND_MESSAGE.SET_TOKEN('PROC','get_contact_point_rec');
6317 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_contact_point_id);
6318 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6319 FND_MSG_PUB.ADD;
6320 RAISE FND_API.G_EXC_ERROR;
6321 END get_contact_point_rec;
6322
6323 /************************************************
6324 This procedure maps a search record from the logical
6325 record structure to the stage schema structure
6326 for the PARTY Entity after applying
6327 the defined transformations
6328 ************************************************/
6329
6330 PROCEDURE MAP_PARTY_REC(
6331 p_search_ctx IN BOOLEAN,
6332 p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
6333 x_entered_max_score OUT NUMBER,
6334 x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type
6335 ) IS
6336 tmp VARCHAR2(4000);
6337 l_party_name VARCHAR2(4000);
6338 BEGIN
6339 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6340 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);
6341 END IF;
6342 IF p_search_ctx THEN
6343 x_stage_rec.TX8 := NULL;
6344 g_other_party_level_attribs:=FALSE;
6345 IF p_search_rec.DUNS_NUMBER_C IS NOT NULL
6346 THEN
6347 g_other_party_level_attribs:=TRUE;
6348 END IF;
6349 x_entered_max_score:=0;
6350 IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6351 x_entered_max_score := x_entered_max_score+40;
6352 END IF;
6353 IF p_search_rec.DUNS_NUMBER_C IS NOT NULL THEN
6354 x_entered_max_score := x_entered_max_score+80;
6355 END IF;
6356 END IF;
6357 IF p_search_ctx THEN
6358 IF p_search_rec.DUNS_NUMBER_C IS NOT NULL THEN
6359 x_stage_rec.TX41 :=
6360 HZ_TRANS_PKG.EXACT(
6361 p_search_rec.DUNS_NUMBER_C
6362 ,null,'DUNS_NUMBER_C'
6363 ,'PARTY');
6364 ELSE
6365 x_stage_rec.TX41 := '';
6366 END IF;
6367 END IF;
6368 IF p_search_rec.DUNS_NUMBER_C IS NOT NULL THEN
6369 x_stage_rec.TX41 :=
6370 lpad(x_stage_rec.TX41,9,'0');
6371 END IF;
6372 IF p_search_ctx THEN
6373 IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6374 x_stage_rec.TX40 :=
6375 HZ_TRANS_PKG.WRNAMES_CLEANSE(
6376 p_search_rec.PARTY_ALL_NAMES
6377 ,null,'PARTY_ALL_NAMES'
6378 ,'PARTY','SEARCH');
6379 ELSE
6380 x_stage_rec.TX40 := '';
6381 END IF;
6382 ELSE
6383 IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6384 tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
6385 x_stage_rec.TX40
6386 ,null,'PARTY_ALL_NAMES'
6387 ,'PARTY','SCORE');
6388 IF tmp IS NOT NULL THEN
6389 x_stage_rec.TX40 := tmp;
6390 END IF;
6391 END IF;
6392 END IF;
6393 IF p_search_ctx THEN
6394 IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6395 x_stage_rec.TX39 :=
6396 HZ_TRANS_PKG.WRNAMES_EXACT(
6397 p_search_rec.PARTY_ALL_NAMES
6398 ,null,'PARTY_ALL_NAMES'
6399 ,'PARTY','SEARCH');
6400 ELSE
6401 x_stage_rec.TX39 := '';
6402 END IF;
6403 ELSE
6404 IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6405 tmp :=HZ_TRANS_PKG.WRNAMES_EXACT(
6406 x_stage_rec.TX39
6407 ,null,'PARTY_ALL_NAMES'
6408 ,'PARTY','SCORE');
6409 IF tmp IS NOT NULL THEN
6410 x_stage_rec.TX39 := tmp;
6411 END IF;
6412 END IF;
6413 END IF;
6414 IF p_search_ctx THEN
6415 IF p_search_rec.PARTY_TYPE IS NOT NULL THEN
6416 x_stage_rec.TX36 :=
6417 HZ_TRANS_PKG.EXACT(
6418 p_search_rec.PARTY_TYPE
6419 ,null,'PARTY_TYPE'
6420 ,'PARTY');
6421 ELSE
6422 x_stage_rec.TX36 := '';
6423 END IF;
6424 END IF;
6425 l_party_name := p_search_rec.PARTY_NAME;
6426 IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6427 l_party_name := p_search_rec.PARTY_ALL_NAMES;
6428 END IF;
6429 IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN
6430 x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,'PARTY_NAME','PARTY','SEARCH');
6431 END IF;
6432 EXCEPTION
6433 WHEN OTHERS THEN
6434 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6435 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_REC');
6436 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6437 FND_MSG_PUB.ADD;
6438 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6439 END;
6440
6441
6442 /************************************************
6443 This procedure maps a search record from the logical
6444 record structure to the stage schema structure
6445 for the PARTY_SITES Entity after applying
6446 the defined transformations
6447 ************************************************/
6448
6449 PROCEDURE MAP_PARTY_SITE_REC(
6450 p_search_ctx IN BOOLEAN,
6451 p_search_list IN HZ_PARTY_SEARCH.party_site_list,
6452 x_entered_max_score OUT NUMBER,
6453 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list
6454 ) IS
6455 l_current_max_score NUMBER;
6456 tmp VARCHAR2(4000);
6457 BEGIN
6458 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6459 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);
6460 END IF;
6461 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6462 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);
6463 END IF;
6464 IF p_search_ctx THEN
6465 g_ps_den_only:=TRUE;
6466 x_entered_max_score:=0;
6467 FOR I IN 1..p_search_list.COUNT LOOP
6468 l_current_max_score:=0;
6469 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6470 l_current_max_score := l_current_max_score+40;
6471 g_ps_den_only:=FALSE;
6472 END IF;
6473 IF p_search_list(I).CITY IS NOT NULL THEN
6474 l_current_max_score := l_current_max_score+30;
6475 END IF;
6476 IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN
6477 l_current_max_score := l_current_max_score+30;
6478 END IF;
6479 IF p_search_list(I).STATE IS NOT NULL THEN
6480 l_current_max_score := l_current_max_score+20;
6481 END IF;
6482 IF l_current_max_score>x_entered_max_score THEN
6483 x_entered_max_score:=l_current_max_score;
6484 END IF;
6485 END LOOP;
6486 END IF;
6487 FOR I IN 1..p_search_list.COUNT LOOP
6488 IF p_search_ctx THEN
6489 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6490 x_stage_list(I).TX4 :=
6491 HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6492 p_search_list(I).ADDRESS
6493 ,null,'ADDRESS'
6494 ,'PARTY_SITES','SEARCH');
6495 ELSE
6496 x_stage_list(I).TX4 := '';
6497 END IF;
6498 ELSE
6499 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6500 tmp := HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6501 x_stage_list(I).TX4
6502 ,null,'ADDRESS'
6503 ,'PARTY_SITES','SCORE');
6504 IF tmp IS NOT NULL THEN
6505 x_stage_list(I).TX4 := tmp;
6506 END IF;
6507 END IF;
6508 END IF;
6509 END LOOP;
6510 FOR I IN 1..p_search_list.COUNT LOOP
6511 IF p_search_ctx THEN
6512 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6513 x_stage_list(I).TX3 :=
6514 HZ_TRANS_PKG.WRADDRESS_EXACT(
6515 p_search_list(I).ADDRESS
6516 ,null,'ADDRESS'
6517 ,'PARTY_SITES','SEARCH');
6518 ELSE
6519 x_stage_list(I).TX3 := '';
6520 END IF;
6521 ELSE
6522 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6523 tmp := HZ_TRANS_PKG.WRADDRESS_EXACT(
6524 x_stage_list(I).TX3
6525 ,null,'ADDRESS'
6526 ,'PARTY_SITES','SCORE');
6527 IF tmp IS NOT NULL THEN
6528 x_stage_list(I).TX3 := tmp;
6529 END IF;
6530 END IF;
6531 END IF;
6532 END LOOP;
6533 FOR I IN 1..p_search_list.COUNT LOOP
6534 IF p_search_ctx THEN
6535 IF p_search_list(I).CITY IS NOT NULL THEN
6536 x_stage_list(I).TX10 :=
6537 HZ_TRANS_PKG.CLEANSE(
6538 p_search_list(I).CITY
6539 ,null,'CITY'
6540 ,'PARTY_SITES');
6541 ELSE
6542 x_stage_list(I).TX10 := '';
6543 END IF;
6544 END IF;
6545 END LOOP;
6546 FOR I IN 1..p_search_list.COUNT LOOP
6547 IF p_search_ctx THEN
6548 IF p_search_list(I).CITY IS NOT NULL THEN
6549 x_stage_list(I).TX9 :=
6550 HZ_TRANS_PKG.EXACT(
6551 p_search_list(I).CITY
6552 ,null,'CITY'
6553 ,'PARTY_SITES');
6554 ELSE
6555 x_stage_list(I).TX9 := '';
6556 END IF;
6557 END IF;
6558 END LOOP;
6559 FOR I IN 1..p_search_list.COUNT LOOP
6560 IF p_search_ctx THEN
6561 IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN
6562 x_stage_list(I).TX11 :=
6563 HZ_TRANS_PKG.RM_SPLCHAR(
6564 p_search_list(I).POSTAL_CODE
6565 ,null,'POSTAL_CODE'
6566 ,'PARTY_SITES','SEARCH');
6567 ELSE
6568 x_stage_list(I).TX11 := '';
6569 END IF;
6570 ELSE
6571 IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN
6572 tmp := HZ_TRANS_PKG.RM_SPLCHAR(
6573 x_stage_list(I).TX11
6574 ,null,'POSTAL_CODE'
6575 ,'PARTY_SITES','SCORE');
6576 IF tmp IS NOT NULL THEN
6577 x_stage_list(I).TX11 := tmp;
6578 END IF;
6579 END IF;
6580 END IF;
6581 END LOOP;
6582 FOR I IN 1..p_search_list.COUNT LOOP
6583 IF p_search_ctx THEN
6584 IF p_search_list(I).STATE IS NOT NULL THEN
6585 x_stage_list(I).TX15 :=
6586 HZ_TRANS_PKG.WRSTATE_CLEANSE(
6587 p_search_list(I).STATE
6588 ,null,'STATE'
6589 ,'PARTY_SITES','SEARCH');
6590 ELSE
6591 x_stage_list(I).TX15 := '';
6592 END IF;
6593 ELSE
6594 IF p_search_list(I).STATE IS NOT NULL THEN
6595 tmp := HZ_TRANS_PKG.WRSTATE_CLEANSE(
6596 x_stage_list(I).TX15
6597 ,null,'STATE'
6598 ,'PARTY_SITES','SCORE');
6599 IF tmp IS NOT NULL THEN
6600 x_stage_list(I).TX15 := tmp;
6601 END IF;
6602 END IF;
6603 END IF;
6604 END LOOP;
6605 FOR I IN 1..p_search_list.COUNT LOOP
6606 IF p_search_ctx THEN
6607 IF p_search_list(I).STATE IS NOT NULL THEN
6608 x_stage_list(I).TX14 :=
6609 HZ_TRANS_PKG.WRSTATE_EXACT(
6610 p_search_list(I).STATE
6611 ,null,'STATE'
6612 ,'PARTY_SITES','SEARCH');
6613 ELSE
6614 x_stage_list(I).TX14 := '';
6615 END IF;
6616 ELSE
6617 IF p_search_list(I).STATE IS NOT NULL THEN
6618 tmp := HZ_TRANS_PKG.WRSTATE_EXACT(
6619 x_stage_list(I).TX14
6620 ,null,'STATE'
6621 ,'PARTY_SITES','SCORE');
6622 IF tmp IS NOT NULL THEN
6623 x_stage_list(I).TX14 := tmp;
6624 END IF;
6625 END IF;
6626 END IF;
6627 END LOOP;
6628 EXCEPTION
6629 WHEN OTHERS THEN
6630 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6631 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_SITE_REC');
6632 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6633 FND_MSG_PUB.ADD;
6634 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6635 END;
6636
6637
6638 /************************************************
6639 This procedure maps a search record from the logical
6640 record structure to the stage schema structure
6641 for the CONTACTS Entity after applying
6642 the defined transformations
6643 ************************************************/
6644
6645 PROCEDURE MAP_CONTACT_REC(
6646 p_search_ctx IN BOOLEAN,
6647 p_search_list IN HZ_PARTY_SEARCH.contact_list,
6648 x_entered_max_score OUT NUMBER,
6649 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list
6650 ) IS
6651 l_current_max_score NUMBER;
6652 tmp VARCHAR2(4000);
6653 BEGIN
6654 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6655 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);
6656 END IF;
6657 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6658 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);
6659 END IF;
6660 IF p_search_ctx THEN
6661 x_entered_max_score:=0;
6662 FOR I IN 1..p_search_list.COUNT LOOP
6663 l_current_max_score:=0;
6664 IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN
6665 l_current_max_score := l_current_max_score+40;
6666 END IF;
6667 IF l_current_max_score>x_entered_max_score THEN
6668 x_entered_max_score:=l_current_max_score;
6669 END IF;
6670 END LOOP;
6671 END IF;
6672 FOR I IN 1..p_search_list.COUNT LOOP
6673 IF p_search_ctx THEN
6674 IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN
6675 x_stage_list(I).TX6 :=
6676 HZ_TRANS_PKG.WRPERSON_CLEANSE(
6677 p_search_list(I).CONTACT_NAME
6678 ,null,'CONTACT_NAME'
6679 ,'CONTACTS','SEARCH');
6680 ELSE
6681 x_stage_list(I).TX6 := '';
6682 END IF;
6683 ELSE
6684 IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN
6685 tmp := HZ_TRANS_PKG.WRPERSON_CLEANSE(
6686 x_stage_list(I).TX6
6687 ,null,'CONTACT_NAME'
6688 ,'CONTACTS','SCORE');
6689 IF tmp IS NOT NULL THEN
6690 x_stage_list(I).TX6 := tmp;
6691 END IF;
6692 END IF;
6693 END IF;
6694 END LOOP;
6695 FOR I IN 1..p_search_list.COUNT LOOP
6696 IF p_search_ctx THEN
6697 IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN
6698 x_stage_list(I).TX5 :=
6699 HZ_TRANS_PKG.WRPERSON_EXACT(
6700 p_search_list(I).CONTACT_NAME
6701 ,null,'CONTACT_NAME'
6702 ,'CONTACTS','SEARCH');
6703 ELSE
6704 x_stage_list(I).TX5 := '';
6705 END IF;
6706 ELSE
6707 IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN
6708 tmp := HZ_TRANS_PKG.WRPERSON_EXACT(
6709 x_stage_list(I).TX5
6710 ,null,'CONTACT_NAME'
6711 ,'CONTACTS','SCORE');
6712 IF tmp IS NOT NULL THEN
6713 x_stage_list(I).TX5 := tmp;
6714 END IF;
6715 END IF;
6716 END IF;
6717 END LOOP;
6718 EXCEPTION
6719 WHEN OTHERS THEN
6720 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6721 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_REC');
6722 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6723 FND_MSG_PUB.ADD;
6724 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6725 END;
6726
6727
6728 /************************************************
6729 This procedure maps a search record from the logical
6730 record structure to the stage schema structure
6731 for the CONTACT_POINTS Entity after applying
6732 the defined transformations
6733 ************************************************/
6734
6735 PROCEDURE MAP_CONTACT_POINT_REC(
6736 p_search_ctx IN BOOLEAN,
6737 p_search_list IN HZ_PARTY_SEARCH.contact_point_list,
6738 x_entered_max_score OUT NUMBER,
6739 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list
6740 ) IS
6741 l_current_max_score NUMBER;
6742 tmp VARCHAR2(4000);
6743 TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);
6744 l_cnt_pt_type_index INDEX_VARCHAR100_TBL;
6745 TYPE CONTACT_PT_REC_TYPE IS RECORD (
6746 contact_pt_type VARCHAR2(100),
6747 max_score NUMBER) ;
6748 TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;
6749 l_cnt_pt_type contact_pt_list;
6750 N NUMBER := 1;
6751 x_modify VARCHAR2(1);
6752 BEGIN
6753 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6754 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);
6755 END IF;
6756 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6757 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);
6758 END IF;
6759 IF p_search_ctx THEN
6760 x_entered_max_score:=0;
6761 FOR I IN 1..p_search_list.COUNT LOOP
6762 l_current_max_score:=0;
6763 x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;
6764 IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN
6765 l_current_max_score := l_current_max_score+60;
6766 END IF;
6767 IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN
6768 l_current_max_score := l_current_max_score+60;
6769 END IF;
6770 IF p_search_list(I).URL IS NOT NULL THEN
6771 l_current_max_score := l_current_max_score+60;
6772 END IF;
6773 x_modify := 'N';
6774 FOR J IN 1..l_cnt_pt_type.count LOOP
6775 if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then
6776 x_modify := 'Y';
6777 IF l_cnt_pt_type(J).max_score<l_current_max_score THEN
6778 l_cnt_pt_type(J).max_score :=l_current_max_score;
6779 EXIT;
6780 END IF;
6781 end if;
6782 END LOOP;
6783 if x_modify='N' then
6784 l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;
6785 l_cnt_pt_type(N).max_score := l_current_max_score;
6786 N:= N+1;
6787 end if;
6788 END LOOP;
6789 FOR M IN 1..l_cnt_pt_type.count LOOP
6790 x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;
6791 END LOOP;
6792 END IF;
6793 FOR I IN 1..p_search_list.COUNT LOOP
6794 IF p_search_ctx THEN
6795 IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN
6796 x_stage_list(I).TX6 :=
6797 HZ_TRANS_PKG.CLEANSED_EMAIL(
6798 p_search_list(I).EMAIL_ADDRESS
6799 ,null,'EMAIL_ADDRESS'
6800 ,'CONTACT_POINTS','SEARCH');
6801 ELSE
6802 x_stage_list(I).TX6 := '';
6803 END IF;
6804 ELSE
6805 IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN
6806 tmp := HZ_TRANS_PKG.CLEANSED_EMAIL(
6807 x_stage_list(I).TX6
6808 ,null,'EMAIL_ADDRESS'
6809 ,'CONTACT_POINTS','SCORE');
6810 IF tmp IS NOT NULL THEN
6811 x_stage_list(I).TX6 := tmp;
6812 END IF;
6813 END IF;
6814 END IF;
6815 END LOOP;
6816 FOR I IN 1..p_search_list.COUNT LOOP
6817 IF p_search_ctx THEN
6818 IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN
6819 x_stage_list(I).TX5 :=
6820 HZ_TRANS_PKG.EXACT_EMAIL(
6821 p_search_list(I).EMAIL_ADDRESS
6822 ,null,'EMAIL_ADDRESS'
6823 ,'CONTACT_POINTS');
6824 ELSE
6825 x_stage_list(I).TX5 := '';
6826 END IF;
6827 END IF;
6828 END LOOP;
6829 FOR I IN 1..p_search_list.COUNT LOOP
6830 IF p_search_ctx THEN
6831 IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN
6832 x_stage_list(I).TX1 :=
6833 HZ_TRANS_PKG.RM_SPLCHAR_CTX(
6834 p_search_list(I).FLEX_FORMAT_PHONE_NUMBER
6835 ,null,'FLEX_FORMAT_PHONE_NUMBER'
6836 ,'CONTACT_POINTS','SEARCH');
6837 ELSE
6838 x_stage_list(I).TX1 := '';
6839 END IF;
6840 ELSE
6841 IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN
6842 tmp := HZ_TRANS_PKG.RM_SPLCHAR_CTX(
6843 x_stage_list(I).TX1
6844 ,null,'FLEX_FORMAT_PHONE_NUMBER'
6845 ,'CONTACT_POINTS','SCORE');
6846 IF tmp IS NOT NULL THEN
6847 x_stage_list(I).TX1 := tmp;
6848 END IF;
6849 END IF;
6850 END IF;
6851 END LOOP;
6852 FOR I IN 1..p_search_list.COUNT LOOP
6853 IF p_search_ctx THEN
6854 IF p_search_list(I).URL IS NOT NULL THEN
6855 x_stage_list(I).TX8 :=
6856 HZ_TRANS_PKG.CLEANSED_URL(
6857 p_search_list(I).URL
6858 ,null,'URL'
6859 ,'CONTACT_POINTS','SEARCH');
6860 ELSE
6861 x_stage_list(I).TX8 := '';
6862 END IF;
6863 ELSE
6864 IF p_search_list(I).URL IS NOT NULL THEN
6865 tmp := HZ_TRANS_PKG.CLEANSED_URL(
6866 x_stage_list(I).TX8
6867 ,null,'URL'
6868 ,'CONTACT_POINTS','SCORE');
6869 IF tmp IS NOT NULL THEN
6870 x_stage_list(I).TX8 := tmp;
6871 END IF;
6872 END IF;
6873 END IF;
6874 END LOOP;
6875 EXCEPTION
6876 WHEN OTHERS THEN
6877 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6878 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_POINT_REC');
6879 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6880 FND_MSG_PUB.ADD;
6881 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6882 END;
6883
6884
6885 /************************************************
6886 This procedure checks if the input search criteria
6887 is valid. It checks if :
6888 1. At least one primary condition is passed
6889 2. Contact Point Type is not null for each condition
6890 ************************************************/
6891
6892 FUNCTION check_prim_cond(
6893 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
6894 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
6895 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
6896 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list)
6897 RETURN BOOLEAN IS
6898 BEGIN
6899 FOR I IN 1..p_contact_point_list.COUNT LOOP
6900 IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (
6901 p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
6902 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
6903 OR p_contact_point_list(I).URL IS NOT NULL
6904 ) THEN
6905 FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
6906 FND_MSG_PUB.ADD;
6907 RAISE FND_API.G_EXC_ERROR;
6908 END IF;
6909 END LOOP;
6910
6911 IF p_party_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6912 RETURN TRUE;
6913 END IF;
6914 IF p_party_search_rec.DUNS_NUMBER_C IS NOT NULL THEN
6915 RETURN TRUE;
6916 END IF;
6917 FOR I IN 1..p_party_site_list.COUNT LOOP
6918 IF p_party_site_list(I).ADDRESS 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).CITY 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).POSTAL_CODE IS NOT NULL THEN
6929 RETURN TRUE;
6930 END IF;
6931 END LOOP;
6932 FOR I IN 1..p_party_site_list.COUNT LOOP
6933 IF p_party_site_list(I).STATE IS NOT NULL THEN
6934 RETURN TRUE;
6935 END IF;
6936 END LOOP;
6937 FOR I IN 1..p_contact_list.COUNT LOOP
6938 IF p_contact_list(I).CONTACT_NAME 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).FLEX_FORMAT_PHONE_NUMBER 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).EMAIL_ADDRESS IS NOT NULL THEN
6949 RETURN TRUE;
6950 END IF;
6951 END LOOP;
6952 FOR I IN 1..p_contact_point_list.COUNT LOOP
6953 IF p_contact_point_list(I).URL IS NOT NULL THEN
6954 RETURN TRUE;
6955 END IF;
6956 END LOOP;
6957 RETURN FALSE;
6958 EXCEPTION
6959 WHEN FND_API.G_EXC_ERROR THEN
6960 RAISE FND_API.G_EXC_ERROR;
6961 WHEN OTHERS THEN
6962 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6963 FND_MESSAGE.SET_TOKEN('PROC','check_prim_cond');
6964 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6965 FND_MSG_PUB.ADD;
6966 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6967 END check_prim_cond;
6968
6969 /************************************************
6970 This procedure checks if the input search condition
6971 has party site criteria.
6972 ************************************************/
6973
6974 PROCEDURE check_party_site_cond(
6975 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
6976 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
6977 x_secondary OUT BOOLEAN,
6978 x_primary OUT BOOLEAN
6979 ) IS
6980 BEGIN
6981 x_primary:= FALSE;
6982 x_secondary:= FALSE;
6983 FOR I IN 1..p_party_site_list.COUNT LOOP
6984 IF p_party_site_list(I).ADDRESS IS NOT NULL
6985 OR p_party_site_list(I).CITY IS NOT NULL
6986 OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
6987 OR p_party_site_list(I).STATE IS NOT NULL
6988 THEN
6989 x_primary := TRUE;
6990 END IF;
6991 EXIT WHEN x_primary;
6992 END LOOP;
6993 FOR I IN 1..p_contact_point_list.COUNT LOOP
6994 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
6995 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
6996 OR p_contact_point_list(I).URL IS NOT NULL
6997 THEN
6998 x_primary := TRUE;
6999 END IF;
7000 EXIT WHEN x_primary;
7001 END LOOP;
7002
7003 FOR I IN 1..p_party_site_list.COUNT LOOP
7004 IF p_party_site_list(I).ADDRESS IS NOT NULL
7005 OR p_party_site_list(I).CITY IS NOT NULL
7006 OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
7007 OR p_party_site_list(I).STATE IS NOT NULL
7008 THEN
7009 x_secondary := TRUE;
7010 END IF;
7011 EXIT WHEN x_secondary;
7012 END LOOP;
7013 FOR I IN 1..p_contact_point_list.COUNT LOOP
7014 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
7015 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7016 OR p_contact_point_list(I).URL IS NOT NULL
7017 THEN
7018 x_secondary := TRUE;
7019 END IF;
7020 EXIT WHEN x_secondary;
7021 END LOOP;
7022 EXCEPTION
7023 WHEN OTHERS THEN
7024 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7025 FND_MESSAGE.SET_TOKEN('PROC','check_party_site_cond');
7026 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7027 FND_MSG_PUB.ADD;
7028 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7029 END check_party_site_cond;
7030
7031 /************************************************
7032 This procedure checks if the input search condition
7033 has contact criteria.
7034 ************************************************/
7035
7036 PROCEDURE check_contact_cond(
7037 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
7038 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
7039 x_secondary OUT BOOLEAN,
7040 x_primary OUT BOOLEAN
7041 ) IS
7042 BEGIN
7043 x_primary:= FALSE;
7044 x_secondary:= FALSE;
7045 FOR I IN 1..p_contact_list.COUNT LOOP
7046 IF p_contact_list(I).CONTACT_NAME IS NOT NULL
7047 THEN
7048 x_primary := TRUE;
7049 END IF;
7050 EXIT WHEN x_primary;
7051 END LOOP;
7052
7053 FOR I IN 1..p_contact_point_list.COUNT LOOP
7054 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
7055 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7056 OR p_contact_point_list(I).URL IS NOT NULL
7057 THEN
7058 x_primary := TRUE;
7059 END IF;
7060 EXIT WHEN x_primary;
7061 END LOOP;
7062
7063 FOR I IN 1..p_contact_list.COUNT LOOP
7064 IF p_contact_list(I).CONTACT_NAME IS NOT NULL
7065 THEN
7066 x_secondary := TRUE;
7067 END IF;
7068 EXIT WHEN x_secondary;
7069 END LOOP;
7070
7071 FOR I IN 1..p_contact_point_list.COUNT LOOP
7072 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
7073 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7074 OR p_contact_point_list(I).URL IS NOT NULL
7075 THEN
7076 x_secondary := TRUE;
7077 END IF;
7078 EXIT WHEN x_secondary;
7079 END LOOP;
7080 EXCEPTION
7081 WHEN OTHERS THEN
7082 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7083 FND_MESSAGE.SET_TOKEN('PROC','check_contact_cond');
7084 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7085 FND_MSG_PUB.ADD;
7086 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7087 END check_contact_cond;
7088
7089 /************************************************
7090 This procedure checks if the input search condition
7091 has valid contact point criteria.
7092 ************************************************/
7093
7094 PROCEDURE check_contact_point_cond(
7095 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
7096 x_secondary OUT BOOLEAN,
7097 x_primary OUT BOOLEAN
7098 ) IS
7099 BEGIN
7100 x_primary:= FALSE;
7101 x_secondary:= FALSE;
7102
7103 FOR I IN 1..p_contact_point_list.COUNT LOOP
7104 IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN
7105 FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
7106 FND_MSG_PUB.ADD;
7107 RAISE FND_API.G_EXC_ERROR;
7108 END IF;
7109 END LOOP;
7110
7111 FOR I IN 1..p_contact_point_list.COUNT LOOP
7112 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
7113 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7114 OR p_contact_point_list(I).URL IS NOT NULL
7115 THEN
7116 x_primary := TRUE;
7117 END IF;
7118 EXIT WHEN x_primary;
7119 END LOOP;
7120 FOR I IN 1..p_contact_point_list.COUNT LOOP
7121 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
7122 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7123 OR p_contact_point_list(I).URL IS NOT NULL
7124 THEN
7125 x_secondary := TRUE;
7126 END IF;
7127 EXIT WHEN x_secondary;
7128 END LOOP;
7129 EXCEPTION
7130 WHEN OTHERS THEN
7131 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7132 FND_MESSAGE.SET_TOKEN('PROC','check_contact_point_cond');
7133 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7134 FND_MSG_PUB.ADD;
7135 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7136 END check_contact_point_cond;
7137
7138 FUNCTION check_staged RETURN BOOLEAN IS
7139
7140 CURSOR c_check_staged IS
7141 SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL
7142 WHERE nvl(STAGED_FLAG,'N') = 'N'
7143 AND FUNCTION_ID in (
7144 43
7145 ,44
7146 ,45
7147 ,66
7148 ,67
7149 ,72
7150 ,73
7151 ,74
7152 ,77
7153 ,78
7154 ,92
7155 ,93
7156 ,110
7157 ,114
7158 ,115
7159 ,117
7160 );
7161 l_tmp NUMBER;
7162 BEGIN
7163 IF g_staged = 1 THEN
7164 RETURN TRUE;
7165 ELSIF g_staged = 0 THEN
7166 RETURN FALSE;
7167 END IF;
7168
7169 OPEN c_check_staged;
7170 FETCH c_check_staged INTO l_tmp;
7171 IF c_check_staged%FOUND THEN
7172 CLOSE c_check_staged;
7173 g_staged := 0;
7174 RETURN FALSE;
7175 ELSE
7176 CLOSE c_check_staged;
7177 g_staged := 1;
7178 RETURN TRUE;
7179 END IF;
7180 END check_staged;
7181
7182 -- Fix for Bug 4736139
7183 FUNCTION check_staged_var RETURN VARCHAR2 IS
7184 l_staged VARCHAR2(1);
7185 l_staged_bool BOOLEAN;
7186 BEGIN
7187 l_staged_bool := check_staged;
7188 IF l_staged_bool THEN
7189 l_staged := 'Y';
7190 ELSE
7191 l_staged := 'N';
7192 END IF;
7193 RETURN l_staged;
7194 END check_staged_var;
7195 -- End fix for Bug 4736139
7196
7197 END;
7198