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