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