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