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