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