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