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