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