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