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