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