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