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