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