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