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