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