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