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