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