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