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 | 28-NOV-2012 Generated by HZ Match Rule Compiler
23 |
24 *=======================================================================*/
25
26 -- ==========================================================================================
27 -- ============MATCH RULE COMPILER GENERATED CODE FOR SEARCH MATCH RULES ====================
28 -- ==========================================================================================
29
30 TYPE vlisttype IS TABLE of VARCHAR2(255) INDEX BY BINARY_INTEGER ;
31 call_order vlisttype;
32 call_max_score HZ_PARTY_SEARCH.IDList;
33 call_type vlisttype;
34 g_party_stage_rec HZ_PARTY_STAGE.party_stage_rec_type;
35 g_party_site_stage_list HZ_PARTY_STAGE.party_site_stage_list;
36 g_contact_stage_list HZ_PARTY_STAGE.contact_stage_list;
37 g_contact_pt_stage_list HZ_PARTY_STAGE.contact_pt_stage_list;
38 g_mappings HZ_PARTY_SEARCH.IDList;
39 g_max_id NUMBER:=2000000000;
40 g_other_party_level_attribs BOOLEAN;
41
42 g_debug_count NUMBER := 0;
43 g_score_until_thresh BOOLEAN:=false;
44
45 g_thres_score NUMBER:=1000;
46 g_ps_den_only BOOLEAN;
47 g_index_owner VARCHAR2(255);
48 distinct_search_cpt_types NUMBER ;
49
50 PROCEDURE output_long_strings(input_str VARCHAR2 DEFAULT NULL)
51 IS
52 remainder_str VARCHAR2(4000);
53 current_pos NUMBER ;
54 temp VARCHAR2(300) ;
55 BEGIN
56 remainder_str := input_str ;
57 current_pos := 1 ;
58 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
59 WHILE remainder_str IS NOT NULL
60 LOOP
61 temp := substr(remainder_str, 1 , 255 );
62 hz_utility_v2pub.debug(p_message=>' '||temp,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
63 current_pos := current_pos + 255 ;
64 remainder_str := substr(input_str,current_pos );
65 END LOOP ;
66 END IF;
67 END ;
68 FUNCTION check_estimate_hits (
69 p_entity VARCHAR2,
70 p_contains_str VARCHAR2) RETURN NUMBER IS
71
72 ustatus VARCHAR2(255);
73 dstatus VARCHAR2(255);
74 l_bool BOOLEAN;
75 l_hits NUMBER := 0;
76 BEGIN
77 IF g_index_owner IS NULL THEN
78 l_bool := fnd_installation.GET_APP_INFO('AR',ustatus,dstatus,g_index_owner);
79 END IF;
80 IF p_entity='PARTY' THEN
81
82 l_hits := CTX_QUERY.count_hits(
83 g_index_owner||'.'||'HZ_STAGE_PARTIES_T1',p_contains_str, false);
84 ELSIF p_entity='PARTY_SITES' THEN
85 l_hits := CTX_QUERY.count_hits(
86 g_index_owner||'.'||'HZ_STAGE_PARTY_SITES_T1',p_contains_str, false);
87 ELSIF p_entity='CONTACTS' THEN
88 l_hits := CTX_QUERY.count_hits(
89 g_index_owner||'.'||'HZ_STAGE_CONTACT_T1',p_contains_str, false);
90 ELSIF p_entity='CONTACT_POINTS' THEN
91 l_hits := CTX_QUERY.count_hits(
92 g_index_owner||'.'||'HZ_STAGE_CPT_T1',p_contains_str, false);
93 END IF;
94 RETURN floor(l_hits/2) ;
95
96
97 exception
98 when others then
99 if (instrb(SQLERRM,'DRG-51030')>0) then
100 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
101 FND_MSG_PUB.ADD;
102 RAISE FND_API.G_EXC_ERROR;
103 elsif (instrb(SQLERRM,'DRG-50943')>0) then
104 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
105 FND_MSG_PUB.ADD;
106 RAISE FND_API.G_EXC_ERROR;
107 else
108 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
109 end if;
110 END;
111
112
113 FUNCTION get_adjusted_restrict_sql (p_restrict_sql VARCHAR2)
114 RETURN VARCHAR2
115 IS
116 p_person_restrict_sql VARCHAR2(32767);
117 p_restrict1_sql VARCHAR2(32767);
118 p_final_restrict_sql VARCHAR2(32767);
119 BEGIN
120 p_final_restrict_sql := p_restrict_sql ;
121 IF p_restrict_sql IS NOT NULL
122 THEN
123 IF instrb(p_restrict_sql, 'STAGE.') > 0
124 THEN
125 p_restrict1_sql := replace( p_restrict_sql, 'STAGE.', 'stage1.');
126 ELSIF instrb(p_restrict_sql, 'stage.') > 0
127 THEN
128 p_restrict1_sql := replace( p_restrict_sql, 'stage.', 'stage1.');
129 END IF;
130 p_person_restrict_sql := 'exists ( SELECT 1 from HZ_ORG_CONTACTS oc, hz_relationships r'
131 || ' where oc.org_contact_id = stage.org_contact_id and'
132 || ' r.relationship_id = oc.party_relationship_id'
133 || ' and r.subject_type = ''PERSON'' AND r.object_type = ''ORGANIZATION'' '
134 || ' and exists ( SELECT 1 FROM HZ_PARTIES stage1 where stage1.party_id = r.subject_id'
135 || ' and ' || p_restrict1_sql || ' ) )' ;
136 p_final_restrict_sql := '((stage.org_contact_id is null and ' || p_restrict_sql || ') or (stage.org_contact_id is not null and '
137 || p_person_restrict_sql || ' ))';
138 END IF;
139 return p_final_restrict_sql ;
140 END;
141 FUNCTION map_id (in_id NUMBER) RETURN NUMBER IS
142 l_newidx NUMBER;
143 BEGIN
144 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
145 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
146 hz_utility_v2pub.debug(p_message=>'calling the function map_id',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
147 END IF;
148 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
149 hz_utility_v2pub.debug(p_message=>'argument in_id = '||in_id,p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
150 END IF;
151 IF in_id<g_max_id THEN
152 RETURN in_id;
153 ELSE
154 FOR I in 1..g_mappings.COUNT LOOP
155 IF in_id = g_mappings(I) THEN
156 RETURN (g_max_id+I);
157 END IF;
158 END LOOP;
159 l_newidx := g_mappings.COUNT+1;
160 g_mappings(l_newidx) := in_id;
161 RETURN (g_max_id+l_newidx);
162 END IF;
163 END;
164 FUNCTION GET_PARTY_SCORE
165 (
166 p_table_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;
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
350 x_matchidx:=J;
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 = 'ALL_ACCOUNT_NAMES' THEN
421
422 l_matched_value := HZ_PARTY_ACQUIRE.get_account_info (p_record_id, p_entity,'ALL_ACCOUNT_NAMES','Y');
423 RETURN l_matched_value;
424 END IF;
425 IF p_attribute = 'PARTY_NUMBER' THEN
426
427 SELECT party_type INTO l_party_type
428 FROM HZ_PARTIES
429 WHERE party_id = p_record_id;
430 IF l_party_type = 'ORGANIZATION' THEN
431 SELECT PARTY_NUMBER INTO l_matched_value
432 FROM HZ_PARTIES
433 WHERE party_id = p_record_id
434 and rownum = 1;
435 ELSIF l_party_type = 'PERSON' 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 END IF;
441 RETURN l_matched_value;
442 END IF;
443 IF p_attribute = 'ALL_ACCOUNT_NUMBERS' THEN
444
445 l_matched_value := HZ_PARTY_ACQUIRE.get_account_info (p_record_id, p_entity,'ALL_ACCOUNT_NUMBERS','Y');
446 RETURN l_matched_value;
447 END IF;
448 IF p_attribute = 'PARTY_ALL_NAMES' THEN
449
450 l_matched_value := HZ_PARTY_ACQUIRE.get_known_as (p_record_id, p_entity,'PARTY_ALL_NAMES','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
481 WHEN NO_DATA_FOUND THEN
482 l_matched_value := 'Err';
483 END;
484 RETURN l_matched_value;
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.TX32, p_table_TX32,(50000*(p_idx-1)+36)) 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.TX33, p_table_TX33,(50000*(p_idx-1)+37)) 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','ALL_ACCOUNT_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,'ALL_ACCOUNT_NAMES',
598 'PARTY', p_search_rec.ALL_ACCOUNT_NAMES,
599 l_attrib_value,l_score);
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;
603 END IF;
604 l_score :=0;
605 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX34, p_table_TX34,(50000*(p_idx-1)+38)) THEN
606 l_score :=100;
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 END IF;
611 IF l_score>0 THEN
612 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
613 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);
614 END IF;
615 l_attrib_value := get_attrib_val(p_record_id,'PARTY','PARTY_NUMBER');
616 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
617 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);
618 END IF;
619 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
620 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
621 VALUES (
622 p_party_id,p_record_id,p_search_ctx_id,'PARTY_NUMBER',
623 'PARTY', p_search_rec.PARTY_NUMBER,
624 l_attrib_value,l_score);
625 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
626 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);
627 END IF;
628 END IF;
629 l_score :=0;
630 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX35, p_table_TX35,(50000*(p_idx-1)+39)) THEN
631 l_score :=100;
632 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
633 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);
634 END IF;
635 END IF;
636 IF l_score>0 THEN
637 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
638 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);
639 END IF;
640 l_attrib_value := get_attrib_val(p_record_id,'PARTY','ALL_ACCOUNT_NUMBERS');
641 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
642 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);
643 END IF;
644 INSERT INTO HZ_PARTY_SCORE_DTLS_GT (PARTY_ID, RECORD_ID, SEARCH_CONTEXT_ID,
645 ATTRIBUTE,ENTITY,ENTERED_VALUE, MATCHED_VALUE, ASSIGNED_SCORE)
646 VALUES (
647 p_party_id,p_record_id,p_search_ctx_id,'ALL_ACCOUNT_NUMBERS',
648 'PARTY', p_search_rec.ALL_ACCOUNT_NUMBERS,
649 l_attrib_value,l_score);
650 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
651 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);
652 END IF;
653 END IF;
654 l_score :=0;
655 IF HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX39, p_table_TX39,(50000*(p_idx-1)+43)) THEN
656 l_score :=60;
657 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
658 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);
659 END IF;
660 ELSIF l_current_score<48 AND
661 HZ_DQM_SEARCH_UTIL.is_match(p_stage_rec.TX40, p_table_TX40,(50000*(p_idx-1)+44)) THEN
662 l_score :=48;
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','PARTY_ALL_NAMES');
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,'PARTY_ALL_NAMES',
679 'PARTY', p_search_rec.PARTY_ALL_NAMES,
680 l_attrib_value,l_score);
681 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
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;
685 NULL;
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
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);
777 END IF;
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
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;
860 IF l_score>0 THEN
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
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;
957 l_attrib_value := get_attrib_val(p_record_id,'CONTACT_POINTS','FLEX_FORMAT_PHONE_NUMBER');
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');
1064 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1065 FND_MSG_PUB.ADD;
1066 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1067 END;
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
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
1173 POP_PARTY_COND_REC(p_party_search_rec);
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);
1262 l_num := l_num-1;
1263 END LOOP;
1264 ELSE
1265 call_type(1) := 'OR';
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,
1312 p_denorm_max_score NUMBER,
1313 p_non_denorm_max_score NUMBER,
1314 p_threshold NUMBER) RETURN VARCHAR2 IS
1315 l_party_contains_str VARCHAR2(32000);
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;
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);
1413 l_denorm_str := NULL;
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
1510 -- Setup query string for COUNTRY
1511 l_prim_temp := null;
1512 l_prim_temp_den := null;
1513 HZ_DQM_SEARCH_UTIL.add_transformation( -- EXACT
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);
1585 l_filter_str VARCHAR2(4000) := null;
1586 l_prim_temp VARCHAR2(4000) := null;
1587 l_prim_temp_den VARCHAR2(4000) := null;
1588 TYPE CONTACT_PT_REC_TYPE IS RECORD (
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
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;
1687 OPEN x_cursor FOR
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
1771 ,g_party_site_stage_list(1).TX11
1772 ,g_party_site_stage_list(1).TX11
1773 ,g_party_site_stage_list(1).TX15
1774 ,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 /*+ INDEX(stage HZ_STAGE_PARTIES_T1) */ 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
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
1871 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = stage.TX36))
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 ELSE
1888 l_hint := '/*+ INDEX(stage HZ_STAGE_PARTIES_T1) */';
1889 END IF;
1890 IF p_search_ctx_id IS NULL THEN
1891 l_sqlstr := 'SELECT ' || l_hint || ' PARTY_ID , TX32, TX33, TX34, TX35, TX40, TX39'||
1892 ' FROM HZ_STAGED_PARTIES stage'||
1893 ' WHERE contains( concat_col, :cont)>0'||
1894 ' AND ((:TX36 IS NULL OR :TX36||'' '' = stage.TX36))'||
1895 ' AND ('||p_restrict_sql||')' ||
1896 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
1897 IF l_search_merged = 'Y' THEN
1898 l_sqlstr := l_sqlstr ;
1899 ELSIF l_search_merged = 'I' THEN
1900 l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'', ''I'')';
1901 ELSE
1902 l_sqlstr := l_sqlstr ||' AND nvl(stage.status,''A'') in (''A'')';
1903 END IF;
1904 output_long_strings('----------------------------------------------------------');
1905 output_long_strings('Party Contains String = '||p_contains_str);
1906 output_long_strings('Restrict Sql = '||p_restrict_sql);
1907 OPEN x_cursor FOR l_sqlstr USING p_contains_str
1908 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
1909 ,p_dup_party_id, p_dup_party_id;
1910 END IF;
1911 END IF;
1912 exception
1913 when others then
1914 if (instrb(SQLERRM,'DRG-51030')>0) then
1915 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
1916 FND_MSG_PUB.ADD;
1917 RAISE FND_API.G_EXC_ERROR;
1918 elsif (instrb(SQLERRM,'DRG-50943')>0) then
1919 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1920 FND_MSG_PUB.ADD;
1921 RAISE FND_API.G_EXC_ERROR;
1922 elsif (instrb(SQLERRM,'ORA-20000')>0) then
1923 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
1924 FND_MSG_PUB.ADD;
1925 RAISE FND_API.G_EXC_ERROR;
1926 else
1927 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
1928 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
1929 FND_MSG_PUB.ADD;
1930 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
1931 end if;
1932 END;
1933
1934 PROCEDURE open_party_site_cursor(
1935 p_dup_party_id NUMBER,
1936 p_party_id NUMBER,
1937 p_restrict_sql VARCHAR2,
1938 p_contains_str VARCHAR2,
1939 p_search_ctx_id NUMBER,
1940 p_search_merged VARCHAR2,
1941 p_search_rel_sites VARCHAR2,
1942 p_person_api VARCHAR2,
1943 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
1944 l_sqlstr VARCHAR2(4000);
1945 l_hint VARCHAR2(100);
1946 l_check NUMBER;
1947 l_check_dt NUMBER;
1948 l_search_merged VARCHAR2(1);
1949 l_status_sql VARCHAR2(100);
1950 p_restrict_sql1 VARCHAR2(4000);
1951
1952 BEGIN
1953 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1954 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);
1955 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);
1956 END IF;
1957 IF (p_search_merged is null) then
1958 l_search_merged := 'N';
1959 ELSE
1960 l_search_merged := p_search_merged;
1961 END IF;
1962 IF p_party_id IS NOT NULL THEN
1963 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
1964 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);
1965 END IF;
1966 IF p_search_rel_sites = 'N' THEN
1967 OPEN x_cursor FOR
1968 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
1969 FROM HZ_STAGED_PARTY_SITES stage
1970 WHERE contains( concat_col, p_contains_str)>0
1971 AND( (l_search_merged ='Y' )
1972 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1973 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1974 AND stage.party_id = p_party_id;
1975 ELSE
1976 OPEN x_cursor FOR
1977 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
1978 FROM HZ_STAGED_PARTY_SITES stage
1979 WHERE contains( concat_col, p_contains_str)>0
1980 AND( (l_search_merged ='Y' )
1981 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1982 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1983 AND stage.party_id = p_party_id
1984 UNION
1985 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
1986 FROM HZ_STAGED_PARTY_SITES stage, hz_relationships r, hz_org_contacts oc
1987 WHERE contains( concat_col, p_contains_str)>0
1988 AND( (l_search_merged ='Y' )
1989 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
1990 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
1991 AND r.object_id = p_party_id
1992 AND r.subject_id = stage.party_id
1993 AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
1994 AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES'
1995 AND r.relationship_id = oc.party_relationship_id
1996 AND oc.org_contact_id = stage.org_contact_id;
1997 END IF;
1998 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
1999 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2000 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);
2001 END IF;
2002 IF p_search_ctx_id IS NULL THEN
2003 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2004 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);
2005 END IF;
2006 OPEN x_cursor FOR
2007 SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX17, TX22
2008 FROM HZ_STAGED_PARTY_SITES stage
2009 WHERE contains( concat_col, p_contains_str)>0
2010 AND EXISTS (
2011 SELECT 1 FROM HZ_STAGED_PARTIES p
2012 WHERE p.PARTY_ID = stage.PARTY_ID
2013 AND( (l_search_merged ='Y' )
2014 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
2015 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
2016 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
2017 AND( (l_search_merged ='Y' )
2018 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2019 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2020 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2021 ELSE
2022 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2023 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);
2024 END IF;
2025 IF p_person_api = 'Y' THEN
2026 OPEN x_cursor FOR
2027 SELECT PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX17, TX22
2028 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
2029 WHERE contains( concat_col, p_contains_str)>0
2030 AND( (l_search_merged ='Y' )
2031 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2032 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2033 AND d.search_context_id = p_search_ctx_id
2034 AND d.party_id = stage.party_id
2035 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2036 UNION
2037 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
2038 FROM HZ_DQM_PARTIES_GT d, hz_relationships r,hz_org_contacts oc, HZ_STAGED_PARTY_SITES stage
2039 WHERE contains( concat_col, p_contains_str)>0
2040 AND( (l_search_merged ='Y' )
2041 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2042 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2043 AND d.search_context_id = p_search_ctx_id
2044 AND d.party_id = r.subject_id
2045 AND r.relationship_id = oc.party_relationship_id
2046 AND oc.org_contact_id = stage.org_contact_id
2047 AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2048 ELSE
2049 OPEN x_cursor FOR
2050 SELECT PARTY_SITE_ID, stage.PARTY_ID, ORG_CONTACT_ID, TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX17, TX22
2051 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_PARTY_SITES stage
2052 WHERE contains( concat_col, p_contains_str)>0
2053 AND( (l_search_merged ='Y' )
2054 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2055 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2056 AND d.search_context_id = p_search_ctx_id
2057 AND d.party_id = stage.party_id
2058 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2059 END IF;
2060 END IF;
2061 ELSE
2062 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2063 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);
2064 END IF;
2065 l_check := instrb(p_restrict_sql, 'SELECTIVE');
2066 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_PS');
2067 IF (l_check_dt > 0 ) THEN
2068 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2069 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);
2070 END IF;
2071 l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_U1) */';
2072 ELSIF (l_check > 0 ) THEN
2073 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2074 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);
2075 END IF;
2076 l_hint := '/*+ INDEX(stage HZ_STAGED_PARTY_SITES_N1) */';
2077 END IF;
2078 IF l_search_merged = 'Y' THEN
2079 l_status_sql := ' ' ;
2080 ELSIF l_search_merged = 'I' THEN
2081 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
2082 ELSE
2083 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
2084 END IF;
2085 /*Performance fix for Bug:4589953*/
2086 IF(p_person_api='Y') THEN
2087 IF (l_check > 0 ) THEN
2088 IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN
2089 p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2090 ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN
2091 p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2092 ELSE
2093 p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2094 END IF;
2095 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'||
2096 ' FROM HZ_STAGED_PARTY_SITES stage'||
2097 ' WHERE contains( concat_col, :cont)>0'||
2098 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2099 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2100 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2101 ' AND (ORG_CONTACT_ID IS NULL ' ||
2102 ' AND ('||p_restrict_sql||'))' ||
2103 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2104 ' UNION ' ||
2105 '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'||
2106 ' FROM HZ_STAGED_PARTY_SITES stage'||
2107 ' WHERE contains( concat_col, :cont)>0'||
2108 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2109 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2110 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2111 ' AND ORG_CONTACT_ID IN ' ||
2112 ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships ' ||
2113 ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
2114 ' where stage1.relationship_id = oc.party_relationship_id ' ||
2115 ' and ('||p_restrict_sql1|| ') )' ||
2116 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2117 OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2118 p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2119 ELSE
2120 l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX17, TX22'||
2121 ' FROM HZ_STAGED_PARTY_SITES stage'||
2122 ' WHERE contains( concat_col, :cont)>0'||
2123 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2124 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2125 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2126 ' AND EXISTS ('||
2127 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2128 ' WHERE p.party_id = stage.party_id ' ||
2129 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2130 ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2131 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2132 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2133 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2134 ,p_dup_party_id, p_dup_party_id;
2135 END IF;
2136 ELSE
2137 l_sqlstr := 'SELECT PARTY_SITE_ID, PARTY_ID, ORG_CONTACT_ID , TX3, TX4, TX9, TX10, TX11, TX14, TX15, TX17, TX22'||
2138 ' FROM HZ_STAGED_PARTY_SITES stage'||
2139 ' WHERE contains( concat_col, :cont)>0'||
2140 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2141 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2142 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2143 ' AND EXISTS ('||
2144 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2145 ' WHERE p.party_id = stage.party_id ' ||
2146 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2147 ' AND ('||p_restrict_sql||')' ||
2148 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2149 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2150 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2151 ,p_dup_party_id, p_dup_party_id;
2152 END IF;
2153 END IF;
2154 output_long_strings('----------------------------------------------------------');
2155 output_long_strings('Party Site Contains String = '||p_contains_str);
2156 output_long_strings('Restrict Sql = '||p_restrict_sql);
2157 exception
2158 when others then
2159 if (instrb(SQLERRM,'DRG-51030')>0) then
2160 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2161 FND_MSG_PUB.ADD;
2162 RAISE FND_API.G_EXC_ERROR;
2163 elsif (instrb(SQLERRM,'DRG-50943')>0) then
2164 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2165 FND_MSG_PUB.ADD;
2166 RAISE FND_API.G_EXC_ERROR;
2167 elsif (instrb(SQLERRM,'ORA-20000')>0) then
2168 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2169 FND_MSG_PUB.ADD;
2170 RAISE FND_API.G_EXC_ERROR;
2171 else
2172 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2173 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2174 FND_MSG_PUB.ADD;
2175 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2176 end if;
2177 END;
2178
2179 PROCEDURE open_contact_cursor(
2180 p_dup_party_id NUMBER,
2181 p_party_id NUMBER,
2182 p_restrict_sql VARCHAR2,
2183 p_contains_str VARCHAR2,
2184 p_search_ctx_id NUMBER,
2185 p_search_merged VARCHAR2,
2186 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
2187 l_sqlstr VARCHAR2(4000);
2188 l_hint VARCHAR2(100);
2189 l_check NUMBER;
2190 l_check_dt NUMBER;
2191 l_search_merged VARCHAR2(1);
2192 l_status_sql VARCHAR2(100);
2193
2194 BEGIN
2195 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2196 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);
2197 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);
2198 END IF;
2199 IF (p_search_merged is null) then
2200 l_search_merged := 'N';
2201 ELSE
2202 l_search_merged := p_search_merged;
2203 END IF;
2204 IF p_party_id IS NOT NULL THEN
2205 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2206 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);
2207 END IF;
2208 OPEN x_cursor FOR
2209 SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, PARTY_ID, TX6, TX5
2210 FROM HZ_STAGED_CONTACTS stage
2211 WHERE contains( concat_col, p_contains_str)>0
2212 AND EXISTS (
2213 SELECT 1 FROM HZ_STAGED_PARTIES p
2214 WHERE p.PARTY_ID = stage.PARTY_ID
2215 AND( (l_search_merged ='Y' )
2216 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
2217 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
2218 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
2219 AND( (l_search_merged ='Y' )
2220 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2221 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2222 AND stage.party_id = p_party_id;
2223 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2224 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2225 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);
2226 END IF;
2227 IF p_search_ctx_id IS NULL THEN
2228 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2229 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);
2230 END IF;
2231 OPEN x_cursor FOR
2232 SELECT ORG_CONTACT_ID, PARTY_ID, TX6, TX5
2233 FROM HZ_STAGED_CONTACTS stage
2234 WHERE contains( concat_col, p_contains_str)>0
2235 AND EXISTS (
2236 SELECT 1 FROM HZ_STAGED_PARTIES p
2237 WHERE p.PARTY_ID = stage.PARTY_ID
2238 AND( (l_search_merged ='Y' )
2239 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
2240 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
2241 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
2242 AND( (l_search_merged ='Y' )
2243 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2244 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2245 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2246 ELSE
2247 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2248 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);
2249 END IF;
2250 OPEN x_cursor FOR
2251 SELECT /*+ ORDERED INDEX(stage HZ_STAGED_CONTACTS_N1) */ ORG_CONTACT_ID, stage.PARTY_ID, TX6, TX5
2252 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACTS stage
2253 WHERE contains( concat_col, p_contains_str)>0
2254 AND d.search_context_id = p_search_ctx_id
2255 AND d.party_id = stage.party_id
2256 AND( (l_search_merged ='Y' )
2257 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2258 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2259 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2260 END IF;
2261 ELSE
2262 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2263 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);
2264 END IF;
2265 l_check := instrb(p_restrict_sql, 'SELECTIVE');
2266 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CT');
2267 IF (l_check_dt > 0 ) THEN
2268 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2269 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);
2270 END IF;
2271 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */';
2272 ELSIF (l_check > 0 ) THEN
2273 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2274 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);
2275 END IF;
2276 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACTS_N1) */';
2277 END IF;
2278 IF l_search_merged = 'Y' THEN
2279 l_status_sql := ' ' ;
2280 ELSIF l_search_merged = 'I' THEN
2281 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
2282 ELSE
2283 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
2284 END IF;
2285 l_sqlstr := 'SELECT ' || l_hint || ' ORG_CONTACT_ID, PARTY_ID , TX6, TX5'||
2286 ' FROM HZ_STAGED_CONTACTS stage'||
2287 ' WHERE contains( concat_col, :cont)>0'||
2288 ' AND EXISTS ('||
2289 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2290 ' WHERE p.party_id = stage.party_id ' ||
2291 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2292 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2293 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2294 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2295 ' AND ('||p_restrict_sql||')' ||
2296 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2297 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2298 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2299 ,p_dup_party_id, p_dup_party_id;
2300 END IF;
2301 output_long_strings('----------------------------------------------------------');
2302 output_long_strings('Contacts Contains String = '||p_contains_str);
2303 output_long_strings('Restrict Sql = '||p_restrict_sql);
2304 exception
2305 when others then
2306 if (instrb(SQLERRM,'DRG-51030')>0) then
2307 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2308 FND_MSG_PUB.ADD;
2309 RAISE FND_API.G_EXC_ERROR;
2310 elsif (instrb(SQLERRM,'DRG-50943')>0) then
2311 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2312 FND_MSG_PUB.ADD;
2313 RAISE FND_API.G_EXC_ERROR;
2314 elsif (instrb(SQLERRM,'ORA-20000')>0) then
2315 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2316 FND_MSG_PUB.ADD;
2317 RAISE FND_API.G_EXC_ERROR;
2318 else
2319 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2320 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2321 FND_MSG_PUB.ADD;
2322 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2323 end if;
2324 END;
2325
2326 PROCEDURE open_contact_pt_cursor(
2327 p_dup_party_id NUMBER,
2328 p_party_id NUMBER,
2329 p_restrict_sql VARCHAR2,
2330 p_contains_str VARCHAR2,
2331 p_search_ctx_id NUMBER,
2332 p_search_merged VARCHAR2,
2333 p_search_rel_cpts VARCHAR2,
2334 p_person_api VARCHAR2,
2335 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp,
2336 p_restrict_entity VARCHAR2 DEFAULT NULL) IS
2337 l_sqlstr VARCHAR2(4000);
2338 l_hint VARCHAR2(100);
2339 l_check NUMBER;
2340 l_check_dt NUMBER;
2341 l_search_merged VARCHAR2(1);
2342 l_status_sql VARCHAR2(100);
2343 p_restrict_sql1 VARCHAR2(4000);
2344
2345 BEGIN
2346 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2347 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2348 hz_utility_v2pub.debug(p_message=>'calling the procedure open_contact_pt_cursor',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
2349 END IF;
2350 IF (p_search_merged is null) then
2351 l_search_merged := 'N';
2352 ELSE
2353 l_search_merged := p_search_merged;
2354 END IF;
2355 IF p_restrict_entity = 'CONTACTS'
2356 THEN
2357 OPEN x_cursor FOR
2358 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
2359 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2360 WHERE contains( concat_col, p_contains_str)>0
2361 AND d.search_context_id = p_search_ctx_id
2362 AND( (l_search_merged ='Y' )
2363 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2364 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2365 AND d.party_id = stage.org_contact_id ;
2366 END IF;
2367 IF p_restrict_entity = 'PARTY_SITES'
2368 THEN
2369 OPEN x_cursor FOR
2370 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
2371 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2372 WHERE contains( concat_col, p_contains_str)>0
2373 AND d.search_context_id = p_search_ctx_id
2374 AND( (l_search_merged ='Y' )
2375 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2376 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2377 AND d.party_id = stage.party_site_id ;
2378 END IF;
2379 IF p_restrict_entity IS NULL
2380 THEN
2381 IF p_party_id IS NOT NULL THEN
2382 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2383 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);
2384 END IF;
2385 IF p_search_rel_cpts = 'N' THEN
2386 OPEN x_cursor FOR
2387 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
2388 FROM HZ_STAGED_CONTACT_POINTS stage
2389 WHERE contains( concat_col, p_contains_str)>0
2390 AND( (l_search_merged ='Y' )
2391 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2392 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2393 AND stage.party_id = p_party_id;
2394 ELSE
2395 OPEN x_cursor FOR
2396 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
2397 FROM HZ_STAGED_CONTACT_POINTS stage
2398 WHERE contains( concat_col, p_contains_str)>0
2399 AND( (l_search_merged ='Y' )
2400 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2401 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2402 AND stage.party_id = p_party_id
2403 UNION
2404 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
2405 FROM HZ_STAGED_CONTACT_POINTS stage, hz_relationships r, hz_org_contacts oc
2406 WHERE contains( concat_col, p_contains_str)>0
2407 AND r.object_id = p_party_id
2408 AND( (l_search_merged ='Y' )
2409 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2410 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2411 AND r.subject_id = stage.party_id
2412 AND r.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
2413 AND r.OBJECT_TABLE_NAME = 'HZ_PARTIES'
2414 AND r.relationship_id = oc.party_relationship_id
2415 AND oc.org_contact_id = stage.org_contact_id;
2416 END IF;
2417 ELSIF p_restrict_sql IS NULL OR p_search_ctx_id IS NOT NULL THEN
2418 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2419 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);
2420 END IF;
2421 IF p_search_ctx_id IS NULL THEN
2422 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2423 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);
2424 END IF;
2425 OPEN x_cursor FOR
2426 SELECT CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5
2427 FROM HZ_STAGED_CONTACT_POINTS stage
2428 WHERE contains( concat_col, p_contains_str)>0
2429 AND EXISTS (
2430 SELECT 1 FROM HZ_STAGED_PARTIES p
2431 WHERE p.PARTY_ID = stage.PARTY_ID
2432 AND( (l_search_merged ='Y' )
2433 OR (l_search_merged = 'I' AND nvl(p.status, 'A') in ('A', 'I'))
2434 OR (l_search_merged = 'N' AND nvl(p.status, 'A') in ('A')) )
2435 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = p.TX36)))
2436 AND( (l_search_merged ='Y' )
2437 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2438 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2439 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2440 ELSE
2441 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2442 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);
2443 END IF;
2444 IF p_person_api = 'Y' THEN
2445 OPEN x_cursor FOR
2446 SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5
2447 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2448 WHERE contains( concat_col, p_contains_str)>0
2449 AND d.search_context_id = p_search_ctx_id
2450 AND d.party_id = stage.party_id
2451 AND( (l_search_merged ='Y' )
2452 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2453 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2454 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id)
2455 UNION
2456 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
2457 FROM HZ_DQM_PARTIES_GT d, HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, HZ_STAGED_CONTACT_POINTS stage
2458 WHERE contains( concat_col, p_contains_str)>0
2459 AND d.search_context_id = p_search_ctx_id
2460 AND d.party_id = r.subject_id
2461 AND r.relationship_id = oc.party_relationship_id
2462 AND oc.org_contact_id = stage.org_contact_id
2463 AND( (l_search_merged ='Y' )
2464 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2465 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2466 AND (p_dup_party_id IS NULL OR r.subject_id <> p_dup_party_id);
2467 ELSE
2468 OPEN x_cursor FOR
2469 SELECT CONTACT_POINT_ID, stage.contact_point_type, stage.PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5
2470 FROM HZ_DQM_PARTIES_GT d, HZ_STAGED_CONTACT_POINTS stage
2471 WHERE contains( concat_col, p_contains_str)>0
2472 AND d.search_context_id = p_search_ctx_id
2473 AND d.party_id = stage.party_id
2474 AND( (l_search_merged ='Y' )
2475 OR (l_search_merged = 'I' AND nvl(stage.status_flag, 'A') in ('A', 'I'))
2476 OR (l_search_merged = 'N' AND nvl(stage.status_flag, 'A') = 'A') )
2477 AND (p_dup_party_id IS NULL OR stage.party_id <> p_dup_party_id);
2478 END IF;
2479 END IF;
2480 ELSE
2481 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2482 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);
2483 END IF;
2484 l_check := instrb(p_restrict_sql, 'SELECTIVE');
2485 l_check_dt := instrb(p_restrict_sql, 'SELECTIVE_CPT');
2486 IF (l_check_dt > 0 ) THEN
2487 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2488 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);
2489 END IF;
2490 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_U1) */';
2491 ELSIF (l_check > 0 ) THEN
2492 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2493 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);
2494 END IF;
2495 l_hint := '/*+ INDEX(stage HZ_STAGED_CONTACT_POINTS_N1) */';
2496 END IF;
2497 IF l_search_merged = 'Y' THEN
2498 l_status_sql := ' ' ;
2499 ELSIF l_search_merged = 'I' THEN
2500 l_status_sql := ' AND nvl(p.status,''A'') in (''A'', ''I'')';
2501 ELSE
2502 l_status_sql := ' AND nvl(p.status,''A'') in (''A'')';
2503 END IF;
2504 IF p_person_api = 'Y' THEN
2505 /*Performance fix for Bug:4589953*/
2506 IF (l_check > 0 ) THEN
2507 IF instrb(p_restrict_sql, 'STAGE.') > 0 THEN
2508 p_restrict_sql1 := replace( p_restrict_sql, 'STAGE.', 'stage1.');
2509 ELSIF instrb(p_restrict_sql, 'stage.') > 0 THEN
2510 p_restrict_sql1 := replace( p_restrict_sql, 'stage.', 'stage1.');
2511 ELSE
2512 p_restrict_sql1 := 'stage1.'||p_restrict_sql;
2513 END IF;
2514 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'||
2515 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2516 ' WHERE contains( concat_col, :cont)>0 '||
2517 ' AND (stage.org_contact_id is null '||
2518 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2519 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2520 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2521 ' AND ('||p_restrict_sql||'))' ||
2522 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ' ||
2523 ' UNION ' ||
2524 ' 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'||
2525 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2526 ' WHERE contains( concat_col, :cont)>0 '||
2527 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2528 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2529 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2530 ' AND (stage.org_contact_id in ' ||
2531 ' ( SELECT org_contact_id from HZ_ORG_CONTACTS oc, (select object_id, relationship_id, subject_id party_id from hz_relationships r ' ||
2532 ' where subject_type = ''PERSON'' AND object_type = ''ORGANIZATION'') stage1 ' ||
2533 ' where stage1.relationship_id = oc.party_relationship_id ' ||
2534 ' and ('||p_restrict_sql1 || ') ) )' ||
2535 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2536 OPEN x_cursor FOR l_sqlstr USING p_contains_str,
2537 p_dup_party_id, p_dup_party_id, p_contains_str, p_dup_party_id, p_dup_party_id;
2538 ELSE
2539 l_sqlstr := 'SELECT ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5'||
2540 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2541 ' WHERE contains( concat_col, :cont)>0'||
2542 ' AND EXISTS ('||
2543 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2544 ' WHERE p.party_id = stage.party_id ' ||
2545 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2546 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2547 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2548 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2549 ' AND ('||get_adjusted_restrict_sql(p_restrict_sql)||')' ||
2550 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2551 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2552 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2553 ,p_dup_party_id, p_dup_party_id;
2554 END IF;
2555 ELSE
2556 l_sqlstr := 'SELECT ' || l_hint ||' CONTACT_POINT_ID, stage.contact_point_type, PARTY_ID, PARTY_SITE_ID, ORG_CONTACT_ID , TX1, TX6, TX5'||
2557 ' FROM HZ_STAGED_CONTACT_POINTS stage'||
2558 ' WHERE contains( concat_col, :cont)>0'||
2559 ' AND EXISTS ('||
2560 ' SELECT 1 FROM HZ_STAGED_PARTIES p ' ||
2561 ' WHERE p.party_id = stage.party_id ' ||
2562 ' AND ((:TX36 IS NULL OR :TX36||'' '' = p.TX36)) '|| l_status_sql ||' ) ' ||
2563 ' AND( ('''||l_search_merged||''' =''Y'' ) '||
2564 ' OR ('''||l_search_merged||''' = ''I'' AND nvl(stage.status_flag, ''A'') in (''A'', ''I'')) '||
2565 ' OR ('''||l_search_merged||''' = ''N'' AND nvl(stage.status_flag, ''A'') = ''A'') ) '||
2566 ' AND ('||p_restrict_sql||')' ||
2567 ' AND (:p_dup IS NULL OR stage.party_id <> :p_dup) ';
2568 OPEN x_cursor FOR l_sqlstr USING p_contains_str
2569 ,g_party_stage_rec.TX36,g_party_stage_rec.TX36
2570 ,p_dup_party_id, p_dup_party_id;
2571 END IF;
2572 END IF;
2573 END IF;
2574 output_long_strings('----------------------------------------------------------');
2575 output_long_strings('Contact Points Contains String = '||p_contains_str);
2576 output_long_strings('Restrict Sql = '||p_restrict_sql);
2577 exception
2578 when others then
2579 if (instrb(SQLERRM,'DRG-51030')>0) then
2580 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
2581 FND_MSG_PUB.ADD;
2582 RAISE FND_API.G_EXC_ERROR;
2583 elsif (instrb(SQLERRM,'DRG-50943')>0) then
2584 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2585 FND_MSG_PUB.ADD;
2586 RAISE FND_API.G_EXC_ERROR;
2587 elsif (instrb(SQLERRM,'ORA-20000')>0) then
2588 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
2589 FND_MSG_PUB.ADD;
2590 RAISE FND_API.G_EXC_ERROR;
2591 else
2592 FND_MESSAGE.SET_NAME('AR', 'HZ_API_OTHERS_EXCEP');
2593 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
2594 FND_MSG_PUB.ADD;
2595 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
2596 end if;
2597 END;
2598
2599
2600 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
2601 l_sqlstr VARCHAR2(4000);
2602 l_search_merged VARCHAR2(1);
2603 BEGIN
2604 IF (p_search_merged is null) then
2605 l_search_merged := 'N';
2606 ELSE
2607 l_search_merged := p_search_merged;
2608 END IF;
2609 IF p_restrict_sql IS NULL THEN
2610 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
2611 SELECT p_search_ctx_id, PARTY_ID, decode(TX8,g_party_stage_rec.TX8||' ',100,90)
2612 FROM hz_staged_parties
2613 WHERE TX8 LIKE g_party_stage_rec.TX8||' %'
2614 AND ((g_party_stage_rec.TX36 IS NULL OR g_party_stage_rec.TX36||' ' = TX36))
2615 AND( (l_search_merged ='Y' )
2616 OR (l_search_merged = 'I' AND nvl(status, 'A') in ('A', 'I'))
2617 OR (l_search_merged = 'N' AND nvl(status, 'A') in ('A')))
2618 AND (p_dup_party_id IS NULL OR party_id <> p_dup_party_id)
2619 AND rownum <= p_thresh;
2620 ELSE
2621 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 ';
2622 l_sqlstr := l_sqlstr || ' WHERE TX8 like :TX8||'' %'' ';
2623 l_sqlstr := l_sqlstr || ' AND (:TX36 IS NULL OR :TX36||'' '' = TX36) ';
2624 IF l_search_merged = 'N' THEN
2625 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'')=''A'' ';
2626 ELSIF l_search_merged = 'Y' THEN
2627 l_sqlstr := l_sqlstr || ' AND nvl(status,''A'') in (''A'',''I'') ';
2628 END IF;
2629 l_sqlstr := l_sqlstr || ' AND (:p_dup IS NULL OR party_id <> :p_dup ) ';
2630 l_sqlstr := l_sqlstr || ' AND '||p_restrict_sql||' ';
2631 l_sqlstr := l_sqlstr || ' AND ROWNUM <= :thresh ';
2632 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;
2633 END IF;
2634 x_num_matches := SQL%ROWCOUNT;
2635 END;
2636
2637 FUNCTION get_new_score_rec (
2638 p_init_total_score NUMBER,
2639 p_init_party_score NUMBER,
2640 p_init_party_site_score NUMBER,
2641 p_init_contact_score NUMBER,
2642 p_init_contact_point_score NUMBER,
2643 p_party_id NUMBER,
2644 p_party_site_id NUMBER,
2645 p_org_contact_id NUMBER,
2646 p_contact_point_id NUMBER)
2647 RETURN HZ_PARTY_SEARCH.score_rec IS
2648 l_score_rec HZ_PARTY_SEARCH.score_rec;
2649 BEGIN
2650 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2651 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);
2652 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);
2653 END IF;
2654 l_score_rec.TOTAL_SCORE := p_init_total_score;
2655 l_score_rec.PARTY_SCORE := p_init_party_score;
2656 l_score_rec.PARTY_SITE_SCORE := p_init_party_site_score;
2657 l_score_rec.CONTACT_SCORE := p_init_contact_score;
2658 l_score_rec.CONTACT_POINT_SCORE := p_init_contact_point_score;
2659 l_score_rec.PARTY_ID := p_party_id;
2660 l_score_rec.PARTY_SITE_ID := p_party_site_id;
2661 l_score_rec.ORG_CONTACT_ID := p_org_contact_id;
2662 l_score_rec.CONTACT_POINT_ID := p_contact_point_id;
2663 RETURN l_score_rec;
2664 END;
2665
2666 /**********************************************************
2667 This procedure finds the set of parties that match the search
2668 criteria and returns a scored set of parties
2669
2670 The steps in executing the search are as follows
2671 1. Initialization and error checks
2672 2. Setup of intermedia query strings for Acquisition query
2673 3. Execution of Acquisition query
2674 4. Execution of Secondary queries to score results
2675 5. Setup of data temporary table to return search results
2676 **********************************************************/
2677
2678 PROCEDURE find_parties (
2679 p_rule_id IN NUMBER,
2680 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
2681 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
2682 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
2683 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
2684 p_restrict_sql IN VARCHAR2,
2685 p_match_type IN VARCHAR2,
2686 p_search_merged IN VARCHAR2,
2687 p_dup_party_id IN NUMBER,
2688 p_dup_set_id IN NUMBER,
2689 p_dup_batch_id IN NUMBER,
2690 p_ins_details IN VARCHAR2,
2691 x_search_ctx_id OUT NUMBER,
2692 x_num_matches OUT NUMBER
2693 ) IS
2694
2695 -- Strings to hold the generated Intermedia query strings
2696 l_party_contains_str VARCHAR2(32000);
2697 l_party_site_contains_str VARCHAR2(32000);
2698 l_contact_contains_str VARCHAR2(32000);
2699 l_contact_pt_contains_str VARCHAR2(32000);
2700 l_denorm_str VARCHAR2(32000);
2701 l_ps_denorm_str VARCHAR2(32000);
2702 l_ct_denorm_str VARCHAR2(32000);
2703 l_cpt_denorm_str VARCHAR2(32000);
2704
2705 -- Other local variables
2706 l_match_str VARCHAR2(30); -- Match type (AND or OR)
2707 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
2708 -- For Score calculation
2709 l_max_score NUMBER;
2710 l_match_idx NUMBER;
2711 l_entered_max_score NUMBER;
2712 FIRST BOOLEAN;
2713 l_search_ctx_id NUMBER; -- Generated Search Context ID
2714
2715 l_TX39 VARCHAR2(2000);
2716 l_TX32 VARCHAR2(2000);
2717 l_TX33 VARCHAR2(2000);
2718 l_TX9 VARCHAR2(2000);
2719 l_TX22 VARCHAR2(2000);
2720 l_TX35 VARCHAR2(2000);
2721 l_TX1 VARCHAR2(2000);
2722 l_TX3 VARCHAR2(2000);
2723 l_TX15 VARCHAR2(2000);
2724 l_TX4 VARCHAR2(2000);
2725 l_TX10 VARCHAR2(2000);
2726 l_TX11 VARCHAR2(2000);
2727 l_TX5 VARCHAR2(2000);
2728 l_TX40 VARCHAR2(2000);
2729 l_TX34 VARCHAR2(2000);
2730 l_TX14 VARCHAR2(2000);
2731 l_TX17 VARCHAR2(2000);
2732 l_TX6 VARCHAR2(2000);
2733 H_SCORES HZ_PARTY_SEARCH.score_list;
2734 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
2735 H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
2736
2737 l_score NUMBER;
2738 l_idx NUMBER;
2739 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
2740 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
2741 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
2742 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
2743 l_party_id NUMBER;
2744 l_ps_party_id NUMBER;
2745 l_ct_party_id NUMBER;
2746 l_cpt_party_id NUMBER;
2747 l_cpt_ps_id NUMBER;
2748 l_cpt_contact_id NUMBER;
2749 l_cpt_type VARCHAR2(100);
2750 l_party_site_id NUMBER;
2751 l_org_contact_id NUMBER;
2752 l_contact_pt_id NUMBER;
2753 l_ps_contact_id NUMBER;
2754 l_party_max_score NUMBER;
2755 l_ps_max_score NUMBER;
2756 l_contact_max_score NUMBER;
2757 l_cpt_max_score NUMBER;
2758 l_denorm_max_score NUMBER;
2759 l_non_denorm_max_score NUMBER;
2760
2761 defpt NUMBER :=0;
2762 defps NUMBER :=0;
2763 defct NUMBER :=0;
2764 defcpt NUMBER :=0;
2765 l_index NUMBER;
2766 l_max_thresh NUMBER;
2767 l_tmp NUMBER;
2768 l_merge_flag VARCHAR2(1);
2769 l_num_eval NUMBER:=0;
2770
2771 --Fix for bug 4417124
2772 l_use_contact_addr_info BOOLEAN := TRUE;
2773 l_use_contact_cpt_info BOOLEAN := TRUE;
2774 l_use_contact_addr_flag VARCHAR2(1) := 'Y';
2775 l_use_contact_cpt_flag VARCHAR2(1) := 'Y';
2776
2777 L_RETURN_IMM_EXC EXCEPTION;
2778
2779
2780 /********************* Find Parties private procedures *******/
2781 PROCEDURE push_eval IS
2782 BEGIN
2783 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2784 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);
2785 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);
2786 END IF;
2787 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2788 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);
2789 END IF;
2790 H_PARTY_ID.DELETE;
2791 H_PARTY_ID_LIST.DELETE;
2792 H_SCORES.DELETE;
2793 g_mappings.DELETE;
2794 HZ_DQM_SEARCH_UTIL.set_num_eval(0);
2795 call_order(5) := call_order(1);
2796 call_type(5) := 'AND';
2797 call_max_score(5) := call_max_score(1);
2798 call_type(2) := 'OR';
2799 END;
2800
2801 /** Private procedure to acquire and score at party level ***/
2802 PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
2803 l_party_id_idx NUMBER:=1;
2804 l_ctx_id NUMBER;
2805 l_precalc_score BOOLEAN := FALSE;
2806 l_TX35_new varchar2(4000);
2807 BEGIN
2808 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2809 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);
2810 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);
2811 END IF;
2812 SAVEPOINT eval_start;
2813 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2814 l_ctx_id := l_search_ctx_id;
2815 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2816 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);
2817 END IF;
2818 FORALL I in 1..H_PARTY_ID.COUNT
2819 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2820 l_search_ctx_id,H_PARTY_ID(I));
2821 H_PARTY_ID.DELETE;
2822 H_PARTY_ID_LIST.DELETE;
2823 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2824 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2825 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);
2826 END IF;
2827 l_ctx_id := l_search_ctx_id;
2828 FORALL I in 1..H_PARTY_ID.COUNT
2829 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2830 l_search_ctx_id,H_PARTY_ID(I));
2831 l_party_id_idx := H_PARTY_ID.COUNT+1;
2832 ELSE
2833 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2834 and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
2835 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2836 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);
2837 END IF;
2838 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
2839 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2840 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);
2841 END IF;
2842 IF (l_party_site_contains_str IS NULL AND
2843 l_contact_contains_str IS NULL AND
2844 l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs AND p_dup_set_id IS NULL THEN
2845 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);
2846 RAISE L_RETURN_IMM_EXC;
2847 ELSE
2848 open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,p_search_merged,p_party_contains_str,l_party_cur);
2849 END IF;
2850 ELSE
2851 IF p_index>1 THEN
2852 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2853 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);
2854 END IF;
2855 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2856 FND_MSG_PUB.ADD;
2857 RAISE FND_API.G_EXC_ERROR;
2858 ELSE
2859 push_eval;
2860 RETURN;
2861 END IF;
2862 END IF;
2863 END IF;
2864 l_ctx_id := NULL;
2865 l_party_id_idx := H_PARTY_ID.COUNT+1;
2866 END IF;
2867 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2868 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);
2869 END IF;
2870 IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
2871 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);
2872 END IF;
2873 LOOP
2874 FETCH l_party_cur INTO
2875 l_party_id , l_TX32, l_TX33, l_TX34, l_TX35, l_TX40, l_TX39;
2876 EXIT WHEN l_party_cur%NOTFOUND;
2877 l_index := map_id(l_party_id);
2878 l_TX35_new:=RTRIM(LTRIM(l_TX35));
2879 l_TX35_new:=(CASE l_TX35_new WHEN 'SYNC' THEN HZ_STAGE_MAP_TRANSFORM.den_acc_number (l_party_id) ELSE l_TX35_new END);
2880 l_score := GET_PARTY_SCORE(l_TX32,l_TX33,l_TX34,l_TX35_new,l_TX40,l_TX39);
2881 IF NOT H_SCORES.EXISTS(l_index) THEN
2882 H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
2883 ELSE
2884 H_SCORES(l_index).TOTAL_SCORE :=
2885 H_SCORES(l_index).TOTAL_SCORE+l_score;
2886 H_SCORES(l_index).PARTY_SCORE := l_score;
2887 END IF;
2888 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
2889 H_PARTY_ID_LIST(l_index) := 1;
2890 H_PARTY_ID(l_party_id_idx) := l_party_id;
2891 l_party_id_idx:= l_party_id_idx+1;
2892 END IF;
2893 IF (l_party_id_idx-1)>l_max_thresh THEN
2894 IF p_index=1 AND call_order(2) = 'PARTY_SITE'
2895 AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
2896 AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL'
2897 AND l_contact_pt_contains_str IS NULL THEN
2898 EXIT;
2899 END IF;
2900 CLOSE l_party_cur;
2901 IF p_index>1 THEN
2902 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2903 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);
2904 END IF;
2905 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2906 FND_MSG_PUB.ADD;
2907 RAISE FND_API.G_EXC_ERROR;
2908 ELSE
2909 push_eval;
2910 RETURN;
2911 END IF;
2912 END IF;
2913 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2914 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);
2915 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);
2916 END IF;
2917 END LOOP;
2918 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2919 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);
2920 END IF;
2921 CLOSE l_party_cur;
2922 ROLLBACK to eval_start;
2923 END;
2924
2925 /** Private procedure to acquire and score at party site level ***/
2926 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
2927 l_party_id_idx NUMBER:=1;
2928 l_ctx_id NUMBER;
2929 h_ps_id HZ_PARTY_SEARCH.IDList;
2930 h_ps_party_id HZ_PARTY_SEARCH.IDList;
2931 h_ps_score HZ_PARTY_SEARCH.IDList;
2932 detcnt NUMBER := 1;
2933 BEGIN
2934 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2935 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);
2936 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);
2937 END IF;
2938 IF (l_party_contains_str IS NOT NULL AND instrb(l_party_contains_str,'D_PS')>0
2939 AND l_contact_contains_str IS NULL and H_PARTY_ID.COUNT > 0 and
2940 l_contact_pt_contains_str IS NULL) AND g_ps_den_only AND p_ins_details <> 'Y' THEN
2941 l_party_id := H_SCORES.FIRST;
2942 WHILE l_party_id IS NOT NULL LOOP
2943 H_SCORES(l_party_id).TOTAL_SCORE := H_SCORES(l_party_id).TOTAL_SCORE + p_emax_score;
2944 l_party_id:=H_SCORES.NEXT(l_party_id);
2945 END LOOP;
2946 RETURN;
2947 END IF;
2948 SAVEPOINT eval_start;
2949 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
2950 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2951 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);
2952 END IF;
2953 l_ctx_id := l_search_ctx_id;
2954 FORALL I in 1..H_PARTY_ID.COUNT
2955 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2956 l_search_ctx_id,H_PARTY_ID(I));
2957 H_PARTY_ID.DELETE;
2958 H_PARTY_ID_LIST.DELETE;
2959 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
2960 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2961 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);
2962 END IF;
2963 l_ctx_id := l_search_ctx_id;
2964 FORALL I in 1..H_PARTY_ID.COUNT
2965 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
2966 l_search_ctx_id,H_PARTY_ID(I));
2967 l_party_id_idx := H_PARTY_ID.COUNT+1;
2968 ELSE
2969 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
2970 and check_estimate_hits('PARTY_SITES',p_party_site_contains_str)>l_max_thresh THEN
2971 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2972 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);
2973 END IF;
2974 IF p_index>1 THEN
2975 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2976 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);
2977 END IF;
2978 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
2979 FND_MSG_PUB.ADD;
2980 RAISE FND_API.G_EXC_ERROR;
2981 ELSE
2982 push_eval;
2983 RETURN;
2984 END IF;
2985 END IF;
2986 l_party_id_idx := H_PARTY_ID.COUNT+1;
2987 l_ctx_id := NULL;
2988 END IF;
2989 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
2990 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);
2991 END IF;
2992 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);
2993 LOOP
2994 FETCH l_party_site_cur INTO
2995 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;
2996 EXIT WHEN l_party_site_cur%NOTFOUND;
2997 --Fix for bug 4417124
2998 IF l_use_contact_addr_info OR l_ps_contact_id IS NULL THEN
2999 l_index := map_id(l_ps_party_id);
3000 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);
3001 IF NOT H_SCORES.EXISTS(l_index) THEN
3002 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);
3003 ELSE
3004 IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3005 H_SCORES(l_index).TOTAL_SCORE :=
3006 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3007 H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3008 END IF;
3009 END IF;
3010 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3011 H_PARTY_ID_LIST(l_index) := 1;
3012 H_PARTY_ID(l_party_id_idx) := l_ps_party_id;
3013 l_party_id_idx:= l_party_id_idx+1;
3014 END IF;
3015 IF p_ins_details = 'Y' THEN
3016 h_ps_id(detcnt) := l_party_site_id;
3017 h_ps_party_id(detcnt) := l_ps_party_id;
3018 IF (p_emax_score > 0) THEN
3019 h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
3020 ELSE
3021 h_ps_score(detcnt) := 0;
3022 END IF;
3023 detcnt := detcnt +1;
3024 END IF;
3025 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3026 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);
3027 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);
3028 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);
3029 END IF;
3030 END IF;
3031 END LOOP;
3032 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3033 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);
3034 END IF;
3035 CLOSE l_party_site_cur;
3036 ROLLBACK to eval_start;
3037 IF p_ins_details = 'Y' THEN
3038 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3039 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);
3040 END IF;
3041 FORALL I in 1..h_ps_id.COUNT
3042 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
3043 l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
3044 END IF;
3045 END;
3046
3047 /** Private procedure to acquire and score at contact point level ***/
3048 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
3049 l_party_id_idx NUMBER:=1;
3050 l_ctx_id NUMBER;
3051 h_ct_id HZ_PARTY_SEARCH.IDList;
3052 h_ct_party_id HZ_PARTY_SEARCH.IDList;
3053 h_ct_score HZ_PARTY_SEARCH.IDList;
3054 detcnt NUMBER := 1;
3055 BEGIN
3056 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3057 hz_utility_v2pub.debug(p_message=>'-----------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3058 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);
3059 END IF;
3060 SAVEPOINT eval_start;
3061 IF l_match_str = ' AND ' AND p_call_type='AND' THEN
3062 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3063 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);
3064 END IF;
3065 l_ctx_id := l_search_ctx_id;
3066 FORALL I in 1..H_PARTY_ID.COUNT
3067 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3068 l_search_ctx_id,H_PARTY_ID(I));
3069 H_PARTY_ID.DELETE;
3070 H_PARTY_ID_LIST.DELETE;
3071 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3072 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3073 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);
3074 END IF;
3075 l_ctx_id := l_search_ctx_id;
3076 FORALL I in 1..H_PARTY_ID.COUNT
3077 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3078 l_search_ctx_id,H_PARTY_ID(I));
3079 l_party_id_idx := H_PARTY_ID.COUNT+1;
3080 ELSE
3081 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3082 and check_estimate_hits('CONTACTS',p_contact_contains_str)>l_max_thresh THEN
3083 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3084 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);
3085 END IF;
3086 IF p_index>1 THEN
3087 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3088 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);
3089 END IF;
3090 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3091 FND_MSG_PUB.ADD;
3092 RAISE FND_API.G_EXC_ERROR;
3093 ELSE
3094 push_eval;
3095 RETURN;
3096 END IF;
3097 END IF;
3098 l_ctx_id := NULL;
3099 l_party_id_idx := H_PARTY_ID.COUNT+1;
3100 END IF;
3101 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3102 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);
3103 END IF;
3104 open_contact_cursor(p_dup_party_id,NULL, p_restrict_sql, p_contact_contains_str,l_ctx_id, p_search_merged, l_contact_cur);
3105 LOOP
3106 FETCH l_contact_cur INTO
3107 l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
3108 EXIT WHEN l_contact_cur%NOTFOUND;
3109 l_index := map_id(l_ct_party_id);
3110 l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
3111 IF NOT H_SCORES.EXISTS(l_index) THEN
3112 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);
3113 ELSE
3114 IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
3115 H_SCORES(l_index).TOTAL_SCORE :=
3116 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
3117 H_SCORES(l_index).CONTACT_SCORE := l_score;
3118 END IF;
3119 END IF;
3120 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3121 H_PARTY_ID_LIST(l_index) := 1;
3122 H_PARTY_ID(l_party_id_idx) := l_ct_party_id;
3123 l_party_id_idx:= l_party_id_idx+1;
3124 END IF;
3125 IF p_ins_details = 'Y' THEN
3126 h_ct_id(detcnt) := l_org_contact_id;
3127 h_ct_party_id(detcnt) := l_ct_party_id;
3128 IF (p_emax_score > 0) THEN
3129 h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
3130 ELSE
3131 h_ct_score(detcnt) := 0;
3132 END IF;
3133 detcnt := detcnt +1;
3134 END IF;
3135 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3136 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);
3137 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);
3138 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);
3139 END IF;
3140 END LOOP;
3141 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3142 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);
3143 END IF;
3144 CLOSE l_contact_cur;
3145 ROLLBACK to eval_start;
3146 IF p_ins_details = 'Y' THEN
3147 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3148 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);
3149 END IF;
3150 FORALL I in 1..h_ct_id.COUNT
3151 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
3152 l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
3153 END IF;
3154 END;
3155
3156 /** Private procedure to acquire and score at contact point level ***/
3157 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
3158 l_party_id_idx NUMBER:=1;
3159 l_ctx_id NUMBER;
3160 h_cpt_id HZ_PARTY_SEARCH.IDList;
3161 h_cpt_party_id HZ_PARTY_SEARCH.IDList;
3162 h_cpt_score HZ_PARTY_SEARCH.IDList;
3163 detcnt NUMBER := 1;
3164 l_cpt_flag VARCHAR2(1) := 'N';
3165 is_a_match VARCHAR2(1) := 'Y';
3166 BEGIN
3167 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3168 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);
3169 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);
3170 END IF;
3171 SAVEPOINT eval_start;
3172 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3173 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3174 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);
3175 END IF;
3176 l_ctx_id := l_search_ctx_id;
3177 FORALL I in 1..H_PARTY_ID.COUNT
3178 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3179 l_search_ctx_id,H_PARTY_ID(I));
3180 H_PARTY_ID.DELETE;
3181 H_PARTY_ID_LIST.DELETE;
3182 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3183 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3184 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);
3185 END IF;
3186 l_ctx_id := l_search_ctx_id;
3187 FORALL I in 1..H_PARTY_ID.COUNT
3188 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3189 l_search_ctx_id,H_PARTY_ID(I));
3190 l_party_id_idx := H_PARTY_ID.COUNT+1;
3191 ELSE
3192 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3193 and check_estimate_hits('CONTACT_POINTS',p_contact_pt_contains_str)>l_max_thresh THEN
3194 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3195 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);
3196 END IF;
3197 IF p_index>1 THEN
3198 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3199 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);
3200 END IF;
3201 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3202 FND_MSG_PUB.ADD;
3203 RAISE FND_API.G_EXC_ERROR;
3204 ELSE
3205 push_eval;
3206 RETURN;
3207 END IF;
3208 END IF;
3209 l_ctx_id := NULL;
3210 l_party_id_idx := H_PARTY_ID.COUNT+1;
3211 END IF;
3212 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3213 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);
3214 END IF;
3215 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);
3216 LOOP
3217 FETCH l_contact_pt_cur INTO
3218 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;
3219 EXIT WHEN l_contact_pt_cur%NOTFOUND;
3220 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3221 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);
3222 END IF;
3223 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3224 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);
3225 END IF;
3226 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3227 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);
3228 END IF;
3229 --Fix for bug 4417124
3230 IF l_use_contact_cpt_info OR l_cpt_contact_id IS NULL THEN
3231 l_index := map_id(l_cpt_party_id);
3232 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
3233 IF NOT H_SCORES.EXISTS(l_index) THEN
3234 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);
3235 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3236 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3237 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);
3238 END IF;
3239 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3240 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);
3241 END IF;
3242 ELSE
3243 IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
3244 IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
3245 H_SCORES(l_index).TOTAL_SCORE :=
3246 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;
3247 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;
3248 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3249 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3250 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);
3251 END IF;
3252 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3253 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);
3254 END IF;
3255 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3256 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);
3257 END IF;
3258 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3259 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);
3260 END IF;
3261 END IF;
3262 ELSE
3263 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3264 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);
3265 END IF;
3266 H_SCORES(l_index).TOTAL_SCORE :=
3267 H_SCORES(l_index).TOTAL_SCORE+l_score;
3268 H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
3269 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
3270 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3271 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);
3272 END IF;
3273 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3274 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);
3275 END IF;
3276 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3277 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);
3278 END IF;
3279 END IF;
3280 END IF;
3281 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3282 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);
3283 END IF;
3284 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3285 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);
3286 END IF;
3287 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) THEN
3288 -- If rule is match all
3289 IF l_match_str = ' AND ' THEN
3290 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3291 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);
3292 END IF;
3293 IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3294 is_a_match := 'Y';
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 ELSE
3299 is_a_match := 'N';
3300 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3301 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);
3302 END IF;
3303 END IF;
3304 -- Else it is construed to be a match anyway
3305 ELSE
3306 is_a_match := 'Y';
3307 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3308 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);
3309 END IF;
3310 END IF;
3311 IF (is_a_match='Y') then
3312 H_PARTY_ID_LIST(l_index) := 1;
3313 H_PARTY_ID(l_party_id_idx) := l_cpt_party_id;
3314 l_party_id_idx:= l_party_id_idx+1;
3315 end if;
3316 END IF;
3317 IF p_ins_details = 'Y' THEN
3318 IF l_match_str = ' AND ' THEN
3319 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3320 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);
3321 END IF;
3322 IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
3323 is_a_match := 'Y';
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 ELSE
3328 is_a_match := 'N';
3329 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3330 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);
3331 END IF;
3332 END IF;
3333 ELSE
3334 is_a_match := 'Y';
3335 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3336 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);
3337 END IF;
3338 END IF;
3339 IF (is_a_match='Y') THEN
3340 FOR I IN 1..h_cpt_id.COUNT LOOP
3341 IF h_cpt_id(I)=l_contact_pt_id THEN
3342 l_cpt_flag := 'Y';
3343 END IF;
3344 END LOOP;
3345 IF l_cpt_flag = 'Y' THEN
3346 NULL;
3347 ELSE
3348 h_cpt_id(detcnt) := l_contact_pt_id;
3349 h_cpt_party_id(detcnt) := l_cpt_party_id;
3350 IF (p_emax_score > 0) THEN
3351 h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
3352 ELSE
3353 h_cpt_score(detcnt) := 0;
3354 END IF;
3355 detcnt := detcnt +1;
3356 END IF;
3357 end if;
3358 END IF;
3359 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3360 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);
3361 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);
3362 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);
3363 END IF;
3364 END IF;
3365 END LOOP;
3366 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3367 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);
3368 END IF;
3369 CLOSE l_contact_pt_cur;
3370 ROLLBACK to eval_start;
3371 IF p_ins_details = 'Y' THEN
3372 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3373 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);
3374 END IF;
3375 FORALL I in 1..h_cpt_id.COUNT
3376 INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
3377 l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
3378 END IF;
3379 END eval_cpt_level;
3380
3381 /** Private procedure to call the eval procedure at each entity in the correct order ***/
3382 PROCEDURE do_eval (p_index NUMBER) IS
3383 l_ctx_id NUMBER;
3384 l_threshold NUMBER;
3385 other_acq_criteria_exists BOOLEAN;
3386 acq_cnt NUMBER;
3387 BEGIN
3388 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3389 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);
3390 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);
3391 END IF;
3392 IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
3393 l_threshold := round(( l_entered_max_score / 700) * 77);
3394 other_acq_criteria_exists := TRUE ;
3395 --check if acquisition criteria exists for any other entity
3396 IF l_party_contains_str IS NOT NULL THEN
3397 acq_cnt := 1;
3398 END IF;
3399 IF l_party_site_contains_str IS NOT NULL THEN
3400 acq_cnt := acq_cnt+1;
3401 END IF;
3402 IF l_contact_contains_str IS NOT NULL THEN
3403 acq_cnt := acq_cnt+1;
3404 END IF;
3405 IF l_contact_pt_contains_str IS NOT NULL THEN
3406 acq_cnt := acq_cnt+1;
3407 END IF;
3408 IF acq_cnt>1 THEN
3409 other_acq_criteria_exists := TRUE;
3410 ELSE
3411 other_acq_criteria_exists := FALSE;
3412 END IF;
3413 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);
3414 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);
3415 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);
3416 IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
3417 IF ( call_max_score(p_index) < l_threshold) THEN
3418 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3419 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);
3420 END IF;
3421 RETURN;
3422 ELSE
3423 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3424 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);
3425 END IF;
3426 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3427 FND_MSG_PUB.ADD;
3428 RAISE FND_API.G_EXC_ERROR;
3429 END IF;
3430 ELSE
3431 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3432 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);
3433 END IF;
3434 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3435 FND_MSG_PUB.ADD;
3436 RAISE FND_API.G_EXC_ERROR;
3437 END IF;
3438 END IF;
3439 IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
3440 eval_party_level(l_party_contains_str,call_type(p_index), p_index);
3441 ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
3442 eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3443 ELSIF call_order(p_index) = 'CONTACT' AND l_contact_contains_str IS NOT NULL THEN
3444 eval_contact_level(l_contact_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3445 ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
3446 eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
3447 END IF;
3448 END;
3449 /************ End of find_parties private procedures **********/
3450
3451 BEGIN
3452
3453 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3454 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);
3455 END IF;
3456 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3457 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);
3458 END IF;
3459 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3460 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);
3461 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);
3462 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);
3463 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);
3464 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);
3465 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);
3466 END IF;
3467 -- ************************************
3468 -- STEP 1. Initialization and error checks
3469
3470 l_match_str := ' AND ';
3471 IF p_match_type = 'AND' THEN
3472 l_match_str := ' AND ';
3473 ELSIF p_match_type = 'OR' THEN
3474 l_match_str := ' OR ';
3475 END IF;
3476 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);
3477 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
3478
3479
3480 --Fix for bug 4417124
3481
3482 SELECT use_contact_addr_flag, use_contact_cpt_flag
3483 INTO l_use_contact_addr_flag, l_use_contact_cpt_flag
3484 FROM hz_match_rules_b
3485 WHERE match_rule_id = 33;
3486
3487 IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
3488 l_use_contact_addr_info := FALSE;
3489 END IF;
3490
3491 IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
3492 l_use_contact_cpt_info := FALSE;
3493 END IF;
3494
3495 --End fix for bug 4417124
3496
3497 IF p_dup_batch_id IS NOT NULL THEN
3498 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH_BATCH'),10000);
3499 ELSE
3500 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
3501 END IF;
3502 IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
3503 g_score_until_thresh := true;
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 true',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3506 END IF;
3507 ELSE
3508 g_score_until_thresh := false;
3509 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3510 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);
3511 END IF;
3512 END IF;
3513 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3514 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);
3515 END IF;
3516 -- ************************************************************
3517 -- STEP 2. Setup of intermedia query strings for Acquisition query
3518 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
3519 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
3520 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
3521 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3522 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);
3523 END IF;
3524 l_denorm_max_score:=0;
3525 l_non_denorm_max_score:=0;
3526 IF l_ps_denorm_str IS NOT NULL THEN
3527 l_denorm_max_score := l_denorm_max_score+l_ps_max_score;
3528 l_denorm_str := l_ps_denorm_str;
3529 ELSE
3530 l_non_denorm_max_score := l_non_denorm_max_score+l_ps_max_score;
3531 END IF;
3532 IF l_ct_denorm_str IS NOT NULL THEN
3533 l_denorm_max_score := l_denorm_max_score+l_contact_max_score;
3534 IF l_denorm_str IS NOT NULL THEN
3535 l_denorm_str := l_denorm_str || ' OR ' ||l_ct_denorm_str;
3536 ELSE
3537 l_denorm_str := l_ct_denorm_str;
3538 END IF;
3539 ELSE
3540 l_non_denorm_max_score := l_non_denorm_max_score+l_contact_max_score;
3541 END IF;
3542 IF l_cpt_denorm_str IS NOT NULL THEN
3543 l_denorm_max_score := l_denorm_max_score+l_cpt_max_score;
3544 IF l_denorm_str IS NOT NULL THEN
3545 l_denorm_str := l_denorm_str || ' OR ' ||l_cpt_denorm_str;
3546 ELSE
3547 l_denorm_str := l_cpt_denorm_str;
3548 END IF;
3549 ELSE
3550 l_non_denorm_max_score := l_non_denorm_max_score+l_cpt_max_score;
3551 END IF;
3552 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));
3553 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
3554
3555 -- Setup Search Context ID
3556 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
3557 x_search_ctx_id := l_search_ctx_id;
3558
3559 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3560 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);
3561 END IF;
3562 IF l_party_contains_str IS NULL THEN
3563 defpt := 1;
3564 END IF;
3565 IF l_party_site_contains_str IS NULL THEN
3566 defps := 1;
3567 END IF;
3568 IF l_contact_contains_str IS NULL THEN
3569 defct := 1;
3570 END IF;
3571 IF l_contact_pt_contains_str IS NULL THEN
3572 defcpt := 1;
3573 END IF;
3574
3575 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3576 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3577 hz_utility_v2pub.debug(p_message=>'------------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3578 END IF;
3579 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);
3580 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);
3581 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);
3582 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);
3583 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);
3584 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);
3585 END IF;
3586 FOR I in 1..5 LOOP
3587 do_eval(I);
3588 END LOOP;
3589 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3590 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);
3591 END IF;
3592 x_num_matches := 0;
3593 l_num_eval := 0;
3594 IF l_match_str = ' OR ' THEN
3595 l_party_id := H_SCORES.FIRST;
3596 ELSE
3597 l_party_id := H_PARTY_ID_LIST.FIRST;
3598 END IF;
3599 WHILE l_party_id IS NOT NULL LOOP
3600 l_num_eval:= l_num_eval+1;
3601 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3602 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3603 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);
3604 END IF;
3605 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);
3606 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);
3607 END IF;
3608 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3609 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);
3610 END IF;
3611 IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(77/700) THEN
3612 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
3613 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));
3614 x_num_matches := x_num_matches+1;
3615 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3616 hz_utility_v2pub.debug(p_message=>'----------------------',p_module_prefix=>'dqm',p_module=>'hz_match_rule_xxx',p_prefix=>NULL,p_msg_level=>fnd_log.level_statement);
3617 END IF;
3618 END IF;
3619 IF l_match_str = ' OR ' THEN
3620 l_party_id:=H_SCORES.NEXT(l_party_id);
3621 ELSE
3622 l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
3623 END IF;
3624 END LOOP;
3625 HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
3626 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3627 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);
3628 END IF;
3629 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3630 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);
3631 END IF;
3632 EXCEPTION
3633 WHEN L_RETURN_IMM_EXC THEN
3634 RETURN;
3635 WHEN FND_API.G_EXC_ERROR THEN
3636 RAISE FND_API.G_EXC_ERROR;
3637 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
3638 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3639 WHEN OTHERS THEN
3640 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
3641 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_parties');
3642 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
3643 FND_MSG_PUB.ADD;
3644 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3645 END find_parties;
3646
3647 PROCEDURE find_persons (
3648 p_rule_id IN NUMBER,
3649 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
3650 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
3651 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
3652 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
3653 p_restrict_sql IN VARCHAR2,
3654 p_match_type IN VARCHAR2,
3655 p_search_merged IN VARCHAR2,
3656 p_dup_party_id IN NUMBER,
3657 p_dup_set_id IN NUMBER,
3658 p_dup_batch_id IN NUMBER,
3659 p_ins_details IN VARCHAR2,
3660 x_search_ctx_id OUT NUMBER,
3661 x_num_matches OUT NUMBER
3662 ) IS
3663
3664 -- Strings to hold the generated Intermedia query strings
3665 l_party_contains_str VARCHAR2(32000);
3666 l_party_site_contains_str VARCHAR2(32000);
3667 l_contact_contains_str VARCHAR2(32000);
3668 l_contact_pt_contains_str VARCHAR2(32000);
3669 l_denorm_str VARCHAR2(32000);
3670 l_ps_denorm_str VARCHAR2(32000);
3671 l_ct_denorm_str VARCHAR2(32000);
3672 l_cpt_denorm_str VARCHAR2(32000);
3673
3674 -- Other local variables
3675 l_match_str VARCHAR2(30); -- Match type (AND or OR)
3676 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
3677 -- For Score calculation
3678 l_max_score NUMBER;
3679 l_match_idx NUMBER;
3680 l_entered_max_score NUMBER;
3681 FIRST BOOLEAN;
3682 l_search_ctx_id NUMBER; -- Generated Search Context ID
3683
3684 l_TX39 VARCHAR2(2000);
3685 l_TX32 VARCHAR2(2000);
3686 l_TX33 VARCHAR2(2000);
3687 l_TX9 VARCHAR2(2000);
3688 l_TX22 VARCHAR2(2000);
3689 l_TX35 VARCHAR2(2000);
3690 l_TX1 VARCHAR2(2000);
3691 l_TX3 VARCHAR2(2000);
3692 l_TX15 VARCHAR2(2000);
3693 l_TX4 VARCHAR2(2000);
3694 l_TX10 VARCHAR2(2000);
3695 l_TX11 VARCHAR2(2000);
3696 l_TX5 VARCHAR2(2000);
3697 l_TX40 VARCHAR2(2000);
3698 l_TX34 VARCHAR2(2000);
3699 l_TX14 VARCHAR2(2000);
3700 l_TX17 VARCHAR2(2000);
3701 l_TX6 VARCHAR2(2000);
3702 H_SCORES HZ_PARTY_SEARCH.score_list;
3703 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
3704 H_PARTY_ID_LIST HZ_PARTY_SEARCH.IDList;
3705
3706 l_score NUMBER;
3707 l_idx NUMBER;
3708 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
3709 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
3710 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
3711 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
3712 l_party_id NUMBER;
3713 l_ps_party_id NUMBER;
3714 l_ct_party_id NUMBER;
3715 l_cpt_party_id NUMBER;
3716 l_cpt_ps_id NUMBER;
3717 l_cpt_contact_id NUMBER;
3718 l_cpt_type VARCHAR2(100);
3719 l_party_site_id NUMBER;
3720 l_org_contact_id NUMBER;
3721 l_contact_pt_id NUMBER;
3722 l_cpt_level VARCHAR2(100);
3723 l_ps_contact_id NUMBER;
3724 l_party_max_score NUMBER;
3725 l_ps_max_score NUMBER;
3726 l_contact_max_score NUMBER;
3727 l_cpt_max_score NUMBER;
3728 l_denorm_max_score NUMBER;
3729 l_non_denorm_max_score NUMBER;
3730
3731 defpt NUMBER :=0;
3732 defps NUMBER :=0;
3733 defct NUMBER :=0;
3734 defcpt NUMBER :=0;
3735 l_index NUMBER;
3736 l_max_thresh NUMBER;
3737 l_tmp NUMBER;
3738 l_merge_flag VARCHAR2(1);
3739 l_num_eval NUMBER:=0;
3740
3741 L_RETURN_IMM_EXC Exception;
3742
3743
3744 /********************* Find Parties private procedures *******/
3745 PROCEDURE set_person_party_type IS
3746 BEGIN
3747 g_party_stage_rec.TX36:=
3748 HZ_TRANS_PKG.EXACT(
3749 'PERSON'
3750 ,null,'PARTY_TYPE'
3751 ,'PARTY');
3752 END;
3753
3754 PROCEDURE unset_person_party_type IS
3755 BEGIN
3756 g_party_stage_rec.TX36 := '';
3757 END;
3758
3759 FUNCTION get_person_id(p_party_id NUMBER, p_contact_id NUMBER)
3760 RETURN NUMBER IS
3761 l_party_type VARCHAR2(255);
3762 l_person_id NUMBER(15);
3763 BEGIN
3764 SELECT party_type INTO l_party_type from hz_parties where party_id = p_party_id;
3765 IF l_party_type = 'PERSON' THEN
3766 RETURN p_party_id;
3767 ELSIF p_contact_id IS NULL THEN
3768 RETURN NULL;
3769 ELSE
3770 BEGIN
3771 SELECT subject_id INTO l_person_id FROM HZ_RELATIONSHIPS r, HZ_ORG_CONTACTS oc, hz_parties p
3772 WHERE oc.org_contact_id = p_contact_id
3773 AND r.relationship_id = oc.party_relationship_id
3774 AND r.object_id = p_party_id
3775 AND p.party_id = r.subject_id
3776 AND p.party_type = 'PERSON'
3777 AND ROWNUM=1;
3778
3779 RETURN l_person_id;
3780 EXCEPTION
3781 WHEN NO_DATA_FOUND THEN
3782 RETURN NULL;
3783 END;
3784 END IF;
3785 END;
3786
3787 PROCEDURE push_eval IS
3788 BEGIN
3789 H_PARTY_ID.DELETE;
3790 H_PARTY_ID_LIST.DELETE;
3791 H_SCORES.DELETE;
3792 g_mappings.DELETE;
3793 HZ_DQM_SEARCH_UTIL.set_num_eval(0);
3794 call_order(5) := call_order(1);
3795 call_type(5) := 'AND';
3796 call_max_score(5) := call_max_score(1);
3797 call_type(2) := 'OR';
3798 END;
3799
3800 /** Private procedure to acquire and score at party level ***/
3801 PROCEDURE eval_party_level(p_party_contains_str VARCHAR2,p_call_type VARCHAR2, p_index NUMBER) IS
3802 l_party_id_idx NUMBER:=1;
3803 l_ctx_id NUMBER;
3804 l_TX35_new varchar2(4000);
3805 BEGIN
3806 SAVEPOINT eval_start;
3807 set_person_party_type;
3808 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3809 l_ctx_id := l_search_ctx_id;
3810 FORALL I in 1..H_PARTY_ID.COUNT
3811 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3812 l_search_ctx_id,H_PARTY_ID(I));
3813 H_PARTY_ID.DELETE;
3814 H_PARTY_ID_LIST.DELETE;
3815 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3816 l_ctx_id := l_search_ctx_id;
3817 FORALL I in 1..H_PARTY_ID.COUNT
3818 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3819 l_search_ctx_id,H_PARTY_ID(I));
3820 l_party_id_idx := H_PARTY_ID.COUNT+1;
3821 ELSE
3822 IF (p_restrict_sql IS NULL OR instrb(p_restrict_sql, 'SELECTIVE')=0)
3823 and check_estimate_hits('PARTY',p_party_contains_str)>l_max_thresh THEN
3824 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3825 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);
3826 END IF;
3827 IF g_party_stage_rec.TX8 IS NOT NULL AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL' THEN
3828 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3829 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);
3830 END IF;
3831 IF (l_party_site_contains_str IS NULL AND
3832 l_contact_contains_str IS NULL AND
3833 l_contact_pt_contains_str IS NULL) AND NOT g_other_party_level_attribs IS NULL THEN
3834 return_direct_matches(p_restrict_sql,l_match_str,l_max_thresh,l_search_ctx_id,null,null, x_num_matches);
3835 RAISE L_RETURN_IMM_EXC;
3836 ELSE
3837 open_party_cursor_direct(p_dup_party_id, p_restrict_sql, l_match_str,null,p_party_contains_str,l_party_cur);
3838 END IF;
3839 ELSE
3840 IF p_index>1 THEN
3841 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3842 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);
3843 END IF;
3844 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3845 FND_MSG_PUB.ADD;
3846 RAISE FND_API.G_EXC_ERROR;
3847 ELSE
3848 push_eval;
3849 RETURN;
3850 END IF;
3851 END IF;
3852 END IF;
3853 l_ctx_id := NULL;
3854 l_party_id_idx := H_PARTY_ID.COUNT+1;
3855 END IF;
3856 IF l_party_cur IS NULL OR (not l_party_cur%ISOPEN) THEN
3857 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);
3858 END IF;
3859 LOOP
3860 FETCH l_party_cur INTO
3861 l_party_id , l_TX32, l_TX33, l_TX34, l_TX35, l_TX40, l_TX39;
3862 EXIT WHEN l_party_cur%NOTFOUND;
3863 l_index := map_id(l_party_id);
3864 l_TX35_new:=RTRIM(LTRIM(l_TX35));
3865 l_TX35_new:=(CASE l_TX35_new WHEN 'SYNC' THEN HZ_STAGE_MAP_TRANSFORM.den_acc_number (l_party_id) ELSE l_TX35_new END);
3866 l_score := GET_PARTY_SCORE(l_TX32,l_TX33,l_TX34,l_TX35_new,l_TX40,l_TX39);
3867 IF NOT H_SCORES.EXISTS(l_index) THEN
3868 H_SCORES(l_index) := get_new_score_rec(l_score,l_score,defps,defct,defcpt, l_party_id, null, null,null);
3869 ELSE
3870 H_SCORES(l_index).TOTAL_SCORE :=
3871 H_SCORES(l_index).TOTAL_SCORE+l_score;
3872 H_SCORES(l_index).PARTY_SCORE := l_score;
3873 END IF;
3874 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3875 H_PARTY_ID_LIST(l_index) := 1;
3876 H_PARTY_ID(l_party_id_idx) := l_party_id;
3877 l_party_id_idx:= l_party_id_idx+1;
3878 END IF;
3879 IF (l_party_id_idx-1)>l_max_thresh THEN
3880 IF p_index=1 AND call_order(2) = 'PARTY_SITE'
3881 AND call_type(2) = 'AND' AND l_contact_contains_str IS NULL
3882 AND nvl(FND_PROFILE.VALUE('HZ_DQM_PN_THRESH_RESOLUTION'),'NONE')='SQL'
3883 AND l_contact_pt_contains_str IS NULL THEN
3884 H_PARTY_ID.DELETE(l_party_id_idx-1);
3885 H_PARTY_ID_LIST.DELETE(l_index);
3886 H_SCORES.DELETE(l_index);
3887 EXIT;
3888 END IF;
3889 CLOSE l_party_cur;
3890 IF p_index>1 THEN
3891 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3892 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);
3893 END IF;
3894 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
3895 FND_MSG_PUB.ADD;
3896 RAISE FND_API.G_EXC_ERROR;
3897 ELSE
3898 push_eval;
3899 RETURN;
3900 END IF;
3901 END IF;
3902 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
3903 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);
3904 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);
3905 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);
3906 END IF;
3907 END LOOP;
3908 CLOSE l_party_cur;
3909 ROLLBACK to eval_start;
3910 END;
3911 PROCEDURE open_person_contact_cursor(
3912 p_contains_str VARCHAR2,
3913 p_search_ctx_id NUMBER,
3914 x_cursor OUT HZ_PARTY_STAGE.StageCurTyp) IS
3915 BEGIN
3916 OPEN x_cursor FOR
3917 SELECT /*+ INDEX(stage HZ_STAGED_CONTACTS_U1) */ ORG_CONTACT_ID, PARTY_ID, TX6, TX5
3918 FROM HZ_STAGED_CONTACTS stage
3919 WHERE contains( concat_col, p_contains_str)>0
3920 AND ORG_CONTACT_ID in (
3921 SELECT /*+ ORDERED INDEX(d hz_dqm_parties_gt_n1) USE_NL(d r)*/
3922 org_contact_id
3923 from hz_dqm_parties_gt d, hz_relationships r, hz_org_contacts oc
3924 where d.party_id = r.subject_id
3925 and oc.party_relationship_id = r.relationship_id
3926 and d.search_context_id = p_search_ctx_id);
3927 exception
3928 when others then
3929 if (instrb(SQLERRM,'DRG-51030')>0) then
3930 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_WILDCARD_ERR');
3931 FND_MSG_PUB.ADD;
3932 RAISE FND_API.G_EXC_ERROR;
3933 elsif (instrb(SQLERRM,'DRG-50943')>0) then
3934 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_SEARCH_ERROR');
3935 FND_MSG_PUB.ADD;
3936 RAISE FND_API.G_EXC_ERROR;
3937 else
3938 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
3939 end if;
3940 END;
3941
3942 /** Private procedure to acquire and score at party site level ***/
3943 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
3944 l_party_id_idx NUMBER:=1;
3945 l_ctx_id NUMBER;
3946 h_ps_id HZ_PARTY_SEARCH.IDList;
3947 h_ps_party_id HZ_PARTY_SEARCH.IDList;
3948 h_ps_score HZ_PARTY_SEARCH.IDList;
3949 detcnt NUMBER := 1;
3950 l_person_id NUMBER;
3951 BEGIN
3952 SAVEPOINT eval_start;
3953 unset_person_party_type;
3954 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
3955 l_ctx_id := l_search_ctx_id;
3956 FORALL I in 1..H_PARTY_ID.COUNT
3957 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3958 l_search_ctx_id,H_PARTY_ID(I));
3959 H_PARTY_ID.DELETE;
3960 H_PARTY_ID_LIST.DELETE;
3961 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
3962 l_ctx_id := l_search_ctx_id;
3963 FORALL I in 1..H_PARTY_ID.COUNT
3964 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
3965 l_search_ctx_id,H_PARTY_ID(I));
3966 l_party_id_idx := H_PARTY_ID.COUNT+1;
3967 ELSE
3968 l_party_id_idx := H_PARTY_ID.COUNT+1;
3969 l_ctx_id := NULL;
3970 END IF;
3971 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);
3972 LOOP
3973 FETCH l_party_site_cur INTO
3974 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;
3975 EXIT WHEN l_party_site_cur%NOTFOUND;
3976 IF l_ctx_id IS NULL THEN
3977 l_person_id := get_person_id(l_ps_party_id, l_ps_contact_id);
3978 ELSE
3979 l_person_id := l_ps_party_id;
3980 END IF;
3981 IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
3982 l_index := map_id(l_person_id);
3983 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);
3984 IF NOT H_SCORES.EXISTS(l_index) THEN
3985 IF l_ctx_id IS NULL THEN
3986 H_SCORES(l_index) := get_new_score_rec(l_score,defpt,l_score,defct,defcpt, l_person_id, l_party_site_id, null,null);
3987 END IF;
3988 ELSE
3989 IF l_score > H_SCORES(l_index).PARTY_SITE_SCORE THEN
3990 H_SCORES(l_index).TOTAL_SCORE :=
3991 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).PARTY_SITE_SCORE+l_score;
3992 H_SCORES(l_index).PARTY_SITE_SCORE := l_score;
3993 END IF;
3994 END IF;
3995 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
3996 H_PARTY_ID_LIST(l_index) := 1;
3997 H_PARTY_ID(l_party_id_idx) := l_person_id;
3998 l_party_id_idx:= l_party_id_idx+1;
3999 END IF;
4000 IF (l_party_id_idx-1)>l_max_thresh THEN
4001 CLOSE l_party_site_cur;
4002 IF p_index>1 THEN
4003 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4004 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);
4005 END IF;
4006 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4007 FND_MSG_PUB.ADD;
4008 RAISE FND_API.G_EXC_ERROR;
4009 ELSE
4010 push_eval;
4011 RETURN;
4012 END IF;
4013 END IF;
4014 IF p_ins_details = 'Y' THEN
4015 h_ps_id(detcnt) := l_party_site_id;
4016 h_ps_party_id(detcnt) := l_person_id;
4017 IF (p_emax_score > 0) THEN
4018 h_ps_score(detcnt) := round((l_score/p_emax_score)*100);
4019 ELSE
4020 h_ps_score(detcnt) := 0;
4021 END IF;
4022 detcnt := detcnt +1;
4023 END IF;
4024 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4025 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);
4026 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);
4027 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);
4028 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);
4029 END IF;
4030 END IF;
4031 END LOOP;
4032 CLOSE l_party_site_cur;
4033 ROLLBACK to eval_start;
4034 IF p_ins_details = 'Y' THEN
4035 FORALL I in 1..h_ps_id.COUNT
4036 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID,PARTY_SITE_ID,PARTY_ID,SCORE) VALUES (
4037 l_search_ctx_id, h_ps_id(I), h_ps_party_id(I), h_ps_score(I));
4038 END IF;
4039 END;
4040
4041 /** Private procedure to acquire and score at party site level ***/
4042 PROCEDURE eval_contact_level(p_contact_contains_str VARCHAR2,p_ins_details VARCHAR2,p_emax_score NUMBER) IS
4043 l_party_id_idx NUMBER:=1;
4044 l_ctx_id NUMBER;
4045 h_ct_id HZ_PARTY_SEARCH.IDList;
4046 h_ct_party_id HZ_PARTY_SEARCH.IDList;
4047 h_ct_score HZ_PARTY_SEARCH.IDList;
4048 detcnt NUMBER := 1;
4049 l_person_id NUMBER;
4050 BEGIN
4051 SAVEPOINT eval_start;
4052 l_ctx_id := l_search_ctx_id;
4053 unset_person_party_type;
4054 FORALL I in 1..H_PARTY_ID.COUNT
4055 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4056 l_search_ctx_id,H_PARTY_ID(I));
4057 l_party_id_idx := H_PARTY_ID.COUNT+1;
4058 open_person_contact_cursor(p_contact_contains_str,l_ctx_id, l_contact_cur);
4059 LOOP
4060 FETCH l_contact_cur INTO
4061 l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
4062 EXIT WHEN l_contact_cur%NOTFOUND;
4063 l_person_id := get_person_id(l_ct_party_id, l_org_contact_id);
4064 l_index := map_id(l_person_id);
4065 IF l_person_id IS NOT NULL AND H_SCORES.EXISTS(l_index) AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4066 l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
4067 IF l_score > H_SCORES(l_index).CONTACT_SCORE THEN
4068 H_SCORES(l_index).TOTAL_SCORE :=
4069 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_SCORE+l_score;
4070 H_SCORES(l_index).CONTACT_SCORE := l_score;
4071 END IF;
4072 END IF;
4073 IF p_ins_details = 'Y' THEN
4074 h_ct_id(detcnt) := l_org_contact_id;
4075 h_ct_party_id(detcnt) := l_person_id;
4076 IF (p_emax_score > 0) THEN
4077 h_ct_score(detcnt) := round((l_score/p_emax_score)*100);
4078 ELSE
4079 h_ct_score(detcnt) := 0;
4080 END IF;
4081 detcnt := detcnt +1;
4082 END IF;
4083 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4084 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);
4085 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);
4086 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);
4087 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);
4088 END IF;
4089 END LOOP;
4090 CLOSE l_contact_cur;
4091 ROLLBACK to eval_start;
4092 IF p_ins_details = 'Y' THEN
4093 FORALL I in 1..h_ct_id.COUNT
4094 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID,ORG_CONTACT_ID,PARTY_ID,SCORE) VALUES (
4095 l_search_ctx_id, h_ct_id(I), h_ct_party_id(I), h_ct_score(I));
4096 END IF;
4097 END;
4098
4099 /** Private procedure to acquire and score at contact point level ***/
4100 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
4101 l_party_id_idx NUMBER:=1;
4102 l_ctx_id NUMBER;
4103 h_cpt_id HZ_PARTY_SEARCH.IDList;
4104 h_cpt_party_id HZ_PARTY_SEARCH.IDList;
4105 h_cpt_score HZ_PARTY_SEARCH.IDList;
4106 detcnt NUMBER := 1;
4107 l_person_id NUMBER;
4108 is_a_match VARCHAR2(1) := 'Y';
4109 l_cpt_flag VARCHAR2(1) := 'N';
4110 BEGIN
4111 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4112 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);
4113 END IF;
4114 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4115 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);
4116 END IF;
4117 SAVEPOINT eval_start;
4118 unset_person_party_type;
4119 IF l_match_str = ' AND ' AND p_call_type = 'AND' THEN
4120 l_ctx_id := l_search_ctx_id;
4121 FORALL I in 1..H_PARTY_ID.COUNT
4122 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4123 l_search_ctx_id,H_PARTY_ID(I));
4124 H_PARTY_ID.DELETE;
4125 H_PARTY_ID_LIST.DELETE;
4126 ELSIF l_match_str = ' OR ' AND p_call_type = 'AND' THEN
4127 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4128 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);
4129 END IF;
4130 l_ctx_id := l_search_ctx_id;
4131 FORALL I in 1..H_PARTY_ID.COUNT
4132 INSERT INTO HZ_DQM_PARTIES_GT (SEARCH_CONTEXT_ID,PARTY_ID) VALUES (
4133 l_search_ctx_id,H_PARTY_ID(I));
4134 l_party_id_idx := H_PARTY_ID.COUNT+1;
4135 ELSE
4136 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4137 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);
4138 END IF;
4139 l_ctx_id := NULL;
4140 l_party_id_idx := H_PARTY_ID.COUNT+1;
4141 END IF;
4142 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4143 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);
4144 END IF;
4145 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);
4146 LOOP
4147 FETCH l_contact_pt_cur INTO
4148 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;
4149 EXIT WHEN l_contact_pt_cur%NOTFOUND;
4150 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4151 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);
4152 END IF;
4153 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4154 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);
4155 END IF;
4156 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4157 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);
4158 END IF;
4159 IF l_ctx_id IS NULL THEN
4160 l_person_id := get_person_id(l_cpt_party_id, l_cpt_contact_id);
4161 ELSE
4162 l_person_id := l_cpt_party_id;
4163 END IF;
4164 IF l_person_id IS NOT NULL AND l_person_id<>nvl(p_dup_party_id,-1) THEN
4165 l_index := map_id(l_person_id);
4166 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
4167 IF NOT H_SCORES.EXISTS(l_index) THEN
4168 IF l_ctx_id IS NULL THEN
4169 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);
4170 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4171 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4172 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);
4173 END IF;
4174 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4175 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);
4176 END IF;
4177 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4178 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);
4179 END IF;
4180 END IF;
4181 ELSE
4182 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4183 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);
4184 END IF;
4185 IF(H_SCORES(l_index).cpt_type_match.EXISTS(l_cpt_type)) then
4186 IF l_score > H_SCORES(l_index).cpt_type_match(l_cpt_type) then
4187 H_SCORES(l_index).TOTAL_SCORE :=
4188 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;
4189 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;
4190 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4191 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4192 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);
4193 END IF;
4194 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4195 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);
4196 END IF;
4197 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4198 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);
4199 END IF;
4200 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4201 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);
4202 END IF;
4203 END IF;
4204 ELSE
4205 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4206 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);
4207 END IF;
4208 H_SCORES(l_index).TOTAL_SCORE :=
4209 H_SCORES(l_index).TOTAL_SCORE+l_score;
4210 H_SCORES(l_index).CONTACT_POINT_SCORE := H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
4211 H_SCORES(l_index).cpt_type_match(l_cpt_type) := l_score;
4212 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4213 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);
4214 END IF;
4215 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4216 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);
4217 END IF;
4218 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4219 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);
4220 END IF;
4221 END IF;
4222 END IF;
4223 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4224 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);
4225 END IF;
4226 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4227 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);
4228 END IF;
4229 IF NOT H_PARTY_ID_LIST.EXISTS(l_index) AND H_SCORES.EXISTS(l_index) THEN
4230 -- If rule is match all
4231 IF l_match_str = ' AND ' THEN
4232 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4233 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);
4234 END IF;
4235 IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4236 is_a_match := 'Y';
4237 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4238 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);
4239 END IF;
4240 ELSE
4241 is_a_match := 'N';
4242 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4243 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);
4244 END IF;
4245 END IF;
4246 -- Else it is construed as a match anyway
4247 ELSE
4248 is_a_match := 'Y';
4249 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4250 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);
4251 END IF;
4252 END IF;
4253 IF (is_a_match='Y') THEN
4254 H_PARTY_ID_LIST(l_index) := 1;
4255 H_PARTY_ID(l_party_id_idx) := l_person_id;
4256 l_party_id_idx:= l_party_id_idx+1;
4257 end if;
4258 END IF;
4259 IF (l_party_id_idx-1)>l_max_thresh THEN
4260 CLOSE l_contact_pt_cur;
4261 IF p_index>1 THEN
4262 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4263 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);
4264 END IF;
4265 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4266 FND_MSG_PUB.ADD;
4267 RAISE FND_API.G_EXC_ERROR;
4268 ELSE
4269 push_eval;
4270 RETURN;
4271 END IF;
4272 END IF;
4273 IF p_ins_details = 'Y' THEN
4274 -- If rule is match all
4275 IF l_match_str = ' AND ' THEN
4276 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4277 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);
4278 END IF;
4279 IF H_SCORES(l_index).cpt_type_match.count = distinct_search_cpt_types then
4280 is_a_match := 'Y';
4281 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4282 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);
4283 END IF;
4284 ELSE
4285 is_a_match := 'N';
4286 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4287 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);
4288 END IF;
4289 END IF;
4290 -- Else it is construed as a match anyway
4291 ELSE
4292 is_a_match := 'Y';
4293 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4294 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);
4295 END IF;
4296 END IF;
4297 IF (is_a_match='Y') THEN
4298 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4299 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);
4300 END IF;
4301 FOR I IN 1..h_cpt_id.COUNT LOOP
4302 IF h_cpt_id(I)=l_contact_pt_id THEN
4303 l_cpt_flag := 'Y';
4304 END IF;
4305 END LOOP;
4306 IF l_cpt_flag = 'Y' THEN
4307 NULL;
4308 ELSE
4309 h_cpt_id(detcnt) := l_contact_pt_id;
4310 h_cpt_party_id(detcnt) := l_person_id;
4311 IF (p_emax_score > 0) THEN
4312 h_cpt_score(detcnt) := round((l_score/p_emax_score)*100);
4313 ELSE
4314 h_cpt_score(detcnt) := 0;
4315 END IF;
4316 detcnt := detcnt +1;
4317 END IF;
4318 end if;
4319 END IF;
4320 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4321 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);
4322 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);
4323 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);
4324 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);
4325 END IF;
4326 END IF;
4327 END LOOP;
4328 CLOSE l_contact_pt_cur;
4329 ROLLBACK to eval_start;
4330 IF p_ins_details = 'Y' THEN
4331 FORALL I in 1..h_cpt_id.COUNT
4332 INSERT INTO HZ_MATCHED_CPTS_GT (SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
4333 l_search_ctx_id, h_cpt_id(I), h_cpt_party_id(I), h_cpt_score(I));
4334 END IF;
4335 END;
4336
4337 /** Private procedure to call the eval procedure at each entity in the correct order ***/
4338 PROCEDURE do_eval (p_index NUMBER) IS
4339 l_ctx_id NUMBER;
4340 l_threshold NUMBER;
4341 other_acq_criteria_exists BOOLEAN;
4342 acq_cnt NUMBER;
4343 BEGIN
4344 IF (p_index=5 AND call_order(5) <> 'NONE' AND H_PARTY_ID.COUNT=0) THEN
4345 l_threshold := round(( l_entered_max_score / 700) * 77);
4346 other_acq_criteria_exists := TRUE ;
4347 --check if acquisition criteria exists for any other entity
4348 IF l_party_contains_str IS NOT NULL THEN
4349 acq_cnt := 1;
4350 END IF;
4351 IF l_party_site_contains_str IS NOT NULL THEN
4352 acq_cnt := acq_cnt+1;
4353 END IF;
4354 IF l_contact_contains_str IS NOT NULL THEN
4355 acq_cnt := acq_cnt+1;
4356 END IF;
4357 IF l_contact_pt_contains_str IS NOT NULL THEN
4358 acq_cnt := acq_cnt+1;
4359 END IF;
4360 IF acq_cnt>1 THEN
4361 other_acq_criteria_exists := TRUE;
4362 ELSE
4363 other_acq_criteria_exists := FALSE;
4364 END IF;
4365 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);
4366 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);
4367 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);
4368 IF(l_match_str = ' AND ' AND other_acq_criteria_exists) THEN
4369 IF ( call_max_score(p_index) < l_threshold) THEN
4370 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4371 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);
4372 END IF;
4373 RETURN;
4374 ELSE
4375 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
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');
4379 FND_MSG_PUB.ADD;
4380 RAISE FND_API.G_EXC_ERROR;
4381 END IF;
4382 ELSE
4383 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4384 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);
4385 END IF;
4386 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_THRESH_EXCEEDED');
4387 FND_MSG_PUB.ADD;
4388 RAISE FND_API.G_EXC_ERROR;
4389 END IF;
4390 END IF;
4391 IF call_order(p_index) = 'PARTY' AND l_party_contains_str IS NOT NULL THEN
4392 eval_party_level(l_party_contains_str,call_type(p_index), p_index);
4393 ELSIF call_order(p_index) = 'PARTY_SITE' AND l_party_site_contains_str IS NOT NULL THEN
4394 eval_party_site_level(l_party_site_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4395 ELSIF call_order(p_index) = 'CONTACT_POINT' AND l_contact_pt_contains_str IS NOT NULL THEN
4396 eval_cpt_level(l_contact_pt_contains_str,call_type(p_index), p_index,p_ins_details,call_max_score(p_index));
4397 END IF;
4398 END;
4399 /************ End of find_persons private procedures **********/
4400
4401 BEGIN
4402
4403 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4404 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);
4405 END IF;
4406 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4407 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);
4408 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);
4409 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);
4410 END IF;
4411 -- ************************************
4412 -- STEP 1. Initialization and error checks
4413
4414 l_match_str := ' AND ';
4415 IF p_match_type = 'AND' THEN
4416 l_match_str := ' AND ';
4417 ELSIF p_match_type = 'OR' THEN
4418 l_match_str := ' OR ';
4419 END IF;
4420 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);
4421 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
4422
4423 l_max_thresh:=nvl(FND_PROFILE.VALUE('HZ_DQM_MAX_EVAL_THRESH'),200);
4424 IF nvl(FND_PROFILE.VALUE('HZ_DQM_SCORE_UNTIL_THRESH'),'N')='Y' THEN
4425 g_score_until_thresh := true;
4426 ELSE
4427 g_score_until_thresh := false;
4428 END IF;
4429 -- ************************************************************
4430 -- STEP 2. Setup of intermedia query strings for Acquisition query
4431 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_ps_denorm_str);
4432 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_ct_denorm_str);
4433 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_cpt_denorm_str);
4434 l_party_contains_str := INIT_PARTY_QUERY(l_match_str, null, 0, 0, 0,0);
4435 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
4436
4437 -- Setup Search Context ID
4438 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
4439 x_search_ctx_id := l_search_ctx_id;
4440
4441 IF l_party_contains_str IS NULL THEN
4442 defpt := 1;
4443 END IF;
4444 IF l_party_site_contains_str IS NULL THEN
4445 defps := 1;
4446 END IF;
4447 IF l_contact_contains_str IS NULL THEN
4448 defct := 1;
4449 END IF;
4450 IF l_contact_pt_contains_str IS NULL THEN
4451 defcpt := 1;
4452 END IF;
4453
4454 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4455 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);
4456 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);
4457 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);
4458 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);
4459 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);
4460 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);
4461 END IF;
4462 FOR I in 1..5 LOOP
4463 do_eval(I);
4464 END LOOP;
4465 IF l_contact_contains_str IS NOT NULL THEN
4466 eval_contact_level(l_contact_contains_str,p_ins_details,l_contact_max_score);
4467 END IF;
4468 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4469 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);
4470 END IF;
4471 x_num_matches := 0;
4472 l_num_eval := 0;
4473 IF l_match_str = ' OR ' THEN
4474 l_party_id := H_SCORES.FIRST;
4475 ELSE
4476 l_party_id := H_PARTY_ID_LIST.FIRST;
4477 END IF;
4478 WHILE l_party_id IS NOT NULL LOOP
4479 l_num_eval:= l_num_eval+1;
4480 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4481 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);
4482 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);
4483 END IF;
4484 IF (H_SCORES(l_party_id).TOTAL_SCORE/l_entered_max_score)>=(77/700) THEN
4485 INSERT INTO HZ_MATCHED_PARTIES_GT (SEARCH_CONTEXT_ID, PARTY_ID, SCORE)
4486 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));
4487 x_num_matches := x_num_matches+1;
4488 END IF;
4489 IF l_match_str = ' OR ' THEN
4490 l_party_id:=H_SCORES.NEXT(l_party_id);
4491 ELSE
4492 l_party_id:=H_PARTY_ID_LIST.NEXT(l_party_id);
4493 END IF;
4494 END LOOP;
4495 HZ_DQM_SEARCH_UTIL.set_num_eval(l_num_eval);
4496 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4497 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);
4498 END IF;
4499 EXCEPTION
4500 WHEN L_RETURN_IMM_EXC THEN
4501 RETURN;
4502 WHEN FND_API.G_EXC_ERROR THEN
4503 RAISE FND_API.G_EXC_ERROR;
4504 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4505 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4506 WHEN OTHERS THEN
4507 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4508 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_persons');
4509 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4510 FND_MSG_PUB.ADD;
4511 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4512 END find_persons;
4513
4514 PROCEDURE find_persons (
4515 p_rule_id IN NUMBER,
4516 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
4517 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
4518 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
4519 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
4520 p_restrict_sql IN VARCHAR2,
4521 p_match_type IN VARCHAR2,
4522 p_search_merged IN VARCHAR2,
4523 p_ins_details IN VARCHAR2,
4524 x_search_ctx_id OUT NUMBER,
4525 x_num_matches OUT NUMBER
4526 ) IS
4527
4528 BEGIN
4529 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);
4530 END;
4531 PROCEDURE find_party_details (
4532 p_rule_id IN NUMBER,
4533 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
4534 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
4535 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
4536 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
4537 p_restrict_sql IN VARCHAR2,
4538 p_match_type IN VARCHAR2,
4539 p_search_merged IN VARCHAR2,
4540 x_search_ctx_id OUT NUMBER,
4541 x_num_matches OUT NUMBER
4542 ) IS
4543
4544 BEGIN
4545 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4546 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);
4547 END IF;
4548 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4549 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);
4550 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);
4551 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);
4552 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);
4553 END IF;
4554 find_parties(p_rule_id,p_party_search_rec,p_party_site_list, p_contact_list, p_contact_point_list,
4555 p_restrict_sql,p_match_type,p_search_merged,null,null, null,'Y',
4556 x_search_ctx_id,x_num_matches);
4557 DELETE FROM HZ_MATCHED_PARTY_SITES_GT ps WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
4558 AND NOT EXISTS
4559 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ps.PARTY_ID);
4560 DELETE FROM HZ_MATCHED_CONTACTS_GT ct WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
4561 AND NOT EXISTS
4562 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = ct.PARTY_ID);
4563 DELETE FROM HZ_MATCHED_CPTS_GT cpt WHERE SEARCH_CONTEXT_ID = x_search_ctx_id
4564 AND NOT EXISTS
4565 (SELECT 1 FROM HZ_MATCHED_PARTIES_GT p WHERE SEARCH_CONTEXT_ID = x_search_ctx_id AND p.PARTY_ID = cpt.PARTY_ID);
4566 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4567 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);
4568 END IF;
4569 EXCEPTION
4570 WHEN FND_API.G_EXC_ERROR THEN
4571 RAISE FND_API.G_EXC_ERROR;
4572 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4573 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4574 WHEN OTHERS THEN
4575 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4576 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_party_details');
4577 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4578 FND_MSG_PUB.ADD;
4579 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4580 END find_party_details;
4581
4582 PROCEDURE find_duplicate_parties (
4583 p_rule_id IN NUMBER,
4584 p_party_id IN NUMBER,
4585 p_restrict_sql IN VARCHAR2,
4586 p_match_type IN VARCHAR2,
4587 p_dup_batch_id IN NUMBER,
4588 p_search_merged IN VARCHAR2,
4589 x_dup_set_id OUT NUMBER,
4590 x_search_ctx_id OUT NUMBER,
4591 x_num_matches OUT NUMBER
4592 ) IS
4593 l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
4594 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4595 l_contact_list HZ_PARTY_SEARCH.contact_list;
4596 l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
4597 l_match_idx NUMBER;
4598
4599 --Fix for bug 4417124
4600 l_use_contact_addr_info BOOLEAN := TRUE;
4601 l_use_contact_cpt_info BOOLEAN := TRUE;
4602 l_use_contact_addr_flag VARCHAR2(1) := 'Y';
4603 l_use_contact_cpt_flag VARCHAR2(1) := 'Y';
4604
4605 BEGIN
4606
4607 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4608 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);
4609 END IF;
4610 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4611 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);
4612 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);
4613 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);
4614 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);
4615 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);
4616 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);
4617 END IF;
4618
4619 --Fix for bug 4417124
4620
4621 SELECT use_contact_addr_flag, use_contact_cpt_flag
4622 INTO l_use_contact_addr_flag, l_use_contact_cpt_flag
4623 FROM hz_match_rules_b
4624 WHERE match_rule_id = 33;
4625
4626 IF NVL(l_use_contact_addr_flag, 'Y') = 'N' THEN
4627 l_use_contact_addr_info := FALSE;
4628 END IF;
4629
4630 IF NVL(l_use_contact_cpt_flag, 'Y') = 'N' THEN
4631 l_use_contact_cpt_info := FALSE;
4632 END IF;
4633
4634 --End fix for bug 4417124
4635
4636 get_party_for_search(
4637 p_party_id, l_party_rec,l_party_site_list, l_contact_list, l_cpt_list);
4638
4639 IF NOT check_prim_cond (l_party_rec,
4640 l_party_site_list,
4641 l_contact_list,
4642 l_cpt_list) THEN
4643 x_dup_set_id:=NULL;
4644 x_search_ctx_id:=NULL;
4645 x_num_matches:=0;
4646 RETURN;
4647 END IF;
4648 x_dup_set_id := NULL;
4649 IF p_dup_batch_id IS NOT NULL THEN
4650 SELECT HZ_MERGE_BATCH_S.nextval INTO x_dup_set_id FROM DUAL;
4651 END IF;
4652
4653 --Fix for bug 4417124
4654 IF l_party_rec.PARTY_TYPE = 'PERSON' AND (l_use_contact_addr_info OR l_use_contact_cpt_info) THEN
4655 find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4656 p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4657 x_search_ctx_id,x_num_matches);
4658 ELSE
4659 find_parties(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
4660 p_restrict_sql,p_match_type,p_search_merged,p_party_id,x_dup_set_id,p_dup_batch_id,'N',
4661 x_search_ctx_id,x_num_matches);
4662 END IF;
4663
4664 IF x_num_matches > 0 AND p_dup_batch_id IS NOT NULL THEN
4665 INSERT INTO HZ_DUP_SETS ( DUP_SET_ID, DUP_BATCH_ID, WINNER_PARTY_ID,
4666 STATUS, MERGE_TYPE, CREATED_BY, CREATION_DATE, LAST_UPDATE_LOGIN,
4667 LAST_UPDATE_DATE, LAST_UPDATED_BY)
4668 VALUES (x_dup_set_id, p_dup_batch_id, p_party_id, 'SYSBATCH',
4669 'PARTY_MERGE', 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);
4672
4673 INSERT INTO HZ_DUP_SET_PARTIES (DUP_PARTY_ID,DUP_SET_ID,MERGE_SEQ_ID,
4674 MERGE_BATCH_ID,merge_flag,SCORE,CREATED_BY,CREATION_DATE,LAST_UPDATE_LOGIN,
4675 LAST_UPDATE_DATE,LAST_UPDATED_BY,DUP_SET_BATCH_ID)
4676 VALUES (p_party_id,x_dup_set_id,0,0,
4677 'Y',100,hz_utility_pub.created_by,hz_utility_pub.creation_date,
4678 hz_utility_pub.last_update_login,hz_utility_pub.last_update_date,
4679 hz_utility_pub.user_id,p_dup_batch_id);
4680 ELSE
4681 x_dup_set_id := NULL;
4682 END IF;
4683 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4684 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);
4685 END IF;
4686 EXCEPTION
4687 WHEN FND_API.G_EXC_ERROR THEN
4688 RAISE FND_API.G_EXC_ERROR;
4689 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4690 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4691 WHEN OTHERS THEN
4692 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4693 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_duplicate_parties');
4694 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4695 FND_MSG_PUB.ADD;
4696 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4697 END find_duplicate_parties;
4698
4699 PROCEDURE find_duplicate_party_sites (
4700 p_rule_id IN NUMBER,
4701 p_party_site_id IN NUMBER,
4702 p_party_id IN NUMBER,
4703 p_restrict_sql IN VARCHAR2,
4704 p_match_type IN VARCHAR2,
4705 x_search_ctx_id OUT NUMBER,
4706 x_num_matches OUT NUMBER
4707 ) IS
4708
4709 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4710 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4711 l_contact_list HZ_PARTY_SEARCH.contact_list;
4712 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4713 contact_point_ids HZ_PARTY_SEARCH.IDList;
4714 p_party_site_list HZ_PARTY_SEARCH.IDList;
4715 p_contact_ids HZ_PARTY_SEARCH.IDList;
4716 l_match_idx NUMBER;
4717 cursor get_cpts_for_party_sites is select contact_point_id
4718 from hz_contact_points
4719 where owner_table_name = 'HZ_PARTY_SITES'
4720 and primary_flag='Y'
4721 and owner_table_id = p_party_site_id;
4722 BEGIN
4723 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4724 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);
4725 END IF;
4726 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4727 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);
4728 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);
4729 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);
4730 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);
4731 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);
4732 END IF;
4733 p_party_site_list(1) := p_party_site_id;
4734 OPEN get_cpts_for_party_sites;
4735 LOOP
4736 FETCH get_cpts_for_party_sites BULK COLLECT INTO contact_point_ids;
4737 EXIT WHEN get_cpts_for_party_sites%NOTFOUND;
4738 END LOOP;
4739 CLOSE get_cpts_for_party_sites;
4740
4741 get_search_criteria (
4742 null,
4743 p_party_site_list,
4744 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4745 contact_point_ids,
4746 l_party_search_rec,
4747 l_party_site_list,
4748 l_contact_list,
4749 l_contact_point_list) ;
4750 IF NOT check_prim_cond (l_party_search_rec,
4751 l_party_site_list,
4752 l_contact_list,
4753 l_contact_point_list) THEN
4754 x_search_ctx_id:=NULL;
4755 x_num_matches:=0;
4756 RETURN;
4757 END IF;
4758
4759 get_matching_party_sites (p_rule_id,
4760 p_party_id,
4761 l_party_site_list,
4762 l_contact_point_list,
4763 p_restrict_sql,
4764 p_match_type,
4765 p_party_site_id,
4766 x_search_ctx_id,
4767 x_num_matches);
4768 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4769 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);
4770 END IF;
4771 EXCEPTION
4772 WHEN FND_API.G_EXC_ERROR THEN
4773 RAISE FND_API.G_EXC_ERROR;
4774 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4775 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4776 WHEN OTHERS THEN
4777 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4778 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_duplicate_party_sites');
4779 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4780 FND_MSG_PUB.ADD;
4781 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4782 END find_duplicate_party_sites;
4783
4784 PROCEDURE find_duplicate_contacts (
4785 p_rule_id IN NUMBER,
4786 p_org_contact_id IN NUMBER,
4787 p_party_id IN NUMBER,
4788 p_restrict_sql IN VARCHAR2,
4789 p_match_type IN VARCHAR2,
4790 x_search_ctx_id OUT NUMBER,
4791 x_num_matches OUT NUMBER
4792 ) IS
4793
4794 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4795 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4796 l_contact_list HZ_PARTY_SEARCH.contact_list;
4797 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4798 contact_point_ids HZ_PARTY_SEARCH.IDList;
4799 p_party_site_list HZ_PARTY_SEARCH.IDList;
4800 p_contact_ids HZ_PARTY_SEARCH.IDList;
4801 l_match_idx NUMBER;
4802 cursor get_cpt_for_contact_id is select contact_point_id
4803 from hz_org_contacts a, hz_relationships b, hz_contact_points c
4804 where a.party_relationship_id = b.relationship_id
4805 and c.owner_table_name = 'HZ_PARTIES'
4806 and c.primary_flag='Y'
4807 and c.owner_table_id = b.party_id
4808 and b.directional_flag = 'F'
4809 and a.org_contact_id = p_org_contact_id;
4810 BEGIN
4811 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4812 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);
4813 END IF;
4814 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4815 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);
4816 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);
4817 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);
4818 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);
4819 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);
4820 END IF;
4821 p_contact_ids(1) := p_org_contact_id;
4822 OPEN get_cpt_for_contact_id;
4823 LOOP
4824 FETCH get_cpt_for_contact_id BULK COLLECT INTO contact_point_ids;
4825 EXIT WHEN get_cpt_for_contact_id%NOTFOUND;
4826 END LOOP;
4827 CLOSE get_cpt_for_contact_id;
4828
4829 get_search_criteria (
4830 null,
4831 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4832 p_contact_ids,
4833 contact_point_ids,
4834 l_party_search_rec,
4835 l_party_site_list,
4836 l_contact_list,
4837 l_contact_point_list) ;
4838 IF NOT check_prim_cond (l_party_search_rec,
4839 l_party_site_list,
4840 l_contact_list,
4841 l_contact_point_list) THEN
4842 x_search_ctx_id:=NULL;
4843 x_num_matches:=0;
4844 RETURN;
4845 END IF;
4846
4847 get_matching_contacts (p_rule_id,
4848 p_party_id,
4849 l_contact_list,
4850 l_contact_point_list,
4851 p_restrict_sql,
4852 p_match_type,
4853 p_org_contact_id,
4854 x_search_ctx_id,
4855 x_num_matches);
4856
4857 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4858 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);
4859 END IF;
4860 EXCEPTION
4861 WHEN FND_API.G_EXC_ERROR THEN
4862 RAISE FND_API.G_EXC_ERROR;
4863 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4864 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4865 WHEN OTHERS THEN
4866 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4867 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_duplicate_contacts');
4868 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4869 FND_MSG_PUB.ADD;
4870 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4871 END find_duplicate_contacts;
4872
4873 PROCEDURE find_duplicate_contact_points (
4874 p_rule_id IN NUMBER,
4875 p_contact_point_id IN NUMBER,
4876 p_party_id IN NUMBER,
4877 p_restrict_sql IN VARCHAR2,
4878 p_match_type IN VARCHAR2,
4879 x_search_ctx_id OUT NUMBER,
4880 x_num_matches OUT NUMBER
4881 ) IS
4882 l_party_search_rec HZ_PARTY_SEARCH.party_search_rec_type;
4883 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
4884 l_contact_list HZ_PARTY_SEARCH.contact_list;
4885 l_contact_point_list HZ_PARTY_SEARCH.contact_point_list;
4886 contact_point_ids HZ_PARTY_SEARCH.IDList;
4887 p_party_site_list HZ_PARTY_SEARCH.IDList;
4888 p_contact_ids HZ_PARTY_SEARCH.IDList;
4889 l_match_idx NUMBER;
4890
4891 BEGIN
4892 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4893 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);
4894 END IF;
4895 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
4896 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);
4897 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);
4898 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);
4899 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);
4900 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);
4901 END IF;
4902 contact_point_ids(1) := p_contact_point_id;
4903 get_search_criteria (
4904 null,
4905 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4906 HZ_PARTY_SEARCH.G_MISS_ID_LIST,
4907 contact_point_ids,
4908 l_party_search_rec,
4909 l_party_site_list,
4910 l_contact_list,
4911 l_contact_point_list );
4912
4913 IF NOT check_prim_cond (l_party_search_rec,
4914 l_party_site_list,
4915 l_contact_list,
4916 l_contact_point_list) THEN
4917 x_search_ctx_id:=NULL;
4918 x_num_matches:=0;
4919 RETURN;
4920 END IF;
4921 get_matching_contact_points (
4922 p_rule_id,
4923 p_party_id,
4924 l_contact_point_list,
4925 p_restrict_sql,
4926 p_match_type,
4927 p_contact_point_id,
4928 x_search_ctx_id,
4929 x_num_matches );
4930 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
4931 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);
4932 END IF;
4933 EXCEPTION
4934 WHEN FND_API.G_EXC_ERROR THEN
4935 RAISE FND_API.G_EXC_ERROR;
4936 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
4937 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4938 WHEN OTHERS THEN
4939 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
4940 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.find_duplicate_contact_points');
4941 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
4942 FND_MSG_PUB.ADD;
4943 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
4944 END find_duplicate_contact_points;
4945
4946 PROCEDURE find_parties_dynamic (
4947 p_rule_id IN NUMBER,
4948 p_attrib_id1 IN NUMBER,
4949 p_attrib_id2 IN NUMBER,
4950 p_attrib_id3 IN NUMBER,
4951 p_attrib_id4 IN NUMBER,
4952 p_attrib_id5 IN NUMBER,
4953 p_attrib_id6 IN NUMBER,
4954 p_attrib_id7 IN NUMBER,
4955 p_attrib_id8 IN NUMBER,
4956 p_attrib_id9 IN NUMBER,
4957 p_attrib_id10 IN NUMBER,
4958 p_attrib_id11 IN NUMBER,
4959 p_attrib_id12 IN NUMBER,
4960 p_attrib_id13 IN NUMBER,
4961 p_attrib_id14 IN NUMBER,
4962 p_attrib_id15 IN NUMBER,
4963 p_attrib_id16 IN NUMBER,
4964 p_attrib_id17 IN NUMBER,
4965 p_attrib_id18 IN NUMBER,
4966 p_attrib_id19 IN NUMBER,
4967 p_attrib_id20 IN NUMBER,
4968 p_attrib_val1 IN VARCHAR2,
4969 p_attrib_val2 IN VARCHAR2,
4970 p_attrib_val3 IN VARCHAR2,
4971 p_attrib_val4 IN VARCHAR2,
4972 p_attrib_val5 IN VARCHAR2,
4973 p_attrib_val6 IN VARCHAR2,
4974 p_attrib_val7 IN VARCHAR2,
4975 p_attrib_val8 IN VARCHAR2,
4976 p_attrib_val9 IN VARCHAR2,
4977 p_attrib_val10 IN VARCHAR2,
4978 p_attrib_val11 IN VARCHAR2,
4979 p_attrib_val12 IN VARCHAR2,
4980 p_attrib_val13 IN VARCHAR2,
4981 p_attrib_val14 IN VARCHAR2,
4982 p_attrib_val15 IN VARCHAR2,
4983 p_attrib_val16 IN VARCHAR2,
4984 p_attrib_val17 IN VARCHAR2,
4985 p_attrib_val18 IN VARCHAR2,
4986 p_attrib_val19 IN VARCHAR2,
4987 p_attrib_val20 IN VARCHAR2,
4988 p_restrict_sql IN VARCHAR2,
4989 p_match_type IN VARCHAR2,
4990 p_search_merged IN VARCHAR2,
4991 x_search_ctx_id OUT NUMBER,
4992 x_num_matches OUT NUMBER
4993 ) IS
4994 BEGIN
4995 call_api_dynamic(p_rule_id,p_attrib_id1, p_attrib_id2,p_attrib_id3,p_attrib_id4,p_attrib_id5,
4996 p_attrib_id6,p_attrib_id7,p_attrib_id8,p_attrib_id9,p_attrib_id10,
4997 p_attrib_id11,p_attrib_id12,p_attrib_id13,p_attrib_id14,p_attrib_id15,
4998 p_attrib_id16,p_attrib_id17,p_attrib_id18,p_attrib_id19,p_attrib_id20,
4999 p_attrib_val1,p_attrib_val2,p_attrib_val3,p_attrib_val4,p_attrib_val5,
5000 p_attrib_val6,p_attrib_val7,p_attrib_val8,p_attrib_val9,p_attrib_val10,
5001 p_attrib_val11,p_attrib_val12,p_attrib_val13,p_attrib_val14,p_attrib_val15,
5002 p_attrib_val16,p_attrib_val17,p_attrib_val18,p_attrib_val19,p_attrib_val20,
5003 p_restrict_sql,'FIND_PARTIES',p_match_type,null,p_search_merged,x_search_ctx_id,x_num_matches);
5004 END;
5005
5006 PROCEDURE call_api_dynamic (
5007 p_rule_id IN NUMBER,
5008 p_attrib_id1 IN NUMBER,
5009 p_attrib_id2 IN NUMBER,
5010 p_attrib_id3 IN NUMBER,
5011 p_attrib_id4 IN NUMBER,
5012 p_attrib_id5 IN NUMBER,
5013 p_attrib_id6 IN NUMBER,
5014 p_attrib_id7 IN NUMBER,
5015 p_attrib_id8 IN NUMBER,
5016 p_attrib_id9 IN NUMBER,
5017 p_attrib_id10 IN NUMBER,
5018 p_attrib_id11 IN NUMBER,
5019 p_attrib_id12 IN NUMBER,
5020 p_attrib_id13 IN NUMBER,
5021 p_attrib_id14 IN NUMBER,
5022 p_attrib_id15 IN NUMBER,
5023 p_attrib_id16 IN NUMBER,
5024 p_attrib_id17 IN NUMBER,
5025 p_attrib_id18 IN NUMBER,
5026 p_attrib_id19 IN NUMBER,
5027 p_attrib_id20 IN NUMBER,
5028 p_attrib_val1 IN VARCHAR2,
5029 p_attrib_val2 IN VARCHAR2,
5030 p_attrib_val3 IN VARCHAR2,
5031 p_attrib_val4 IN VARCHAR2,
5032 p_attrib_val5 IN VARCHAR2,
5033 p_attrib_val6 IN VARCHAR2,
5034 p_attrib_val7 IN VARCHAR2,
5035 p_attrib_val8 IN VARCHAR2,
5036 p_attrib_val9 IN VARCHAR2,
5037 p_attrib_val10 IN VARCHAR2,
5038 p_attrib_val11 IN VARCHAR2,
5039 p_attrib_val12 IN VARCHAR2,
5040 p_attrib_val13 IN VARCHAR2,
5041 p_attrib_val14 IN VARCHAR2,
5042 p_attrib_val15 IN VARCHAR2,
5043 p_attrib_val16 IN VARCHAR2,
5044 p_attrib_val17 IN VARCHAR2,
5045 p_attrib_val18 IN VARCHAR2,
5046 p_attrib_val19 IN VARCHAR2,
5047 p_attrib_val20 IN VARCHAR2,
5048 p_restrict_sql IN VARCHAR2,
5049 p_api_name IN VARCHAR2,
5050 p_match_type IN VARCHAR2,
5051 p_party_id IN NUMBER,
5052 p_search_merged IN VARCHAR2,
5053 x_search_ctx_id OUT NUMBER,
5054 x_num_matches OUT NUMBER
5055 ) IS
5056 TYPE AttrList IS TABLE OF VARCHAR2(2000) INDEX BY BINARY_INTEGER;
5057 l_match_idx NUMBER;
5058 AttrVals AttrList;
5059 l_party_rec HZ_PARTY_SEARCH.party_search_rec_type;
5060 l_party_site_list HZ_PARTY_SEARCH.party_site_list;
5061 l_contact_list HZ_PARTY_SEARCH.contact_list;
5062 l_cpt_list HZ_PARTY_SEARCH.contact_point_list;
5063 l_dup_set_id NUMBER;
5064 l_idx NUMBER;
5065 l_cpt_type VARCHAR2(255);
5066 FIRST BOOLEAN := TRUE;
5067
5068 BEGIN
5069 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5070 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);
5071 END IF;
5072
5073 IF p_attrib_id1 IS NOT NULL THEN
5074 AttrVals(p_attrib_id1):=p_attrib_val1;
5075 END IF;
5076 IF p_attrib_id2 IS NOT NULL THEN
5077 AttrVals(p_attrib_id2):=p_attrib_val2;
5078 END IF;
5079 IF p_attrib_id3 IS NOT NULL THEN
5080 AttrVals(p_attrib_id3):=p_attrib_val3;
5081 END IF;
5082 IF p_attrib_id4 IS NOT NULL THEN
5083 AttrVals(p_attrib_id4):=p_attrib_val4;
5084 END IF;
5085 IF p_attrib_id5 IS NOT NULL THEN
5086 AttrVals(p_attrib_id5):=p_attrib_val5;
5087 END IF;
5088 IF p_attrib_id6 IS NOT NULL THEN
5089 AttrVals(p_attrib_id6):=p_attrib_val6;
5090 END IF;
5091 IF p_attrib_id7 IS NOT NULL THEN
5092 AttrVals(p_attrib_id7):=p_attrib_val7;
5093 END IF;
5094 IF p_attrib_id8 IS NOT NULL THEN
5095 AttrVals(p_attrib_id8):=p_attrib_val8;
5096 END IF;
5097 IF p_attrib_id9 IS NOT NULL THEN
5098 AttrVals(p_attrib_id9):=p_attrib_val9;
5099 END IF;
5100 IF p_attrib_id10 IS NOT NULL THEN
5101 AttrVals(p_attrib_id10):=p_attrib_val10;
5102 END IF;
5103 IF p_attrib_id11 IS NOT NULL THEN
5104 AttrVals(p_attrib_id11):=p_attrib_val11;
5105 END IF;
5106 IF p_attrib_id12 IS NOT NULL THEN
5107 AttrVals(p_attrib_id12):=p_attrib_val12;
5108 END IF;
5109 IF p_attrib_id13 IS NOT NULL THEN
5110 AttrVals(p_attrib_id13):=p_attrib_val13;
5111 END IF;
5112 IF p_attrib_id14 IS NOT NULL THEN
5113 AttrVals(p_attrib_id14):=p_attrib_val14;
5114 END IF;
5115 IF p_attrib_id15 IS NOT NULL THEN
5116 AttrVals(p_attrib_id15):=p_attrib_val15;
5117 END IF;
5118 IF p_attrib_id16 IS NOT NULL THEN
5119 AttrVals(p_attrib_id16):=p_attrib_val16;
5120 END IF;
5121 IF p_attrib_id17 IS NOT NULL THEN
5122 AttrVals(p_attrib_id17):=p_attrib_val17;
5123 END IF;
5124 IF p_attrib_id18 IS NOT NULL THEN
5125 AttrVals(p_attrib_id18):=p_attrib_val18;
5126 END IF;
5127 IF p_attrib_id19 IS NOT NULL THEN
5128 AttrVals(p_attrib_id19):=p_attrib_val19;
5129 END IF;
5130 IF p_attrib_id20 IS NOT NULL THEN
5131 AttrVals(p_attrib_id20):=p_attrib_val20;
5132 END IF;
5133 IF AttrVals.EXISTS(11) THEN
5134 l_party_rec.ALL_ACCOUNT_NAMES:= AttrVals(11);
5135 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5136 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);
5137 END IF;
5138 END IF;
5139
5140 IF AttrVals.EXISTS(12) THEN
5141 l_party_rec.PARTY_NUMBER:= AttrVals(12);
5142 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5143 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);
5144 END IF;
5145 END IF;
5146
5147 IF AttrVals.EXISTS(13) THEN
5148 l_party_rec.ALL_ACCOUNT_NUMBERS:= AttrVals(13);
5149 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5150 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);
5151 END IF;
5152 END IF;
5153
5154 IF AttrVals.EXISTS(15) THEN
5155 l_party_rec.PARTY_ALL_NAMES:= AttrVals(15);
5156 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5157 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);
5158 END IF;
5159 END IF;
5160
5161 IF AttrVals.EXISTS(27) THEN
5162 l_party_site_list(1).ADDRESS:= AttrVals(27);
5163 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5164 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);
5165 END IF;
5166 END IF;
5167
5168 IF AttrVals.EXISTS(29) THEN
5169 l_party_site_list(1).CITY:= AttrVals(29);
5170 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5171 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);
5172 END IF;
5173 END IF;
5174
5175 IF AttrVals.EXISTS(30) THEN
5176 l_party_site_list(1).POSTAL_CODE:= AttrVals(30);
5177 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5178 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);
5179 END IF;
5180 END IF;
5181
5182 IF AttrVals.EXISTS(32) THEN
5183 l_party_site_list(1).STATE:= AttrVals(32);
5184 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5185 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);
5186 END IF;
5187 END IF;
5188
5189 IF AttrVals.EXISTS(33) THEN
5190 l_party_site_list(1).PARTY_SITE_NUMBER:= AttrVals(33);
5191 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5192 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);
5193 END IF;
5194 END IF;
5195
5196 IF AttrVals.EXISTS(36) THEN
5197 l_party_site_list(1).COUNTRY:= AttrVals(36);
5198 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5199 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);
5200 END IF;
5201 END IF;
5202
5203 IF AttrVals.EXISTS(39) THEN
5204 l_contact_list(1).CONTACT_NAME:= AttrVals(39);
5205 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5206 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);
5207 END IF;
5208 END IF;
5209
5210 IF AttrVals.EXISTS(44) THEN
5211 l_cpt_type := 'PHONE';
5212 FIRST := FALSE;
5213 FOR I in 1..l_cpt_list.COUNT LOOP
5214 IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5215 l_cpt_list(I).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
5216 FIRST := TRUE;
5217 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5218 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);
5219 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);
5220 END IF;
5221 END IF;
5222 END LOOP;
5223 IF not FIRST THEN
5224 l_idx := l_cpt_list.COUNT+1;
5225 l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5226 l_cpt_list(l_idx).FLEX_FORMAT_PHONE_NUMBER:= AttrVals(44);
5227 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5228 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);
5229 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);
5230 END IF;
5231 END IF;
5232 END IF;
5233
5234 IF AttrVals.EXISTS(48) THEN
5235 l_cpt_type := 'EMAIL';
5236 FIRST := FALSE;
5237 FOR I in 1..l_cpt_list.COUNT LOOP
5238 IF l_cpt_list(I).CONTACT_POINT_TYPE=l_cpt_type THEN
5239 l_cpt_list(I).EMAIL_ADDRESS:= AttrVals(48);
5240 FIRST := TRUE;
5241 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5242 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);
5243 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);
5244 END IF;
5245 END IF;
5246 END LOOP;
5247 IF not FIRST THEN
5248 l_idx := l_cpt_list.COUNT+1;
5249 l_cpt_list(l_idx).CONTACT_POINT_TYPE:=l_cpt_type;
5250 l_cpt_list(l_idx).EMAIL_ADDRESS:= AttrVals(48);
5251 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5252 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);
5253 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);
5254 END IF;
5255 END IF;
5256 END IF;
5257
5258
5259 IF AttrVals.EXISTS(14) THEN
5260 l_party_rec.PARTY_TYPE:= AttrVals(14);
5261 END IF;
5262 IF upper(p_api_name) = 'FIND_PARTIES' THEN
5263 find_parties(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,NULL,NULL,NULL,'N',
5265 x_search_ctx_id,x_num_matches);
5266 ELSIF upper(p_api_name) = 'FIND_PARTY_DETAILS' THEN
5267 find_party_details(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5268 p_restrict_sql,p_match_type,p_search_merged,
5269 x_search_ctx_id,x_num_matches);
5270 ELSIF upper(p_api_name) = 'FIND_PERSONS' THEN
5271 find_persons(p_rule_id,l_party_rec,l_party_site_list, l_contact_list, l_cpt_list,
5272 p_restrict_sql,p_match_type,p_search_merged,'N',
5273 x_search_ctx_id,x_num_matches);
5274 ELSIF upper(p_api_name) = 'GET_MATCHING_PARTY_SITES' THEN
5275 get_matching_party_sites(p_rule_id,p_party_id,l_party_site_list, l_cpt_list,
5276 p_restrict_sql,p_match_type,NULL,
5277 x_search_ctx_id,x_num_matches);
5278 ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACTS' THEN
5279 get_matching_contacts(p_rule_id,p_party_id,l_contact_list, l_cpt_list,
5280 p_restrict_sql,p_match_type,NULL,
5281 x_search_ctx_id,x_num_matches);
5282 ELSIF upper(p_api_name) = 'GET_MATCHING_CONTACT_POINTS' THEN
5283 get_matching_contact_points(p_rule_id,p_party_id, l_cpt_list,
5284 p_restrict_sql,p_match_type,NULL,
5285 x_search_ctx_id,x_num_matches);
5286 END IF;
5287 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5288 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);
5289 END IF;
5290 EXCEPTION
5291 WHEN FND_API.G_EXC_ERROR THEN
5292 RAISE FND_API.G_EXC_ERROR;
5293 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5294 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5295 WHEN OTHERS THEN
5296 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5297 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.call_api_dynamic');
5298 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5299 FND_MSG_PUB.ADD;
5300 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5301 END call_api_dynamic;
5302
5303
5304 PROCEDURE get_matching_party_sites (
5305 p_rule_id IN NUMBER,
5306 p_party_id IN NUMBER,
5307 p_party_site_list IN HZ_PARTY_SEARCH.PARTY_SITE_LIST,
5308 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5309 p_restrict_sql IN VARCHAR2,
5310 p_match_type IN VARCHAR2,
5311 p_dup_party_site_id IN NUMBER,
5312 x_search_ctx_id OUT NUMBER,
5313 x_num_matches OUT NUMBER
5314 ) IS
5315
5316 -- Strings to hold the generated Intermedia query strings
5317 l_party_contains_str VARCHAR2(32000);
5318 l_match_idx NUMBER;
5319 l_party_site_contains_str VARCHAR2(32000);
5320 l_contact_contains_str VARCHAR2(32000);
5321 l_contact_pt_contains_str VARCHAR2(32000);
5322 l_tmp VARCHAR2(32000);
5323
5324 -- Other local variables
5325 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5326 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5327 -- For Score calculation
5328 l_max_score NUMBER;
5329 l_entered_max_score NUMBER;
5330 FIRST BOOLEAN;
5331 l_search_ctx_id NUMBER; -- Generated Search Context ID
5332
5333 l_TX9 VARCHAR2(2000);
5334 l_TX22 VARCHAR2(2000);
5335 l_TX1 VARCHAR2(2000);
5336 l_TX3 VARCHAR2(2000);
5337 l_TX15 VARCHAR2(2000);
5338 l_TX4 VARCHAR2(2000);
5339 l_TX10 VARCHAR2(2000);
5340 l_TX11 VARCHAR2(2000);
5341 l_TX5 VARCHAR2(2000);
5342 l_TX14 VARCHAR2(2000);
5343 l_TX17 VARCHAR2(2000);
5344 l_TX6 VARCHAR2(2000);
5345 H_SCORES HZ_PARTY_SEARCH.score_list;
5346
5347 l_score NUMBER;
5348 l_idx NUMBER;
5349 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5350 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5351 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5352 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5353 l_party_id NUMBER;
5354 l_ps_party_id NUMBER;
5355 l_ct_party_id NUMBER;
5356 l_cpt_party_id NUMBER;
5357 l_cpt_ps_id NUMBER;
5358 l_cpt_contact_id NUMBER;
5359 l_cpt_type VARCHAR2(100);
5360 l_cpt_level VARCHAR2(100);
5361 l_party_site_id NUMBER;
5362 l_org_contact_id NUMBER;
5363 l_contact_pt_id NUMBER;
5364 l_cpt_level VARCHAR2(100);
5365 l_ps_contact_id NUMBER;
5366 l_party_max_score NUMBER;
5367 l_ps_max_score NUMBER;
5368 l_contact_max_score NUMBER;
5369 l_cpt_max_score NUMBER;
5370
5371 defpt NUMBER :=0;
5372 defps NUMBER :=0;
5373 defct NUMBER :=0;
5374 defcpt NUMBER :=0;
5375 l_index NUMBER;
5376 l_match_ps_list HZ_PARTY_SEARCH.IDList;
5377 l_cnt NUMBER:=1;
5378
5379
5380 BEGIN
5381 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5382 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);
5383 END IF;
5384 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5385 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);
5386 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);
5387 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);
5388 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);
5389 END IF;
5390
5391 -- ************************************
5392 -- STEP 1. Initialization and error checks
5393
5394 l_match_str := ' AND ';
5395 IF p_match_type = 'AND' THEN
5396 l_match_str := ' AND ';
5397 ELSIF p_match_type = 'OR' THEN
5398 l_match_str := ' OR ';
5399 END IF;
5400 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);
5401 g_score_until_thresh := false;
5402 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5403
5404 -- ************************************************************
5405 -- STEP 2. Setup of intermedia query strings for Acquisition query
5406 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
5407 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5408 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);
5409
5410 -- Setup Search Context ID
5411 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5412 x_search_ctx_id := l_search_ctx_id;
5413
5414 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5415 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);
5416 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);
5417 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);
5418 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);
5419 END IF;
5420 IF l_party_site_contains_str IS NULL THEN
5421 defps := 1;
5422 END IF;
5423 IF l_contact_pt_contains_str IS NULL THEN
5424 defcpt := 1;
5425 END IF;
5426
5427 IF l_party_site_contains_str IS NOT NULL THEN
5428 open_party_site_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_party_site_contains_str,NULL, null,'N', 'N',l_party_site_cur);
5429 LOOP
5430 FETCH l_party_site_cur INTO
5431 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;
5432 EXIT WHEN l_party_site_cur%NOTFOUND;
5433 IF (p_dup_party_site_id IS NULL OR (
5434 p_dup_party_site_id IS NOT NULL AND l_ps_contact_id IS NULL AND
5435 l_party_site_id <> p_dup_party_site_id)) THEN
5436 l_index := map_id(l_party_site_id);
5437 l_match_ps_list(l_cnt):= l_party_site_id ;
5438 l_cnt:=l_cnt+1;
5439 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);
5440 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);
5441 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5442 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);
5443 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);
5444 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);
5445 END IF;
5446 END IF;
5447 END LOOP;
5448 CLOSE l_party_site_cur;
5449 END IF;
5450
5451 IF l_contact_pt_contains_str IS NOT NULL THEN
5452 SAVEPOINT eval_start;
5453 IF l_match_str = ' AND ' OR (
5454 ((l_cpt_max_score/l_entered_max_score)<(77/700))
5455 ) THEN
5456 FORALL I in 1..l_match_ps_list.COUNT
5457 INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5458 values (l_search_ctx_id,l_match_ps_list(I));
5459 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');
5460 ELSE
5461 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5462 END IF;
5463 LOOP
5464 FETCH l_contact_pt_cur INTO
5465 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;
5466 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5467 IF (l_cpt_ps_id IS NOT NULL AND (p_dup_party_site_id IS NULL OR (
5468 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
5469 l_index := map_id(l_cpt_ps_id);
5470 IF l_match_str = ' OR ' THEN
5471 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5472 IF NOT H_SCORES.EXISTS(l_index) THEN
5473 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);
5474 ELSE
5475 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5476 H_SCORES(l_index).TOTAL_SCORE :=
5477 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5478 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5479 END IF;
5480 END IF;
5481 ELSE
5482 IF H_SCORES.EXISTS(l_index) THEN
5483 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5484 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5485 H_SCORES(l_index).TOTAL_SCORE :=
5486 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5487 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5488 END IF;
5489 ELSIF defps=1 THEN
5490 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5491 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);
5492 END IF;
5493 END IF;
5494 END IF;
5495 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5496 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);
5497 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);
5498 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);
5499 END IF;
5500 END LOOP;
5501 CLOSE l_contact_pt_cur;
5502 ROLLBACK TO eval_start;
5503 END IF;
5504 x_num_matches := 0;
5505 l_party_site_id := H_SCORES.FIRST;
5506 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5507 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);
5508 END IF;
5509 WHILE l_party_site_id IS NOT NULL LOOP
5510 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5511 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);
5512 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);
5513 END IF;
5514 IF l_match_str = ' OR ' THEN
5515 IF (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, (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 ELSE
5521 IF H_SCORES(l_party_site_id).PARTY_SITE_SCORE>0 AND
5522 H_SCORES(l_party_site_id).CONTACT_POINT_SCORE>0 AND
5523 (H_SCORES(l_party_site_id).TOTAL_SCORE/l_entered_max_score)>=(77/700) THEN
5524 INSERT INTO HZ_MATCHED_PARTY_SITES_GT (SEARCH_CONTEXT_ID, PARTY_ID, PARTY_SITE_ID, SCORE)
5525 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));
5526 x_num_matches := x_num_matches+1;
5527 END IF;
5528 END IF;
5529 l_party_site_id:=H_SCORES.NEXT(l_party_site_id);
5530 END LOOP;
5531 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5532 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);
5533 END IF;
5534 EXCEPTION
5535 WHEN FND_API.G_EXC_ERROR THEN
5536 RAISE FND_API.G_EXC_ERROR;
5537 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5538 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5539 WHEN OTHERS THEN
5540 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5541 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.get_matching_party_sites');
5542 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5543 FND_MSG_PUB.ADD;
5544 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5545 END get_matching_party_sites;
5546
5547
5548 PROCEDURE get_matching_contacts (
5549 p_rule_id IN NUMBER,
5550 p_party_id IN NUMBER,
5551 p_contact_list IN HZ_PARTY_SEARCH.CONTACT_LIST,
5552 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5553 p_restrict_sql IN VARCHAR2,
5554 p_match_type IN VARCHAR2,
5555 p_dup_contact_id IN NUMBER,
5556 x_search_ctx_id OUT NUMBER,
5557 x_num_matches OUT NUMBER
5558 ) IS
5559
5560 -- Strings to hold the generated Intermedia query strings
5561 l_party_contains_str VARCHAR2(32000);
5562 l_party_site_contains_str VARCHAR2(32000);
5563 l_contact_contains_str VARCHAR2(32000);
5564 l_contact_pt_contains_str VARCHAR2(32000);
5565 l_tmp VARCHAR2(32000);
5566
5567 -- Other local variables
5568 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5569 l_match_idx NUMBER;
5570 l_sqlstr VARCHAR2(32000); -- Dynamic SQL String
5571 -- For Score calculation
5572 l_max_score NUMBER;
5573 l_entered_max_score NUMBER;
5574 FIRST BOOLEAN;
5575 l_search_ctx_id NUMBER; -- Generated Search Context ID
5576
5577 l_TX1 VARCHAR2(2000);
5578 l_TX5 VARCHAR2(2000);
5579 l_TX6 VARCHAR2(2000);
5580 H_SCORES HZ_PARTY_SEARCH.score_list;
5581
5582 l_score NUMBER;
5583 l_idx NUMBER;
5584 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5585 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5586 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5587 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5588 l_party_id NUMBER;
5589 l_ps_party_id NUMBER;
5590 l_ct_party_id NUMBER;
5591 l_cpt_party_id NUMBER;
5592 l_cpt_ps_id NUMBER;
5593 l_cpt_contact_id NUMBER;
5594 l_cpt_type VARCHAR2(100);
5595 l_party_site_id NUMBER;
5596 l_org_contact_id NUMBER;
5597 l_contact_pt_id NUMBER;
5598
5599 defpt NUMBER :=0;
5600 defps NUMBER :=0;
5601 defct NUMBER :=0;
5602 defcpt NUMBER :=0;
5603 l_index NUMBER;
5604 l_party_max_score NUMBER;
5605 l_ps_max_score NUMBER;
5606 l_contact_max_score NUMBER;
5607 l_cpt_max_score NUMBER;
5608 l_match_contact_list HZ_PARTY_SEARCH.IDList;
5609 l_cnt NUMBER:=1;
5610
5611
5612 BEGIN
5613 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5614 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);
5615 END IF;
5616 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5617 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);
5618 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);
5619 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);
5620 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);
5621 END IF;
5622
5623 -- ************************************
5624 -- STEP 1. Initialization and error checks
5625
5626 l_match_str := ' AND ';
5627 IF p_match_type = 'AND' THEN
5628 l_match_str := ' AND ';
5629 ELSIF p_match_type = 'OR' THEN
5630 l_match_str := ' OR ';
5631 END IF;
5632 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);
5633 g_score_until_thresh := false;
5634 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5635
5636 -- ************************************************************
5637 -- STEP 2. Setup of intermedia query strings for Acquisition query
5638 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
5639 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5640 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);
5641
5642 -- Setup Search Context ID
5643 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5644 x_search_ctx_id := l_search_ctx_id;
5645
5646 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5647 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);
5648 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);
5649 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);
5650 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);
5651 END IF;
5652 IF l_contact_contains_str IS NULL THEN
5653 defct := 1;
5654 END IF;
5655 IF l_contact_pt_contains_str IS NULL THEN
5656 defcpt := 1;
5657 END IF;
5658
5659 IF l_contact_contains_str IS NOT NULL THEN
5660 open_contact_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_contains_str,NULL, null, l_contact_cur);
5661 LOOP
5662 FETCH l_contact_cur INTO
5663 l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
5664 EXIT WHEN l_contact_cur%NOTFOUND;
5665 IF (p_dup_contact_id IS NULL OR l_org_contact_id <> p_dup_contact_id) THEN
5666 l_index := map_id(l_org_contact_id);
5667 l_match_contact_list(l_cnt):=l_org_contact_id;
5668 l_cnt:=l_cnt+1;
5669 l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
5670 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);
5671 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5672 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);
5673 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);
5674 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);
5675 END IF;
5676 END IF;
5677 END LOOP;
5678 CLOSE l_contact_cur;
5679 END IF;
5680
5681 IF l_contact_pt_contains_str IS NOT NULL THEN
5682 SAVEPOINT eval_start;
5683 IF l_match_str = ' AND ' OR (
5684 ((l_cpt_max_score/l_entered_max_score)<(77/700))
5685 ) THEN
5686 FORALL I in 1..l_match_contact_list.COUNT
5687 INSERT INTO HZ_DQM_PARTIES_GT (search_context_id, party_id)
5688 values (l_search_ctx_id,l_match_contact_list(I));
5689 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');
5690 ELSE
5691 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5692 END IF;
5693 LOOP
5694 FETCH l_contact_pt_cur INTO
5695 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;
5696 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5697 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
5698 l_index := map_id(l_cpt_contact_id);
5699 IF l_match_str = ' OR ' THEN
5700 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5701 IF NOT H_SCORES.EXISTS(l_index) THEN
5702 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);
5703 ELSE
5704 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5705 H_SCORES(l_index).TOTAL_SCORE :=
5706 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5707 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5708 END IF;
5709 END IF;
5710 ELSE
5711 IF H_SCORES.EXISTS(l_index) THEN
5712 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5713 IF l_score > H_SCORES(l_index).CONTACT_POINT_SCORE THEN
5714 H_SCORES(l_index).TOTAL_SCORE :=
5715 H_SCORES(l_index).TOTAL_SCORE-H_SCORES(l_index).CONTACT_POINT_SCORE+l_score;
5716 H_SCORES(l_index).CONTACT_POINT_SCORE := l_score;
5717 END IF;
5718 ELSIF defps=1 THEN
5719 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5720 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);
5721 END IF;
5722 END IF;
5723 END IF;
5724 END LOOP;
5725 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5726 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);
5727 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);
5728 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);
5729 END IF;
5730 CLOSE l_contact_pt_cur;
5731 END IF;
5732 x_num_matches := 0;
5733 l_org_contact_id := H_SCORES.FIRST;
5734 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5735 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);
5736 END IF;
5737 WHILE l_org_contact_id IS NOT NULL LOOP
5738 IF l_match_str = ' OR ' THEN
5739 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5740 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);
5741 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);
5742 END IF;
5743 IF (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, (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 ELSE
5749 IF H_SCORES(l_org_contact_id).CONTACT_SCORE>0 AND
5750 H_SCORES(l_org_contact_id).CONTACT_POINT_SCORE>0 AND
5751 (H_SCORES(l_org_contact_id).TOTAL_SCORE/l_entered_max_score)>=(77/700) THEN
5752 INSERT INTO HZ_MATCHED_CONTACTS_GT (SEARCH_CONTEXT_ID, PARTY_ID, ORG_CONTACT_ID, SCORE)
5753 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));
5754 x_num_matches := x_num_matches+1;
5755 END IF;
5756 END IF;
5757 l_org_contact_id:=H_SCORES.NEXT(l_org_contact_id);
5758 END LOOP;
5759 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5760 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);
5761 END IF;
5762 EXCEPTION
5763 WHEN FND_API.G_EXC_ERROR THEN
5764 RAISE FND_API.G_EXC_ERROR;
5765 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5766 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5767 WHEN OTHERS THEN
5768 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5769 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.get_matching_contacts');
5770 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5771 FND_MSG_PUB.ADD;
5772 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5773 END get_matching_contacts;
5774
5775
5776 PROCEDURE get_matching_contact_points (
5777 p_rule_id IN NUMBER,
5778 p_party_id IN NUMBER,
5779 p_contact_point_list IN HZ_PARTY_SEARCH.CONTACT_POINT_LIST,
5780 p_restrict_sql IN VARCHAR2,
5781 p_match_type IN VARCHAR2,
5782 p_dup_contact_point_id IN NUMBER,
5783 x_search_ctx_id OUT NUMBER,
5784 x_num_matches OUT NUMBER
5785 ) IS
5786
5787
5788 -- Strings to hold the generated Intermedia query strings
5789 l_contact_pt_contains_str VARCHAR2(32000);
5790 l_tmp VARCHAR2(32000);
5791
5792 -- Other local variables
5793 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5794 l_match_idx NUMBER;
5795 -- For Score calculation
5796 l_entered_max_score NUMBER;
5797 l_search_ctx_id NUMBER; -- Generated Search Context ID
5798
5799 l_TX1 VARCHAR2(2000);
5800 l_TX5 VARCHAR2(2000);
5801 l_TX6 VARCHAR2(2000);
5802
5803 l_score NUMBER;
5804 l_idx NUMBER;
5805 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5806 l_cpt_party_id NUMBER;
5807 l_cpt_ps_id NUMBER;
5808 l_cpt_contact_id NUMBER;
5809 l_contact_pt_id NUMBER;
5810 l_cpt_type VARCHAR2(100);
5811 H_PARTY_ID HZ_PARTY_SEARCH.IDList;
5812 H_CONTACT_POINT_ID HZ_PARTY_SEARCH.IDList;
5813 H_SCORE HZ_PARTY_SEARCH.IDList;
5814
5815 cnt NUMBER :=0;
5816 l_party_max_score NUMBER;
5817 l_ps_max_score NUMBER;
5818 l_contact_max_score NUMBER;
5819 l_cpt_max_score NUMBER;
5820
5821
5822 BEGIN
5823 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5824 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);
5825 END IF;
5826 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5827 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);
5828 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);
5829 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);
5830 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);
5831 END IF;
5832
5833 -- ************************************
5834 -- STEP 1. Initialization and error checks
5835
5836 l_match_str := ' AND ';
5837 IF p_match_type = 'AND' THEN
5838 l_match_str := ' AND ';
5839 ELSIF p_match_type = 'OR' THEN
5840 l_match_str := ' OR ';
5841 END IF;
5842 l_entered_max_score:= init_search(HZ_PARTY_SEARCH.G_MISS_PARTY_SEARCH_REC,
5843 HZ_PARTY_SEARCH.G_MISS_PARTY_SITE_LIST, HZ_PARTY_SEARCH.G_MISS_CONTACT_LIST,
5844 p_contact_point_list,l_match_str, l_party_max_score, l_ps_max_score, l_contact_max_score, l_cpt_max_score);
5845 g_score_until_thresh := false;
5846 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
5847
5848 -- ************************************************************
5849 -- STEP 2. Setup of intermedia query strings for Acquisition query
5850 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
5851 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);
5852
5853 -- Setup Search Context ID
5854 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
5855 x_search_ctx_id := l_search_ctx_id;
5856 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5857 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);
5858 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);
5859 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);
5860 END IF;
5861
5862 IF l_contact_pt_contains_str IS NOT NULL THEN
5863 open_contact_pt_cursor(NULL, P_PARTY_ID, p_restrict_sql, l_contact_pt_contains_str,NULL, null,'N', 'N',l_contact_pt_cur);
5864 cnt := 1;
5865 LOOP
5866 FETCH l_contact_pt_cur INTO
5867 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;
5868 EXIT WHEN l_contact_pt_cur%NOTFOUND;
5869 IF (p_dup_contact_point_id IS NULL OR (
5870 p_dup_contact_point_id IS NOT NULL AND
5871 l_cpt_ps_id IS NULL AND l_cpt_contact_id IS NULL AND
5872 p_dup_contact_point_id <> l_contact_pt_id)) THEN
5873 H_CONTACT_POINT_ID(cnt) := l_contact_pt_id;
5874 H_PARTY_ID(cnt) := l_cpt_party_id;
5875 H_SCORE(cnt) := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
5876 cnt := cnt+1;
5877 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5878 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);
5879 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);
5880 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);
5881 END IF;
5882 END IF;
5883 END LOOP;
5884 CLOSE l_contact_pt_cur;
5885 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5886 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);
5887 END IF;
5888 x_num_matches := 0;
5889 FOR I in 1..H_CONTACT_POINT_ID.COUNT LOOP
5890 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
5891 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);
5892 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);
5893 END IF;
5894 IF (H_SCORE(I)/l_entered_max_score) >= (77/700) THEN
5895 INSERT INTO HZ_MATCHED_CPTS_GT(SEARCH_CONTEXT_ID,CONTACT_POINT_ID,PARTY_ID,SCORE) VALUES (
5896 l_search_ctx_id,H_CONTACT_POINT_ID(I),H_PARTY_ID(I),round(H_SCORE(I)/l_entered_max_score)*100);
5897 x_num_matches := x_num_matches + 1;
5898 END IF;
5899 END LOOP;
5900 END IF;
5901 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
5902 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);
5903 END IF;
5904 EXCEPTION
5905 WHEN FND_API.G_EXC_ERROR THEN
5906 RAISE FND_API.G_EXC_ERROR;
5907 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
5908 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5909 WHEN OTHERS THEN
5910 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
5911 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.get_matching_contact_points');
5912 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
5913 FND_MSG_PUB.ADD;
5914 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
5915 END get_matching_contact_points;
5916
5917 /**********************************************************
5918 This procedure finds the score details for a specific party that
5919 matched
5920
5921 **********************************************************/
5922
5923 PROCEDURE get_score_details (
5924 p_rule_id IN NUMBER,
5925 p_party_id IN NUMBER,
5926 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
5927 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
5928 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
5929 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
5930 x_search_ctx_id IN OUT NUMBER
5931 ) IS
5932
5933 -- Strings to hold the generated Intermedia query strings
5934 l_party_contains_str VARCHAR2(32000);
5935 l_party_site_contains_str VARCHAR2(32000);
5936 l_contact_contains_str VARCHAR2(32000);
5937 l_contact_pt_contains_str VARCHAR2(32000);
5938 l_tmp VARCHAR2(32000);
5939
5940 -- Other local variables
5941 l_match_str VARCHAR2(30); -- Match type (AND or OR)
5942 -- For Score calculation
5943 l_max_score NUMBER;
5944 l_entered_max_score NUMBER;
5945 FIRST BOOLEAN;
5946 l_search_ctx_id NUMBER; -- Generated Search Context ID
5947
5948 l_TX39 VARCHAR2(2000);
5949 l_max_TX39 VARCHAR2(2000);
5950 l_TX32 VARCHAR2(2000);
5951 l_max_TX32 VARCHAR2(2000);
5952 l_TX33 VARCHAR2(2000);
5953 l_max_TX33 VARCHAR2(2000);
5954 l_TX9 VARCHAR2(2000);
5955 l_max_TX9 VARCHAR2(2000);
5956 l_TX22 VARCHAR2(2000);
5957 l_max_TX22 VARCHAR2(2000);
5958 l_TX35 VARCHAR2(2000);
5959 l_max_TX35 VARCHAR2(2000);
5960 l_TX1 VARCHAR2(2000);
5961 l_max_TX1 VARCHAR2(2000);
5962 l_TX3 VARCHAR2(2000);
5963 l_max_TX3 VARCHAR2(2000);
5964 l_TX15 VARCHAR2(2000);
5965 l_max_TX15 VARCHAR2(2000);
5966 l_TX4 VARCHAR2(2000);
5967 l_max_TX4 VARCHAR2(2000);
5968 l_TX10 VARCHAR2(2000);
5969 l_max_TX10 VARCHAR2(2000);
5970 l_TX11 VARCHAR2(2000);
5971 l_max_TX11 VARCHAR2(2000);
5972 l_TX5 VARCHAR2(2000);
5973 l_max_TX5 VARCHAR2(2000);
5974 l_TX40 VARCHAR2(2000);
5975 l_max_TX40 VARCHAR2(2000);
5976 l_TX34 VARCHAR2(2000);
5977 l_max_TX34 VARCHAR2(2000);
5978 l_TX14 VARCHAR2(2000);
5979 l_max_TX14 VARCHAR2(2000);
5980 l_TX17 VARCHAR2(2000);
5981 l_max_TX17 VARCHAR2(2000);
5982 l_TX6 VARCHAR2(2000);
5983 l_max_TX6 VARCHAR2(2000);
5984 H_SCORES HZ_PARTY_SEARCH.score_list;
5985
5986 l_score NUMBER;
5987 l_match_idx NUMBER;
5988 l_idx NUMBER;
5989 l_party_cur HZ_PARTY_STAGE.StageCurTyp;
5990 l_party_site_cur HZ_PARTY_STAGE.StageCurTyp;
5991 l_contact_cur HZ_PARTY_STAGE.StageCurTyp;
5992 l_contact_pt_cur HZ_PARTY_STAGE.StageCurTyp;
5993 l_party_id NUMBER;
5994 l_ps_party_id NUMBER;
5995 l_ct_party_id NUMBER;
5996 l_cpt_party_id NUMBER;
5997 l_cpt_ps_id NUMBER;
5998 l_cpt_contact_id NUMBER;
5999 l_cpt_type VARCHAR2(100);
6000 l_party_site_id NUMBER;
6001 l_org_contact_id NUMBER;
6002 l_contact_pt_id NUMBER;
6003 l_ps_contact_id NUMBER;
6004 l_max_id NUMBER;
6005 l_max_idx NUMBER;
6006
6007 l_index NUMBER;
6008 l_party_max_score NUMBER;
6009 l_ps_max_score NUMBER;
6010 l_contact_max_score NUMBER;
6011 l_cpt_max_score NUMBER;
6012
6013 --Fix for bug 4417124
6014 l_use_contact_addr_info BOOLEAN:=TRUE;
6015 l_use_contact_cpt_info BOOLEAN:=TRUE;
6016 l_TX35_new VARCHAR2(4000);
6017
6018 BEGIN
6019
6020 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6021 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);
6022 END IF;
6023 -- ************************************
6024 -- STEP 1. Initialization and error checks
6025
6026 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);
6027 g_score_until_thresh := false;
6028 IF l_entered_max_score = 0 THEN l_entered_max_score:=1; END IF;
6029 -- ************************************************************
6030 -- STEP 2. Setup of intermedia query strings for Acquisition query
6031 l_party_site_contains_str := INIT_PARTY_SITES_QUERY(l_match_str,l_tmp);
6032 l_contact_contains_str := INIT_CONTACTS_QUERY(l_match_str,l_tmp);
6033 l_contact_pt_contains_str := INIT_CONTACT_POINTS_QUERY(l_match_str,l_tmp);
6034 init_score_context(p_party_search_rec,p_party_site_list,p_contact_list,p_contact_point_list);
6035
6036 -- Setup Search Context ID
6037 IF x_search_ctx_id IS NULL THEN
6038 SELECT hz_search_ctx_s.nextval INTO l_search_ctx_id FROM dual;
6039 x_search_ctx_id := l_search_ctx_id;
6040 ELSE
6041 l_search_ctx_id := x_search_ctx_id;
6042 END IF;
6043
6044 open_party_cursor(p_party_id, null, null,null,null,null,l_party_cur);
6045 LOOP
6046 FETCH l_party_cur INTO
6047 l_party_id , l_TX32, l_TX33, l_TX34, l_TX35, l_TX40, l_TX39;
6048 EXIT WHEN l_party_cur%NOTFOUND;
6049 l_TX35_new:=RTRIM(LTRIM(l_TX35));
6050 l_TX35_new:=(CASE l_TX35_new WHEN 'SYNC' THEN HZ_STAGE_MAP_TRANSFORM.den_acc_number (l_party_id) ELSE l_TX35_new END);
6051 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_new,l_TX40,l_TX39,1);
6052 END LOOP;
6053 CLOSE l_party_cur;
6054
6055 IF l_party_site_contains_str IS NOT NULL THEN
6056 l_max_score := 0;
6057 l_max_id := 0;
6058 l_max_idx := 0;
6059 IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_addr_info THEN
6060 open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'Y','N',l_party_site_cur);
6061 ELSE
6062 open_party_site_cursor(null, p_party_id, null, l_party_site_contains_str,NULL,NULL, 'N','N',l_party_site_cur);
6063 END IF;
6064 LOOP
6065 FETCH l_party_site_cur INTO
6066 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;
6067 EXIT WHEN l_party_site_cur%NOTFOUND;
6068 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);
6069 IF l_score > l_max_score THEN
6070 l_max_score := l_score;
6071 l_max_id := l_party_site_id;
6072 l_max_idx := l_match_idx;
6073 l_max_TX9 := l_TX9;
6074 l_max_TX22 := l_TX22;
6075 l_max_TX3 := l_TX3;
6076 l_max_TX15 := l_TX15;
6077 l_max_TX4 := l_TX4;
6078 l_max_TX10 := l_TX10;
6079 l_max_TX11 := l_TX11;
6080 l_max_TX14 := l_TX14;
6081 l_max_TX17 := l_TX17;
6082 END IF;
6083 END LOOP;
6084 CLOSE l_party_site_cur;
6085 IF l_max_score>0 THEN
6086 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);
6087 END IF;
6088 END IF;
6089
6090 IF l_contact_contains_str IS NOT NULL THEN
6091 l_max_score := 0;
6092 l_max_id := 0;
6093 l_max_idx := 0;
6094 open_contact_cursor(null, p_party_id, null, l_contact_contains_str,NULL, null, l_contact_cur);
6095 LOOP
6096 FETCH l_contact_cur INTO
6097 l_org_contact_id, l_ct_party_id , l_TX6, l_TX5;
6098 EXIT WHEN l_contact_cur%NOTFOUND;
6099 l_score := GET_CONTACTS_SCORE(l_match_idx,l_TX6,l_TX5);
6100 IF l_score > l_max_score THEN
6101 l_max_score := l_score;
6102 l_max_id := l_org_contact_id;
6103 l_max_idx := l_match_idx;
6104 l_max_TX5 := l_TX5;
6105 l_max_TX6 := l_TX6;
6106 END IF;
6107 END LOOP;
6108 CLOSE l_contact_cur;
6109 IF l_max_score>0 THEN
6110 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);
6111 END IF;
6112 END IF;
6113
6114 IF l_contact_pt_contains_str IS NOT NULL THEN
6115 l_max_score := 0;
6116 l_max_id := 0;
6117 l_max_idx := 0;
6118 IF p_party_search_rec.PARTY_TYPE = 'PERSON' AND l_use_contact_cpt_info THEN
6119 open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'Y','N',l_contact_pt_cur);
6120 ELSE
6121 open_contact_pt_cursor(null, p_party_id, null, l_contact_pt_contains_str,NULL,NULL, 'N','N',l_contact_pt_cur);
6122 END IF;
6123 LOOP
6124 FETCH l_contact_pt_cur INTO
6125 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;
6126 EXIT WHEN l_contact_pt_cur%NOTFOUND;
6127 l_score := GET_CONTACT_POINTS_SCORE(l_match_idx,l_TX1,l_TX6,l_TX5);
6128 IF l_score > l_max_score THEN
6129 l_max_score := l_score;
6130 l_max_id := l_contact_pt_id;
6131 l_max_idx := l_match_idx;
6132 l_max_TX1 := l_TX1;
6133 l_max_TX5 := l_TX5;
6134 l_max_TX6 := l_TX6;
6135 END IF;
6136 END LOOP;
6137 IF l_max_score>0 THEN
6138 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);
6139 END IF;
6140 CLOSE l_contact_pt_cur;
6141 END IF;
6142 IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6143 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);
6144 END IF;
6145 EXCEPTION
6146 WHEN FND_API.G_EXC_ERROR THEN
6147 RAISE FND_API.G_EXC_ERROR;
6148 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6149 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6150 WHEN OTHERS THEN
6151 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6152 FND_MESSAGE.SET_TOKEN('PROC','HZ_MATCH_RULE_33.get_score_details');
6153 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6154 FND_MSG_PUB.ADD;
6155 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6156 END get_score_details;
6157
6158
6159 /************************************************
6160 This procedure retrieves the match rule attributes into
6161 the search record structures
6162 ************************************************/
6163
6164 PROCEDURE get_party_for_search (
6165 p_party_id IN NUMBER,
6166 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
6167 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
6168 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
6169 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6170 ) IS
6171 l_party_id NUMBER;
6172 l_party_site_ids HZ_PARTY_SEARCH.IDList;
6173 l_contact_ids HZ_PARTY_SEARCH.IDList;
6174 l_contact_pt_ids HZ_PARTY_SEARCH.IDList;
6175 ps NUMBER :=1;
6176 cpt NUMBER :=1;
6177 ct NUMBER :=1;
6178 l_use_contact_info varchar2(1);
6179 BEGIN
6180
6181 l_use_contact_info := 'Y';
6182 IF nvl(FND_PROFILE.VALUE('HZ_DQM_REL_PARTY_MATCH'),'N')='Y' THEN
6183 l_use_contact_info := 'N';
6184 END IF;
6185 l_party_id := p_party_id;
6186 FOR PARTY_SITES IN (
6187 SELECT party_site_id FROM (
6188 SELECT party_site_id,identifying_address_flag
6189 FROM HZ_PARTY_SITES
6190 WHERE party_id = p_party_id
6191 AND (status is null OR status = 'A')
6192 AND identifying_address_flag='Y'
6193 UNION
6194
6195 SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
6196 FROM HZ_PARTY_SITES
6197 WHERE party_id = p_party_id
6198 AND (status is null OR status = 'A')
6199 AND (identifying_address_flag IS NULL OR identifying_address_flag = 'N')
6200 AND ROWNUM<6
6201 UNION
6202
6203 SELECT party_site_id,NVL(identifying_address_flag,'N') identifying_address_flag
6204 FROM HZ_PARTY_SITES
6205 WHERE (status is null OR status = 'A')
6206 AND party_id in (
6207 SELECT party_id
6208 FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
6209 WHERE HZ_RELATIONSHIPS.object_id = p_party_id
6210 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6211 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6212 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6213 and l_use_contact_info = 'Y'
6214 )
6215 AND ROWNUM<6
6216 ) order by identifying_address_flag desc
6217 ) LOOP
6218 l_party_site_ids(ps) := PARTY_SITES.party_site_id;
6219 ps:=ps+1;
6220 END LOOP;
6221 FOR CONTACTS IN (
6222 SELECT org_contact_id
6223 FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
6224 WHERE HZ_RELATIONSHIPS.object_id = p_party_id
6225 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6226 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6227 AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
6228 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6229 AND ROWNUM<6
6230 ) LOOP
6231 l_contact_ids(ct) := CONTACTS.org_contact_id;
6232 ct := ct+1;
6233 END LOOP;
6234 FOR CONTACT_POINTS IN (
6235 SELECT CONTACT_POINT_ID
6236 FROM HZ_CONTACT_POINTS
6237 WHERE PRIMARY_FLAG = 'Y'
6238 AND owner_table_name = 'HZ_PARTIES'
6239 AND owner_table_id = p_party_id
6240
6241 UNION
6242
6243 SELECT CONTACT_POINT_ID
6244 FROM HZ_CONTACT_POINTS,HZ_ORG_CONTACTS, HZ_RELATIONSHIPS
6245 WHERE PRIMARY_FLAG = 'Y'
6246 AND owner_table_name = 'HZ_PARTIES'
6247 AND OWNER_TABLE_ID = HZ_RELATIONSHIPS.party_id
6248 AND HZ_RELATIONSHIPS.object_id = p_party_id
6249 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6250 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6251 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6252 and l_use_contact_info = 'Y'
6253 AND ROWNUM<6
6254 UNION
6255
6256 SELECT CONTACT_POINT_ID
6257 FROM HZ_CONTACT_POINTS,HZ_PARTY_SITES
6258 WHERE PRIMARY_FLAG = 'Y'
6259 AND owner_table_name = 'HZ_PARTY_SITES'
6260 AND owner_table_id = party_site_id
6261 AND PARTY_ID = p_party_id
6262 AND IDENTIFYING_ADDRESS_FLAG = 'Y') LOOP
6263 l_contact_pt_ids(cpt) := CONTACT_POINTS.CONTACT_POINT_ID;
6264 cpt := cpt+1;
6265 END LOOP;
6266 get_search_criteria(l_party_id,l_party_site_ids,l_contact_ids,l_contact_pt_ids,
6267 x_party_search_rec,x_party_site_list,x_contact_list,x_contact_point_list);
6268 EXCEPTION
6269 WHEN FND_API.G_EXC_ERROR THEN
6270 RAISE FND_API.G_EXC_ERROR;
6271 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6272 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6273 WHEN OTHERS THEN
6274 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6275 FND_MESSAGE.SET_TOKEN('PROC','get_party_for_search');
6276 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6277 FND_MSG_PUB.ADD;
6278 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6279 END get_party_for_search;
6280
6281 PROCEDURE get_search_criteria (
6282 p_party_id IN NUMBER,
6283 p_party_site_ids IN HZ_PARTY_SEARCH.IDList,
6284 p_contact_ids IN HZ_PARTY_SEARCH.IDList,
6285 p_contact_pt_ids IN HZ_PARTY_SEARCH.IDList,
6286 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type,
6287 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list,
6288 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list,
6289 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6290 ) IS
6291 BEGIN
6292
6293 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6294 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);
6295 END IF;
6296 IF p_party_id IS NOT NULL THEN
6297 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6298 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);
6299 END IF;
6300 get_party_rec(p_party_id, x_party_search_rec);
6301 END IF;
6302 IF p_party_site_ids IS NOT NULL AND p_party_site_ids.COUNT>0 THEN
6303 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6304 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);
6305 END IF;
6306 get_party_site_rec(p_party_site_ids, x_party_site_list);
6307 END IF;
6308 IF p_contact_ids IS NOT NULL AND p_contact_ids.COUNT>0 THEN
6309 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6310 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);
6311 END IF;
6312 get_contact_rec(p_contact_ids, x_contact_list);
6313 END IF;
6314 IF p_contact_pt_ids IS NOT NULL AND p_contact_pt_ids.COUNT>0 THEN
6315 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6316 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);
6317 END IF;
6318 get_contact_point_rec(p_contact_pt_ids, x_contact_point_list);
6319 END IF;
6320 EXCEPTION
6321 WHEN FND_API.G_EXC_ERROR THEN
6322 RAISE FND_API.G_EXC_ERROR;
6323 WHEN FND_API.G_EXC_UNEXPECTED_ERROR THEN
6324 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6325 WHEN OTHERS THEN
6326 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
6327 FND_MESSAGE.SET_TOKEN('PROC','get_search_criteria');
6328 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6329 FND_MSG_PUB.ADD;
6330 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6331 END get_search_criteria;
6332
6333
6334 /************************************************
6335 This procedure retrieves the match rule party attributes into
6336 the party search record structure
6337 ************************************************/
6338
6339 PROCEDURE get_party_rec (
6340 p_party_id IN NUMBER,
6341 x_party_search_rec OUT NOCOPY HZ_PARTY_SEARCH.party_search_rec_type
6342 ) IS
6343 l_party_type VARCHAR2(255);
6344 BEGIN
6345
6346 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6347 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);
6348 END IF;
6349 SELECT PARTY_TYPE INTO l_party_type
6350 FROM HZ_PARTIES
6351 WHERE PARTY_ID = p_party_id;
6352
6353 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6354 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);
6355 END IF;
6356 IF l_party_type = 'ORGANIZATION' THEN
6357 SELECT
6358 translate(HZ_PARTIES.PARTY_NUMBER, '%',' ')
6359 INTO
6360 x_party_search_rec.PARTY_NUMBER
6361 FROM HZ_PARTIES, HZ_ORGANIZATION_PROFILES
6362 WHERE HZ_PARTIES.party_id = HZ_ORGANIZATION_PROFILES.party_id
6363 AND HZ_ORGANIZATION_PROFILES.effective_end_date is NULL
6364 AND HZ_PARTIES.party_id = p_party_id;
6365 ELSIF l_party_type = 'PERSON' THEN
6366 SELECT
6367 translate(HZ_PARTIES.PARTY_NUMBER, '%',' ')
6368 INTO
6369 x_party_search_rec.PARTY_NUMBER
6370 FROM HZ_PARTIES, HZ_PERSON_PROFILES
6371 WHERE HZ_PARTIES.party_id = HZ_PERSON_PROFILES.party_id
6372 AND HZ_PERSON_PROFILES.effective_end_date is NULL
6373 AND HZ_PARTIES.party_id = p_party_id;
6374 END IF;
6375 x_party_search_rec.PARTY_TYPE := l_party_type;
6376 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6377 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);
6378 END IF;
6379 x_party_search_rec.ALL_ACCOUNT_NAMES:=
6380 HZ_PARTY_ACQUIRE.get_account_info(p_party_id , 'PARTY','ALL_ACCOUNT_NAMES');
6381 x_party_search_rec.ALL_ACCOUNT_NUMBERS:=
6382 HZ_PARTY_ACQUIRE.get_account_info(p_party_id , 'PARTY','ALL_ACCOUNT_NUMBERS');
6383 x_party_search_rec.PARTY_ALL_NAMES:=
6384 HZ_PARTY_ACQUIRE.get_known_as(p_party_id , 'PARTY','PARTY_ALL_NAMES');
6385
6386 EXCEPTION
6387 WHEN OTHERS THEN
6388 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6389 FND_MESSAGE.SET_TOKEN('PROC','get_party_rec');
6390 FND_MESSAGE.SET_TOKEN('PARTY_ID',p_party_id);
6391 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6392 FND_MSG_PUB.ADD;
6393 RAISE FND_API.G_EXC_ERROR;
6394 END get_party_rec;
6395
6396 /************************************************
6397 This procedure retrieves the match rule party site attributes into
6398 the party site search record structure
6399 ************************************************/
6400
6401 PROCEDURE get_party_site_rec (
6402 p_party_site_ids IN HZ_PARTY_SEARCH.IDList,
6403 x_party_site_list OUT NOCOPY HZ_PARTY_SEARCH.party_site_list
6404 ) IS
6405 CURSOR c_party_sites(cp_party_site_id NUMBER) IS
6406 SELECT party_site_id
6407 ,translate(HZ_LOCATIONS.CITY, '%',' ')
6408 ,translate(HZ_LOCATIONS.COUNTRY, '%',' ')
6409 ,translate(HZ_PARTY_SITES.PARTY_SITE_NUMBER, '%',' ')
6410 ,translate(HZ_LOCATIONS.POSTAL_CODE, '%',' ')
6411 ,translate(HZ_LOCATIONS.STATE, '%',' ')
6412 FROM HZ_PARTY_SITES, HZ_LOCATIONS
6413 WHERE HZ_PARTY_SITES.party_site_id = cp_party_site_id
6414 AND HZ_PARTY_SITES.location_id = HZ_LOCATIONS.location_id;
6415
6416 I NUMBER;
6417 J NUMBER:=1;
6418 l_party_site_id NUMBER;
6419
6420 BEGIN
6421
6422 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6423 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);
6424 END IF;
6425 FOR I IN 1..p_party_site_ids.COUNT LOOP
6426 l_party_site_id := p_party_site_ids(I);
6427 OPEN c_party_sites(p_party_site_ids(I));
6428 LOOP
6429 FETCH c_party_sites INTO
6430 l_party_site_id
6431 ,x_party_site_list(J).CITY
6432 ,x_party_site_list(J).COUNTRY
6433 ,x_party_site_list(J).PARTY_SITE_NUMBER
6434 ,x_party_site_list(J).POSTAL_CODE
6435 ,x_party_site_list(J).STATE
6436 ;
6437 EXIT WHEN c_party_sites%NOTFOUND;
6438
6439 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6440 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);
6441 END IF;
6442 x_party_site_list(J).ADDRESS:=
6443 HZ_PARTY_ACQUIRE.get_address(l_party_site_id , 'PARTY_SITES','ADDRESS');
6444 J:=J+1;
6445
6446 END LOOP;
6447 CLOSE c_party_sites;
6448 END LOOP;
6449
6450 EXCEPTION
6451 WHEN OTHERS THEN
6452 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6453 FND_MESSAGE.SET_TOKEN('PROC','get_party_site_rec');
6454 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_party_site_id);
6455 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6456 FND_MSG_PUB.ADD;
6457 RAISE FND_API.G_EXC_ERROR;
6458 END get_party_site_rec;
6459
6460 /************************************************
6461 This procedure retrieves the match rule contact attributes into
6462 the contact search record structure
6463 ************************************************/
6464
6465 PROCEDURE get_contact_rec (
6466 p_contact_ids IN HZ_PARTY_SEARCH.IDList,
6467 x_contact_list OUT NOCOPY HZ_PARTY_SEARCH.contact_list
6468 ) IS
6469 CURSOR c_contacts(cp_org_contact_id NUMBER) IS
6470 SELECT org_contact_id
6471 FROM HZ_ORG_CONTACTS, HZ_RELATIONSHIPS, HZ_PERSON_PROFILES
6472 WHERE HZ_ORG_CONTACTS.org_contact_id = cp_org_contact_id
6473 AND HZ_RELATIONSHIPS.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
6474 AND HZ_RELATIONSHIPS.OBJECT_TABLE_NAME = 'HZ_PARTIES'
6475 AND HZ_RELATIONSHIPS.DIRECTIONAL_FLAG = 'F'
6476 AND HZ_ORG_CONTACTS.party_relationship_id = HZ_RELATIONSHIPS.relationship_id
6477 AND HZ_RELATIONSHIPS.subject_id = HZ_PERSON_PROFILES.party_id
6478 AND HZ_PERSON_PROFILES.effective_end_date IS NULL;
6479
6480 I NUMBER;
6481 l_org_contact_id NUMBER;
6482 J NUMBER:=1;
6483 BEGIN
6484
6485 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6486 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);
6487 END IF;
6488 FOR I IN 1..p_contact_ids.COUNT LOOP
6489 l_org_contact_id := p_contact_ids(I);
6490 OPEN c_contacts(p_contact_ids(I));
6491 LOOP
6492 FETCH c_contacts INTO
6493 l_org_contact_id
6494 ;
6495 EXIT WHEN c_contacts%NOTFOUND;
6496
6497 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6498 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);
6499 END IF;
6500 x_contact_list(J).CONTACT_NAME:=
6501 HZ_PARTY_ACQUIRE.get_contact_name(l_org_contact_id , 'CONTACTS','CONTACT_NAME');
6502
6503 J:=J+1;
6504 END LOOP;
6505 CLOSE c_contacts;
6506 END LOOP;
6507
6508 EXCEPTION
6509 WHEN OTHERS THEN
6510 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6511 FND_MESSAGE.SET_TOKEN('PROC','get_contact_rec');
6512 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_org_contact_id);
6513 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6514 FND_MSG_PUB.ADD;
6515 RAISE FND_API.G_EXC_ERROR;
6516 END get_contact_rec;
6517
6518 /************************************************
6519 This procedure retrieves the match rule contact point attributes into
6520 the contact point search record structure
6521 ************************************************/
6522
6523 PROCEDURE get_contact_point_rec (
6524 p_contact_point_ids IN HZ_PARTY_SEARCH.IDList,
6525 x_contact_point_list OUT NOCOPY HZ_PARTY_SEARCH.contact_point_list
6526 ) IS
6527
6528 -- Cursor to fetch primary contact points for party
6529 CURSOR c_cpts(cp_contact_point_id NUMBER) IS
6530 SELECT contact_point_id, contact_point_type
6531 ,translate(HZ_CONTACT_POINTS.EMAIL_ADDRESS, '%',' ')
6532 FROM HZ_CONTACT_POINTS
6533 WHERE contact_point_id = cp_contact_point_id;
6534
6535 I NUMBER;
6536 l_contact_point_id NUMBER;
6537 J NUMBER:=1;
6538 BEGIN
6539
6540 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6541 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);
6542 END IF;
6543 FOR I in 1..p_contact_point_ids.COUNT LOOP
6544 l_contact_point_id := p_contact_point_ids(I);
6545 OPEN c_cpts(p_contact_point_ids(I));
6546 LOOP
6547 FETCH c_cpts INTO
6548 l_contact_point_id, x_contact_point_list(J).contact_point_type
6549 ,x_contact_point_list(J).EMAIL_ADDRESS
6550 ;
6551 EXIT WHEN c_cpts%NOTFOUND;
6552
6553 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6554 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);
6555 END IF;
6556 x_contact_point_list(J).FLEX_FORMAT_PHONE_NUMBER:=
6557 HZ_PARTY_ACQUIRE.get_phone_number(l_contact_point_id , 'CONTACT_POINTS','FLEX_FORMAT_PHONE_NUMBER');
6558 J:=J+1;
6559
6560 END LOOP;
6561 CLOSE c_cpts;
6562 END LOOP;
6563
6564 EXCEPTION
6565 WHEN OTHERS THEN
6566 FND_MESSAGE.SET_NAME('AR', 'HZ_PARTY_QUERY_ERROR');
6567 FND_MESSAGE.SET_TOKEN('PROC','get_contact_point_rec');
6568 FND_MESSAGE.SET_TOKEN('PARTY_ID',l_contact_point_id);
6569 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
6570 FND_MSG_PUB.ADD;
6571 RAISE FND_API.G_EXC_ERROR;
6572 END get_contact_point_rec;
6573
6574 /************************************************
6575 This procedure maps a search record from the logical
6576 record structure to the stage schema structure
6577 for the PARTY Entity after applying
6578 the defined transformations
6579 ************************************************/
6580
6581 PROCEDURE MAP_PARTY_REC(
6582 p_search_ctx IN BOOLEAN,
6583 p_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
6584 x_entered_max_score OUT NUMBER,
6585 x_stage_rec IN OUT NOCOPY HZ_PARTY_STAGE.party_stage_rec_type
6586 ) IS
6587 tmp VARCHAR2(4000);
6588 l_party_name VARCHAR2(4000);
6589 BEGIN
6590 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6591 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);
6592 END IF;
6593 IF p_search_ctx THEN
6594 x_stage_rec.TX8 := NULL;
6595 g_other_party_level_attribs:=FALSE;
6596 IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL
6597 OR p_search_rec.PARTY_NUMBER IS NOT NULL
6598 OR p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL
6599 THEN
6600 g_other_party_level_attribs:=TRUE;
6601 END IF;
6602 x_entered_max_score:=0;
6603 IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN
6604 x_entered_max_score := x_entered_max_score+60;
6605 END IF;
6606 IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN
6607 x_entered_max_score := x_entered_max_score+100;
6608 END IF;
6609 IF p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN
6610 x_entered_max_score := x_entered_max_score+100;
6611 END IF;
6612 IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6613 x_entered_max_score := x_entered_max_score+60;
6614 END IF;
6615 END IF;
6616 IF p_search_ctx THEN
6617 IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN
6618 x_stage_rec.TX33 :=
6619 HZ_TRANS_PKG.WRNAMES_CLEANSE(
6620 p_search_rec.ALL_ACCOUNT_NAMES
6621 ,null,'ALL_ACCOUNT_NAMES'
6622 ,'PARTY','SEARCH');
6623 ELSE
6624 x_stage_rec.TX33 := '';
6625 END IF;
6626 ELSE
6627 IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN
6628 tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
6629 x_stage_rec.TX33
6630 ,null,'ALL_ACCOUNT_NAMES'
6631 ,'PARTY','SCORE');
6632 IF tmp IS NOT NULL THEN
6633 x_stage_rec.TX33 := tmp;
6634 END IF;
6635 END IF;
6636 END IF;
6637 IF p_search_ctx THEN
6638 IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN
6639 x_stage_rec.TX32 :=
6640 HZ_TRANS_PKG.WRNAMES_EXACT(
6641 p_search_rec.ALL_ACCOUNT_NAMES
6642 ,null,'ALL_ACCOUNT_NAMES'
6643 ,'PARTY','SEARCH');
6644 ELSE
6645 x_stage_rec.TX32 := '';
6646 END IF;
6647 ELSE
6648 IF p_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN
6649 tmp :=HZ_TRANS_PKG.WRNAMES_EXACT(
6650 x_stage_rec.TX32
6651 ,null,'ALL_ACCOUNT_NAMES'
6652 ,'PARTY','SCORE');
6653 IF tmp IS NOT NULL THEN
6654 x_stage_rec.TX32 := tmp;
6655 END IF;
6656 END IF;
6657 END IF;
6658 IF p_search_ctx THEN
6659 IF p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN
6660 x_stage_rec.TX35 :=
6661 HZ_TRANS_PKG.RM_SPLCHAR(
6662 p_search_rec.ALL_ACCOUNT_NUMBERS
6663 ,null,'ALL_ACCOUNT_NUMBERS'
6664 ,'PARTY','SEARCH');
6665 ELSE
6666 x_stage_rec.TX35 := '';
6667 END IF;
6668 ELSE
6669 IF p_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN
6670 tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
6671 x_stage_rec.TX35
6672 ,null,'ALL_ACCOUNT_NUMBERS'
6673 ,'PARTY','SCORE');
6674 IF tmp IS NOT NULL THEN
6675 x_stage_rec.TX35 := tmp;
6676 END IF;
6677 END IF;
6678 END IF;
6679 IF p_search_ctx THEN
6680 IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6681 x_stage_rec.TX40 :=
6682 HZ_TRANS_PKG.WRNAMES_CLEANSE(
6683 p_search_rec.PARTY_ALL_NAMES
6684 ,null,'PARTY_ALL_NAMES'
6685 ,'PARTY','SEARCH');
6686 ELSE
6687 x_stage_rec.TX40 := '';
6688 END IF;
6689 ELSE
6690 IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6691 tmp :=HZ_TRANS_PKG.WRNAMES_CLEANSE(
6692 x_stage_rec.TX40
6693 ,null,'PARTY_ALL_NAMES'
6694 ,'PARTY','SCORE');
6695 IF tmp IS NOT NULL THEN
6696 x_stage_rec.TX40 := tmp;
6697 END IF;
6698 END IF;
6699 END IF;
6700 IF p_search_ctx THEN
6701 IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6702 x_stage_rec.TX39 :=
6703 HZ_TRANS_PKG.WRNAMES_EXACT(
6704 p_search_rec.PARTY_ALL_NAMES
6705 ,null,'PARTY_ALL_NAMES'
6706 ,'PARTY','SEARCH');
6707 ELSE
6708 x_stage_rec.TX39 := '';
6709 END IF;
6710 ELSE
6711 IF p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6712 tmp :=HZ_TRANS_PKG.WRNAMES_EXACT(
6713 x_stage_rec.TX39
6714 ,null,'PARTY_ALL_NAMES'
6715 ,'PARTY','SCORE');
6716 IF tmp IS NOT NULL THEN
6717 x_stage_rec.TX39 := tmp;
6718 END IF;
6719 END IF;
6720 END IF;
6721 IF p_search_ctx THEN
6722 IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN
6723 x_stage_rec.TX34 :=
6724 HZ_TRANS_PKG.RM_SPLCHAR(
6725 p_search_rec.PARTY_NUMBER
6726 ,null,'PARTY_NUMBER'
6727 ,'PARTY','SEARCH');
6728 ELSE
6729 x_stage_rec.TX34 := '';
6730 END IF;
6731 ELSE
6732 IF p_search_rec.PARTY_NUMBER IS NOT NULL THEN
6733 tmp :=HZ_TRANS_PKG.RM_SPLCHAR(
6734 x_stage_rec.TX34
6735 ,null,'PARTY_NUMBER'
6736 ,'PARTY','SCORE');
6737 IF tmp IS NOT NULL THEN
6738 x_stage_rec.TX34 := tmp;
6739 END IF;
6740 END IF;
6741 END IF;
6742 IF p_search_ctx THEN
6743 IF p_search_rec.PARTY_TYPE IS NOT NULL THEN
6744 x_stage_rec.TX36 :=
6745 HZ_TRANS_PKG.EXACT(
6746 p_search_rec.PARTY_TYPE
6747 ,null,'PARTY_TYPE'
6748 ,'PARTY');
6749 ELSE
6750 x_stage_rec.TX36 := '';
6751 END IF;
6752 END IF;
6753 l_party_name := p_search_rec.PARTY_NAME;
6754 IF l_party_name IS NULL AND p_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
6755 l_party_name := p_search_rec.PARTY_ALL_NAMES;
6756 END IF;
6757 IF l_party_name IS NOT NULL AND x_stage_rec.TX8 IS NULL THEN
6758 x_stage_rec.TX8 := HZ_TRANS_PKG.WRNAMES_EXACT(l_party_name,null,'PARTY_NAME','PARTY','SEARCH');
6759 END IF;
6760 EXCEPTION
6761 WHEN OTHERS THEN
6762 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
6763 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_REC');
6764 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
6765 FND_MSG_PUB.ADD;
6766 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
6767 END;
6768
6769
6770 /************************************************
6771 This procedure maps a search record from the logical
6772 record structure to the stage schema structure
6773 for the PARTY_SITES Entity after applying
6774 the defined transformations
6775 ************************************************/
6776
6777 PROCEDURE MAP_PARTY_SITE_REC(
6778 p_search_ctx IN BOOLEAN,
6779 p_search_list IN HZ_PARTY_SEARCH.party_site_list,
6780 x_entered_max_score OUT NUMBER,
6781 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.party_site_stage_list
6782 ) IS
6783 l_current_max_score NUMBER;
6784 tmp VARCHAR2(4000);
6785 BEGIN
6786 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6787 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);
6788 END IF;
6789 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6790 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);
6791 END IF;
6792 IF p_search_ctx THEN
6793 g_ps_den_only:=TRUE;
6794 x_entered_max_score:=0;
6795 FOR I IN 1..p_search_list.COUNT LOOP
6796 l_current_max_score:=0;
6797 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6798 l_current_max_score := l_current_max_score+40;
6799 g_ps_den_only:=FALSE;
6800 END IF;
6801 IF p_search_list(I).CITY IS NOT NULL THEN
6802 l_current_max_score := l_current_max_score+30;
6803 END IF;
6804 IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN
6805 l_current_max_score := l_current_max_score+20;
6806 END IF;
6807 IF p_search_list(I).STATE IS NOT NULL THEN
6808 l_current_max_score := l_current_max_score+20;
6809 END IF;
6810 IF p_search_list(I).PARTY_SITE_NUMBER IS NOT NULL THEN
6811 l_current_max_score := l_current_max_score+50;
6812 g_ps_den_only:=FALSE;
6813 END IF;
6814 IF p_search_list(I).COUNTRY IS NOT NULL THEN
6815 l_current_max_score := l_current_max_score+10;
6816 END IF;
6817 IF l_current_max_score>x_entered_max_score THEN
6818 x_entered_max_score:=l_current_max_score;
6819 END IF;
6820 END LOOP;
6821 END IF;
6822 FOR I IN 1..p_search_list.COUNT LOOP
6823 IF p_search_ctx THEN
6824 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6825 x_stage_list(I).TX4 :=
6826 HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6827 p_search_list(I).ADDRESS
6828 ,null,'ADDRESS'
6829 ,'PARTY_SITES','SEARCH');
6830 ELSE
6831 x_stage_list(I).TX4 := '';
6832 END IF;
6833 ELSE
6834 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6835 tmp := HZ_TRANS_PKG.WRADDRESS_CLEANSE(
6836 x_stage_list(I).TX4
6837 ,null,'ADDRESS'
6838 ,'PARTY_SITES','SCORE');
6839 IF tmp IS NOT NULL THEN
6840 x_stage_list(I).TX4 := tmp;
6841 END IF;
6842 END IF;
6843 END IF;
6844 END LOOP;
6845 FOR I IN 1..p_search_list.COUNT LOOP
6846 IF p_search_ctx THEN
6847 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6848 x_stage_list(I).TX3 :=
6849 HZ_TRANS_PKG.WRADDRESS_EXACT(
6850 p_search_list(I).ADDRESS
6851 ,null,'ADDRESS'
6852 ,'PARTY_SITES','SEARCH');
6853 ELSE
6854 x_stage_list(I).TX3 := '';
6855 END IF;
6856 ELSE
6857 IF p_search_list(I).ADDRESS IS NOT NULL THEN
6858 tmp := HZ_TRANS_PKG.WRADDRESS_EXACT(
6859 x_stage_list(I).TX3
6860 ,null,'ADDRESS'
6861 ,'PARTY_SITES','SCORE');
6862 IF tmp IS NOT NULL THEN
6863 x_stage_list(I).TX3 := tmp;
6864 END IF;
6865 END IF;
6866 END IF;
6867 END LOOP;
6868 FOR I IN 1..p_search_list.COUNT LOOP
6869 IF p_search_ctx THEN
6870 IF p_search_list(I).CITY IS NOT NULL THEN
6871 x_stage_list(I).TX10 :=
6872 HZ_TRANS_PKG.CLEANSE(
6873 p_search_list(I).CITY
6874 ,null,'CITY'
6875 ,'PARTY_SITES');
6876 ELSE
6877 x_stage_list(I).TX10 := '';
6878 END IF;
6879 END IF;
6880 END LOOP;
6881 FOR I IN 1..p_search_list.COUNT LOOP
6882 IF p_search_ctx THEN
6883 IF p_search_list(I).CITY IS NOT NULL THEN
6884 x_stage_list(I).TX9 :=
6885 HZ_TRANS_PKG.EXACT(
6886 p_search_list(I).CITY
6887 ,null,'CITY'
6888 ,'PARTY_SITES');
6889 ELSE
6890 x_stage_list(I).TX9 := '';
6891 END IF;
6892 END IF;
6893 END LOOP;
6894 FOR I IN 1..p_search_list.COUNT LOOP
6895 IF p_search_ctx THEN
6896 IF p_search_list(I).COUNTRY IS NOT NULL THEN
6897 x_stage_list(I).TX22 :=
6898 HZ_TRANS_PKG.EXACT(
6899 p_search_list(I).COUNTRY
6900 ,null,'COUNTRY'
6901 ,'PARTY_SITES');
6902 ELSE
6903 x_stage_list(I).TX22 := '';
6904 END IF;
6905 END IF;
6906 END LOOP;
6907 FOR I IN 1..p_search_list.COUNT LOOP
6908 IF p_search_ctx THEN
6909 IF p_search_list(I).PARTY_SITE_NUMBER IS NOT NULL THEN
6910 x_stage_list(I).TX17 :=
6911 HZ_TRANS_PKG.RM_SPLCHAR(
6912 p_search_list(I).PARTY_SITE_NUMBER
6913 ,null,'PARTY_SITE_NUMBER'
6914 ,'PARTY_SITES','SEARCH');
6915 ELSE
6916 x_stage_list(I).TX17 := '';
6917 END IF;
6918 ELSE
6919 IF p_search_list(I).PARTY_SITE_NUMBER IS NOT NULL THEN
6920 tmp := HZ_TRANS_PKG.RM_SPLCHAR(
6921 x_stage_list(I).TX17
6922 ,null,'PARTY_SITE_NUMBER'
6923 ,'PARTY_SITES','SCORE');
6924 IF tmp IS NOT NULL THEN
6925 x_stage_list(I).TX17 := tmp;
6926 END IF;
6927 END IF;
6928 END IF;
6929 END LOOP;
6930 FOR I IN 1..p_search_list.COUNT LOOP
6931 IF p_search_ctx THEN
6932 IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN
6933 x_stage_list(I).TX11 :=
6934 HZ_TRANS_PKG.RM_SPLCHAR(
6935 p_search_list(I).POSTAL_CODE
6936 ,null,'POSTAL_CODE'
6937 ,'PARTY_SITES','SEARCH');
6938 ELSE
6939 x_stage_list(I).TX11 := '';
6940 END IF;
6941 ELSE
6942 IF p_search_list(I).POSTAL_CODE IS NOT NULL THEN
6943 tmp := HZ_TRANS_PKG.RM_SPLCHAR(
6944 x_stage_list(I).TX11
6945 ,null,'POSTAL_CODE'
6946 ,'PARTY_SITES','SCORE');
6947 IF tmp IS NOT NULL THEN
6948 x_stage_list(I).TX11 := tmp;
6949 END IF;
6950 END IF;
6951 END IF;
6952 END LOOP;
6953 FOR I IN 1..p_search_list.COUNT LOOP
6954 IF p_search_ctx THEN
6955 IF p_search_list(I).STATE IS NOT NULL THEN
6956 x_stage_list(I).TX15 :=
6957 HZ_TRANS_PKG.WRSTATE_CLEANSE(
6958 p_search_list(I).STATE
6959 ,null,'STATE'
6960 ,'PARTY_SITES','SEARCH');
6961 ELSE
6962 x_stage_list(I).TX15 := '';
6963 END IF;
6964 ELSE
6965 IF p_search_list(I).STATE IS NOT NULL THEN
6966 tmp := HZ_TRANS_PKG.WRSTATE_CLEANSE(
6967 x_stage_list(I).TX15
6968 ,null,'STATE'
6969 ,'PARTY_SITES','SCORE');
6970 IF tmp IS NOT NULL THEN
6971 x_stage_list(I).TX15 := tmp;
6972 END IF;
6973 END IF;
6974 END IF;
6975 END LOOP;
6976 FOR I IN 1..p_search_list.COUNT LOOP
6977 IF p_search_ctx THEN
6978 IF p_search_list(I).STATE IS NOT NULL THEN
6979 x_stage_list(I).TX14 :=
6980 HZ_TRANS_PKG.WRSTATE_EXACT(
6981 p_search_list(I).STATE
6982 ,null,'STATE'
6983 ,'PARTY_SITES','SEARCH');
6984 ELSE
6985 x_stage_list(I).TX14 := '';
6986 END IF;
6987 ELSE
6988 IF p_search_list(I).STATE IS NOT NULL THEN
6989 tmp := HZ_TRANS_PKG.WRSTATE_EXACT(
6990 x_stage_list(I).TX14
6991 ,null,'STATE'
6992 ,'PARTY_SITES','SCORE');
6993 IF tmp IS NOT NULL THEN
6994 x_stage_list(I).TX14 := tmp;
6995 END IF;
6996 END IF;
6997 END IF;
6998 END LOOP;
6999 EXCEPTION
7000 WHEN OTHERS THEN
7001 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7002 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_PARTY_SITE_REC');
7003 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7004 FND_MSG_PUB.ADD;
7005 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7006 END;
7007
7008
7009 /************************************************
7010 This procedure maps a search record from the logical
7011 record structure to the stage schema structure
7012 for the CONTACTS Entity after applying
7013 the defined transformations
7014 ************************************************/
7015
7016 PROCEDURE MAP_CONTACT_REC(
7017 p_search_ctx IN BOOLEAN,
7018 p_search_list IN HZ_PARTY_SEARCH.contact_list,
7019 x_entered_max_score OUT NUMBER,
7020 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_stage_list
7021 ) IS
7022 l_current_max_score NUMBER;
7023 tmp VARCHAR2(4000);
7024 BEGIN
7025 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7026 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);
7027 END IF;
7028 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7029 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);
7030 END IF;
7031 IF p_search_ctx THEN
7032 x_entered_max_score:=0;
7033 FOR I IN 1..p_search_list.COUNT LOOP
7034 l_current_max_score:=0;
7035 IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN
7036 l_current_max_score := l_current_max_score+50;
7037 END IF;
7038 IF l_current_max_score>x_entered_max_score THEN
7039 x_entered_max_score:=l_current_max_score;
7040 END IF;
7041 END LOOP;
7042 END IF;
7043 FOR I IN 1..p_search_list.COUNT LOOP
7044 IF p_search_ctx THEN
7045 IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN
7046 x_stage_list(I).TX156 :=
7047 HZ_TRANS_PKG.SOUNDX(
7048 p_search_list(I).CONTACT_NAME
7049 ,null,'CONTACT_NAME'
7050 ,'CONTACTS');
7051 ELSE
7052 x_stage_list(I).TX156 := '';
7053 END IF;
7054 END IF;
7055 END LOOP;
7056 FOR I IN 1..p_search_list.COUNT LOOP
7057 IF p_search_ctx THEN
7058 IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN
7059 x_stage_list(I).TX6 :=
7060 HZ_TRANS_PKG.WRPERSON_CLEANSE(
7061 p_search_list(I).CONTACT_NAME
7062 ,null,'CONTACT_NAME'
7063 ,'CONTACTS','SEARCH');
7064 ELSE
7065 x_stage_list(I).TX6 := '';
7066 END IF;
7067 ELSE
7068 IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN
7069 tmp := HZ_TRANS_PKG.WRPERSON_CLEANSE(
7070 x_stage_list(I).TX6
7071 ,null,'CONTACT_NAME'
7072 ,'CONTACTS','SCORE');
7073 IF tmp IS NOT NULL THEN
7074 x_stage_list(I).TX6 := tmp;
7075 END IF;
7076 END IF;
7077 END IF;
7078 END LOOP;
7079 FOR I IN 1..p_search_list.COUNT LOOP
7080 IF p_search_ctx THEN
7081 IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN
7082 x_stage_list(I).TX5 :=
7083 HZ_TRANS_PKG.WRPERSON_EXACT(
7084 p_search_list(I).CONTACT_NAME
7085 ,null,'CONTACT_NAME'
7086 ,'CONTACTS','SEARCH');
7087 ELSE
7088 x_stage_list(I).TX5 := '';
7089 END IF;
7090 ELSE
7091 IF p_search_list(I).CONTACT_NAME IS NOT NULL THEN
7092 tmp := HZ_TRANS_PKG.WRPERSON_EXACT(
7093 x_stage_list(I).TX5
7094 ,null,'CONTACT_NAME'
7095 ,'CONTACTS','SCORE');
7096 IF tmp IS NOT NULL THEN
7097 x_stage_list(I).TX5 := tmp;
7098 END IF;
7099 END IF;
7100 END IF;
7101 END LOOP;
7102 EXCEPTION
7103 WHEN OTHERS THEN
7104 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7105 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_REC');
7106 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7107 FND_MSG_PUB.ADD;
7108 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7109 END;
7110
7111
7112 /************************************************
7113 This procedure maps a search record from the logical
7114 record structure to the stage schema structure
7115 for the CONTACT_POINTS Entity after applying
7116 the defined transformations
7117 ************************************************/
7118
7119 PROCEDURE MAP_CONTACT_POINT_REC(
7120 p_search_ctx IN BOOLEAN,
7121 p_search_list IN HZ_PARTY_SEARCH.contact_point_list,
7122 x_entered_max_score OUT NUMBER,
7123 x_stage_list IN OUT NOCOPY HZ_PARTY_STAGE.contact_pt_stage_list
7124 ) IS
7125 l_current_max_score NUMBER;
7126 tmp VARCHAR2(4000);
7127 TYPE INDEX_VARCHAR100_TBL IS TABLE OF NUMBER INDEX BY VARCHAR2(100);
7128 l_cnt_pt_type_index INDEX_VARCHAR100_TBL;
7129 TYPE CONTACT_PT_REC_TYPE IS RECORD (
7130 contact_pt_type VARCHAR2(100),
7131 max_score NUMBER) ;
7132 TYPE contact_pt_list IS TABLE of CONTACT_PT_REC_TYPE INDEX BY BINARY_INTEGER;
7133 l_cnt_pt_type contact_pt_list;
7134 N NUMBER := 1;
7135 x_modify VARCHAR2(1);
7136 BEGIN
7137 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7138 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);
7139 END IF;
7140 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7141 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);
7142 END IF;
7143 IF p_search_ctx THEN
7144 x_entered_max_score:=0;
7145 FOR I IN 1..p_search_list.COUNT LOOP
7146 l_current_max_score:=0;
7147 x_stage_list(I).CONTACT_POINT_TYPE := p_search_list(I).CONTACT_POINT_TYPE;
7148 IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN
7149 l_current_max_score := l_current_max_score+80;
7150 END IF;
7151 IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN
7152 l_current_max_score := l_current_max_score+80;
7153 END IF;
7154 x_modify := 'N';
7155 FOR J IN 1..l_cnt_pt_type.count LOOP
7156 if (l_cnt_pt_type(J).contact_pt_type = x_stage_list(I).CONTACT_POINT_TYPE) then
7157 x_modify := 'Y';
7158 IF l_cnt_pt_type(J).max_score<l_current_max_score THEN
7159 l_cnt_pt_type(J).max_score :=l_current_max_score;
7160 EXIT;
7161 END IF;
7162 end if;
7163 END LOOP;
7164 if x_modify='N' then
7165 l_cnt_pt_type(N).contact_pt_type := x_stage_list(I).CONTACT_POINT_TYPE;
7166 l_cnt_pt_type(N).max_score := l_current_max_score;
7167 N:= N+1;
7168 end if;
7169 END LOOP;
7170 FOR M IN 1..l_cnt_pt_type.count LOOP
7171 x_entered_max_score := x_entered_max_score+l_cnt_pt_type(M).max_score;
7172 END LOOP;
7173 END IF;
7174 FOR I IN 1..p_search_list.COUNT LOOP
7175 IF p_search_ctx THEN
7176 IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN
7177 x_stage_list(I).TX6 :=
7178 HZ_TRANS_PKG.CLEANSED_EMAIL(
7179 p_search_list(I).EMAIL_ADDRESS
7180 ,null,'EMAIL_ADDRESS'
7181 ,'CONTACT_POINTS','SEARCH');
7182 ELSE
7183 x_stage_list(I).TX6 := '';
7184 END IF;
7185 ELSE
7186 IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN
7187 tmp := HZ_TRANS_PKG.CLEANSED_EMAIL(
7188 x_stage_list(I).TX6
7189 ,null,'EMAIL_ADDRESS'
7190 ,'CONTACT_POINTS','SCORE');
7191 IF tmp IS NOT NULL THEN
7192 x_stage_list(I).TX6 := tmp;
7193 END IF;
7194 END IF;
7195 END IF;
7196 END LOOP;
7197 FOR I IN 1..p_search_list.COUNT LOOP
7198 IF p_search_ctx THEN
7199 IF p_search_list(I).EMAIL_ADDRESS IS NOT NULL THEN
7200 x_stage_list(I).TX5 :=
7201 HZ_TRANS_PKG.EXACT_EMAIL(
7202 p_search_list(I).EMAIL_ADDRESS
7203 ,null,'EMAIL_ADDRESS'
7204 ,'CONTACT_POINTS');
7205 ELSE
7206 x_stage_list(I).TX5 := '';
7207 END IF;
7208 END IF;
7209 END LOOP;
7210 FOR I IN 1..p_search_list.COUNT LOOP
7211 IF p_search_ctx THEN
7212 IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN
7213 x_stage_list(I).TX1 :=
7214 HZ_TRANS_PKG.RM_SPLCHAR_CTX(
7215 p_search_list(I).FLEX_FORMAT_PHONE_NUMBER
7216 ,null,'FLEX_FORMAT_PHONE_NUMBER'
7217 ,'CONTACT_POINTS','SEARCH');
7218 ELSE
7219 x_stage_list(I).TX1 := '';
7220 END IF;
7221 ELSE
7222 IF p_search_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN
7223 tmp := HZ_TRANS_PKG.RM_SPLCHAR_CTX(
7224 x_stage_list(I).TX1
7225 ,null,'FLEX_FORMAT_PHONE_NUMBER'
7226 ,'CONTACT_POINTS','SCORE');
7227 IF tmp IS NOT NULL THEN
7228 x_stage_list(I).TX1 := tmp;
7229 END IF;
7230 END IF;
7231 END IF;
7232 END LOOP;
7233 EXCEPTION
7234 WHEN OTHERS THEN
7235 FND_MESSAGE.SET_NAME('AR', 'HZ_TRANSFORM_PROC_ERROR');
7236 FND_MESSAGE.SET_TOKEN('PROC' , 'MAP_CONTACT_POINT_REC');
7237 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM);
7238 FND_MSG_PUB.ADD;
7239 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7240 END;
7241
7242
7243 /************************************************
7244 This procedure checks if the input search criteria
7245 is valid. It checks if :
7246 1. At least one primary condition is passed
7247 2. Contact Point Type is not null for each condition
7248 ************************************************/
7249
7250 FUNCTION check_prim_cond(
7251 p_party_search_rec IN HZ_PARTY_SEARCH.party_search_rec_type,
7252 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
7253 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
7254 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list)
7255 RETURN BOOLEAN IS
7256 BEGIN
7257 FOR I IN 1..p_contact_point_list.COUNT LOOP
7258 IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL AND (
7259 p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
7260 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7261 ) THEN
7262 FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
7263 FND_MSG_PUB.ADD;
7264 RAISE FND_API.G_EXC_ERROR;
7265 END IF;
7266 END LOOP;
7267
7268 IF p_party_search_rec.ALL_ACCOUNT_NAMES IS NOT NULL THEN
7269 RETURN TRUE;
7270 END IF;
7271 IF p_party_search_rec.PARTY_NUMBER IS NOT NULL THEN
7272 RETURN TRUE;
7273 END IF;
7274 IF p_party_search_rec.ALL_ACCOUNT_NUMBERS IS NOT NULL THEN
7275 RETURN TRUE;
7276 END IF;
7277 IF p_party_search_rec.PARTY_ALL_NAMES IS NOT NULL THEN
7278 RETURN TRUE;
7279 END IF;
7280 FOR I IN 1..p_party_site_list.COUNT LOOP
7281 IF p_party_site_list(I).ADDRESS IS NOT NULL THEN
7282 RETURN TRUE;
7283 END IF;
7284 END LOOP;
7285 FOR I IN 1..p_party_site_list.COUNT LOOP
7286 IF p_party_site_list(I).CITY IS NOT NULL THEN
7287 RETURN TRUE;
7288 END IF;
7289 END LOOP;
7290 FOR I IN 1..p_party_site_list.COUNT LOOP
7291 IF p_party_site_list(I).POSTAL_CODE IS NOT NULL THEN
7292 RETURN TRUE;
7293 END IF;
7294 END LOOP;
7295 FOR I IN 1..p_party_site_list.COUNT LOOP
7296 IF p_party_site_list(I).STATE IS NOT NULL THEN
7297 RETURN TRUE;
7298 END IF;
7299 END LOOP;
7300 FOR I IN 1..p_party_site_list.COUNT LOOP
7301 IF p_party_site_list(I).PARTY_SITE_NUMBER IS NOT NULL THEN
7302 RETURN TRUE;
7303 END IF;
7304 END LOOP;
7305 FOR I IN 1..p_party_site_list.COUNT LOOP
7306 IF p_party_site_list(I).COUNTRY IS NOT NULL THEN
7307 RETURN TRUE;
7308 END IF;
7309 END LOOP;
7310 FOR I IN 1..p_contact_list.COUNT LOOP
7311 IF p_contact_list(I).CONTACT_NAME IS NOT NULL THEN
7312 RETURN TRUE;
7313 END IF;
7314 END LOOP;
7315 FOR I IN 1..p_contact_point_list.COUNT LOOP
7316 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL THEN
7317 RETURN TRUE;
7318 END IF;
7319 END LOOP;
7320 FOR I IN 1..p_contact_point_list.COUNT LOOP
7321 IF p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL THEN
7322 RETURN TRUE;
7323 END IF;
7324 END LOOP;
7325 RETURN FALSE;
7326 EXCEPTION
7327 WHEN FND_API.G_EXC_ERROR THEN
7328 RAISE FND_API.G_EXC_ERROR;
7329 WHEN OTHERS THEN
7330 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7331 FND_MESSAGE.SET_TOKEN('PROC','check_prim_cond');
7332 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7333 FND_MSG_PUB.ADD;
7334 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7335 END check_prim_cond;
7336
7337 /************************************************
7338 This procedure checks if the input search condition
7339 has party site criteria.
7340 ************************************************/
7341
7342 PROCEDURE check_party_site_cond(
7343 p_party_site_list IN HZ_PARTY_SEARCH.party_site_list,
7344 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
7345 x_secondary OUT BOOLEAN,
7346 x_primary OUT BOOLEAN
7347 ) IS
7348 BEGIN
7349 x_primary:= FALSE;
7350 x_secondary:= FALSE;
7351 FOR I IN 1..p_party_site_list.COUNT LOOP
7352 IF p_party_site_list(I).ADDRESS IS NOT NULL
7353 OR p_party_site_list(I).CITY IS NOT NULL
7354 OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
7355 OR p_party_site_list(I).STATE IS NOT NULL
7356 OR p_party_site_list(I).PARTY_SITE_NUMBER IS NOT NULL
7357 OR p_party_site_list(I).COUNTRY IS NOT NULL
7358 THEN
7359 x_primary := TRUE;
7360 END IF;
7361 EXIT WHEN x_primary;
7362 END LOOP;
7363 FOR I IN 1..p_contact_point_list.COUNT LOOP
7364 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
7365 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7366 THEN
7367 x_primary := TRUE;
7368 END IF;
7369 EXIT WHEN x_primary;
7370 END LOOP;
7371
7372 FOR I IN 1..p_party_site_list.COUNT LOOP
7373 IF p_party_site_list(I).ADDRESS IS NOT NULL
7374 OR p_party_site_list(I).CITY IS NOT NULL
7375 OR p_party_site_list(I).POSTAL_CODE IS NOT NULL
7376 OR p_party_site_list(I).STATE IS NOT NULL
7377 OR p_party_site_list(I).PARTY_SITE_NUMBER IS NOT NULL
7378 OR p_party_site_list(I).COUNTRY IS NOT NULL
7379 THEN
7380 x_secondary := TRUE;
7381 END IF;
7382 EXIT WHEN x_secondary;
7383 END LOOP;
7384 FOR I IN 1..p_contact_point_list.COUNT LOOP
7385 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
7386 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7387 THEN
7388 x_secondary := TRUE;
7389 END IF;
7390 EXIT WHEN x_secondary;
7391 END LOOP;
7392 EXCEPTION
7393 WHEN OTHERS THEN
7394 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7395 FND_MESSAGE.SET_TOKEN('PROC','check_party_site_cond');
7396 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7397 FND_MSG_PUB.ADD;
7398 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7399 END check_party_site_cond;
7400
7401 /************************************************
7402 This procedure checks if the input search condition
7403 has contact criteria.
7404 ************************************************/
7405
7406 PROCEDURE check_contact_cond(
7407 p_contact_list IN HZ_PARTY_SEARCH.contact_list,
7408 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
7409 x_secondary OUT BOOLEAN,
7410 x_primary OUT BOOLEAN
7411 ) IS
7412 BEGIN
7413 x_primary:= FALSE;
7414 x_secondary:= FALSE;
7415 FOR I IN 1..p_contact_list.COUNT LOOP
7416 IF p_contact_list(I).CONTACT_NAME IS NOT NULL
7417 THEN
7418 x_primary := TRUE;
7419 END IF;
7420 EXIT WHEN x_primary;
7421 END LOOP;
7422
7423 FOR I IN 1..p_contact_point_list.COUNT LOOP
7424 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
7425 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7426 THEN
7427 x_primary := TRUE;
7428 END IF;
7429 EXIT WHEN x_primary;
7430 END LOOP;
7431
7432 FOR I IN 1..p_contact_list.COUNT LOOP
7433 IF p_contact_list(I).CONTACT_NAME IS NOT NULL
7434 THEN
7435 x_secondary := TRUE;
7436 END IF;
7437 EXIT WHEN x_secondary;
7438 END LOOP;
7439
7440 FOR I IN 1..p_contact_point_list.COUNT LOOP
7441 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
7442 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7443 THEN
7444 x_secondary := TRUE;
7445 END IF;
7446 EXIT WHEN x_secondary;
7447 END LOOP;
7448 EXCEPTION
7449 WHEN OTHERS THEN
7450 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7451 FND_MESSAGE.SET_TOKEN('PROC','check_contact_cond');
7452 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7453 FND_MSG_PUB.ADD;
7454 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7455 END check_contact_cond;
7456
7457 /************************************************
7458 This procedure checks if the input search condition
7459 has valid contact point criteria.
7460 ************************************************/
7461
7462 PROCEDURE check_contact_point_cond(
7463 p_contact_point_list IN HZ_PARTY_SEARCH.contact_point_list,
7464 x_secondary OUT BOOLEAN,
7465 x_primary OUT BOOLEAN
7466 ) IS
7467 BEGIN
7468 x_primary:= FALSE;
7469 x_secondary:= FALSE;
7470
7471 FOR I IN 1..p_contact_point_list.COUNT LOOP
7472 IF p_contact_point_list(I).CONTACT_POINT_TYPE IS NULL THEN
7473 FND_MESSAGE.SET_NAME('AR', 'HZ_NO_CONTACT_POINT_TYPE');
7474 FND_MSG_PUB.ADD;
7475 RAISE FND_API.G_EXC_ERROR;
7476 END IF;
7477 END LOOP;
7478
7479 FOR I IN 1..p_contact_point_list.COUNT LOOP
7480 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
7481 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7482 THEN
7483 x_primary := TRUE;
7484 END IF;
7485 EXIT WHEN x_primary;
7486 END LOOP;
7487 FOR I IN 1..p_contact_point_list.COUNT LOOP
7488 IF p_contact_point_list(I).FLEX_FORMAT_PHONE_NUMBER IS NOT NULL
7489 OR p_contact_point_list(I).EMAIL_ADDRESS IS NOT NULL
7490 THEN
7491 x_secondary := TRUE;
7492 END IF;
7493 EXIT WHEN x_secondary;
7494 END LOOP;
7495 EXCEPTION
7496 WHEN OTHERS THEN
7497 FND_MESSAGE.SET_NAME('AR', 'HZ_DQM_API_ERROR');
7498 FND_MESSAGE.SET_TOKEN('PROC','check_contact_point_cond');
7499 FND_MESSAGE.SET_TOKEN('ERROR' ,SQLERRM );
7500 FND_MSG_PUB.ADD;
7501 RAISE FND_API.G_EXC_UNEXPECTED_ERROR;
7502 END check_contact_point_cond;
7503
7504 FUNCTION check_staged RETURN BOOLEAN IS
7505
7506 CURSOR c_check_staged IS
7507 SELECT 1 FROM HZ_TRANS_FUNCTIONS_VL
7508 WHERE nvl(STAGED_FLAG,'N') = 'N'
7509 AND FUNCTION_ID in (
7510 36
7511 ,37
7512 ,38
7513 ,39
7514 ,43
7515 ,44
7516 ,66
7517 ,67
7518 ,72
7519 ,73
7520 ,74
7521 ,77
7522 ,78
7523 ,80
7524 ,85
7525 ,92
7526 ,93
7527 ,110
7528 ,114
7529 ,115
7530 ,124
7531 );
7532 l_tmp NUMBER;
7533 BEGIN
7534 IF g_staged = 1 THEN
7535 RETURN TRUE;
7536 ELSIF g_staged = 0 THEN
7537 RETURN FALSE;
7538 END IF;
7539
7540 OPEN c_check_staged;
7541 FETCH c_check_staged INTO l_tmp;
7542 IF c_check_staged%FOUND THEN
7543 CLOSE c_check_staged;
7544 g_staged := 0;
7545 RETURN FALSE;
7546 ELSE
7547 CLOSE c_check_staged;
7548 g_staged := 1;
7549 RETURN TRUE;
7550 END IF;
7551 END check_staged;
7552
7553 -- Fix for Bug 4736139
7554 FUNCTION check_staged_var RETURN VARCHAR2 IS
7555 l_staged VARCHAR2(1);
7556 l_staged_bool BOOLEAN;
7557 BEGIN
7558 l_staged_bool := check_staged;
7559 IF l_staged_bool THEN
7560 l_staged := 'Y';
7561 ELSE
7562 l_staged := 'N';
7563 END IF;
7564 RETURN l_staged;
7565 END check_staged_var;
7566 -- End fix for Bug 4736139
7567
7568 END;
7569