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