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