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