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